wang_bml
驱动牛犊
驱动牛犊
  • 注册日期2004-05-27
  • 最后登录2011-12-21
  • 粉丝0
  • 关注0
  • 积分131分
  • 威望24点
  • 贡献值0点
  • 好评度14点
  • 原创分0分
  • 专家分0分
阅读:1147回复:3

DeviceIoControl问题

楼主#
更多 发布于:2007-08-29 16:03
驱动:
RtlInitUnicodeString(&FilDevName,L"\\Device\\TdiFilter");
RtlInitUnicodeString(&FilDevLink,L"\\DosDevices\\TdiFilter");
//Create Device
status = IoCreateDevice(pDriObj,0,NULL,FILE_DEVICE_UNKNOWN,0,TRUE,&g_DevObj);
//Create SymbolicLink
status = IoCreateSymbolicLink(&FilDevLink,&FilDevName);
应用程序:
hFile = CreateFile("\\\\.\\TdiFilter",GENERIC_READ | GENERIC_WRITE,FILE_SHARE_READ | FILE_SHARE_WRITE,NULL,OPEN_EXISTING,0,NULL);
怎么hFIle总是INVALID_HANDLE_VALUE
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2007-08-30 11:25
你在驱动里面要处理CDO的CREATE,CLOSE,CLEANUP函数
boywhp
驱动中牛
驱动中牛
  • 注册日期2007-08-09
  • 最后登录2015-04-24
  • 粉丝2
  • 关注0
  • 积分1105分
  • 威望515点
  • 贡献值0点
  • 好评度254点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2007-08-30 11:27
DriverEntry
{
  。。。
             DriverObject->MajorFunction[IRP_MJ_CREATE] = FsDeviceCreate;
    DriverObject->MajorFunction[IRP_MJ_CLOSE] = FsDeviceClose;
    DriverObject->MajorFunction[IRP_MJ_CLEANUP] = FsDeviceClose;
}

NTSTATUS
FsDeviceCreate(IN PDEVICE_OBJECT DeviceObject,
               IN PIRP Irp)
{
    PIO_STACK_LOCATION irpStack = IoGetCurrentIrpStackLocation (Irp);
    if (g_CDO == DeviceObject)
    {
        KdPrint(("CDO Created!\n"));
        Irp->IoStatus.Information = 0;
        Irp->IoStatus.Status = STATUS_SUCCESS;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
        return STATUS_SUCCESS;
    }
    return SfPassThrough(DeviceObject, Irp);
}

NTSTATUS
FsDeviceClose(IN PDEVICE_OBJECT DeviceObject,
              IN PIRP Irp)
{
    if (g_CDO == DeviceObject)
    {
        KdPrint(("CDO Closed!\n"));
        Irp->IoStatus.Information = 0;
        Irp->IoStatus.Status = STATUS_SUCCESS;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
        return STATUS_SUCCESS;
    }
    return SfPassThrough(DeviceObject, Irp);
}
NTSTATUS
SfPassThrough(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
{
    PIO_STACK_LOCATION irpSp = IoGetCurrentIrpStackLocation(Irp);
    //不处理
    //ASSERT(IS_MY_DEVICE_OBJECT(DeviceObject));
    if (g_CDO == DeviceObject)
    {
        KdPrint((("ERROR CDO:[%08x]\n"), irpSp->MajorFunction, irpSp->MinorFunction));
        //_asm int 3;
        Irp->IoStatus.Status = STATUS_INVALID_DEVICE_REQUEST;
        Irp->IoStatus.Information = 0;
        IoCompleteRequest(Irp, IO_NO_INCREMENT);
        return STATUS_INVALID_DEVICE_REQUEST;
    }
    IoSkipCurrentIrpStackLocation(Irp);
    return IoCallDriver(((PDEVICE_EXTENSION)DeviceObject->DeviceExtension)->AttachedToDevice, Irp);
}
zhangleierli
驱动小牛
驱动小牛
  • 注册日期2007-01-31
  • 最后登录2017-05-24
  • 粉丝1
  • 关注0
  • 积分3分
  • 威望158点
  • 贡献值0点
  • 好评度146点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2007-08-30 17:23
RtlInitUnicodeString(&FilDevLink,L"\\DosDevices\\TdiFilter");这句改成RtlInitUnicodeString(&FilDevLink,L"\\??\\TdiFilter"); 再试试
游客

返回顶部