htscpp.h
上传用户:ykzxjx
上传日期:2022-04-03
资源大小:1175k
文件大小:3k
开发平台:

Visual C++

  1. ///////////////////////////////////////////////////////////////////////////////
  2. //
  3. // (C) Copyright 1999 - 2000 Mark Roddy
  4. // All Rights Reserved
  5. //
  6. // Hollis Technology Solutions
  7. // 94 Dow Road
  8. // Hollis, NH 03049
  9. // info@hollistech.com
  10. //
  11. // Synopsis: 
  12. // 
  13. //
  14. // Version Information:
  15. //
  16. // $Header: /cpprun/inc/htscpp.h 2     12/31/99 4:29p Markr $ 
  17. //
  18. ///////////////////////////////////////////////////////////////////////////////
  19. #pragma once
  20. //
  21. // add externally visible runtime constructs here
  22. //
  23. #ifdef __cplusplus 
  24. extern "C" {
  25. #endif
  26. #include <ntddk.h>
  27. #ifdef __cplusplus
  28. }
  29. #endif
  30. //
  31. // memory allocation support
  32. //
  33. typedef unsigned int size_t;
  34. #ifdef __cplusplus 
  35. void * __cdecl operator new(size_t size);
  36. void * __cdecl operator new(size_t size, void *location);
  37. void *__cdecl operator new( size_t size, ULONG tag, POOL_TYPE pool= NonPagedPool);
  38. void __cdecl operator delete(void * pVoid);
  39. #endif
  40. PVOID __cdecl malloc(ULONG x,  ULONG id= 'ppcO', POOL_TYPE pool = NonPagedPool);
  41. void __cdecl free(PVOID x);
  42. __inline PVOID __cdecl malloc(ULONG size,  ULONG id, POOL_TYPE pool)
  43. {
  44.     PVOID buffer = ExAllocatePoolWithTag(pool, size, id);
  45.     if (buffer) {
  46.         //
  47.         // clear our buffer to zero
  48.         //
  49.         RtlZeroMemory(buffer, size);
  50.     }
  51.     return buffer;
  52. }
  53. __inline void __cdecl free(PVOID buffer)
  54. {
  55.     if (buffer != NULL) {
  56.         ExFreePool(buffer);
  57.     }
  58. }
  59. #ifdef __cplusplus 
  60. __inline void * __cdecl operator new(size_t size)
  61. {
  62.     return malloc(size, 'ppcO', NonPagedPool);
  63. }
  64. __inline void * __cdecl operator new(size_t size,  void *location)
  65. {
  66.     return location;
  67. }
  68. __inline void *__cdecl operator new( size_t size, ULONG tag, POOL_TYPE pool)
  69. {
  70.     return malloc(size, tag, pool);
  71. }
  72. __inline void __cdecl operator delete(void * pVoid)
  73. {
  74.     free(pVoid);
  75. }
  76. #endif
  77. //
  78. // runtime linkage support:
  79. //
  80. //
  81. // All you have to do to get C++ runtime support is
  82. // replace *your* driver entry routine with this one, as in:
  83. // 
  84. // CPP_DRIVER_ENTRY(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
  85. //
  86. // And link your driver with our C++ runtime library!
  87. //
  88. #define CPP_DRIVER_ENTRY(Do, Rp) extern "C" NTSTATUS Cp_DriverEntry(Do, Rp)
  89. //
  90. // and finally, as this might be generally useful:
  91. //
  92. typedef void (__cdecl *PVFV)(void);
  93. //
  94. // this is the standard ANSI atexit function. You can register
  95. // any arbitrary void function with no parameters through this interface.
  96. //
  97. // Registered functions will be called in LIFO order on termination.
  98. //
  99. // Termination is defined here as DriverUnload.
  100. //
  101. int __cdecl atexit (
  102.         PVFV func
  103.         );
  104. ///////////////////////////////////////////////////////////////////////////////
  105. // 
  106. // Change History Log
  107. //
  108. // $Log: /cpprun/inc/htscpp.h $
  109. // 
  110. // 2     12/31/99 4:29p Markr
  111. // 
  112. // 1     12/17/99 8:12a Markr
  113. //
  114. ///////////////////////////////////////////////////////////////////////////////