zhoutinge
驱动牛犊
驱动牛犊
  • 注册日期2003-03-29
  • 最后登录2004-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:917回复:3

大侠,help me! createfile的问题

楼主#
更多 发布于:2003-05-15 20:33
我用的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;
}
AthlonXP
驱动小牛
驱动小牛
  • 注册日期2003-05-11
  • 最后登录2010-01-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-05-16 12:33
你的OpenDriver就是《WINDOWS WDM设备驱动程序开发指南》里面的GetDeviceViaInterface吧,如果这样的话这个函数就没问题了

你在AddDevice里是否用IoRegisterDeviceInterface正确注册了设备接口?

[编辑 -  5/16/03 by  AthlonXP]
AthlonXP是个好人,他一生没有欺压过同侪,没有背叛过朋友。从小到大,他都是个好孩子,没有出过什么差错,没有让家人师长担过心。虽然用一句时髦的话,他不善于"推销"自己,但是做学问扎扎实实,不会投机取巧;做工作也是一步一个脚印,不会敷衍塞责。他虽然是个大烟枪,偶尔也喝喝酒,但是没有什么见不得人的恶习。他花钱虽然不特别大方,可是也不吝啬。许多不如他的人,或幸或不幸,一般的也都成了家。可是为什么MM不喜欢他呢??
zhoutinge
驱动牛犊
驱动牛犊
  • 注册日期2003-03-29
  • 最后登录2004-03-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-05-16 15:04
当然用了,没用的话早在SetupDiEnumDeviceInterfaces那一步都通不过了

没用人知道么,好凄惨啊~~又得忍受唐僧老板鸡婆一天了
AthlonXP
驱动小牛
驱动小牛
  • 注册日期2003-05-11
  • 最后登录2010-01-20
  • 粉丝0
  • 关注0
  • 积分10分
  • 威望1点
  • 贡献值0点
  • 好评度1点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-05-16 20:09
我的都是好好的啊,要不你把代码email我看看
AthlonXP是个好人,他一生没有欺压过同侪,没有背叛过朋友。从小到大,他都是个好孩子,没有出过什么差错,没有让家人师长担过心。虽然用一句时髦的话,他不善于"推销"自己,但是做学问扎扎实实,不会投机取巧;做工作也是一步一个脚印,不会敷衍塞责。他虽然是个大烟枪,偶尔也喝喝酒,但是没有什么见不得人的恶习。他花钱虽然不特别大方,可是也不吝啬。许多不如他的人,或幸或不幸,一般的也都成了家。可是为什么MM不喜欢他呢??
游客

返回顶部