Zhujnt
驱动牛犊
驱动牛犊
  • 注册日期2004-02-16
  • 最后登录2004-05-26
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1406回复:0

!!!! FileDisk 中的问题 !!!!

楼主#
更多 发布于:2004-03-15 20:38
我想先在应用程序中打开文件,再将其大小传进驱动.

DWORD dwFileSize;
DWORD dwFileSizeHigh;
ULONGLONG uFileSize;

hFile = CreateFile(
(char *)"C:\FileDisk.img",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);

if( hFile != INVALID_HANDLE_VALUE )
{
    dwFileSize = GetFileSize(hFile, &dwFileSizeHigh);
    if( dwFileSize != 0xFFFFFFFF )
    {
         memcpy(&uFileSize, &dwFileSize, 4);
         memcpy((char*)&uFileSize + 4, &dwFileSizeHigh, 4);
    }
}
else printf("open file failed !n");


if (!DeviceIoControl(
        Device,
        IOCTL_NETDISK_OPEN_FILE,
        (LPVOID)&uFileSize,
        sizeof(ULONGLONG),
        NULL,
        0,
        &bReturn,
        NULL
        ))
{
         DefineDosDevice(DDD_REMOVE_DEFINITION, &VolumeName[4], NULL);
        return -1;
}


在驱动中:
NTSTATUS
NetdiskOpenFile(
IN PDEVICE_EXTENSION pDeviceExt,
IN PIRP pIrp
)
{
      ULONGLONG*   pFileSize;
      
  pFileSize = (ULONGLONG *)pIrp->AssociatedIrp.SystemBuffer;

   pDeviceExt->uDiskSize = *pFileSize;
   pDeviceExt->MediaInDevice = TRUE;

DbgPrint("get the filesize is %u.n",pDeviceExt->uDiskSize);

   pIrp->IoStatus.Status = STATUS_SUCCESS;
   pIrp->IoStatus.Information = 0;

   return STATUS_SUCCESS;
}



然后测试时,无法打开Z盘,参数错误..
在DbgView中显示时diskDispatchDeviceControl中
只有IOCTL_DISK_GET_DRIVE_GEOMETRY,


哪位大哥知道原因!速回贴!


[编辑 -  3/15/04 by  Zhujnt]
*学*
游客

返回顶部