Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
5.1 KiB

  1. /*++ BUILD Version: 0001
  2. *
  3. * WOW v1.0
  4. *
  5. * Copyright (c) 2002, Microsoft Corporation
  6. *
  7. * dpmf_ntd.h
  8. * NTVDM Dynamic Patch Module to support misc NTDLL API family
  9. * Definitions & macors to support calls into dpmfntd.dll
  10. *
  11. * History:
  12. * Created 01-10-2002 by cmjones
  13. --*/
  14. #ifndef _DPMF_NTDAPI_H_
  15. #define _DPMF_NTDAPI_H_
  16. typedef DWORD ACCESS_MASK__; // including winnt.h here causes a mess
  17. #define NTDPFT (DPMFAMTBLS()[NTD_FAM])
  18. #define NTD_SHIM(ord, typ) ((typ)((pFT)->pDpmShmTbls[ord]))
  19. enum NtdFam {DPM_NTOPENFILE=0,
  20. DPM_NTQUERYDIRECTORYFILE,
  21. DPM_RTLGETFULLPATHNAME_U,
  22. DPM_RTLGETCURRENTDIRECTORY_U,
  23. DPM_RTLSETCURRENTDIRECTORY_U,
  24. DPM_NTVDMCONTROL,
  25. enum_ntd_last};
  26. // These types will catch misuse of parameters & ret types
  27. typedef DWORD (*typdpmNtOpenFile)(PHANDLE, ACCESS_MASK__, POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, ULONG, ULONG);
  28. typedef DWORD (*typdpmNtQueryDirectoryFile)(HANDLE, HANDLE, PIO_APC_ROUTINE, PVOID, PIO_STATUS_BLOCK, PVOID, ULONG, FILE_INFORMATION_CLASS, BOOLEAN, PUNICODE_STRING, BOOLEAN);
  29. typedef DWORD (*typdpmRtlGetFullPathName_U)(PCWSTR, ULONG, PWSTR, PWSTR *);
  30. typedef DWORD (*typdpmRtlGetCurrentDirectory_U)(ULONG, PWSTR);
  31. typedef NTSTATUS (*typdpmRtlSetCurrentDirectory_U)(PUNICODE_STRING);
  32. typedef NTSTATUS (*typdpmNtVdmControl)(VDMSERVICECLASS, PVOID);
  33. // Macros to dispatch API calls properly
  34. #define DPM_NtOpenFile(a,b,c,d,e,f) \
  35. ((typdpmNtOpenFile)(NTDPFT->pfn[DPM_NTOPENFILE]))(a,b,c,d,e,f)
  36. #define DPM_NtQueryDirectoryFile(a,b,c,d,e,f,g,h,i,j,k) \
  37. ((typdpmNtQueryDirectoryFile)(NTDPFT->pfn[DPM_NTQUERYDIRECTORYFILE]))(a,b,c,d,e,f,g,h,i,j,k)
  38. #define DPM_RtlGetFullPathName_U(a,b,c,d) \
  39. ((typdpmRtlGetFullPathName_U)(NTDPFT->pfn[DPM_RTLGETFULLPATHNAME_U]))(a,b,c,d)
  40. #define DPM_RtlGetCurrentDirectory_U(a,b) \
  41. ((typdpmRtlGetCurrentDirectory_U)(NTDPFT->pfn[DPM_RTLGETCURRENTDIRECTORY_U]))(a,b)
  42. #define DPM_RtlSetCurrentDirectory_U(a) \
  43. ((typdpmRtlSetCurrentDirectory_U)(NTDPFT->pfn[DPM_RTLSETCURRENTDIRECTORY_U]))(a)
  44. #define DPM_NtVdmControl(a,b) \
  45. ((typdpmNtVdmControl)(NTDPFT->pfn[DPM_NTVDMCONTROL]))(a,b)
  46. // Macros to dispatch Shimed API calls properly from the dpmfxxx.dll
  47. #define SHM_NtOpenFile(a,b,c,d,e,f) \
  48. (NTD_SHIM(DPM_NTOPENFILE, \
  49. typdpmNtOpenFile))(a,b,c,d,e,f)
  50. #define SHM_NtQueryDirectoryFile(a,b,c,d,e,f,g,h,i,j,k) \
  51. (NTD_SHIM(DPM_NTQUERYDIRECTORYFILE, \
  52. typdpmNtQueryDirectoryFile))(a,b,c,d,e,f,g,h,i,j,k)
  53. #define SHM_RtlGetFullPathName_U(a,b,c,d) \
  54. (NTD_SHIM(DPM_RTLGETFULLPATHNAME_U, \
  55. typdpmRtlGetFullPathName_U))(a,b,c,d)
  56. #define SHM_RtlGetCurrentDirectory_U(a,b) \
  57. (NTD_SHIM(DPM_RTLGETCURRENTDIRECTORY_U, \
  58. typdpmRtlGetCurrentDirectory_U))(a,b)
  59. #define SHM_RtlSetCurrentDirectory_U(a) \
  60. (NTD_SHIM(DPM_RTLSETCURRENTDIRECTORY_U, \
  61. typdpmRtlSetCurrentDirectory_U))(a)
  62. #define SHM_NtVdmControl(a,b) \
  63. (NTD_SHIM(DPM_NTVDMCONTROL, \
  64. typdpmNtVdmControl))(a,b)
  65. #endif // _DPMF_NTDAPI_H_
  66. // These need to be in the same order as the NtdFam enum definitions above and
  67. // the DpmNtdTbl[] list below.
  68. // This instantiates memory for DpmNtdStrs in mvdm\v86\monitor\i386\vdpm.c &
  69. // in mvdm\wow32\wdpm.c
  70. #ifdef _DPM_COMMON_
  71. const char *DpmNtdStrs[] = {"NtOpenFile",
  72. "NtQueryDirectoryFile",
  73. "RtlGetFullPathName_U",
  74. "RtlGetCurrentDirectory_U",
  75. "RtlSetCurrentDirectory_U",
  76. "NtVdmControl"
  77. };
  78. // These need to be in the same order as the NtdFam enum definitions and the
  79. // the DpmNtdStrs[] list above.
  80. // This instantiates memory for DpmNtdTbl[] in mvdm\wow32\wdpm.c
  81. PVOID DpmNtdTbl[] = {NtOpenFile,
  82. NtQueryDirectoryFile,
  83. RtlGetFullPathName_U,
  84. RtlGetCurrentDirectory_U,
  85. RtlSetCurrentDirectory_U,
  86. NtVdmControl
  87. };
  88. #define NUM_HOOKED_NTD_APIS ((sizeof DpmNtdTbl)/(sizeof DpmNtdTbl[0]))
  89. // This instantiates memory for DpmNtdFam in mvdm\v86\monitor\i386\vdpm.c
  90. FAMILY_TABLE DpmNtdFam = {NUM_HOOKED_NTD_APIS, 0, 0, 0, 0, DpmNtdTbl};
  91. #endif // _DPM_COMMON_