Вызов функции SetupDiGetDeviceInterfaceDetail, который нормально работает в Windows'98 — Windows 2003 (32-bit) возвращает ошибку 1784 ERROR_INVALID_USER_BUFFER — The supplied user buffer is not valid for the requested operation.
Предварительный вызов SetupDiEnumDeviceInterfaces проходит успешно.
Исходники были перекомпилированы в Visual Studio 2005 с использованием библиотек для AMD64 (Поддержка x64 для Visual Studio включена).
Кто-нибудь сталкивался с подобной проблемой? И если да, то как ее решил.
Re: SetupDiGetDeviceInterfaceDetail в Windows 2003 64-bit
Using the SetupDiGetDeviceInterfaceDetail function to get details about an interface is typically a two-step process:
1 Get the required buffer size. Call SetupDiGetDeviceInterfaceDetail with a NULL DeviceInterfaceDetailData pointer, a DeviceInterfaceDetailDataSize of zero, and a valid RequiredSize parameter. In response to such a call, this function fails, GetLastError returns ERROR_INSUFFICIENT_BUFFER, and the RequiredSize parameter receives the required buffer size.
2 Allocate an appropriately sized buffer and call the function again to get the interface details.
Re[2]: SetupDiGetDeviceInterfaceDetail в Windows 2003 64-bit
Здравствуйте, g_i, Вы писали:
g_i>Здравствуйте, Слава_2, Вы писали:
А... оно не про то. Поспешил. )
Re: SetupDiGetDeviceInterfaceDetail в Windows 2003 64-bit
От:
Аноним
Дата:
30.05.07 13:14
Оценка:
Здравствуйте, Слава_2, Вы писали:
С_>Вызов функции SetupDiGetDeviceInterfaceDetail, который нормально работает в Windows'98 — Windows 2003 (32-bit) возвращает ошибку 1784 ERROR_INVALID_USER_BUFFER — The supplied user buffer is not valid for the requested operation. С_>Предварительный вызов SetupDiEnumDeviceInterfaces проходит успешно.
С_>struct _TDetailedData С_>{ С_> DWORD cbSize; С_> char DevicePath[260]; С_>}TDetailedData; С_> TDetailedData DetailedData;
А зачем так? Почему не использовать структуру, описанную в setupapi.h?
С_> DetailedData.cbSize = 5;
И вот это жутковато выглядит. Оно что зовет, в итоге, юникодный вариант или ансишный (SetupDiGetDeviceInterfaceDetail)?
С_> if( С_> SetupDiGetDeviceInterfaceDetail(PnPHandle, &DeviceInterfaceData, С_> PSP_INTERFACE_DEVICE_DETAIL_DATA(&DetailedData), С_> sizeof(DWORD)+sizeof(DetailedData), NULL, 0) С_> )
С_>Исходники были перекомпилированы в Visual Studio 2005 с использованием библиотек для AMD64 (Поддержка x64 для Visual Studio включена). С_>Кто-нибудь сталкивался с подобной проблемой? И если да, то как ее решил.
Re[2]: SetupDiGetDeviceInterfaceDetail в Windows 2003 64-bit
Спасибо, MSDN у меня есть .
Обратите внимание на то, что в 4 основных версиях Windows (32-bits) код работает. Кроме того, не обязательно вызывать функцию SetupDiGetDeviceInterfaceDetail дважды, строковый идентификатор устройства не будет слишком большим в SP_DEVICE_INTERFACE_DETAIL_DATA.
Я попробовал поискать ответ на англоязычных форумах. Наткнулся только лишь на похожее описание проблемы, оставшееся без ответа.
И даже с рекомендациями MSDN результат тот же самый (даже перекомпилировал под UNICODE и убеждался, что ошибка та же):