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 に答える