私はWindowsにドライバを書いていますが、ディスクドライブのシリアル番号が必要です。ユーザモードでは、this ansverが見つかりました。 私の質問は、上記のコードをカーネルモードに変換することは可能ですか? WMIクエリはフィルタドライバで使用できますか?サンプルコードは大いに役立ちます。フィルタドライバでディスクドライブのシリアル番号を取得するにはどうすればよいですか?
EDIT:
私はこのコード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