Windows에서 드라이버를 작성하고 사용자 드라이브 모드에서 디스크 드라이브 일련 번호가 필요합니다. this ansver입니다. 내 질문에 위의 코드를 커널 모드로 변환 할 수 있습니까? 필터 드라이버에서 WMI 쿼리를 사용할 수 있습니까? 샘플 코드가 크게 도움이 될 수 있습니다.필터 드라이버에서 디스크 드라이브 일련 번호를 얻으려면 어떻게해야합니까?
는 편집 :
나는 here이 코드를 찾았지만, 어떻게 일련 번호를 그를 다시?
void GetSmbios()
{
NTSTATUS status;
GUID smbiosGUID = SMBIOS_DATA_GUID; // defined in wmiguid.h
PVOID wmiObject = NULL;
PWNODE_ALL_DATA dataBuffer;
ULONG bufferSize;
int TAG_SMBIOS = 'smbi';
//
// Get a WMI block handle to the SMBIOS_DATA_GUID
//
status = IoWMIOpenBlock((GUID *)&smbiosGUID, WMIGUID_QUERY,
&wmiObject);
if (!NT_SUCCESS(status))
{
return status;
}
//
// Determine how much space is required for the data
//
status = IoWMIQueryAllData(wmiObject, &bufferSize, NULL);
if (status != STATUS_BUFFER_TOO_SMALL)
{
ObDereferenceObject(wmiObject);
return status;
}
//
// Allocate the necessary storage. This space must come out of NP-pool
//
dataBuffer = ExAllocatePoolWithTag(
NonPagedPool,
bufferSize,
TAG_SMBIOS);
if (dataBuffer == NULL)
{
ObDereferenceObject(wmiObject);
return STATUS_INSUFFICIENT_RESOURCES;
}
}
WMI, SMART_RCV_DRIVE_DATA, IOCTL_STORAGE_QUERY_PROPERTY 또는 다른 것 : – asynchronos