Доступ к структурной переменной двойной указатель - PullRequest
0 голосов
/ 18 января 2010

Код:

typedef struct _WDF_USB_DEVICE_SELECT_CONFIG_PARAMS { 
ULONG Size;
WdfUsbTargetDeviceSelectConfigType Type;
union {   
     struct {
     PUSB_CONFIGURATION_DESCRIPTOR  ConfigurationDescriptor;
     PUSB_INTERFACE_DESCRIPTOR*  InterfaceDescriptors;
     ULONG NumInterfaceDescriptors;
     } Descriptor;

     struct {
     PURB  Urb;
     } Urb;
   } Types;

} WDF_USB_DEVICE_SELECT_CONFIG_PARAMS, * PWDF_USB_DEVICE_SELECT_CONFIG_PARAMS; WDF_USB_DEVICE_SELECT_CONFIG_PARAMS params;

typedef struct _USB_INTERFACE_DESCRIPTOR {
UCHAR bLength ;
UCHAR bInterfaceClass ;
UCHAR bInterfaceSubClass ;
} USB_INTERFACE_DESCRIPTOR, *PUSB_INTERFACE_DESCRIPTOR ;

Возможность доступа к NumInterfaceDescriptors с помощью -> params.Types.Descriptor.NumInterfaceDescriptors

Я хочу получить доступ к bInterfaceClass через WDF_USB_DEVICE_SELECT_CONFIG_PARAMS. Обратите внимание, что эта структура заполнена библиотекой, мне нужно просто получить к ней доступ

Ответы [ 2 ]

2 голосов
/ 18 января 2010

Это кажется , что вы хотите:

ULONG iface;

for (iface = 0; iface < params.Types.Descriptor.NumInterfaceDescriptors; iface++)
{
    do_something_with(params.Types.Descriptor.InterfaceDescriptors[iface]);
}

.. но вы действительно должны уделить больше времени разъяснению своих вопросов, чтобы людям не приходилось угадывать, что вы имеете в виду.

1 голос
/ 18 января 2010

Google для WDF_USB_DEVICE_SELECT_CONFIG_PARAMS.Первое нажатие приводит вас к соответствующей странице MSDN, которая сообщает вам, что Types.Descriptor.InterfaceDescriptors

содержит указатель драйвера для массива USB_INTERFACE_DESCRIPTOR структур

и что Types.Descriptor.NumInterfaceDescriptors действительно

содержит количество элементов , которые находятся в интерфейсе массив , которые Types.Descriptor.InterfaceDescriptors указывает на.

Ergo, ваш «указатель на указатель» на самом деле является массивом указателей USB_INTERFACE_DESCRIPTOR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...