HtsGlib.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: /inc/HtsGlib.h 2     4/22/00 9:31p Markr $ 
  17. //
  18. ///////////////////////////////////////////////////////////////////////////////
  19. #ifndef HTS_GLIB_H
  20. #define HTS_GLIB_H
  21. #pragma once
  22. #ifdef __cplusplus 
  23. extern "C" {
  24. #endif
  25. #include <ntddk.h>
  26. #ifdef __cplusplus
  27. }
  28. #endif
  29. #define HTS_DEBUG_HIGH 0xff
  30. #define HTS_DEBUG_LOW  0x00
  31. #define HTS_DEBUG_MASK 0xff
  32. //
  33. // you must initialize this in your driver:
  34. //
  35. extern ULONG HtsDebugLevel;
  36. #define HTS_DEBUG_THIS_FILE static PCHAR HtsThisFileName = __FILE__;
  37. void HtsDebugPrint(
  38. ULONG Level,
  39. PCHAR Format,
  40. ...);
  41. void HtsBugCheck(PCHAR message, 
  42.  ULONG line=0, 
  43.  ULONG param2=0, 
  44.  ULONG param3=0, 
  45.  ULONG param4=0);
  46. __inline NTSTATUS HtsIrpReturn(PIRP Irp, 
  47.    NTSTATUS Status, 
  48.    ULONG Information = 0, 
  49.    CCHAR Increment=IO_NO_INCREMENT) 
  50. {
  51. Irp->IoStatus.Status = Status;
  52. Irp->IoStatus.Information = Information;
  53. IoCompleteRequest(Irp, Increment);
  54. return Status;
  55. }
  56. //
  57. // Win2k Finally Gor Smart with Assertions. They work in the
  58. // Free build and they are Prompted asserts that you can 'ride through'
  59. // from the debugger. So we can turn our own asserts off.
  60. //
  61. #define HtsAssert( x ) ASSERT( x )
  62. ULONG HtsExceptionFilter( ULONG Code, PEXCEPTION_POINTERS pointers);
  63. //
  64. // Religious Assumption: always debug unexpected exceptions
  65. //
  66. // Alternative: if not DBG then define HTS_EXCEPTION_FILTER as EXCEPTION_EXECUTE_HANDLER 
  67. //
  68. #ifdef DBG
  69. #define HTS_EXCEPTION_FILTER HtsExceptionFilter(GetExceptionCode(), GetExceptionInformation()) 
  70. #else
  71. #define HTS_EXCEPTION_FILTER  EXCEPTION_EXECUTE_HANDLER 
  72. #endif
  73. //
  74. // a generic lock - implementation as needed
  75. //
  76. class simpleLock {
  77. private:
  78. simpleLock& operator=(const simpleLock& lhs);
  79. simpleLock(const simpleLock& lhs);
  80. public:
  81. simpleLock() {};
  82. ~simpleLock() {};
  83. virtual lock(PVOID& context)=0;
  84. virtual unlock(PVOID context)=0;
  85. };
  86. class spinLock : simpleLock {
  87. private:
  88. KSPIN_LOCK  theLock;
  89. public:
  90. spinLock() { KeInitializeSpinLock(&theLock); };
  91. virtual ~spinLock() {};
  92. virtual lock(PVOID& context) {
  93. KIRQL irql;
  94. KeAcquireSpinLock(&theLock, &irql); 
  95. context = reinterpret_cast<PVOID>(irql);
  96. }
  97. virtual unlock(PVOID context) { 
  98. KIRQL irql = reinterpret_cast<KIRQL>(context);
  99. KeReleaseSpinLock(&theLock, irql); 
  100. }
  101. };
  102. #endif
  103. ///////////////////////////////////////////////////////////////////////////////
  104. // 
  105. // Change History Log
  106. //
  107. // $Log: /inc/HtsGlib.h $
  108. // 
  109. // 2     4/22/00 9:31p Markr
  110. // 
  111. // 1     1/27/00 9:20p Markr
  112. //
  113. ///////////////////////////////////////////////////////////////////////////////