42 #include "classwmi.tmh" 45 #define TIME_STRING_LENGTH 25 80 #define MOFRESOURCENAME L"MofResourceName" 85 #pragma alloc_text(PAGE, ClassSystemControl) 86 #pragma alloc_text(PAGE, ClassFindGuid) 87 #pragma alloc_text(PAGE, ClassFindInternalGuid) 91 #define MSStorageDriver_ClassErrorLogGuid {0xD5A9A51E, 0x03F9, 0x404d, {0x97, 0x22, 0x15, 0xF9, 0x0E, 0xB0, 0x70, 0x38}} 100 MSStorageDriver_ClassErrorLogGuid, 1, 0
104 #define MSStorageDriver_ClassErrorLogGuid_Index 0 105 #define NUM_CLASS_WMI_GUIDS (sizeof(wmiClassGuids) / sizeof(GUIDREGINFO)) 144 for (
i = 0;
i < GuidCount;
i++)
282 isInternalGuid =
FALSE;
286 isInternalGuid =
TRUE;
324 classWmiInfo = commonExtension->
IsFdo ?
327 switch(minorFunction)
338 ULONG registryPathOffset;
339 ULONG mofResourceOffset;
343 ULONG nameSize, nameOffset, nameFlags;
345 PCLASS_QUERY_WMI_REGINFO_EX ClassQueryWmiRegInfoEx;
349 name.MaximumLength = 0;
352 ClassQueryWmiRegInfoEx = commonExtension->
IsFdo ?
358 (ClassQueryWmiRegInfoEx ==
NULL))
370 status = (*ClassQueryWmiRegInfoEx)(
402 nameInfo = commonExtension->
IsFdo ?
408 nameInfo = nameOffset;
411 mofResourceOffset = nameOffset + nameSize;
413 registryPathOffset = mofResourceOffset +
418 bufferNeeded = registryPathOffset + regPath->
Length;
419 bufferNeeded +=
sizeof(
USHORT);
423 retSize = bufferNeeded;
454 bufferNeeded = nameOffset +
sizeof(
WCHAR);
455 bufferNeeded +=
name.Length;
459 *stringPtr++ =
name.Length;
468 bufferNeeded = mofResourceOffset +
sizeof(
WCHAR);
469 bufferNeeded += mofName.
Length;
473 *stringPtr++ = mofName.
Length;
481 bufferNeeded = registryPathOffset +
sizeof(
WCHAR);
482 bufferNeeded += regPath->
Length;
486 *stringPtr++ = regPath->
Length;
500 retSize =
sizeof(
ULONG);
509 Irp->IoStatus.Information = retSize;
555 ULONG dataBlockOffset;
570 (
PUCHAR)wnode + dataBlockOffset);
577 (
PUCHAR)wnode + dataBlockOffset);
819 #ifndef __REACTOS__ // WMI in not a thing on ReactOS yet 829 sizeNeeded = MSStorageDriver_ClassErrorLog_SIZE;
831 PMSStorageDriver_ClassErrorLog errorLog = (PMSStorageDriver_ClassErrorLog)
Buffer;
832 PMSStorageDriver_ClassErrorLogEntry logEntry;
833 PMSStorageDriver_ScsiRequestBlock srbBlock;
834 PMSStorageDriver_SenseData senseData;
842 fdoSRBBlock = &fdoLogEntry->
Srb;
844 logEntry = &errorLog->logEntries[
i];
845 srbBlock = &logEntry->srb;
846 senseData = &logEntry->senseData;
848 logEntry->portNumber = fdoLogEntry->
PortNumber;
856 srbBlock->length = fdoSRBBlock->
Length;
857 srbBlock->function = fdoSRBBlock->
Function;
858 srbBlock->srbStatus = fdoSRBBlock->
SrbStatus;
859 srbBlock->scsiStatus = fdoSRBBlock->
ScsiStatus;
860 srbBlock->pathID = fdoSRBBlock->
PathId;
861 srbBlock->targetID = fdoSRBBlock->
TargetId;
862 srbBlock->lun = fdoSRBBlock->
Lun;
863 srbBlock->queueTag = fdoSRBBlock->
QueueTag;
865 srbBlock->cdbLength = fdoSRBBlock->
CdbLength;
867 srbBlock->srbFlags = fdoSRBBlock->
SrbFlags;
877 srbBlock->reserved = fdoSRBBlock->Reserved;
879 srbBlock->reserved = 0;
887 senseData->errorCode = fdoSenseData->
ErrorCode;
890 senseData->senseKey = fdoSenseData->
SenseKey;
913 ULONG sizeNeeded = 0;
1020 UCHAR minorFunction;
1025 switch(minorFunction)
1039 retSize = bufferNeeded;
1072 retSize = bufferNeeded;
1103 retSize = bufferNeeded;
1133 Irp->IoStatus.Information = retSize;
1184 if (EventData ==
NULL)
1195 event->WnodeHeader.Guid = *
Guid;
1197 event->WnodeHeader.BufferSize = sizeNeeded;
1206 if (EventData !=
NULL)
UCHAR FieldReplaceableUnitCode
#define KeQuerySystemTime(t)
_In_ ULONG _Out_ PULONG BufferUsed
struct tagWNODE_SINGLE_INSTANCE WNODE_SINGLE_INSTANCE
struct _WNODE_HEADER WnodeHeader
struct tagWNODE_SINGLE_ITEM * PWNODE_SINGLE_ITEM
#define STATUS_DEVICE_DOES_NOT_EXIST
#define NUM_CLASS_WMI_GUIDS
_Must_inspect_result_ _In_ WDFWMIINSTANCE _In_opt_ ULONG EventDataSize
UCHAR CommandSpecificInformation[4]
#define STATUS_INSUFFICIENT_RESOURCES
#define ClassAcquireRemoveLock(devobj, tag)
struct tagWNODE_ALL_DATA * PWNODE_ALL_DATA
struct tagWNODE_SINGLE_INSTANCE * PWNODE_SINGLE_INSTANCE
#define STATUS_WMI_GUID_NOT_FOUND
BOOLEAN ClassFindGuid(PGUIDREGINFO GuidList, ULONG GuidCount, LPGUID Guid, PULONG GuidIndex)
struct tagWNODE_TOO_SMALL * PWNODE_TOO_SMALL
_In_ LPGUID _In_ ULONG InstanceIndex
ULONG NTAPI KeQueryTimeIncrement(VOID)
#define STATUS_INVALID_DEVICE_REQUEST
_IRQL_requires_max_(DISPATCH_LEVEL)
#define IRP_MN_QUERY_SINGLE_INSTANCE
struct _SCSI_REQUEST_BLOCK * NextSrb
UNICODE_STRING RegistryPath
struct tagWNODE_METHOD_ITEM * PWNODE_METHOD_ITEM
#define RtlMoveMemory(Destination, Source, Length)
PCLASS_QUERY_WMI_DATABLOCK ClassQueryWmiDataBlock
#define IRP_MN_ENABLE_COLLECTION
#define STATUS_WMI_INSTANCE_NOT_FOUND
#define STATUS_BUFFER_TOO_SMALL
struct tagWNODE_ALL_DATA WNODE_ALL_DATA
_In_ PDEVICE_OBJECT DeviceObject
#define _Analysis_assume_(expr)
struct tagWNODE_TOO_SMALL WNODE_TOO_SMALL
#define WNODE_FLAG_EVENT_ITEM
NTSTATUS ClassQueryInternalDataBlock(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp, IN ULONG GuidIndex, IN ULONG BufferAvail, OUT PUCHAR Buffer)
_Must_inspect_result_ _In_ WDFDEVICE _In_ WDFSTRING String
NTSTATUS(* NTAPI)(IN PFILE_FULL_EA_INFORMATION EaBuffer, IN ULONG EaLength, OUT PULONG ErrorOffset)
_In_ WDFREQUEST _In_ NTSTATUS _In_ CCHAR PriorityBoost
#define TRACE_LEVEL_VERBOSE
#define FREE_POOL(_PoolPtr)
#define IRP_MN_CHANGE_SINGLE_ITEM
UCHAR SenseKeySpecific[3]
#define IRP_MN_DISABLE_COLLECTION
PCLASS_SET_WMI_DATABLOCK ClassSetWmiDataBlock
VOID NTAPI ClassReleaseRemoveLock(_In_ PDEVICE_OBJECT DeviceObject, _In_opt_ PIRP Tag)
_In_ PIRP _In_ ULONG GuidIndex
#define WMIREG_FLAG_INSTANCE_PDO
#define MSStorageDriver_ClassErrorLogGuid_Index
PCLASS_QUERY_WMI_REGINFO_EX ClassFdoQueryWmiRegInfoEx
VOID NTAPI KeQueryTickCount(IN PLARGE_INTEGER TickCount)
UCHAR AdditionalSenseCodeQualifier
#define STATUS_INVALID_BUFFER_SIZE
#define WNODE_FLAG_STATIC_INSTANCE_NAMES
BOOLEAN RtlTimeToTimeFields(IN PLARGE_INTEGER Time, IN PTIME_FIELDS TimeFields)
#define NUM_ERROR_LOG_ENTRIES
GUIDREGINFO wmiClassGuids[]
_Must_inspect_result_ _In_ ULONG Flags
#define IRP_MN_ENABLE_EVENTS
#define WNODE_FLAG_FIXED_INSTANCE_SIZE
CLASS_WMI_INFO ClassWmiInfo
#define NT_SUCCESS(StatCode)
NTSTRSAFEVAPI RtlStringCbPrintfW(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PWSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCWSTR pszFormat,...)
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
PCLASS_QUERY_WMI_REGINFO_EX ClassPdoQueryWmiRegInfoEx
BOOLEAN ClassFindInternalGuid(LPGUID Guid, PULONG GuidIndex)
#define ExAllocatePoolWithTag(hernya, size, tag)
PWCHAR ConvertTickToDateTime(IN LARGE_INTEGER Tick, _Out_writes_(TIME_STRING_LENGTH) PWCHAR String)
#define IRP_MN_DISABLE_EVENTS
PCLASS_DRIVER_EXTENSION DriverExtension
#define IRP_MN_EXECUTE_METHOD
_In_ PIRP _In_ ULONG _In_ ULONG BufferAvail
#define TRACE_LEVEL_WARNING
#define WMIREG_FLAG_INSTANCE_LIST
#define IRP_MN_CHANGE_SINGLE_INSTANCE
__drv_aliasesMem FORCEINLINE PIO_STACK_LOCATION IoGetCurrentIrpStackLocation(_In_ PIRP Irp)
UCHAR SenseInfoBufferLength
PCLASS_SET_WMI_DATAITEM ClassSetWmiDataItem
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
SCSIPORT_API NTSTATUS NTAPI ClassWmiCompleteRequest(_In_ PDEVICE_OBJECT DeviceObject, _Inout_ PIRP Irp, _In_ NTSTATUS Status, _In_ ULONG BufferUsed, _In_ CCHAR PriorityBoost)
struct _WNODE_HEADER WnodeHeader
#define IRP_MN_QUERY_ALL_DATA
BOOL WINAPI IsEqualGUID(REFGUID rguid1, REFGUID rguid2)
PDEVICE_OBJECT LowerDeviceObject
NTSTATUS NTAPI IoCallDriver(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSTATUS NTAPI IoWMIWriteEvent(_Inout_ PVOID WnodeEventItem)
#define IoSkipCurrentIrpStackLocation(Irp)
NTSTATUS NTAPI ClassSystemControl(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define RtlZeroMemory(Destination, Length)
UCHAR AdditionalSenseLength
struct _WNODE_HEADER WnodeHeader
#define RtlCopyMemory(Destination, Source, Length)
PCLASS_EXECUTE_WMI_METHOD ClassExecuteWmiMethod
struct _WNODE_HEADER WnodeHeader
UCHAR AdditionalSenseCode
struct _NAMED_PIPE_CREATE_PARAMETERS * Parameters
#define IoWMIDeviceObjectToProviderId(DeviceObject)
VOID NTAPI ClassCompleteRequest(_In_ PDEVICE_OBJECT DeviceObject, _In_ PIRP Irp, _In_ CCHAR PriorityBoost)
static SERVICE_STATUS status
PCLASS_WMI_FUNCTION_CONTROL ClassWmiFunctionControl
CLASS_ERROR_LOG_DATA ErrorLogs[NUM_ERROR_LOG_ENTRIES]
#define WNODE_FLAG_TOO_SMALL
#define TIME_STRING_LENGTH
PCLASS_QUERY_WMI_REGINFO ClassQueryWmiRegInfo
#define WNODE_FLAG_SINGLE_INSTANCE
#define _In_reads_bytes_(size)
#define _Out_writes_(size)
GLuint const GLchar * name