35#define DEBUG_COMP_ID DPFLTR_DISK_ID
42#define WPP_GUID_DISK (945186BF, 3DD6, 4f3f, 9C8E, 9EDD3FC9D558)
43#ifndef WPP_CONTROL_GUIDS
44#define WPP_CONTROL_GUIDS WPP_CONTROL_GUIDS_NORMAL_FLAGS(WPP_GUID_DISK)
50#define ExAllocatePool #NT_ASSERT(FALSE)
53#define DISK_TAG_GENERAL ' DcS'
54#define DISK_TAG_SMART 'aDcS'
55#define DISK_TAG_INFO_EXCEPTION 'ADcS'
56#define DISK_TAG_DISABLE_CACHE 'CDcS'
57#define DISK_TAG_CCONTEXT 'cDcS'
58#define DISK_TAG_DISK_GEOM 'GDcS'
59#define DISK_TAG_UPDATE_GEOM 'gDcS'
60#define DISK_TAG_SENSE_INFO 'IDcS'
61#define DISK_TAG_PNP_ID 'iDcS'
62#define DISK_TAG_MODE_DATA 'MDcS'
63#define DISK_CACHE_MBR_CHECK 'mDcS'
64#define DISK_TAG_NAME 'NDcS'
65#define DISK_TAG_READ_CAP 'PDcS'
66#define DISK_TAG_PART_LIST 'pDcS'
67#define DISK_TAG_SRB 'SDcS'
68#define DISK_TAG_START 'sDcS'
69#define DISK_TAG_UPDATE_CAP 'UDcS'
70#define DISK_TAG_WI_CONTEXT 'WDcS'
73#undef MdlMappingNoExecute
74#define MdlMappingNoExecute 0
75#define NonPagedPoolNx NonPagedPool
76#define NonPagedPoolNxCacheAligned NonPagedPoolCacheAligned
77#undef POOL_NX_ALLOCATION
78#define POOL_NX_ALLOCATION 0
82#if defined(_X86_) || defined(_AMD64_)
88typedef enum _DISK_GEOMETRY_SOURCE {
92 DiskGeometryFromNec98,
93 DiskGeometryGuessedFromBios,
94 DiskGeometryFromDefault,
96} DISK_GEOMETRY_SOURCE, *PDISK_GEOMETRY_SOURCE;
128#if (NTDDI_VERSION >= NTDDI_WIN8)
168 ULONG DbgRefCount[64];
284#pragma warning(suppress: 4201)
348#if defined(_X86_) || defined(_AMD64_)
355 DISK_GEOMETRY_SOURCE GeometrySource;
395#define HackDisableTaggedQueuing (0x01)
396#define HackDisableSynchronousTransfers (0x02)
397#define HackDisableSpinDown (0x04)
398#define HackDisableWriteCache (0x08)
399#define HackCauseNotReportableHack (0x10)
400#define HackRequiresStartUnitCommand (0x20)
403#define DiskDeviceParameterSubkey L"Disk"
404#define DiskDeviceUserWriteCacheSetting L"UserWriteCacheSetting"
405#define DiskDeviceCacheIsPowerProtected L"CacheIsPowerProtected"
408#define FUNCTIONAL_EXTENSION_SIZE sizeof(FUNCTIONAL_DEVICE_EXTENSION) + sizeof(DISK_DATA)
410#define MODE_DATA_SIZE 192
411#define VALUE_BUFFER_SIZE 2048
412#define SCSI_DISK_TIMEOUT 10
413#define PARTITION0_LIST_SIZE 4
415#define MAX_MEDIA_TYPES 4
435#define MAX_SECTORS_PER_VERIFY 0x100
440#define ONE_MILLI_SECOND ((ULONGLONG)10 * 1000)
456#define DISK_DEFAULT_FAILURE_POLLING_PERIOD 1 * 60 * 60
458#define CHECK_IRQL() \
459 if (KeGetCurrentIrql() >= DISPATCH_LEVEL) { \
460 NT_ASSERT(KeGetCurrentIrql() < DISPATCH_LEVEL); \
461 return STATUS_INVALID_LEVEL; \
472#if defined(__REACTOS__) && defined(_MSC_VER)
473# pragma section("PAGECONS", read)
474# pragma section("PAGEDATA", read,write)
619#define DiskIsValidSmartSelfTest(Subcommand) \
620 ( ((Subcommand) == SMART_OFFLINE_ROUTINE_OFFLINE) || \
621 ((Subcommand) == SMART_SHORT_SELFTEST_OFFLINE) || \
622 ((Subcommand) == SMART_EXTENDED_SELFTEST_OFFLINE) )
649#if (NTDDI_VERSION >= NTDDI_WINBLUE)
803 ULONG PollTimeInSeconds
812#if defined(_X86_) || defined(_AMD64_)
818#define DiskReadDriveCapacity(Fdo) ClassReadDriveCapacity(Fdo)
822#if defined(_X86_) || defined(_AMD64_)
830DiskCleanupDetectInfo(
835DiskDriverReinitialization (
843#if defined(_X86_) || defined(_AMD64_)
847 OUT PDISK_DETECTION_INFO DetectInfo
861#define DiskGetDetectInfo(FdoExtension, DetectInfo) (STATUS_UNSUCCESSFUL)
865#define DiskHashGuid(Guid) (((PULONG) &Guid)[0] ^ ((PULONG) &Guid)[0] ^ ((PULONG) &Guid)[0] ^ ((PULONG) &Guid)[0])
1040 for (
i = 0;
i < SrbEx->NumSrbExData;
i++) {
1044 (SrbEx->SrbExDataOffset[
i] > SrbEx->SrbLength)){
1052 switch (SrbExData->Type) {
1070 if (SenseInfoBuffer) {
1102 if (SenseInfoBuffer) {
1134 if (SenseInfoBuffer) {
1170 if (SenseInfoBuffer) {
1171 *SenseInfoBuffer =
NULL;
1229 for (
i = 0;
i < SrbEx->NumSrbExData;
i++) {
1233 (SrbEx->SrbExDataOffset[
i] > SrbEx->SrbLength)){
1241 switch (SrbExData->Type) {
_In_ PSCSI_REQUEST_BLOCK Srb
_In_ size_t _In_ UCHAR PageMode
_In_ CDROM_SCAN_FOR_SPECIAL_INFO _In_ PCDROM_SCAN_FOR_SPECIAL_HANDLER Function
_In_ ULONG const _In_ FEATURE_NUMBER const Feature
_In_ ULONG _In_ UCHAR _In_ UCHAR PageControl
enum _STORAGE_MEDIA_TYPE STORAGE_MEDIA_TYPE
_In_ PSCSI_REQUEST_BLOCK _Out_ NTSTATUS _Inout_ BOOLEAN * Retry
_In_z_ PCCHAR _In_ PDEVICE_OBJECT LowerDeviceObject
#define CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE
_In_ PIRP _In_ ULONG GuidIndex
enum FAILURE_PREDICTION_METHOD * PFAILURE_PREDICTION_METHOD
CLASSENABLEDISABLEFUNCTION
_In_ PCHAR _In_ ULONG DeviceNumber
_In_ PIRP _In_ ULONG _In_ ULONG BufferAvail
FAILURE_PREDICTION_METHOD
NTSTATUS DiskEnableDisableFailurePrediction(PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, BOOLEAN Enable)
NTSTATUS NTAPI DiskRemoveDevice(IN PDEVICE_OBJECT DeviceObject, IN UCHAR Type)
NTSTATUS NTAPI DiskDeviceControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI DiskFdoSetWmiDataItem(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG DataItemId, IN ULONG BufferSize, IN PUCHAR Buffer)
NTSTATUS NTAPI DiskWmiFunctionControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN CLASSENABLEDISABLEFUNCTION Function, IN BOOLEAN Enable)
GUIDREGINFO DiskWmiFdoGuidList[]
NTSTATUS DiskPerformSmartCommand(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, IN ULONG SrbControlCode, IN UCHAR Command, IN UCHAR Feature, IN UCHAR SectorCount, IN UCHAR SectorNumber, IN OUT PSRB_IO_CONTROL SrbControl, OUT PULONG BufferSize)
NTSTATUS DiskGenerateDeviceName(IN ULONG DeviceNumber, OUT PCCHAR *RawName)
NTSTATUS DiskCreateFdo(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT LowerDeviceObject, IN PULONG DeviceCount, IN BOOLEAN DasdAccessOnly)
NTSTATUS DiskIoctlVerify(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS DiskIoctlUpdateDriveSize(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS DiskDetectFailurePrediction(PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, PFAILURE_PREDICTION_METHOD FailurePredictCapability, BOOLEAN ScsiAddressAvailable)
NTSTATUS NTAPI DiskFdoQueryWmiRegInfoEx(IN PDEVICE_OBJECT DeviceObject, OUT ULONG *RegFlags, OUT PUNICODE_STRING InstanceName, OUT PUNICODE_STRING MofName)
NTSTATUS DiskIoctlEnableFailurePrediction(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS DiskIoctlSmartSendDriveCommand(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS DiskIoctlIsWritable(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
VOID DiskFlushDispatch(IN PDEVICE_OBJECT Fdo, IN PDISK_GROUP_CONTEXT FlushContext)
NTSTATUS DiskIoctlReassignBlocks(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS DiskModeSelect(IN PDEVICE_OBJECT DeviceObject, _In_reads_bytes_(Length) PCHAR ModeSelectBuffer, IN ULONG Length, IN BOOLEAN SavePage)
struct DISKREREGREQUEST * PDISKREREGREQUEST
NTSTATUS DiskIoctlSetCacheInformation(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS DiskDetermineMediaTypes(IN PDEVICE_OBJECT Fdo, IN PIRP Irp, IN UCHAR MediumType, IN UCHAR DensityCode, IN BOOLEAN MediaPresent, IN BOOLEAN IsWritable)
NTSTATUS NTAPI DiskFdoExecuteWmiMethod(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG MethodId, IN ULONG InBufferSize, IN ULONG OutBufferSize, IN PUCHAR Buffer)
CLASSPNP_SCAN_FOR_SPECIAL_INFO DiskBadControllers[]
const DISK_MEDIA_TYPES_LIST DiskMediaTypes[]
NTSTATUS DiskIoctlGetVolumeDiskExtents(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS DiskIoctlReassignBlocksEx(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS NTAPI DiskGetCacheInformation(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, IN PDISK_CACHE_INFORMATION CacheInfo)
NTSTATUS NTAPI DiskSetCacheInformation(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, IN PDISK_CACHE_INFORMATION CacheInfo)
NTSTATUS DiskInitializeReregistration(VOID)
NTSTATUS DiskGetInfoExceptionInformation(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, OUT PMODE_INFO_EXCEPTIONS ReturnPageData)
NTSTATUS DiskIoctlSmartReceiveDriveData(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS NTAPI DiskShutdownFlush(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
DRIVER_INITIALIZE DriverEntry
NTSTATUS DiskEnableInfoExceptions(_In_ PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, _In_ BOOLEAN Enable)
NTSTATUS DiskIoctlClearVerify(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS NTAPI DiskStartFdo(IN PDEVICE_OBJECT Fdo)
NTSTATUS NTAPI DiskInitFdo(IN PDEVICE_OBJECT Fdo)
VOID NTAPI DiskSetSpecialHacks(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, IN ULONG_PTR Data)
#define DiskGetDetectInfo(FdoExtension, DetectInfo)
struct _DISK_GROUP_CONTEXT * PDISK_GROUP_CONTEXT
FORCEINLINE VOID SetSrbScsiData(_In_ PSTORAGE_REQUEST_BLOCK SrbEx, _In_ UCHAR CdbLength8, _In_ ULONG CdbLength32, _In_ UCHAR ScsiStatus, _In_opt_ PVOID SenseInfoBuffer, _In_ UCHAR SenseInfoBufferLength)
NTSTATUS DiskIoctlGetCacheSetting(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
#define DiskReadDriveCapacity(Fdo)
VOID NTAPI DiskFdoProcessError(PDEVICE_OBJECT DeviceObject, PSCSI_REQUEST_BLOCK Srb, NTSTATUS *Status, BOOLEAN *Retry)
VOID DiskCreateSymbolicLinks(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS DiskIoctlGetMediaTypesEx(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
IO_WORKITEM_ROUTINE DisableWriteCache
NTSTATUS DiskIoctlGetDriveGeometryEx(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS DiskIoctlGetDriveGeometry(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
struct _DISK_GROUP_CONTEXT DISK_GROUP_CONTEXT
NTSTATUS DiskIoctlGetCacheInformation(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
struct _DISK_VERIFY_WORKITEM_CONTEXT * PDISK_VERIFY_WORKITEM_CONTEXT
NTSTATUS DiskIoctlSetCacheSetting(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
struct _DISK_DATA DISK_DATA
struct _DISK_MEDIA_TYPES_LIST * PDISK_MEDIA_TYPES_LIST
const DISK_MEDIA_TYPES_LIST DiskMediaTypesExclude[]
NTSTATUS DiskSetInfoExceptionInformation(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, IN PMODE_INFO_EXCEPTIONS PageData)
NTSTATUS DiskReadFailurePredictStatus(PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, PSTORAGE_FAILURE_PREDICT_STATUS DiskSmartStatus)
NTSTATUS NTAPI DiskStopDevice(IN PDEVICE_OBJECT DeviceObject, IN UCHAR Type)
VOID ResetBus(IN PDEVICE_OBJECT DeviceObject)
IO_COMPLETION_ROUTINE DiskFlushComplete
struct _DISK_DATA * PDISK_DATA
enum _DISK_USER_WRITE_CACHE_SETTING DISK_USER_WRITE_CACHE_SETTING
NTSTATUS NTAPI DiskReadWriteVerification(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI DiskFdoQueryWmiDataBlock(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG BufferAvail, OUT PUCHAR Buffer)
enum _DISK_USER_WRITE_CACHE_SETTING * PDISK_USER_WRITE_CACHE_SETTING
NTSTATUS NTAPI DiskAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT Pdo)
FORCEINLINE PCDB GetSrbScsiData(_In_ PSTORAGE_REQUEST_BLOCK SrbEx, _In_opt_ PUCHAR CdbLength8, _In_opt_ PULONG CdbLength32, _In_opt_ PUCHAR ScsiStatus, _In_opt_ PVOID *SenseInfoBuffer, _In_opt_ PUCHAR SenseInfoBufferLength)
NTSTATUS DiskIoctlSetVerify(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
NTSTATUS DiskIoctlGetLengthInfo(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI DiskFdoQueryWmiRegInfo(IN PDEVICE_OBJECT DeviceObject, OUT ULONG *RegFlags, OUT PUNICODE_STRING InstanceName)
NTSTATUS DiskEnableDisableFailurePredictPolling(PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, BOOLEAN Enable, ULONG PollTimeInSeconds)
NTSTATUS DiskIoctlPredictFailure(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
VOID DiskDeleteSymbolicLinks(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS DiskReadFailurePredictData(PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, PSTORAGE_FAILURE_PREDICT_DATA DiskSmartData)
NTSTATUS DiskGetModePage(_In_ PDEVICE_OBJECT Fdo, _In_ UCHAR PageMode, _In_ UCHAR PageControl, _In_ PMODE_PARAMETER_HEADER ModeData, _Inout_ PULONG ModeDataSize, _Out_ PVOID *PageData)
VOID DiskLogCacheInformation(IN PFUNCTIONAL_DEVICE_EXTENSION FdoExtension, IN PDISK_CACHE_INFORMATION CacheInfo, IN NTSTATUS Status)
NTSTATUS NTAPI DiskFdoSetWmiDataBlock(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG BufferSize, IN PUCHAR Buffer)
struct _DISK_MEDIA_TYPES_LIST DISK_MEDIA_TYPES_LIST
IO_WORKITEM_ROUTINE DiskIoctlVerifyThread
struct _DISK_VERIFY_WORKITEM_CONTEXT DISK_VERIFY_WORKITEM_CONTEXT
NTSTATUS DiskIoctlSmartGetVersion(IN PDEVICE_OBJECT DeviceObject, IN OUT PIRP Irp)
_DISK_USER_WRITE_CACHE_SETTING
VOID NTAPI DiskUnload(IN PDRIVER_OBJECT DriverObject)
#define SRB_FUNCTION_EXECUTE_SCSI
_Must_inspect_result_ _Inout_ PFLT_VOLUME _In_opt_ PCUNICODE_STRING InstanceName
_Must_inspect_result_ _Out_ PBOOLEAN IsWritable
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
enum _PARTITION_STYLE PARTITION_STYLE
#define _In_reads_bytes_(size)
_In_ ULONG _In_ ULONG _In_ ULONG Length
_In_ ULONGLONG _In_ ULONGLONG _In_ BOOLEAN Enable
_In_opt_ WDFREQUEST _In_ ULONG _In_ BOOLEAN _In_ PCDB Cdb
_In_ UCHAR SenseInfoBufferLength
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB_VAR SRBEX_DATA_SCSI_CDB_VAR
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB_VAR * PSRBEX_DATA_SCSI_CDB_VAR
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 SRBEX_DATA_SCSI_CDB16
#define SRB_FUNCTION_STORAGE_REQUEST_BLOCK
struct SRB_ALIGN _SRBEX_DATA * PSRBEX_DATA
@ SrbExDataTypeScsiCdbVar
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB16 * PSRBEX_DATA_SCSI_CDB16
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 * PSRBEX_DATA_SCSI_CDB32
struct SRB_ALIGN _SRBEX_DATA_SCSI_CDB32 SRBEX_DATA_SCSI_CDB32
PDEVICE_OBJECT DeviceObject
unsigned int PhysicalDriveLinkCreated
struct _DISK_DATA::@1064::@1067 Mbr
DISK_GROUP_CONTEXT FlushContext
struct _DISK_DATA::@1064::@1068 Efi
DISK_USER_WRITE_CACHE_SETTING WriteCacheOverride
unsigned int WellKnownNameCreated
PARTITION_STYLE PartitionStyle
BOOLEAN ScsiInfoExceptionsSupported
FAILURE_PREDICTION_METHOD FailurePredictionCapability
BOOLEAN FailurePredictionEnabled
struct _DISK_DATA::@1066 LinkStatus
UCHAR SrbExBuffer[CLASS_SRBEX_SCSI_CDB16_BUFFER_SIZE]
STORAGE_REQUEST_BLOCK SrbEx
_In_ PDEVICE_OBJECT DeviceObject
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
_Must_inspect_result_ _In_ WDFDEVICE Fdo
_In_ WDFMEMORY _Out_opt_ size_t * BufferSize
WDF_EXTERN_C_START typedef _Must_inspect_result_ _In_ WDFDRIVER _In_opt_ PWDF_OBJECT_ATTRIBUTES _In_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT _In_opt_ PDEVICE_OBJECT Pdo