📄 wdm.h
字号:
#ifndef GUID_DEFINED
#define GUID_DEFINED
typedef struct _GUID {
ULONG Data1;
USHORT Data2;
USHORT Data3;
UCHAR Data4[8];
} GUID;
#endif // !defined(GUID_DEFINED)
#ifndef __IID_DEFINED__
#define __IID_DEFINED__
typedef GUID IID;
typedef IID *LPIID;
#define IID_NULL GUID_NULL
#define IsEqualIID(riid1, riid2) IsEqualGUID(riid1, riid2)
typedef GUID CLSID;
typedef CLSID *LPCLSID;
#define CLSID_NULL GUID_NULL
#define IsEqualCLSID(rclsid1, rclsid2) IsEqualGUID(rclsid1, rclsid2)
typedef GUID FMTID;
typedef FMTID *LPFMTID;
#define FMTID_NULL GUID_NULL
#define IsEqualFMTID(rfmtid1, rfmtid2) IsEqualGUID(rfmtid1, rfmtid2)
#ifdef __cplusplus
#ifndef _REFGUID_DEFINED
#define _REFGUID_DEFINED
#define REFGUID const GUID &
#endif // !_REFGUID_DEFINED
#else // !__cplusplus
#ifndef _REFGUID_DEFINED
#define _REFGUID_DEFINED
#define REFGUID const GUID * const
#endif // !_REFGUID_DEFINED
#endif // !__cplusplus
#ifdef __cplusplus
#ifndef _REFIID_DEFINED
#define _REFIID_DEFINED
#define REFIID const IID &
#endif // !_REFIID_DEFINED
#else // !__cplusplus
#ifndef _REFIID_DEFINED
#define _REFIID_DEFINED
#define REFIID const IID * const
#endif // !_REFIID_DEFINED
#endif // !__cplusplus
#ifdef __cplusplus
#ifndef _REFCLSID_DEFINED
#define _REFCLSID_DEFINED
#define REFCLSID const IID &
#endif // !_REFCLSID_DEFINED
#else // !__cplusplus
#ifndef _REFCLSID_DEFINED
#define _REFCLSID_DEFINED
#define REFCLSID const IID * const
#endif // !_REFCLSID_DEFINED
#endif // !__cplusplus
#ifdef __cplusplus
#ifndef _REFFMTID_DEFINED
#define _REFFMTID_DEFINED
#define REFFMTID const IID &
#endif // !_REFFMTID_DEFINED
#else // !__cplusplus
#ifndef _REFFMTID_DEFINED
#define _REFFMTID_DEFINED
#define REFFMTID const IID * const
#endif // !_REFFMTID_DEFINED
#endif // !__cplusplus
#if defined(_NTDDK_) || defined(_NTHAL_)
#ifdef __cplusplus
inline int IsEqualGUID(REFGUID guid1, REFGUID guid2)
{
return !memcmp(&guid1, &guid2, sizeof(GUID));
}
#else // !__cplusplus
#define IsEqualGUID(guid1, guid2) \
(!memcmp((guid1), (guid2), sizeof(GUID)))
#endif // !__cplusplus
#endif // _NTDDK_
#endif // !__IID_DEFINED__
#ifndef __IID_ALIGNED__
#define __IID_ALIGNED__
#ifdef __cplusplus
inline int IsEqualGUIDAligned(REFGUID guid1, REFGUID guid2)
{
return ((*(PLONGLONG)(&guid1) == *(PLONGLONG)(&guid2)) && (*((PLONGLONG)(&guid1) + 1) == *((PLONGLONG)(&guid2) + 1)));
}
#else // !__cplusplus
#define IsEqualGUIDAligned(guid1, guid2) \
((*(PLONGLONG)(guid1) == *(PLONGLONG)(guid2)) && (*((PLONGLONG)(guid1) + 1) == *((PLONGLONG)(guid2) + 1)))
#endif // !__cplusplus
#endif // !__IID_ALIGNED__
NTSYSAPI
NTSTATUS
NTAPI
RtlStringFromGUID(
IN REFGUID Guid,
OUT PUNICODE_STRING GuidString
);
NTSYSAPI
NTSTATUS
NTAPI
RtlGUIDFromString(
IN PUNICODE_STRING GuidString,
OUT GUID* Guid
);
//
// Fast primitives to compare, move, and zero memory
//
#define RtlEqualMemory(Destination,Source,Length) (!memcmp((Destination),(Source),(Length)))
#define RtlMoveMemory(Destination,Source,Length) memmove((Destination),(Source),(Length))
#define RtlCopyMemory(Destination,Source,Length) memcpy((Destination),(Source),(Length))
#define RtlFillMemory(Destination,Length,Fill) memset((Destination),(Fill),(Length))
#define RtlZeroMemory(Destination,Length) memset((Destination),0,(Length))
NTSYSAPI
ULONG
NTAPI
RtlCompareMemory (
const VOID *Source1,
const VOID *Source2,
ULONG Length
);
#if defined(_M_ALPHA)
//
// Guaranteed byte granularity memory copy function.
//
NTSYSAPI
VOID
NTAPI
RtlCopyBytes (
PVOID Destination,
CONST VOID *Source,
ULONG Length
);
//
// Guaranteed byte granularity memory zero function.
//
NTSYSAPI
VOID
NTAPI
RtlZeroBytes (
PVOID Destination,
ULONG Length
);
//
// Guaranteed byte granularity memory fill function.
//
NTSYSAPI
VOID
NTAPI
RtlFillBytes (
PVOID Destination,
ULONG Length,
UCHAR Fill
);
#else
#define RtlCopyBytes RtlCopyMemory
#define RtlZeroBytes RtlZeroMemory
#define RtlFillBytes RtlFillMemory
#endif
//
// Define kernel debugger print prototypes and macros.
//
// N.B. The following function cannot be directly imported because there are
// a few places in the source tree where this function is redefined.
//
VOID
NTAPI
DbgBreakPoint(
VOID
);
#define DBG_STATUS_CONTROL_C 1
#define DBG_STATUS_SYSRQ 2
#define DBG_STATUS_BUGCHECK_FIRST 3
#define DBG_STATUS_BUGCHECK_SECOND 4
#define DBG_STATUS_FATAL 5
#if DBG
#define KdPrint(_x_) DbgPrint _x_
#define KdBreakPoint() DbgBreakPoint()
#else
#define KdPrint(_x_)
#define KdBreakPoint()
#endif
#ifndef _DBGNT_
ULONG
_cdecl
DbgPrint(
PCH Format,
...
);
#endif // _DBGNT_
//
// Large integer arithmetic routines.
//
#if defined(MIDL_PASS) || defined(__cplusplus) || !defined(_M_IX86)
//
// Large integer add - 64-bits + 64-bits -> 64-bits
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlLargeIntegerAdd (
LARGE_INTEGER Addend1,
LARGE_INTEGER Addend2
);
//
// Enlarged integer multiply - 32-bits * 32-bits -> 64-bits
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlEnlargedIntegerMultiply (
LONG Multiplicand,
LONG Multiplier
);
//
// Unsigned enlarged integer multiply - 32-bits * 32-bits -> 64-bits
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlEnlargedUnsignedMultiply (
ULONG Multiplicand,
ULONG Multiplier
);
//
// Enlarged integer divide - 64-bits / 32-bits > 32-bits
//
NTSYSAPI
ULONG
NTAPI
RtlEnlargedUnsignedDivide (
IN ULARGE_INTEGER Dividend,
IN ULONG Divisor,
IN PULONG Remainder
);
//
// Large integer negation - -(64-bits)
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlLargeIntegerNegate (
LARGE_INTEGER Subtrahend
);
//
// Large integer subtract - 64-bits - 64-bits -> 64-bits.
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlLargeIntegerSubtract (
LARGE_INTEGER Minuend,
LARGE_INTEGER Subtrahend
);
#else
#pragma warning(disable:4035) // re-enable below
//
// Large integer add - 64-bits + 64-bits -> 64-bits
//
__inline LARGE_INTEGER
NTAPI
RtlLargeIntegerAdd (
LARGE_INTEGER Addend1,
LARGE_INTEGER Addend2
)
{
__asm {
mov eax,Addend1.LowPart ; (eax)=add1.low
mov edx,Addend1.HighPart ; (edx)=add1.hi
add eax,Addend2.LowPart ; (eax)=sum.low
adc edx,Addend2.HighPart ; (edx)=sum.hi
}
}
//
// Enlarged integer multiply - 32-bits * 32-bits -> 64-bits
//
__inline LARGE_INTEGER
NTAPI
RtlEnlargedIntegerMultiply (
LONG Multiplicand,
LONG Multiplier
)
{
__asm {
mov eax, Multiplicand
imul Multiplier
}
}
//
// Unsigned enlarged integer multiply - 32-bits * 32-bits -> 64-bits
//
__inline LARGE_INTEGER
NTAPI
RtlEnlargedUnsignedMultiply (
ULONG Multiplicand,
ULONG Multiplier
)
{
__asm {
mov eax, Multiplicand
mul Multiplier
}
}
//
// Enlarged integer divide - 64-bits / 32-bits > 32-bits
//
__inline ULONG
NTAPI
RtlEnlargedUnsignedDivide (
IN ULARGE_INTEGER Dividend,
IN ULONG Divisor,
IN PULONG Remainder
)
{
__asm {
mov eax, Dividend.LowPart
mov edx, Dividend.HighPart
mov ecx, Remainder
div Divisor ; eax = eax:edx / divisor
or ecx, ecx ; save remainer?
jz short done
mov [ecx], edx
done:
}
}
//
// Large integer negation - -(64-bits)
//
__inline LARGE_INTEGER
NTAPI
RtlLargeIntegerNegate (
LARGE_INTEGER Subtrahend
)
{
__asm {
mov eax, Subtrahend.LowPart
mov edx, Subtrahend.HighPart
neg edx ; (edx) = 2s comp of hi part
neg eax ; if ((eax) == 0) CF = 0
; else CF = 1
sbb edx,0 ; (edx) = (edx) - CF
}
}
//
// Large integer subtract - 64-bits - 64-bits -> 64-bits.
//
__inline LARGE_INTEGER
NTAPI
RtlLargeIntegerSubtract (
LARGE_INTEGER Minuend,
LARGE_INTEGER Subtrahend
)
{
__asm {
mov eax, Minuend.LowPart
mov edx, Minuend.HighPart
sub eax, Subtrahend.LowPart
sbb edx, Subtrahend.HighPart
}
}
#pragma warning(default:4035)
#endif
//
// Extended large integer magic divide - 64-bits / 32-bits -> 64-bits
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlExtendedMagicDivide (
LARGE_INTEGER Dividend,
LARGE_INTEGER MagicDivisor,
CCHAR ShiftCount
);
//
// Large Integer divide - 64-bits / 32-bits -> 64-bits
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlExtendedLargeIntegerDivide (
LARGE_INTEGER Dividend,
ULONG Divisor,
PULONG Remainder
);
//
// Extended integer multiply - 32-bits * 64-bits -> 64-bits
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlExtendedIntegerMultiply (
LARGE_INTEGER Multiplicand,
LONG Multiplier
);
//
// Large integer and - 64-bite & 64-bits -> 64-bits.
//
#define RtlLargeIntegerAnd(Result, Source, Mask) \
{ \
Result.HighPart = Source.HighPart & Mask.HighPart; \
Result.LowPart = Source.LowPart & Mask.LowPart; \
}
//
// Large integer conversion routines.
//
#if defined(MIDL_PASS) || defined(__cplusplus) || !defined(_M_IX86)
//
// Convert signed integer to large integer.
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlConvertLongToLargeInteger (
LONG SignedInteger
);
//
// Convert unsigned integer to large integer.
//
NTSYSAPI
LARGE_INTEGER
NTAPI
RtlConvertUlongToLargeInteger (
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -