阅读:917回复:3
大侠,help me! createfile的问题
我用的guid方式得到createfile的第一个参数,和注册表中对照了一下,完全相同。但就是返回句柄0xffffffff,用getlasterro返回值是1(不正确的函数)???
怎么回事阿? 另外负上我的createfile函数以及驱动中的dispatchcreate。HANDLE OpenDriver(DWORD instance) { HANDLE hDriver; hDriver=0; LPGUID pGuid=(LPGUID)&Control_GUID; DWORD ERRO; HDEVINFO info = SetupDiGetClassDevs(pGuid, NULL, NULL, DIGCF_PRESENT | DIGCF_INTERFACEDEVICE); if(info==INVALID_HANDLE_VALUE) { hDriver=NULL; return hDriver; } SP_DEVICE_INTERFACE_DATA ifdata; ifdata.cbSize = sizeof(ifdata); if(!SetupDiEnumDeviceInterfaces(info, NULL, pGuid, instance, &ifdata)) { ERRO=GetLastError(); SetupDiDestroyDeviceInfoList(info); hDriver=NULL; return hDriver; } DWORD ReqLen; SetupDiGetDeviceInterfaceDetail(info, &ifdata, NULL, 0, &ReqLen, NULL); PSP_DEVICE_INTERFACE_DETAIL_DATA ifDetail = (PSP_INTERFACE_DEVICE_DETAIL_DATA)(new char[ReqLen]); if( ifDetail==NULL) { SetupDiDestroyDeviceInfoList(info); hDriver=NULL; return hDriver; } ifDetail->cbSize = sizeof(SP_INTERFACE_DEVICE_DETAIL_DATA); if( !SetupDiGetDeviceInterfaceDetail(info, &ifdata, ifDetail, ReqLen, NULL, NULL)) { SetupDiDestroyDeviceInfoList(info); delete ifDetail; hDriver=NULL; return hDriver; } hDriver = CreateFile( ifDetail->DevicePath, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if(hDriver==INVALID_HANDLE_VALUE) { ERRO=GetLastError(); hDriver = NULL; delete ifDetail; SetupDiDestroyDeviceInfoList(info); return hDriver; } delete ifDetail; SetupDiDestroyDeviceInfoList(info); return hDriver; } 下面是dispatchcreate,很简单 NTSTATUS DispatchCreate(IN PDEVICE_OBJECT fdo, IN PIRP Irp) { PAGED_CODE(); DebugPrintMsg(\"Entry Cerate Dispatch Section!\");//Debug NTSTATUS status=STATUS_SUCCESS; PIO_STACK_LOCATION stack=IoGetCurrentIrpStackLocation(Irp); DebugPrint(\"Create File Name is %T\", &(stack->FileObject->FileName));//Debug Irp->IoStatus.Status=status; Irp->IoStatus.Information=0; IoCompleteRequest(Irp,IO_NO_INCREMENT); return status; } |
|
沙发#
发布于:2003-05-16 12:33
你的OpenDriver就是《WINDOWS WDM设备驱动程序开发指南》里面的GetDeviceViaInterface吧,如果这样的话这个函数就没问题了
你在AddDevice里是否用IoRegisterDeviceInterface正确注册了设备接口? [编辑 - 5/16/03 by AthlonXP] |
|
|
板凳#
发布于:2003-05-16 15:04
当然用了,没用的话早在SetupDiEnumDeviceInterfaces那一步都通不过了
没用人知道么,好凄惨啊~~又得忍受唐僧老板鸡婆一天了 |
|
地板#
发布于:2003-05-16 20:09
我的都是好好的啊,要不你把代码email我看看
|
|
|