0

我正在尝试创建新分区并将卷安装到这个新分区,我认为CreateFile让我这样做,使用以下代码:

LPCTSTR lpFileName=L"\\\\.\\Device\\Harddisk0\\Partition3";
HANDLE handl=CreateFile( lpFileName,
                            GENERIC_READ | GENERIC_WRITE,
                            FILE_SHARE_READ | FILE_SHARE_WRITE,
                            NULL,
                            CREATE_ALWAYS,
                            FILE_ATTRIBUTE_NORMAL,
                            NULL  );
   if (handl==INVALID_HANDLE_VALUE)
   {
   qDebug()<<"handl invalid"<<" error"<<GetLastError();}


   bool success = DefineDosDevice(DDD_RAW_TARGET_PATH,L"I:",L"\\Device\\Harddisk0\\Partition3");
   if(!success)
       qDebug()<<" DefineDosDevice failed "<<GetLastError();


   bFlag = GetVolumeNameForVolumeMountPoint(
               L"I:\\", // input volume mount point or directory
               /** what u do in this directory u find it in th mount piont and vice versa**/
                  Buf, // output volume name buffer
              BUFSIZE  // size of volume name buffer
           );
   if (bFlag != TRUE)
   {
      //_tprintf( TEXT("Retrieving volume name for %s failed.\n"), argv[2] );
      qDebug()<<"Retrieving volume name failed.      "<<GetLastError();
      return (-2);
   }
    qDebug()<<"Volume name"<<QString::fromWCharArray(Buf);



    bool fResult = DefineDosDevice (
                         DDD_RAW_TARGET_PATH|DDD_REMOVE_DEFINITION|
                         DDD_EXACT_MATCH_ON_REMOVE, L"I:",
                         L"\\Device\\Harddisk0\\Partition3");
    if (!fResult)
                qDebug()<<"DefineDosDevice failed  "<< GetLastError();



   bFlag = SetVolumeMountPoint(L"D:\\myDirExample\\example\\", // mount point
                               /** should b empty**/
                                Buf // volume to be mounted
                               );

   if (!bFlag)
      {
        qDebug()<<"Attempt to mount failed";
        qDebug()<<"error "<<GetLastError();
      }

   return (bFlag);


   CloseHandle(handl);

我有:

handl invalid  error 3 
Retrieving volume name failed  erorr  2

第一个错误是ERROR_PATH_NOT_FOUND:系统找不到指定的路径。那么我该如何解决lpFileName才能使其正常工作

在此先感谢,任何帮助将不胜感激。

4

1 回答 1

0

有,我用它做我的碎纸机。唯一棘手的部分是管理文件指针的 LARGE_INTEGER(用于选择扇区)。您需要首先使用 CreateFile() 使用设备的句柄。使用 FSCTL_LOCK_VOLUME 锁定驱动器后,使用 SetFilepointerEx 设置扇区并使用 IOCTL_DISK_SET_PARTITION_INFO_EX 创建新扇区。

干杯;)

编辑了几次 - 不确定是否也需要 IOCTL_DISK_SET_PARTITION_INFO,但事实并非如此,您也可以使用 IOCTL_DISK_SET_PARTITION_INFO_EX 设置类型。

于 2014-04-02T15:48:57.830 回答