benbenhuhu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1604回复:7

DeviceIoControl的问题

楼主#
更多 发布于:2005-03-11 17:15
我的程序如下
//fileio.c
#include \"fileio.h\"

NTSTATUS DeviceDispatch(PDEVICE_OBJECT pDeviceObject, PIRP pIrp)
{
NTSTATUS  ns = STATUS_SUCCESS;
ULONG info = 0;

PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(pIrp);

switch (stack->MajorFunction)
{
case IRP_MJ_CREATE:
    //case IRP_MJ_CLEANUP:
   // case IRP_MJ_CLOSE:
// {
   //         ns = STATUS_SUCCESS;
   //         break;
  //      }
    case IRP_MJ_DEVICE_CONTROL:
        {
SPY_CPU_INFO  sci;
            PSPY_CPU_INFO psci = &sci;

            __asm
{
push    eax
                push    ebx
                mov     ebx, psci

                mov     eax, cr0
                mov     [ebx.cr0], eax
        
                pop     ebx
                pop     eax
}
RtlCopyMemory(pIrp->AssociatedIrp.SystemBuffer,
         &sci,
 stack->Parameters.DeviceIoControl.OutputBufferLength = SPY_CPU_INFO_);
break;

}
}
pIrp->IoStatus.Status      = ns;
    pIrp->IoStatus.Information = SPY_CPU_INFO_;

    IoCompleteRequest (pIrp, IO_NO_INCREMENT);
    return ns;
}


NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING pRegisterPath)
{
NTSTATUS status;
UNICODE_STRING devname;
PDEVICE_OBJECT fdo;

RtlInitUnicodeString(&devname, L\"\\\\Device\\\\fileio\");

pDriverObject->MajorFunction[IRP_MJ_CREATE] =
pDriverObject->MajorFunction[IRP_MJ_CLOSE]  =
    pDriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DeviceDispatch;

    status = IoCreateDevice(pDriverObject, 0, &devname,
                   FILE_DEVICE_SPY,
FILE_DEVICE_SECURE_OPEN,
FALSE, &fdo);

if(!NT_SUCCESS(status))
{
KdPrint((\"IoCreateDevice failed - %X\\n\", status));
return status;
}

return STATUS_SUCCESS;
}

//test.c
#include <stdio.h>
#include \"test.h\"


BOOL WINAPI IoControl (HANDLE hDevice,
                       DWORD  dCode,
                       PVOID  pInput,
                       DWORD  dInput,
                       PVOID  pOutput,
                       DWORD  dOutput)
{
    DWORD junk;
if (DeviceIoControl(hDevice, dCode, pInput, dInput, pOutput, dOutput, &junk, NULL))
{
return true;
}
else
printf(\"Error %d in call to DeviceIoControl\\n\", GetLastError());

    CloseHandle(hDevice);
return true;    
  
}


BOOL WINAPI ReadCpuInfo (HANDLE hDevice, PSPY_CPU_INFO psci)
{
    return IoControl (hDevice, IOCTL_READ_FILE,
                      NULL,    0,
                      psci,    SPY_CPU_INFO_);
}

int main()
{
    SPY_CPU_INFO sci;
DWORD th = 0 ;
char path[MAX_PATH];
char *temp = 0;
// BOOL result;
GetFullPathName(\"fileio.sys\", sizeof(path), path, &temp);
HANDLE hdevice = CreateFile(path, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE,
                                NULL, OPEN_EXISTING,
                                FILE_ATTRIBUTE_NORMAL, NULL);
if (hdevice == INVALID_HANDLE_VALUE)
{
printf(\"Unable to open FILEIO device - error %d\\n\", GetLastError());
return 1;
}

    ReadCpuInfo (hdevice, &sci);
//result = DeviceIoControl(hdevice, IOCTL_READ_FILE,
     //                 NULL,    0,
     //                 &sci,    SPY_CPU_INFO_, &th, NULL);
printf(\"%x\\n\", sci.cr0);
   return true;
}
为什么调用DeviceIoControl时,总提示参数错误,可我检查了
没有问题呀?


附件名称/大小 下载次数 最后更新
2005-03-11_新建文件夹.rar (2KB)  3
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
沙发#
发布于:2005-03-11 21:34
你没有创建SYMBOLIC吗??你是如何CREATEFILE的??
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
tiamo
VIP专家组
VIP专家组
  • 注册日期2002-02-26
  • 最后登录2018-01-09
  • 粉丝17
  • 关注4
  • 积分50分
  • 威望142点
  • 贡献值1点
  • 好评度40点
  • 原创分2分
  • 专家分15分
  • 原创先锋奖
  • 社区居民
板凳#
发布于:2005-03-11 21:53
Createfile的第一个参数不对

查看msdn看看打开一个device是一个什么样子的参数
你这样调用打开的不是device而是那个文件

而且如同wowocock说的
你都没有创建符号链接
bmyyyud
驱动老牛
驱动老牛
  • 注册日期2002-02-22
  • 最后登录2010-01-21
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望130点
  • 贡献值0点
  • 好评度106点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-03-12 08:49
看这个帖子
http://www.driverdevelop.com/forum/html_88325.html?1110588537
滚滚长江东逝水 浪花淘尽英雄 是非成败转头空 青山依旧在 几度夕阳红 白发渔樵江渚上 惯看秋月春风 一壶浊酒喜相逢 古今多少事 尽付笑谈中
benbenhuhu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-03-13 12:31
我RtlInitUnicodeString(&devname, L\"\\\\Device\\\\fileio\");
    RtlInitUnicodeString(&sldevname, L\"\\\\Device\\\\slfileio\");

IoCreateSymbolicLink(&sldevname, &devname);
后,在执行device.inf文件,出现
Error2,UpdateDeviceForPlugAndPlayDevices:系统找不道指定的
文件,这又是为什么呢?
benbenhuhu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-03-13 12:35
我的device.inf 如下
[Version]
Signature=$CHICAGO$
Class=Sample
ClassGuid={894A7460-A033-11d2-821E-444553540000}
Provider=%MFGNAME%

[Manufacturer]
%MFGNAME%=DeviceList

[DestinationDirs]
DefaultDestDir=10,System32\\Drivers

[SourceDisksFiles]
fileio.sys=1

[SourceDisksNames]
1=%INSTDISK%,,,objchk\\i386

[DeviceList]
%DESCRIPTION%=DriverInstall,*WCO0904

;------------------------------------------------------------------------------
;  Windows 2000 Sections
;------------------------------------------------------------------------------

[DriverInstall.NT]
CopyFiles=DriverCopyFiles

[DriverCopyFiles]
fileio.sys,,,2

[DriverInstall.NT.Services]
AddService=fileio,2,DriverService

[DriverService]
ServiceType=1
StartType=3
ErrorControl=1
ServiceBinary=%10%\\system32\\drivers\\fileio.sys

[DriverInstall.nt.hw]
AddReg=DriverHwAddReg


;------------------------------------------------------------------------------
;  Windows 98 Sections
;------------------------------------------------------------------------------

[DriverInstall]
AddReg=DriverAddReg
CopyFiles=DriverCopyFiles

[DriverAddReg]
HKR,,DevLoader,,*ntkern
HKR,,NTMPDriver,,fileio.sys

[DriverInstall.hw]
AddReg=DriverHwAddReg

;------------------------------------------------------------------------------
;  String Definitions
;------------------------------------------------------------------------------

[Strings]
MFGNAME=\"Walter Oney Software\"
INSTDISK=\"WDM Book Companion Disc\"
DESCRIPTION=\"fileio Sample Device\"

benbenhuhu
驱动牛犊
驱动牛犊
  • 注册日期2004-01-05
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分2分
  • 威望1点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-03-16 17:32
终于解决了,谢谢各位
a0041059a
驱动小牛
驱动小牛
  • 注册日期2005-05-09
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分46分
  • 威望6点
  • 贡献值0点
  • 好评度4点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-05-09 20:13
ok
游客

返回顶部