lichun198359
驱动牛犊
驱动牛犊
  • 注册日期2007-12-20
  • 最后登录2008-01-05
  • 粉丝0
  • 关注0
  • 积分60分
  • 威望7点
  • 贡献值0点
  • 好评度6点
  • 原创分0分
  • 专家分0分
阅读:1427回复:1

菜鸟请教问题

楼主#
更多 发布于:2008-01-03 00:05
我写了如下驱动:
VOID MySysUnload(IN PDRIVER_OBJECT pDrvObj )
{
    PDEVICE_OBJECT pDevObj;
    PDEVICE_EXTENSION pExt;
    pDevObj=pDrvObj->DeviceObject;
        if(pDevObj!=NULL)
    {
    pExt=(PDEVICE_EXTENSION)pDevObj->DeviceExtension;
    IoDeleteSymbolicLink(&pExt->userDevName);
    IoDeleteDevice(pDevObj);
    }    
}

NTSTATUS MySysCreate(IN PDEVICE_OBJECT pDevObj,IN PIRP pIrp)
{
    pIrp->IoStatus.Status=STATUS_SUCCESS;
    pIrp->IoStatus.Information=0;
    IoCompleteRequest(pIrp,IO_NO_INCREMENT);
    return STATUS_SUCCESS;
}



NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDrvObj,IN PUNICODE_STRING  pUnicodeString)
{
    NTSTATUS ntStatus;
    PDEVICE_OBJECT          guiDevice;
    WCHAR                   deviceNameBuffer[]  = L"\\Device\\DemoMyDriver";
    UNICODE_STRING          deviceNameUnicodeString;
    WCHAR                   deviceLinkBuffer[]  = L"\\DosDevices\\DemoMyDriver";
    UNICODE_STRING          deviceLinkUnicodeString;
    PDEVICE_EXTENSION pExt;

    RtlInitUnicodeString(&deviceNameUnicodeString,deviceNameBuffer);
    ntStatus=IoCreateDevice(pDrvObj,
                                                    sizeof(DEVICE_EXTENSION),
                                                    &deviceNameUnicodeString,
                                                    FILE_DEVICE_FILE_SYSTEM ,FILE_DEVICE_SECURE_OPEN,
                                                    FALSE,
                                                    &guiDevice);
    if(!NT_SUCCESS(ntStatus))
    {
                IoDeleteDevice(guiDevice);
        return ntStatus;
    }
    pExt=guiDevice->DeviceExtension;
        RtlInitUnicodeString (&deviceLinkUnicodeString,deviceLinkBuffer );
        ntStatus = IoCreateSymbolicLink (&deviceLinkUnicodeString,&deviceNameUnicodeString);
        if(!NT_SUCCESS(ntStatus))
        {
            IoDeleteDevice(guiDevice);
            return ntStatus;
        }
        pExt->userDevName=deviceLinkUnicodeString;
        pDrvObj->MajorFunction[IRP_MJ_CREATE]=MySysCreate;
         pDrvObj->DriverUnload=MySysUnload;
        return STATUS_SUCCESS;    
}

然后编写了一个应用程序,在程序中调用createservice( ),startservice( )等函数创建该驱动
schService = CreateService( scManager,"MyDriverSys","MyDriverSys",
            SERVICE_ALL_ACCESS|SC_MANAGER_CREATE_SERVICE ,    // desired access
            SERVICE_KERNEL_DRIVER, // service type
            SERVICE_DEMAND_START,  // start type
            SERVICE_ERROR_NORMAL,  // error control type
            "D:\\MyDriver\\MyDriver.sys",            // service's binary
            NULL,                  // no load ordering group
            NULL,                  // no tag identifier
            NULL,                  // no dependencies
            NULL,                  // LocalSystem account
            NULL                   // no password
            );

运行之后能在设备管理器中看的名为"MyDriver"的设备,但就是不能用createFile( )函数打开该驱动,参数为“DemoMyDriver”和“MyDriverSys”我都试过,返回值都是无效句柄
恳请大虾赐教!
michaelgz
论坛版主
论坛版主
  • 注册日期2005-01-26
  • 最后登录2012-10-22
  • 粉丝1
  • 关注1
  • 积分150分
  • 威望1524点
  • 贡献值1点
  • 好评度213点
  • 原创分0分
  • 专家分2分
沙发#
发布于:2008-01-04 03:39
try "\\\\.\\DemoMyDriver"
游客

返回顶部