开发USB HID的源码,调用SetupDiGetDeviceInterfaceDetail疏失

开发USB HID的源码,调用SetupDiGetDeviceInterfaceDetail出错?
    调用第一次SetupDiGetDeviceInterfaceDetail出错,返回122.这没有问题.可是为何第二次调用怎么还是出现1784-提供给请求操作的用户缓冲区无效呢.
    我网上查阅的大量例子,发现我的程序是没有问题的啊,请高手帮忙看一下呢



private: // User declarations

DWORD       ActualBytesRead;
DWORD       BytesRead;
HIDP_CAPS          Capabilities;
DWORD       cbBytesRead;
PSP_DEVICE_INTERFACE_DETAIL_DATA detailData;
HANDLE    DeviceHandle;
DWORD       dwError;
HANDLE    hEventObject;
HANDLE    hDevInfo;
GUID       HidGuid;
OVERLAPPED    HIDOverlapped;
ULONG       Length;
        DWORD                            RequiredSize; //add
LPOVERLAPPED    lpOverLap;
bool MyDeviceDetected;
AnsiString    MyDevicePathName;  
DWORD       NumberOfBytesRead;
HANDLE    ReadHandle;
DWORD       ReportType;
ULONG       Required;
AnsiString ValueToDisplay;
HANDLE    WriteHandle;
char       InputReport[256];
char       OutputReport[256];

boolean TUSBHID::HidUsb_Conn(int VendorID,int ProductID)
{
HIDD_ATTRIBUTES Attributes;
   // DWORD DeviceUsage;
SP_DEVICE_INTERFACE_DATA devInfoData;
bool LastDevice = FALSE;
int MemberIndex = 0;
LONG Result;


char Buffer[256];

memset(Buffer,0,sizeof(Buffer));
memset(ManufacturerString,0,sizeof(ManufacturerString));
memset(ProductString,0,sizeof(ProductString));

Length = 0;
detailData = NULL;
DeviceHandle=NULL;

//获取HID GUID
  HidD_GetHidGuid(&HidGuid);
//获取指定类的设备
hDevInfo=SetupDiGetClassDevs 
(&HidGuid, 
NULL, 
NULL, 
DIGCF_PRESENT|DIGCF_DEVICEINTERFACE);

devInfoData.cbSize = sizeof(devInfoData);

MemberIndex = 0;
LastDevice = FALSE;

do
{