• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:ボリューム名の取得ができないんです。)

ボリューム名の取得できない原因とは?

redfox63の回答

  • redfox63
  • ベストアンサー率71% (1325/1856)
回答No.1

> ソースを作成してみたのですが、ret=0なのに、ボリューム名は空値 リファレンスを読み間違えていませんか Widnowsの場合 GetVolumeInfomationは ret=0 ならば『APIが失敗している』ことになりますよ GetLastErrorなどでエラーを取得してみましょう # 本来なら質問中に 実行環境や開発環境の情報も盛り込むべきですよ

ok-kaopon
質問者

お礼

早速の回答に感謝します。 エラー原因を調べてみます。 次回から、実行環境や開発環境の情報を記述するようにいたします。 ご丁寧なアドバイスありがとうございました。

関連するQ&A

  • プロパティで ボリューム名が表示されない

    どなたかよろしくお願いいたします。 いま、C言語でネットワークの割り当てを行っているフォルダのボリューム名を取得しようとしています。 結果としては値が戻ってきません。 「ボリューム名未設定のケースなのでは?」という指摘により エクスプローラで該当ドライブのプロパティを参照したところ なるほど空値(またはスペースが入っている?)でした。 ちなみに入力しようとしても不可能です。 質問がざっくり過ぎるかもしれませんが、このような場合は ボリューム名は取得できない とあきらめざるを得ないのでしょうか? よろしくお願いいたします。

  • 新しいボリュームが作れない

    Windows7でドライブDのアイコンが化けて戻せないため、他のドライブにバックアップ後ボリュームを削除し、改めて新しいシンプル ボリューム を作ることとしました。 ところが、ウィザードでボリュウムサイズをいくら小さくしても 「「十分なディスク領域がないので、この操作を完了できません。」 となってしまします。 PCを再起動してからやっても、何回やってもボリュウムがつくれません。 先にドライブDのアイコンが化けてと書きましたが、これは「Allway Sync 」と言う同期コピーソフトを使ってみたもののうまくゆかずこのソフトをアンインストールしたのですがドライブDのアイコンがAllway Syncというアイコンになってしまい元に戻せなくなってしまいました。 これを解消するためボリュームの作り直しを考えた次第です。 ドライブDの中味はは別のドライブに移しましたがこっちのアイコンもAllway Sync になってしまいました。 何か策はないででしょうかアドバイスお願いします。 ∇ ウィンドウ タイトル ∇

  • ボリューム名の機能がよくわかりません。

    mountvolコマンドで表示されるボリューム名の機能がよくわかりません。 ボリューム名はHDD側に保存されているのでしょうか? それとも、ボリューム名自体が、シリンダやトラック等、 HDDのある領域を指し示す役割を持っているのでしょうか? たとえば、  mountvol C:\DVDROM \\?\Volume{7f1a0b73-a297-11d3-9849-806d6172696f} というコマンドで、C:\DVDROMというマウントポイントに、第二引数のボリュームをマウントできる、という説明がありますが、 ボリューム名の文字列(GUID)で示される領域が、 HDD側では物理的にどの部分にあたるかというのは、 どうやって関連付けられているのでしょうか? SCSI等のコントローラがボリューム名からHDDの領域を割り出しているのでしょうか? たとえば、あるボリュームをD:\のマウントポイントにマウントした後に、 そのディスクを最初から最後まで完全にフォーマットして、 そのあとに、初めのボリューム名でマウントすると、 容量としての見え方はディスクをフォーマットする前と同じようになるのでしょうか? それとも、ディスク内に関連付けれる情報がなくなってしまったので、再度ボリューム名を作成してやるしかない、ということになるのでしょうか? UNIX系のOSにたとえてもらっても大丈夫です。 意味のわかりにくい質問になっていると思いますが、 質問の目的は、以下になります。 バックアップの手法として、同じ容量のディスクを2つ用意して、ディスク丸ごとの複製を取るという技術がありますが、 Windowsでそれをやる場合、 マスタ側とスレーブ側でボリューム名が違うのでないかと思っていまして、 マスタ側のディスクがスレーブ側に完全に複製されたあと、 スレーブ側で複製ディスクをマウントしたい場合、 マスタ側のボリューム名をスレーブ側に持ってきてマウントする必要があるのか、 それともスレーブ側でもともと持っていたボリューム名でマウントできるのか、 その場合、ボリューム名はどこに保管されていてHDD上のボリュームをどのように指し示すのか? と疑問に思い、質問しました。

  • ファイル名の取得

    CreateFileの第一引数の pszFileName というのは、createfileで開いたファイル名ですよね? それをcharの配列にコピーして表示させようとしているのですが、 うまく表示されません。 (うまく表示されるときとされないときがあります。 wordを立ち上げた時のdatファイルなどは表示される) 日本語が入っていると表示されないのかと思いましたがそうでもないようです…。 開いたファイル名を取得するAPIがあるのかと思い、探してみましたが 見つかりません…。 getFileSize APIを使用することで、ファイルサイズを取得出来るのはわかったのですが、ファイル名を取得するにはどのAPIを使用すればよいのかが調べてもわかりません。 どなたかご存知のお方いられましたら、ご教授願います。 よろしくおねがいします。

  • ドライブ文字からハードウェア名を取得する方法

    タイトルの通り、ドライブ文字からハードウェア名(Win32_DiskDriveのCaptionで取得できるSAMSUNG HD103UJ ATA Deviceのような文字列)を取得する方法はないでしょうか? CD-ROMデバイスならWin32_CDRomDriveのDriveでドライブ文字が、Captionでハードウェア名が取得できるので対応付けができるのですが、ハードディスクやUSBメモリは対応付けができなくて困ってます。 QueryDosDeviceでドライブ文字から作成される文字列とsetupapiのSetupDiGetDeviceRegistryProperty(SPDRP_PHYSICAL_DEVICE_OBJECT_NAME)で取得される文字列を比較してデバイスを特定する方法も試してみたのですが、SetupDiGetDeviceRegistryPropertyではハードウェア名(フレンドリー名?)が取得できないようでした。 他にもGetVolumeNameForVolumeMountPointで取得したGUIDをレジストリで強引に検索して HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MountPoints2\CPC\Volume\{GUID}\Data内のデータからWMIでハードウェア特定に使えないかと考えたりしましたが、フォーマットも分からず万能ではなさそうでした。 どなたか、ドライブ文字からハードウェア名を取得する方法をご存じでしたら教えてください。 よろしくお願いします。

  • ExcelVBAでサブフォルダ名などを取得したい

     ExcelVBAで、Dドライブ内の特定のフォルダ(D:\My Documents等)の中にある全てのフォルダ名やファイル名を取得したいのですが、方法が分かりません。  Dドライブのすぐ下にあるフォルダはDirで取得できるようなのですが、サブフォルダ名が取得できないのです。  具体的にどのように書いたらよいかお教えいただけるとうれしいです。  よろしくお願いします。

  • WTSEumerateSessionsでのデータの取得

    以下のプログラムで、&SessionInfoに戻ってきた データを表示させたいのですがうまくいきません。 教えていただきたいです。 #include<stdio.h> #include<windows.h> #include<wtsapi32.h> int main(){ char* name; //NetBIOS名の入れ物 char*型 HANDLE handle; //HANDLEの戻り値を取得する入れ物 BOOL bWts; //BOOLの戻り値を取得する入れ物 LPVOID lpMsgBuf; //WTSOpenでバファの格納するための入れ物 DWORD BytesReturned; //WTSOpenでバイト数を格納するための入れ物 WTS_INFO_CLASS WTSInfoClass; //WTSOpenで使う 接続情報を調べたい PWTS_SESSION_INFOA SessionInfo=NULL; DWORD Count=0; DWORD Reserved=0; DWORD Version=1; name=NULL; handle =WTSOpenServer(name); bWts = WTSEnumerateSessions( handle, Reserved, Version, &SessionInfo, &Count ); printf("セッション数は %d です\n",Count); WTSFreeMemory(SessionInfo); return 0; }

  • 外付HDDにボリューム名をつける方法を教えて下さい

    誤って外付けHDDのボリュームまで削除してしまいました。 ディスクの管理ではディスク2として、デバイスマネージャーでも認識はされています。 しかし、ボリューム名が無いので通常の読み書きが出来ません。 そこでディスク管理で下記のような操作をしてボリューム作成を試みましたが失敗に終わりました。 このHDDを使えるようにするにはどうしたらいいでしょうか。よろしくお願いします。 なお、OSはwindows 7、HDDはLogitec USB2.0 HDD 40GBです。 ディスク管理での操作 新しいシンプルボリューム作成を選択 ↓ ボリュームサイズの指定。最大38192MB、最小8MB、シンプルボリュームサイズ38192MBと初期値をそのまま登録。(最小値にもしてみました) ↓ ドライブ文字の割り当て 規定値 I(重複はありません) ↓ このボリュームをフォーマットしないで次へ ↓ 新しいシンプルボリュームが作成されましたと表示される。 ↓ 完了 ↓ 十分なディスク領域がないので、この動作を完了できません。と表示される

  • カレントディレクトリの取得について

    ゲームを作るのに、実行ファイルのフルパスが必要となりました。 「GetCurrentDirectory」を使ってパスを取得したのですが、 取得できたパスは、 「sers\NewChallenger\~(中略)~\GameData」 となってしまいます。 あたまの「sers」は「Users」で、本来なら、 「C:\Users\NewChallenger\~(中略)~\GameData」 となるはずなのですが。 取得に際しては、 char path[_MAX_PATH]; GetCurrentDirectory( _MAX_PATH, path ); というごく単純なことしかしていません。 このあと、バッファのサイズが小さすぎてところてん式に前の方が消えているのかと思い、 「_MAX_PATH」を「1000」として試してみたのですが、結果は変わらず。 いったい何が起こっているのでしょうか? どうすれば正しく取得できるのでしょうか?

  • DELL 空白のボリュームを削除してよいか

    DELLのパソコン(OPTIPLEX790)(Windows7)のハードディスクに ボリューム名が「OS(C:)」と「RECOVERY」というボリュームの他に ボリューム名が空白のボリュームがあります。 --------------------------------------------------- ボリューム名:(空白) ファイルシステム:(空白) 状態:正常(OEMパーティション) 容量:39MB 空き領域:39MB --------------------------------------------------- ディスク全体をバックアップしようとすると このボリュームが含まれているとエラーになります。 (このボリュームを外すとバックアップできます) ディスク管理でこのボリュームを選択して 右クリックしてもボリュームの削除は表示されないので (起動ディスクでもグレー表示で表示されるがグレー表示もされない) どうもこのボリュームは削除できないようです。 (問1) ディスク管理のdiskpartのcleanコマンドでも    削除することはできないのでしょうか。    (怖いので試していない) (問2) (cleanコマンドで削除できるとして)    削除してしまっても問題ないでしょうか。    (このボリューム以外をバックアップして、    cleanコマンドで削除して復元した場合など) よろしくお願いします。