IoGetDeviceInterfaces успешно возвращает пустой список имен
DEFINE_GUID(GUID_MEDIA_DEVINTERFACE, 0x4d36e96c, 0xe325, 0x11ce, 0xbf, 0xc1, 0x08, 0x00, 0x2b, 0xe1, 0x03, 0x18);
//---
PAGED_CODE();
WDF_IO_TARGET_OPEN_PARAMS openParams;
UNICODE_STRING uniName_read;
NTSTATUS ntStatus = STATUS_INVALID_PARAMETER;
PFILE_OBJECT* pRealAudioFileObject = NULL;
PDEVICE_OBJECT* pRealAudioDeviceObject = NULL;
PZZWSTR symbolicLinkList = NULL;
UNICODE_STRING uniAudioDeviceName;
RtlInitUnicodeString(&uniName_read, L"\\Device\\00000020");
ntStatus = IoGetDeviceObjectPointer( // this one fails should it matter (0xc0000034 - STATUS_OBJECT_NAME_NOT_FOUND)
&uniName_read,
FILE_READ_DATA,
pRealAudioFileObject,
pRealAudioDeviceObject);
ntStatus = IoGetDeviceInterfaces(
&GUID_MEDIA_DEVINTERFACE,
NT_SUCCESS(ntStatus) ? *pRealAudioDeviceObject : NULL,
DEVICE_INTERFACE_INCLUDE_NONACTIVE,
&symbolicLinkList
);
if (!NT_SUCCESS(ntStatus))
goto error;
symbolicLinkList
возвращается пустой... почему?
Я использую виртуальную машину Virtualbox Win10, а \Device\00000020 - это свойство имени объекта физического устройства для аудиодрайвера. Также я трижды проверил, что
GUID_MEDIA_DEVINTERFACE
на самом деле это GUID класса медиа-интерфейса.