kabunhi
驱动牛犊
驱动牛犊
  • 注册日期2007-06-27
  • 最后登录2016-01-09
  • 粉丝1
  • 关注0
  • 积分461分
  • 威望57点
  • 贡献值0点
  • 好评度46点
  • 原创分0分
  • 专家分0分
阅读:1547回复:1

DeviceIoControl怎么用

楼主#
更多 发布于:2007-07-03 16:11
驱动动态加载后,怎么用DeviceIoControl访问disk
wanfustudio
驱动牛犊
驱动牛犊
  • 注册日期2006-08-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分720分
  • 威望73点
  • 贡献值0点
  • 好评度72点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2007-07-03 21:05
随便找个驱动应用层代码都会写
              printf("\tAttaching to %s\n", parm);
                bufferLength = MultiByteToWideChar( CP_ACP,
                                                    MB_ERR_INVALID_CHARS,
                                                    parm,
                                                    -1,
                                                    (LPWSTR)buffer,
                                                    BUFFER_SIZE/sizeof(WCHAR) );

                bResult = DeviceIoControl( Context->Device,
                                           FILESPY_StartLoggingDevice,
                                           buffer,
                                           bufferLength * sizeof(WCHAR),
                                           NULL,
                                           0,
                                           &bytesReturned,
                                           NULL );
                if (!bResult) {

                    result = GetLastError();
                    printf( "ERROR attaching to device...\n" );
                    DisplayError( result );
                }








//============

//driver
       case FILESPY_StartLoggingDevice:

            if (InputBuffer == NULL || InputBufferLength <= 0) {

                IoStatus->Status = STATUS_INVALID_PARAMETER;
                break;
            }
          
            //
            //  Copy the device name and add a null to ensure that it is null
            //  terminated
            //

            deviceName =  ExAllocatePoolWithTag( NonPagedPool,
                                                 InputBufferLength + sizeof(WCHAR),
                                                 FILESPY_POOL_TAG );

            if (NULL == deviceName) {

                IoStatus->Status = STATUS_INSUFFICIENT_RESOURCES;
                break;
            }

            try {

                RtlCopyMemory( deviceName, InputBuffer, InputBufferLength );

            } except (EXCEPTION_EXECUTE_HANDLER) {

                IoStatus->Status = GetExceptionCode();
            }

            if (NT_SUCCESS( IoStatus->Status )) {

                deviceName[InputBufferLength / sizeof(WCHAR)] = UNICODE_NULL;
                IoStatus->Status = SpyStartLoggingDevice( deviceName );
            }
            break;
游客

返回顶部