assert&chuip
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2008-06-02
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1562回复:5

关于和FILEDISK的通讯

楼主#
更多 发布于:2003-06-10 09:39
HI:
我想在应用程序传递一串数据给虚拟硬盘的驱动程序,虚拟硬盘把这串数据作为密钥,不知如何实现?

最新喜欢:

aovi2002aovi20...
else
驱动小牛
驱动小牛
  • 注册日期2002-10-21
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-10 13:10
DeviceIoControl
The DeviceIoControl function sends a control code directly to a specified device driver, causing the corresponding device to perform the corresponding operation.

BOOL DeviceIoControl(
  HANDLE hDevice,              // handle to device
  DWORD dwIoControlCode,       // operation
  LPVOID lpInBuffer,           // input data buffer
  DWORD nInBufferSize,         // size of input data buffer
  LPVOID lpOutBuffer,          // output data buffer
  DWORD nOutBufferSize,        // size of output data buffer
  LPDWORD lpBytesReturned,     // byte count
  LPOVERLAPPED lpOverlapped    // overlapped information
);

这种问题还用问吗?
assert&chuip
驱动牛犊
驱动牛犊
  • 注册日期2003-02-19
  • 最后登录2008-06-02
  • 粉丝0
  • 关注0
  • 积分48分
  • 威望9点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2003-06-11 09:06
else:
   我是知道用DeviceIoControl(),但是我不知道HANDLE是什么。在FILEDISK的驱动中他的HANDLE怎么得到。想用CreatFile(),但是不知道他的DEVICENAME,DEVICENAME是他的盘符名吗?

  还有在驱动中我想保存从应用层传入的数据,是不是要设全局变量!
  else,你有我的email,能否给我举例说明一下。我是个新手!不胜感激!
  
else
驱动小牛
驱动小牛
  • 注册日期2002-10-21
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2003-06-11 09:49
    Device = CreateFile(
        VolumeName,
        GENERIC_READ | GENERIC_WRITE,
        FILE_SHARE_READ | FILE_SHARE_WRITE,
        NULL,
        OPEN_EXISTING,
        FILE_FLAG_NO_BUFFERING,
        NULL
        );

    if (Device == INVALID_HANDLE_VALUE)
    {
        PrintLastError(&VolumeName[4]);
        DefineDosDevice(DDD_REMOVE_DEFINITION, &VolumeName[4], NULL);
        return -1;
    }

    if (!DeviceIoControl(
        Device,
        IOCTL_FILE_DISK_OPEN_FILE,
        OpenFileInformation,
        sizeof(OPEN_FILE_INFORMATION) + OpenFileInformation->FileNameLength - 1,
        NULL,
        0,
        &BytesReturned,
        NULL
        ))
    {
        PrintLastError(\"FileDisk:\");
        DefineDosDevice(DDD_REMOVE_DEFINITION, &VolumeName[4], NULL);
        return -1;
    }

你按照这样作就可以了,可以用全局变量保存数据,如果这个数据会在不同的线程里面改变,你就要用一个锁
jry9524
驱动牛犊
驱动牛犊
  • 注册日期2002-01-10
  • 最后登录2005-03-04
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2003-06-11 20:17
Else:
   我也在做这方面的东西!在CreatFile()中,VolumName是盘符名称啊,他可以做设备名吗?他能打开虚拟硬盘的驱动吗?
   即使用盘符做设备名可以,那虚拟硬盘的盘符不就固定了吗?ELSE,能否说的详细一点!
Beyon
else
驱动小牛
驱动小牛
  • 注册日期2002-10-21
  • 最后登录2004-06-12
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2003-06-12 10:59
VolumName是一个到\\\\Device\\\\FileDisk符号连接当然可以打开了。

如果想不固定盘符,你在驱动里面创建一个符号连接就可以了
游客

返回顶部