WRAPPERS.H
上传用户:lx1888888
上传日期:2007-01-04
资源大小:136k
文件大小:16k
源码类别:

驱动编程

开发平台:

Visual C++

  1. /****************************************************************************
  2. *                                                                           *
  3. * THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY     *
  4. * KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE       *
  5. * IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A PARTICULAR     *
  6. * PURPOSE.                                                                  *
  7. *                                                                           *
  8. * Copyright 1993-95  Microsoft Corporation.  All Rights Reserved.           *
  9. *                                                                           *
  10. ****************************************************************************/
  11. #ifndef _VMMXWRAP_H
  12. #define _VMMXWRAP_H
  13. #include <vxdwraps.h>
  14. /****************************************************************************
  15. *                                                                           *
  16. *   VMM services                                                            *
  17. *                                                                           *
  18. ****************************************************************************/
  19. typedef DWORD VMHANDLE;
  20. typedef DWORD EVENTHANDLE;
  21. typedef DWORD MEMHANDLE;
  22. typedef DWORD PTHCB;  // pointer to thread control block
  23. typedef void *CALLBACK(void);
  24. MAKE_HEADER(PTHCB,_stdcall,Get_Initial_Thread_Handle, (HVM hVM))
  25. MAKE_HEADER(BOOL, _stdcall,Install_IO_Handler, (DWORD PortNum, 
  26.                                                 CALLBACK Callback ))
  27. MAKE_HEADER(BOOL, _stdcall,Remove_IO_Handler, (DWORD PortNum))
  28. MAKE_HEADER(void, _stdcall,Enable_Local_Trapping, (VMHANDLE hVM, 
  29.                                                    DWORD PortNum))
  30. MAKE_HEADER(void, _stdcall,Disable_Local_Trapping, (VMHANDLE hVM, 
  31.                                                    DWORD PortNum))
  32. MAKE_HEADER(EVENTHANDLE,cdecl,Call_Priority_VM_Event, (DWORD PriorityBoost, 
  33.                                        VMHANDLE hVM, 
  34.                                        DWORD Flags, 
  35.                                        void *Refdata, 
  36.                                        CALLBACK EventCallback, 
  37.                                        DWORD Timeout )) 
  38. MAKE_HEADER(void, cdecl, _Deallocate_Device_CB_Area, (DWORD Offset, 
  39.                                                       DWORD Flags ))
  40. MAKE_HEADER(void, cdecl, Save_Client_State, (CLIENT_STRUCT * pSavedRegs))
  41. MAKE_HEADER(void, cdecl, Restore_Client_State, (CLIENT_STRUCT * pSavedRegs))
  42. MAKE_HEADER(void, cdecl, Begin_Nest_Exec, (void))
  43. MAKE_HEADER(void, cdecl, End_Nest_Exec, (void))
  44. MAKE_HEADER(void, _stdcall, Simulate_Far_Call, (WORD seg, WORD off ))
  45. MAKE_HEADER(void, _stdcall, Simulate_Push, (DWORD val))
  46. MAKE_HEADER(BOOL,cdecl,_ModifyPageBits, (VMHANDLE hVM, 
  47.                                           DWORD VMLinPgNum, 
  48.                                           DWORD nPages, 
  49.                                           DWORD bitAnd, 
  50.                                           DWORD bitOR, 
  51.                                           DWORD pType, 
  52.                                           DWORD Flags))
  53. MAKE_HEADER(BOOL,_stdcall,Hook_V86_Page, (DWORD PageNum, 
  54.                                           CALLBACK Callback))
  55. MAKE_HEADER(BOOL,_stdcall,Unhook_V86_Page, (DWORD PageNum, 
  56.                                           CALLBACK Callback))
  57. MAKE_HEADER(BOOL,cdecl,_Assign_Device_V86_Pages, (DWORD VMLinrPage, 
  58.                                                    DWORD nPages, 
  59.                                                    VMHANDLE hVM, 
  60.                                                    DWORD Flags))
  61. MAKE_HEADER(BOOL,cdecl,_DeAssign_Device_V86_Pages, (DWORD VMLinrPage, 
  62.                                                    DWORD nPages, 
  63.                                                    VMHANDLE hVM, 
  64.                                                    DWORD Flags))
  65. MAKE_HEADER(BOOL,cdecl,_PhysIntoV86, (DWORD PhysPage, 
  66.                                        VMHANDLE hVM, 
  67.                                        DWORD VMLinPgNum, 
  68.                                        DWORD nPages, 
  69.                                        DWORD Flags))
  70. MAKE_HEADER(BOOL,cdecl,_MapIntoV86, (MEMHANDLE hMem, 
  71.                                     VMHANDLE hVM, 
  72.                                     DWORD VMLinPageNumber, 
  73.                                     DWORD nPages, 
  74.                                     DWORD PageOff, 
  75.                                     DWORD Flags))
  76. MAKE_HEADER(MEMHANDLE,cdecl,_GetNulPageHandle,(void))
  77. MAKE_HEADER(ULONG,cdecl,_PageReserve, (ULONG page, 
  78.                                        ULONG npages, 
  79.                                        ULONG flags))
  80. MAKE_HEADER(ULONG,cdecl,_PageCommitPhys, (ULONG page, 
  81.                                           ULONG npages, 
  82.                                           ULONG physpg, 
  83.                                           ULONG flags))
  84. MAKE_HEADER(ULONG,cdecl,_PageDecommit, (ULONG page, 
  85.                                        ULONG npages, 
  86.                                        ULONG flags))
  87. MAKE_HEADER(void *,_stdcall,Map_Flat, (BYTE SegOffset, BYTE OffOffset ))
  88. #define MAPFLAT(sgmnt,offst) Map_Flat(((DWORD)(&((CRS *)0)->sgmnt)),(DWORD)(&((struct Client_Word_Reg_Struc *)0)->offst))
  89. #define Map_Flat                    PREPEND(Map_Flat)
  90. #define Call_Priority_VM_Event      PREPEND(Call_Priority_VM_Event)
  91. #define Get_Initial_Thread_Handle   PREPEND(Get_Initial_Thread_Handle)
  92. #define Install_IO_Handler          PREPEND(Install_IO_Handler)
  93. #define Remove_IO_Handler           PREPEND(Remove_IO_Handler)
  94. #define Enable_Local_Trapping       PREPEND(Enable_Local_Trapping)
  95. #define Disable_Local_Trapping      PREPEND(Disable_Local_Trapping)
  96. #define _Deallocate_Device_CB_Area  PREPEND(_Deallocate_Device_CB_Area)   
  97. #define Save_Client_State           PREPEND(Save_Client_State)
  98. #define Restore_Client_State        PREPEND(Restore_Client_State)
  99. #define Begin_Nest_Exec             PREPEND(Begin_Nest_Exec)
  100. #define End_Nest_Exec               PREPEND(End_Nest_Exec)
  101. #define Simulate_Far_Call           PREPEND(Simulate_Far_Call)
  102. #define Simulate_Push               PREPEND(Simulate_Push)
  103. #define _ModifyPageBits             PREPEND(_ModifyPageBits)
  104. #define Hook_V86_Page               PREPEND(Hook_V86_Page)
  105. #define Unhook_V86_Page             PREPEND(Unhook_V86_Page)
  106. #define _Assign_Device_V86_Pages    PREPEND(_Assign_Device_V86_Pages)
  107. #define _DeAssign_Device_V86_Pages  PREPEND(_DeAssign_Device_V86_Pages)
  108. #define _PhysIntoV86                PREPEND(_PhysIntoV86)
  109. #define _MapIntoV86                 PREPEND(_MapIntoV86)
  110. #define _GetNulPageHandle           PREPEND(_GetNulPageHandle)
  111. #define _PageReserve                PREPEND(_PageReserve)
  112. #define _PageCommitPhys             PREPEND(_PageCommitPhys)
  113. #define _PageDecommit               PREPEND(_PageDecommit)
  114. // the following functions are really in VXDWRAPS.CLB, but aren't 
  115. // prototyped in VXDWRAPS.H
  116. MAKE_HEADER(DWORD, cdecl, _Allocate_Device_CB_Area, (DWORD NumBytes, 
  117.                                                       DWORD Flags ))
  118. #define _Allocate_Device_CB_Area     PREPEND(_Allocate_Device_CB_Area)
  119. /****************************************************************************
  120. *                                                                           *
  121. *   IFSMgr services                                                         *
  122. *                                                                           *
  123. ****************************************************************************/
  124. #define R0_OPENCREATFILE        0xD500  /* Open/Create a file */
  125. #define R0_OPENCREAT_IN_CONTEXT 0xD501  /* Open/Create file in current context */
  126. #define R0_CLOSEFILE            0xD700  /* Close file */                   
  127. #define R0_WRITEFILE            0xD601  /* WRite to a file */
  128. #define R0_WRITEFILE_IN_CONTEXT 0xD603  /* Write to a file in current context */
  129. MAKE_HEADER(HANDLE,cdecl,IFSMgr_Ring0_OpenCreateFile, (BOOL bInContext, 
  130.                                                 PCHAR filename, 
  131.                                                 WORD mode, 
  132.                                                 WORD attrib, 
  133.                                                 BYTE action, 
  134.                                                 BYTE flags, 
  135.                                                 WORD *pError, 
  136.                                                 BYTE *pAction))
  137. MAKE_HEADER(DWORD,cdecl,IFSMgr_Ring0_WriteFile, (BOOL bInContext, 
  138.                                         HANDLE filehandle, 
  139.                                         PVOID buf, 
  140.                                         DWORD count, 
  141.                                         DWORD filepos, 
  142.                                         WORD  *perr))
  143. MAKE_HEADER(BOOL,cdecl,IFSMgr_Ring0_CloseFile, (HANDLE filehandle, 
  144.                                       WORD   *pError))
  145.     
  146. #define IFSMgr_Ring0_OpenCreateFile PREPEND(IFSMgr_Ring0_OpenCreateFile)
  147. #define IFSMgr_Ring0_WriteFile PREPEND(IFSMgr_Ring0_WriteFile)
  148. #define IFSMgr_Ring0_CloseFile PREPEND(IFSMgr_Ring0_CloseFile)
  149. /****************************************************************************
  150. *                                                                           *
  151. *   VPICD services                                                          *
  152. *                                                                           *
  153. ****************************************************************************/
  154. typedef struct 
  155. {
  156.     WORD VID_IRQ_Number;    // IRQ to virtualize
  157.     WORD VID_Options;   
  158.     // VPICD_OPT_CAN_SHARE: allow other VxDs to virtualize IRQ also
  159.     // VPICD_OPT_REF_DATA: pass VID_Hw_Int_Ref as param to Hw_Int_Handler
  160.     DWORD VID_Hw_Int_Proc;  // callback for hardware interrupt
  161.     DWORD VID_Virt_Int_Proc;  
  162.     DWORD VID_EOI_Proc;         
  163.     DWORD VID_Mask_Change_Proc;     
  164.     DWORD VID_IRET_Proc;        
  165.     DWORD VID_IRET_Time_Out;    
  166.     PVOID VID_Hw_Int_Ref;   // pass this data to Hw_Int_Handler     
  167. } VPICD_IRQ_DESCRIPTOR;
  168. typedef DWORD IRQHANDLE;
  169. MAKE_HEADER(IRQHANDLE,_stdcall,VPICD_Virtualize_IRQ, (VPICD_IRQ_DESCRIPTOR *pIrqDesc))
  170. MAKE_HEADER(void,_stdcall,VPICD_Physically_Mask, (IRQHANDLE hndIrq))
  171. MAKE_HEADER(void,_stdcall,VPICD_Physically_Unmask, (IRQHANDLE hndIrq))
  172. MAKE_HEADER(void,_stdcall,VPICD_Force_Default_Behavior, (IRQHANDLE hndIrq))
  173. MAKE_HEADER(void,_stdcall,VPICD_Phys_EOI, (IRQHANDLE hndIrq))
  174. MAKE_HEADER(void,_stdcall,VPICD_Set_Int_Request, (IRQHANDLE hIRQ, 
  175.                                                    VMHANDLE hVM))
  176. MAKE_HEADER(void,_stdcall,VPICD_Clear_Int_Request, (IRQHANDLE hIRQ, 
  177.                                                    VMHANDLE hVM))
  178. #define VPICD_Virtualize_IRQ    PREPEND(VPICD_Virtualize_IRQ)
  179. #define VPICD_Physically_Mask   PREPEND(VPICD_Physically_Mask)
  180. #define VPICD_Physically_Unmask PREPEND(VPICD_Physically_Unmask)
  181. #define VPICD_Force_Default_Behavior    PREPEND(VPICD_Force_Default_Behavior)
  182. #define VPICD_Phys_EOI          PREPEND(VPICD_Phys_EOI)
  183. #define VPICD_Set_Int_Request   PREPEND(VPICD_Set_Int_Request)
  184. #define VPICD_Clear_Int_Request PREPEND(VPICD_Clear_Int_Request)
  185. /****************************************************************************
  186. *                                                                           *
  187. *   VDMAD services                                                          *
  188. *                                                                           *
  189. ****************************************************************************/
  190. #define DMA_type_verify 0x00
  191. #define DMA_type_write  0x04
  192. #define DMA_type_read   0x08
  193. #define DMA_AutoInit    0x10
  194. #define DMA_AdrDec  0x20
  195. #define DMA_demand_mode 0x00
  196. #define DMA_single_mode 0x40
  197. #define DMA_block_mode  0x80
  198. #define DMA_cascade 0xc0
  199. #define DMA_mode_mask   0xc0   // mask to isolate controller mode bits (above)
  200. #define DMA_chan_sel    0x03
  201. #define NONE_LOCKED 0
  202. #define ALL_LOCKED  1
  203. #define SOME_LOCKED 2
  204. typedef struct
  205. {
  206.     DWORD   PhysAddr;
  207.     DWORD   Size;
  208. } REGION;
  209. typedef struct Extended_DDS_Struc 
  210. {
  211.    DWORD    DDS_size;
  212.    DWORD    DDS_linear;
  213.    WORD DDS_seg;
  214.    WORD RESERVED;
  215.    WORD DDS_avail;
  216.    WORD DDS_used;
  217. } EXTENDED_DDS, *PEXTENDED_DDS;
  218. typedef struct
  219. {
  220.     EXTENDED_DDS    dds;
  221.     union
  222.     {
  223.         REGION          aRegionInfo[16];
  224.         DWORD           aPte[16];
  225.     };
  226. } DDS, *PDDS;
  227. typedef DWORD DMAHANDLE;
  228. MAKE_HEADER(DWORD,cdecl,VDMAD_Scatter_Lock, ( VMHANDLE hVM, 
  229.                                                 DWORD Flags, 
  230.                                                 PDDS pDDS, 
  231.                                                 PDWORD pPteOffset )) 
  232. MAKE_HEADER(DMAHANDLE, cdecl, VDMAD_Virtualize_Channel, (BYTE ch, CALLBACK pfCallback ))
  233. MAKE_HEADER(void, _stdcall, VDMAD_Set_Region_Info, (DMAHANDLE DMAHandle, 
  234.                                                 BYTE BufferId, 
  235.                                                 BOOL LockStatus,
  236.                                                 DWORD Region, 
  237.                                                 DWORD RegionSize, 
  238.                                                 DWORD PhysAddr ))
  239. MAKE_HEADER(void, _stdcall, VDMAD_Set_Phys_State, (DMAHANDLE DMAHandle, 
  240.                                                 VMHANDLE hVM, 
  241.                                                 WORD Mode, 
  242.                                                 WORD ExtMode ))
  243. MAKE_HEADER(void, _stdcall, VDMAD_Phys_Unmask_Channel, (DMAHANDLE DMAHandle, 
  244.                                                       VMHANDLE hVM ))   
  245. MAKE_HEADER(void, _stdcall, VDMAD_Phys_Mask_Channel, (DMAHANDLE DMAHandle))   
  246. #define VDMAD_Virtualize_Channel PREPEND(VDMAD_Virtualize_Channel)
  247. #define VDMAD_Set_Region_Info PREPEND(VDMAD_Set_Region_Info)
  248. #define VDMAD_Set_Phys_State PREPEND(VDMAD_Set_Phys_State)
  249. #define VDMAD_Scatter_Lock  PREPEND(VDMAD_Scatter_Lock)
  250. #define VDMAD_Phys_Unmask_Channel PREPEND(VDMAD_Phys_Unmask_Channel)
  251. #define VDMAD_Phys_Mask_Channel PREPEND(VDMAD_Phys_Unmask_Channel)
  252. /****************************************************************************
  253. *                                                                           *
  254. *   SHELL services                                                          *
  255. *                                                                           *
  256. ****************************************************************************/
  257. MAKE_HEADER(VMHANDLE, _stdcall, SHELL_Resolve_Contention, (VMHANDLE hndOwner, 
  258.                                                            VMHANDLE hndContender, 
  259.                                                             char *DeviceName ))
  260. MAKE_HEADER(BOOL,cdecl,_SHELL_PostMessage, (HANDLE hWnd, 
  261.                                           DWORD uMsg, 
  262.                                           WORD wParam, 
  263.                                           DWORD lParam, 
  264.                                           CALLBACK pCallback, 
  265.                                           void *dwRefData))
  266. #define SHELL_Resolve_Contention PREPEND(SHELL_Resolve_Contention)
  267. #define _SHELL_PostMessage       PREPEND(_SHELL_PostMessage)
  268. /****************************************************************************
  269. *                                                                           *
  270. *   VWIN32 services                                                         *
  271. *                                                                           *
  272. ****************************************************************************/
  273. MAKE_HEADER(void,cdecl,_VWIN32_QueueUserApc, (void *pR3Proc, 
  274.                                                 DWORD Param, 
  275.                                                 PTHCB hThread))
  276. MAKE_HEADER(BOOL,cdecl,_VWIN32_SetWin32Event, (EVENTHANDLE hEvent) )
  277. #define _VWIN32_QueueUserApc     PREPEND(_VWIN32_QueueUserApc)
  278. #define _VWIN32_SetWin32Event    PREPEND(_VWIN32_SetWin32Event)
  279. #endif // _VMMXWRAP_H