DOBON.NETプログラミング道掲示板
(現在 過去ログ1 を表示中)

[ 最新記事及び返信フォームをトピックトップへ ]

■33228 / inTopicNo.1)  なし
  
□投稿者/ ねここねこ 一般人(7回)-(2016/02/16(Tue) 13:16:46)
  • アイコン環境/言語:[OS : Windows 7 / 言語 : Visual Basic .NET / .NET Framework : 4.6.1] 
    分類:[.NET] 

    2016/02/18(Thu) 10:55:05 編集(投稿者)

    なし
引用返信 削除キー/
■33229 / inTopicNo.2)  Re[1]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ ねここねこ 一般人(8回)-(2016/02/16(Tue) 13:42:56)
  • アイコン
    2016/02/18(Thu) 10:43:52 編集(投稿者)
    
    なし

引用返信 削除キー/
■33233 / inTopicNo.3)  Re[1]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ 魔界の仮面弁士 大御所(999回)-(2016/02/16(Tue) 18:50:11)
  • アイコン
    No33228に返信(ねここねこさんの記事)
    > 「ディスク番号」と「ボリュームラベル」と「ドライブレター」を
    > 取得したいです。
    
    API ではなく、WMI で取得してみました。
    
    Win32_Volume を使うことで、ドライブレターのない論理ボリュームが得られました。
    併せて、物理ドライブからパーティション情報を取得するコードも掲載しておきます。
    
    
    Imports System.Management
    Imports System.Runtime.CompilerServices
    Module Module1
    
        ''' <summary>
        ''' ボリューム情報
        ''' </summary>
        Public Function GetVolume() As XElement
            Dim doc = <Volumes/>
            Using mosVolume As New ManagementObjectSearcher("SELECT * FROM Win32_Volume"),
                    volumes = mosVolume.Get()
    
                For Each volume In volumes.WithDisposal()
                    Dim nodeVolume = <Volume
                                         Label=<%= volume!Label %>
                                         DriveLetter=<%= volume!DriveLetter %>
                                         DriveType=<%= CType(volume!DriveType, DriveType) %>
                                         Name=<%= volume!Name %>
                                         FileSystem=<%= volume!FileSystem %>
                                         FreeSpace=<%= volume!FreeSpace %>
                                         Capacity=<%= volume!Capacity %>
                                         PNPDeviceID=<%= volume!PNPDeviceID %>
                                     />
                    doc.Add(nodeVolume)
                Next
            End Using
    
            Return doc
        End Function
    
    
        ''' <summary>
        ''' 物理ドライブとパーティションの情報
        ''' </summary>
        Public Function GetDrives() As XElement
            Dim doc = <Drives/>
            Using mosDrive As New ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive"),
                    drives = mosDrive.Get()
    
                For Each drive In drives.WithDisposal()
                    Dim nodeDrive = <Drive
                                        Index=<%= drive!Index %>
                                        Partitions=<%= drive!Partitions %>
                                        DeviceID=<%= drive!DeviceID %>
                                        PNPDeviceID=<%= drive!PNPDeviceID %>
                                        Model=<%= drive!Model %>
                                        SerialNumber=<%= drive!SerialNumber %>
                                    />
                    doc.Add(nodeDrive)
    
                    Dim wql = New RelatedObjectQuery(
                                $"Win32_DiskDrive='{nodeDrive.@DeviceID}'",
                                "Win32_DiskPartition"
                            ).QueryString
                    Using mosPartitions As New ManagementObjectSearcher(wql),
                        partitions = mosPartitions.Get()
    
                        For Each parition In partitions.WithDisposal()
                            Dim nodePatition = <Partition
                                                   DiskIndex=<%= parition!DiskIndex %>
                                                   Index=<%= parition!Index %>
                                                   DeviceID=<%= parition!DeviceID %>
                                                   PNPDeviceID=<%= parition!PNPDeviceID %>
                                                   StartingOffset=<%= $"{CType(parition!StartingOffset, UInt64?) / 1024:N0} KB" %>
                                                   Size=<%= $"{CType(parition!Size, UInt64?) / 1024:N0} KB" %>
                                                   Bootable=<%= parition!Bootable %>
                                                   PrimaryPartition=<%= parition!PrimaryPartition %>
                                                   Status=<%= parition!Status %>
                                               />
                            nodeDrive.Add(nodePatition)
                        Next
                    End Using
                Next
            End Using
    
            Return doc
        End Function
    
        ''' <summary>
        ''' 論理ディスクとパーティションの情報
        ''' </summary>
        Public Function GetLogicalDisks() As XElement
            Dim doc = <Disks/>
            Using mosDisks As New ManagementObjectSearcher("SELECT * FROM Win32_LogicalDisk"),
                    disks = mosDisks.Get()
    
                For Each disk In disks.WithDisposal()
                    Dim nodeDisk = <Disk
                                       DeviceID=<%= disk!DeviceID %>
                                       DriveType=<%= CType(disk!DriveType, DriveType) %>
                                       PNPDeviceID=<%= disk!PNPDeviceID %>
                                       ProviderName=<%= disk!ProviderName %>
                                       VolumeName=<%= disk!VolumeName %>
                                       VolumeSerialNumber=<%= disk!VolumeSerialNumber %>
                                   />
                    doc.Add(nodeDisk)
    
                    Dim wql = New RelatedObjectQuery(
                                $"Win32_LogicalDisk.DeviceID='{nodeDisk.@DeviceID}'",
                                "Win32_DiskPartition"
                            ).QueryString
                    Using mosPartitions As New ManagementObjectSearcher(wql),
                        partitions = mosPartitions.Get()
    
                        For Each parition In partitions.WithDisposal()
                            Dim nodePatition = <Partition
                                                   DiskIndex=<%= parition!DiskIndex %>
                                                   Index=<%= parition!Index %>
                                                   DeviceID=<%= parition!DeviceID %>
                                                   PNPDeviceID=<%= parition!PNPDeviceID %>
                                               />
                            nodeDisk.Add(nodePatition)
                        Next
                    End Using
                Next
            End Using
    
            Return doc
        End Function
    
    #Region "ヘルパーメソッド"
    
        <Extension>
        Private Iterator Function WithDisposal(list As ManagementObjectCollection
                ) As IEnumerable(Of ManagementBaseObject)
    
            Using list
                Using e = list.GetEnumerator()
                    While e.MoveNext()
                        Using mo = e.Current
                            Yield mo
                        End Using
                    End While
                End Using
            End Using
        End Function
    
        Private Enum DriveType
            Unknown = 0
            NoRootDirectory = 1
            RemovableDisk = 2
            LocalDisk = 3
            NetworkDrive = 4
            CompactDisc = 5
            RamDisk = 6
        End Enum
    #End Region
    
    End Module

引用返信 削除キー/
■33234 / inTopicNo.4)  Re[2]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ ねここねこ 一般人(9回)-(2016/02/16(Tue) 19:51:42)
  • アイコン2016/02/18(Thu) 10:53:31 編集(投稿者)

    なし
引用返信 削除キー/
■33235 / inTopicNo.5)  Re[3]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ 魔界の仮面弁士 大御所(1000回)-(2016/02/16(Tue) 22:32:41)
  • アイコンNo33234に返信(ねここねこさんの記事)
    > ■追記
    > 単にPCに接続されているディスクの下記3点の一覧を知りたいという事「ではない」です。
    > >「ディスク番号」と「ボリュームラベル」と「ドライブレター」

    なるほど。
    先に『解決するために何をしたか』のサンプルから見ていたので、
    手段と目的がごっちゃになっていました。


    > 入力:\Device\HarddiskVolume1

    Nt{Open|Query}DirectoryObject / Nt{Open|Query}SymbolicLinkObject が
    使えるのであれば、\Device\Harddisk*\ から Parition* を列挙し、
    そのリンク先が \Device\HarddiskVolume* なものを調べてみては如何でしょう。
引用返信 削除キー/
■33236 / inTopicNo.6)  Re[4]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ ねここねこ 一般人(10回)-(2016/02/16(Tue) 22:53:01)
  • アイコン2016/02/18(Thu) 10:47:10 編集(投稿者)

    なし
引用返信 削除キー/
■33238 / inTopicNo.7)  Re[5]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ 魔界の仮面弁士 大御所(1002回)-(2016/02/16(Tue) 23:29:27)
  • アイコンNo33236に返信(ねここねこさんの記事)
    >>Nt{Open|Query}DirectoryObject / Nt{Open|Query}SymbolicLinkObject が
    > せっかく説明をしていただきましたが、↑については私には手に負えませんでした。

    こんなサンプルがありました。
    C# 2008 で書かれたものですが、足掛かりにはなるかと。
    https://girlab2010.wordpress.com/2008/05/29/object-viewer/
597×318 => 250×133
イメージ
ob.png
/26KB
引用返信 削除キー/
■33239 / inTopicNo.8)  Re[6]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ ねここねこ 一般人(11回)-(2016/02/16(Tue) 23:51:31)
  • アイコン2016/02/18(Thu) 10:46:57 編集(投稿者)

    なし
引用返信 削除キー/
■33240 / inTopicNo.9)  Re[7]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ 魔界の仮面弁士 大御所(1003回)-(2016/02/17(Wed) 00:26:19)
  • アイコンNo33239に返信(ねここねこさんの記事)
    > すみませんが、魔界の仮面弁士さんに教えていただくものは
    > 私にとっては難しすぎて分かりません。

    電車内からスマフォ投稿なので試せませんが、もしかしたら

    https://msdn.microsoft.com/en-us/library/aa364962(v=vs.85).aspx

    が使えるかも知れません(未確認です)。


    > >このサンプルコードを教えていただきたいです。

    投稿前にお読み頂いた掲示版ルールにもありますように、
    丸投げ系の依頼については、お隣の
    お気楽掲示版をご利用下さい。
引用返信 削除キー/
■33243 / inTopicNo.10)  Re[1]: Windows7でディスク情報(Symlink?)の取得をしたい
□投稿者/ ねここねこ 一般人(14回)-(2016/02/17(Wed) 23:58:20)
  • アイコン2016/02/18(Thu) 10:46:40 編集(投稿者)

    なし
引用返信 削除キー/
■33244 / inTopicNo.11)  【注意】安易な投稿を禁止したルールに違反しています
□投稿者/ 管理人 大御所(1521回)-(2016/02/18(Thu) 04:19:39)
  • アイコンこの掲示板では、質問者が理解する努力せずに、回答者に過度な要求をするような、「安易な質問」を禁止しています。このスレッドのねここねこ様の投稿を拝見しますと、せっかくいただいた貴重な回答に対してすべて「分からない」の一言で一蹴し、サンプルや完ぺきな解説を要求し、ねここねこ様ご自身がどのように分かろうと努力されたのかが見えませんでした。そのため、ねここねこ様のご投稿は、残念ながら、この「安易な質問」に該当していると判断せざるを得ません。

    「安易な質問」とは?
    http://dobon.net/vb/bbs/index.html#irresponsible

    例えば関数名を言われただけでは分からないということであれば、まずその関数について検索してみて使い方を調べ、それでもどうしても分からない部分があれば、そこを質問すべきです。C#のコードが分からないということであれば、まずは私のサイトで紹介しているような、コードを変換してくれるツール等を使用してみてください。

    面倒とは思いますが、ご理解いただけますよう、よろしくお願いいたします。

    ちなみに、削除された No33241 の投稿も読ませていただきました。その投稿には、重大なルール違反と言わざるを得ない表現が多々ありましたが、反省されたが故の削除だと思いますので、今回だけは目をつぶります。
引用返信 削除キー/
■33245 / inTopicNo.12)  Re[3]: 【注意】安易な投稿を禁止したルールに違反しています
□投稿者/ ねここねこ 一般人(15回)-(2016/02/18(Thu) 08:05:19)
  • アイコン
    2016/02/18(Thu) 11:00:01 編集(投稿者)
    
    管理人さん、返信ありがとうございます。
    
    「回答投稿に対するルール」にある
    「これらのルールに対するご意見等は、〜」に該当していると思うため、
    この記事は削除(編集)します。
    
    また、質問は未解決ですが質問を取り下げます。
    (ルールにある解決の諦めではなく、ルール内での解決が困難な為です。)
    お手数ですが、スレッド自体を削除していただきたくよろしくお願いいたします。
    
    回答いただいた方、管理人さん、どうもありがとうございました。

引用返信 削除キー/
■33248 / inTopicNo.13)  【注意】ルール違反の投稿です
□投稿者/ 管理人 大御所(1522回)-(2016/02/19(Fri) 00:10:44)
  • アイコン「書き込みのルールについて」に明記しております通り、この掲示板では返信のある投稿を削除することを禁止しています。編集による削除も禁止しています。

    前回注意させていただいた直後の重大なルール違反ですので、残念ですが、それなりの対応をとらせていただくことをお許しください。今後さらなる問題があった場合は、追加の対応をとらせていただくかもしれないこともご了承ください。
引用返信 削除キー/



トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

Mode/  Pass/


- Child Tree -