2020-09-24 20:41:01 +00:00
|
|
|
/*++
|
|
|
|
|
|
|
|
Copyright (c) Microsoft Corporation. All rights reserved.
|
|
|
|
|
|
|
|
_WdfVersionBuild_
|
|
|
|
|
|
|
|
Module Name:
|
|
|
|
|
|
|
|
wdfcore.h
|
|
|
|
|
|
|
|
Abstract:
|
|
|
|
|
|
|
|
This is the main driver framework.
|
|
|
|
|
|
|
|
Environment:
|
|
|
|
|
|
|
|
kernel mode only
|
|
|
|
|
|
|
|
Revision History:
|
|
|
|
|
|
|
|
--*/
|
|
|
|
|
|
|
|
//
|
|
|
|
// NOTE: This header is generated by stubwork. Please make any
|
|
|
|
// modifications to the corresponding template files
|
|
|
|
// (.x or .y) and use stubwork to regenerate the header
|
|
|
|
//
|
|
|
|
|
|
|
|
#ifndef _WDFCORE_H_
|
|
|
|
#define _WDFCORE_H_
|
|
|
|
|
|
|
|
#ifndef WDF_EXTERN_C
|
|
|
|
#ifdef __cplusplus
|
|
|
|
#define WDF_EXTERN_C extern "C"
|
|
|
|
#define WDF_EXTERN_C_START extern "C" {
|
|
|
|
#define WDF_EXTERN_C_END }
|
|
|
|
#else
|
|
|
|
#define WDF_EXTERN_C
|
|
|
|
#define WDF_EXTERN_C_START
|
|
|
|
#define WDF_EXTERN_C_END
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
|
|
|
WDF_EXTERN_C_START
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#if (NTDDI_VERSION >= NTDDI_WIN2K)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Time conversion related macros
|
|
|
|
//
|
|
|
|
// to to to
|
|
|
|
// us ms sec
|
|
|
|
#define WDF_TIMEOUT_TO_SEC ((LONGLONG) 1 * 10 * 1000 * 1000)
|
|
|
|
#define WDF_TIMEOUT_TO_MS ((LONGLONG) 1 * 10 * 1000)
|
|
|
|
#define WDF_TIMEOUT_TO_US ((LONGLONG) 1 * 10)
|
|
|
|
FORCEINLINE
|
2020-09-24 20:48:32 +00:00
|
|
|
LONGLONG
|
2020-09-24 20:41:01 +00:00
|
|
|
WDF_REL_TIMEOUT_IN_SEC(
|
|
|
|
_In_ ULONGLONG Time
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return Time * -1 * WDF_TIMEOUT_TO_SEC;
|
|
|
|
}
|
|
|
|
|
|
|
|
FORCEINLINE
|
2020-09-24 20:48:32 +00:00
|
|
|
LONGLONG
|
2020-09-24 20:41:01 +00:00
|
|
|
WDF_ABS_TIMEOUT_IN_SEC(
|
|
|
|
_In_ ULONGLONG Time
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return Time * 1 * WDF_TIMEOUT_TO_SEC;
|
|
|
|
}
|
|
|
|
|
|
|
|
FORCEINLINE
|
2020-09-24 20:48:32 +00:00
|
|
|
LONGLONG
|
2020-09-24 20:41:01 +00:00
|
|
|
WDF_REL_TIMEOUT_IN_MS(
|
|
|
|
_In_ ULONGLONG Time
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return Time * -1 * WDF_TIMEOUT_TO_MS;
|
|
|
|
}
|
|
|
|
|
|
|
|
FORCEINLINE
|
2020-09-24 20:48:32 +00:00
|
|
|
LONGLONG
|
2020-09-24 20:41:01 +00:00
|
|
|
WDF_ABS_TIMEOUT_IN_MS(
|
|
|
|
_In_ ULONGLONG Time
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return Time * 1 * WDF_TIMEOUT_TO_MS;
|
|
|
|
}
|
|
|
|
|
|
|
|
FORCEINLINE
|
2020-09-24 20:48:32 +00:00
|
|
|
LONGLONG
|
2020-09-24 20:41:01 +00:00
|
|
|
WDF_REL_TIMEOUT_IN_US(
|
|
|
|
_In_ ULONGLONG Time
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return Time * -1 * WDF_TIMEOUT_TO_US;
|
|
|
|
}
|
|
|
|
|
|
|
|
FORCEINLINE
|
2020-09-24 20:48:32 +00:00
|
|
|
LONGLONG
|
2020-09-24 20:41:01 +00:00
|
|
|
WDF_ABS_TIMEOUT_IN_US(
|
|
|
|
_In_ ULONGLONG Time
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return Time * 1 * WDF_TIMEOUT_TO_US;
|
|
|
|
}
|
|
|
|
|
|
|
|
//
|
|
|
|
// Rounding functions
|
|
|
|
//
|
|
|
|
FORCEINLINE
|
2020-09-24 20:48:32 +00:00
|
|
|
size_t
|
2020-09-24 20:41:01 +00:00
|
|
|
WDF_ALIGN_SIZE_DOWN(
|
|
|
|
_In_ size_t Length,
|
|
|
|
_In_ size_t AlignTo
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return Length & ~(AlignTo - 1);
|
|
|
|
}
|
|
|
|
|
|
|
|
FORCEINLINE
|
2020-09-24 20:48:32 +00:00
|
|
|
size_t
|
2020-09-24 20:41:01 +00:00
|
|
|
WDF_ALIGN_SIZE_UP(
|
|
|
|
_In_ size_t Length,
|
|
|
|
_In_ size_t AlignTo
|
|
|
|
)
|
|
|
|
{
|
|
|
|
return WDF_ALIGN_SIZE_DOWN(Length + AlignTo - 1, AlignTo);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
//
|
|
|
|
// Pointer math
|
|
|
|
//
|
|
|
|
#define WDF_PTR_ADD_OFFSET_TYPE(_ptr, _offset, _type) \
|
|
|
|
((_type) (((PUCHAR) (_ptr)) + (_offset)))
|
|
|
|
|
|
|
|
#define WDF_PTR_ADD_OFFSET(_ptr, _offset) \
|
|
|
|
WDF_PTR_ADD_OFFSET_TYPE(_ptr, _offset, PVOID)
|
|
|
|
|
|
|
|
#define WDF_PTR_GET_OFFSET(_base, _addr) \
|
|
|
|
(size_t) (((PUCHAR) _addr) - ((PUCHAR) _base))
|
|
|
|
|
|
|
|
#if (OSVER(NTDDI_VERSION) == NTDDI_WIN2K)
|
|
|
|
//
|
|
|
|
// These definitions are necessary for building under a Win2K Environment.
|
|
|
|
//
|
|
|
|
#ifndef DECLARE_UNICODE_STRING_SIZE
|
|
|
|
#define DECLARE_UNICODE_STRING_SIZE(_var, _size) \
|
|
|
|
WCHAR _var ## _buffer[_size]; \
|
|
|
|
UNICODE_STRING _var = { 0, _size * sizeof(WCHAR) , _var ## _buffer }
|
|
|
|
#endif
|
|
|
|
|
|
|
|
#undef DECLARE_CONST_UNICODE_STRING
|
|
|
|
#define DECLARE_CONST_UNICODE_STRING(_variablename, _string) \
|
|
|
|
const WCHAR _variablename ## _buffer[] = _string; \
|
|
|
|
__pragma(warning(suppress:4204)) __pragma(warning(suppress:4221)) \
|
|
|
|
const UNICODE_STRING _variablename = { sizeof(_string) - sizeof(WCHAR), sizeof(_string), (PWSTR) _variablename ## _buffer }
|
|
|
|
|
|
|
|
#endif // (OSVER(NTDDI_VERSION) == NTDDI_WIN2K)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#endif // (NTDDI_VERSION >= NTDDI_WIN2K)
|
|
|
|
|
|
|
|
|
|
|
|
WDF_EXTERN_C_END
|
|
|
|
|
|
|
|
#endif // _WDFCORE_H_
|
|
|
|
|