- Visual C++源码
- Visual Basic源码
- C++ Builder源码
- Java源码
- Delphi源码
- C/C++源码
- PHP源码
- Perl源码
- Python源码
- Asm源码
- Pascal源码
- Borland C++源码
- Others源码
- SQL源码
- VBScript源码
- JavaScript源码
- ASP/ASPX源码
- C#源码
- Flash/ActionScript源码
- matlab源码
- PowerBuilder源码
- LabView源码
- Flex源码
- MathCAD源码
- VBA源码
- IDL源码
- Lisp/Scheme源码
- VHDL源码
- Objective-C源码
- Fortran源码
- tcl/tk源码
- QT源码
WIN16APP.C
资源名称:vxdsrc.zip [点击查看]
上传用户:lx1888888
上传日期:2007-01-04
资源大小:136k
文件大小:2k
源码类别:
驱动编程
开发平台:
Visual C++
- #include <string.h>
- #include <windows.h>
- #include "dmabuf.h"
- typedef void (far * PVOIDFN)( void );
- static char MsgBoxBuf[ 1024 ] = { 0 };
- PVOIDFN pfDmaBufApi;
- DMA_BUFFER_DESCRIPTOR dmadesc;
- PVOIDFN GetVxdApiEntry( int VxdId )
- {
- PVOIDFN pfApi;
- _asm
- {
- xor di, di
- mov es, di
- mov bx, VxdId
- mov ax, 1684h
- int 2fh
- mov WORD PTR pfApi+2, es
- mov WORD PTR pfApi, di
- }
- return( pfApi );
- }
- int PASCAL WinMain( HANDLE hInstance, HANDLE hPrevInstance,
- LPSTR lpCmdLine, int nCmdShow )
- {
- char far *DmaBufPtr;
- unsigned short usSel, myds;
- WORD err;
- pfDmaBufApi = GetVxdApiEntry( DMABUF_ID );
- if (!pfDmaBufApi)
- {
- MessageBox( NULL, "Error, couldn't get VxD API", "USEAPI", MB_OK );
- }
- else
- {
- dmadesc.Size = 32L * 1024L;
- _asm
- {
- mov ax, DMABUF_FUNC_ALLOCBUFFER
- lea si, dmadesc ; small model, don't need to load DS
- call DWORD PTR pfDmaBufApi
- mov err, ax
- }
- if (err)
- {
- MessageBox( NULL, "Error calling AllocBuffer", "USEAPI", MB_OK );
- }
- else
- {
- _asm mov myds, ds
- usSel = AllocSelector( myds );
- SetSelectorBase( usSel, dmadesc.LinAddr );
- SetSelectorLimit( usSel, dmadesc.Size );
- DmaBufPtr = MAKELP( usSel, 0 );
- wsprintf( MsgBoxBuf, "Physical=%08lXnLinear=%08lXSelector=%Xn",
- dmadesc.PhysAddr, dmadesc.LinAddr, usSel );
- MessageBox( NULL, MsgBoxBuf, "USEAPI", MB_OK );
- FreeSelector( usSel );
- _asm
- {
- mov ax, DMABUF_FUNC_FREEBUFFER
- call DWORD PTR pfDmaBufApi
- }
- }
- }
- return 0;
- }