C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[7]: メモリーの種類を取得する方法


(過去ログ 169 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■97184 / inTopicNo.1)  メモリーの種類を取得する方法
  
□投稿者/ 黒子 (1回)-(2021/04/10(Sat) 10:25:53)

分類:[.NET 全般] 


VB.NETあるいはC#を使って
CPUとメモリーの種類を取得したいのですが

CPUの取得は
http://www.shise.net/wiki/wiki.cgi?page=C%23%2F%A5%E1%A5%E2%2FWMI

このページの方法でできました。

一方で、メモリーの種類(DDR4-2132や型番やメモリクロックなど)を取得するにはどのようにしたら良いですか?
CPU-Zというソフトを使えば取得できるので、
何か方法はあると思うのですが、
C#やVB.NETなどのキーワードで検索しても見つかりませんでした。

どなたかご教授いただけないでしょうか?


引用返信 編集キー/
■97188 / inTopicNo.2)  Re[1]: メモリーの種類を取得する方法
□投稿者/ 魔界の仮面弁士 (3054回)-(2021/04/11(Sun) 10:56:54)
No97184 (黒子 さん) に返信
> 一方で、メモリーの種類(DDR4-2132や型番やメモリクロックなど)を取得するにはどのようにしたら良いですか?

WMI を御存知のようですし、そのまま Win32_PhysicalMemory クラスではどうでしょう。

もちろん VB や C# からでも得られますが、確認するだけであれば、
PowerShell で『 Get-WmiObject Win32_PhysicalMemory | Out-GridView 』を
実行するのが手っ取り早いです。


BankLabel プロパティ ………………… "BANK 3"、"Bank A" など
DeviceLocator プロパティ …………… "ChannelB-DIMM1"、"SIMM 3" など
ConfiguredClockSpeed プロパティ …… 2,666、2,400、1,867 など (MHz)
Speed プロパティ ……………………… 2,666、2,400、1,867 など (MHz)
ConfiguredVoltage プロパティ ……… 1,200 など (ミリボルト)
Capacity プロパティ …………………… 17,179,869,184 など (バイト)
Manufacturer プロパティ ……………… "04EF"、"Samsung"、"A-DATA"、"SK Hynix"、"Kingston" など
PartNumber プロパティ ………………… "M378A1K43CB2-CTD"、"H9CCNNNCLGALAR-NUD"、"TEAMGROUP-UD4-2400" など
SerialNumber プロパティ ……………… "32DBDAD0"、"AAA40100" など
SMBIOSMemoryType プロパティ (マップ値)、および
 MemoryType プロパティ (生値) …… 下記の列挙値
   00h : Unknown
   01h : Other
   02h : Unknown
   03h : DRAM
   04h : EDRAM
   05h : VRAM
   06h : SRAM
   07h : RAM
   08h : ROM
   09h : FLASH
   0Ah : EEPROM
   0Bh : FEPROM
   0Ch : EPROM
   0Dh : CDRAM
   0Eh : 3DRAM
   0Fh : SDRAM
   10h : SGRAM
   11h : RDRAM
   12h : DDR
   13h : DDR2
   14h : DDR2 FB-DIMM
   15h : (Reserved)
   16h : (Reserved)
   17h : (Reserved)
   18h : DDR3
   19h : FBD2
   1Ah : DDR4
   1Bh : LPDDR
   1Ch : LPDDR2
   1Dh : LPDDR3
   1Eh : LPDDR4
   1Fh : Logical non-volatile device
FormFactor プロパティ ………………… 下記の列挙値
   00h : Unknown
   01h : Other
   02h : SIP
   03h : DIP
   04h : ZIP
   05h : SOJ
   06h : Proprietary
   07h : SIMM
   08h : DIMM
   09h : TSOP
   0Ah : PGA
   0Bh : RIMM
   0Ch : SODIMM
   0Dh : SRIMM
   0Eh : SMD
   0Fh : SSMP
   10h : QFP
   11h : TQFP
   12h : SOIC
   13h : LCC
   14h : PLCC
   15h : BGA
   16h : FPBGA
   17h : LGA
TypeDetail プロパティ ………………… 下記のビットフラグ
   Bit 0 : Reserved, set to 0
   Bit 1 : Other
   Bit 2 : Unknown
   Bit 3 : Fast-paged
   Bit 4 : Static column
   Bit 5 : Pseudo-static
   Bit 6 : RAMBUS
   Bit 7 : Synchronous
   Bit 8 : CMOS
   Bit 9 : EDO
   Bit 10: Window DRAM
   Bit 11: Cache DRAM
   Bit 12: Non-volatile
   Bit 13: Registered (Buffered)
   Bit 14: Unbuffered (Unregistered)
   Bit 15: LRDIMM
DataWidth プロパティ ………………… 16 など (bit)
InterleaveDataDepth プロパティ …… 2 など
InterleavePosition プロパティ ……… 1、2 など
HotSwappable プロパティ ……………… False など


http://www.wmifun.net/library/win32_physicalmemory.html
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-physicalmemory
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.2.0.pdf

引用返信 編集キー/
■97193 / inTopicNo.3)  Re[2]: メモリーの種類を取得する方法
□投稿者/ 魔界の仮面弁士 (3057回)-(2021/04/11(Sun) 12:20:15)
No97188 (魔界の仮面弁士) に追記
>>一方で、メモリーの種類(DDR4-2132や型番やメモリクロックなど)を取得するにはどのようにしたら良いですか?
> WMI を御存知のようですし、そのまま Win32_PhysicalMemory クラスではどうでしょう。

Win32_PhysicalMemory は、各スロットに挿入されているメモリの情報を返すものでしたが、
Win32_PhysicalMemoryArray だと、総スロット数や最大容量を得ることができます。
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-physicalmemoryarray
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.2.0.pdf

MemoryDevices プロパティ …………… 4、2 など (スロット数)
MaxCapacityEx プロパティ …………… 67,108,864、16,777,216 など (キロバイト)
MemoryErrorCorrection プロパティ … 下記の列挙値
   00h : (Reserved)
   01h : Other
   02h : Unknown
   03h : None
   04h : Parity
   05h : Single-bit ECC
   06h : Multi-bit ECC
   07h : CRC
Use プロパティ ………………………… 下記の列挙値
   00h : (Reserved)
   01h : Other
   02h : Unknown
   03h : System memory
   04h : Video memory
   05h : Flash memory
   06h : Non-volatile RAM
   07h : Cache memory

引用返信 編集キー/
■97194 / inTopicNo.4)  Re[3]: メモリーの種類を取得する方法
□投稿者/ 黒子 (2回)-(2021/04/11(Sun) 18:58:43)
No97193 (魔界の仮面弁士 さん) に返信


ありがとうございます。

これでうまくいきそうです!!!!!
解決済み
引用返信 編集キー/
■97195 / inTopicNo.5)  Re[4]: メモリーの種類を取得する方法
□投稿者/ 黒子 (3回)-(2021/04/11(Sun) 19:43:21)
すいません。
いまコードを書いていて気がついたのですが、
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-physicalmemory

https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.2.0.pdf
で書かれたMemoryTypeが食い違っています。


例えば、
https://docs.microsoft.com/en-us/windows/win32/cimwin32prov/win32-physicalmemoryだと
05hがEDOとなっているのですが、
https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.2.0.pdfだと
05hがVRAMになっています。

他もところどころ合っていない箇所があります。

この違いは何を意味してるのでしょうか?
どちらが正しいのでしょうか??
引用返信 編集キー/
■97197 / inTopicNo.6)  Re[5]: メモリーの種類を取得する方法
□投稿者/ 魔界の仮面弁士 (3059回)-(2021/04/11(Sun) 23:57:15)
No97195 (黒子 さん) に返信
> で書かれたMemoryTypeが食い違っています。

Server 2016 以降や Win10 では、MemoryType プロパティではなく
SMBIOSMemoryType プロパティを参照してはどうでしょう。
(それらが使えない場合に MemoryType を使うようにする)


> この違いは何を意味してるのでしょうか?

SMBIOS からの生値を扱う SMBIOSMemoryType に対し、
MemoryType は、それとは異なる列挙値となるのだと読み解きました。


この 2 つのプロパティについて、まずは docs の記述を見てみます。

MemoryType プロパティ:
「Type of physical memory.」
「This is a CIM value that is mapped to the SMBIOS value.」
「This value comes from the Memory Type member of the Memory Device structure in the SMBIOS information.」
「This property is inherited from CIM_PhysicalMemory.」

SMBIOSMemoryType プロパティ:
「The raw SMBIOS memory type.」
「The value of the MemoryType property is a CIM value that is mapped to the SMBIOS value.」
「The SMBIOSMemoryType property contains the raw SMBIOS memory type.」


どちらも SMBIOS (システム管理BIOS) 値にマップされる CIM 値と記されていますが、
前者は SMBIOS 情報の Memory Device 構造体の Memory Type メンバーから取得される値なのに対し、
後者は『raw(生の)』 SMBIOS memory type を含有していると書かれています。


後者は raw とあることから、PDF の値をそのまま使えるものと捉えてよいでしょう。
具体的には 97 ページの [7.18.2] "Memory Device ― Type" にある
[Table 76] "Memory Device: Type" が列挙値になることを意味します。

つまり SMBIOSMemoryType プロパティが 26 なら "DDR4" の意味となり、
29 なら "LPDDR3" すなわち Low Power DDR3 の意味だということです。

実際、手元の Surface Book 2 は LPDDR3 なので、SMBIOSMemoryType が 1Dh でしたし、
DDR4 搭載のデスクトップ機 2 台では 1Ah を返してくることを確認しています。
そしてこれらいずれの環境も、MemoryType は 0 を返してきました。

参考までに、ネット上にあった実行結果例によれば、
DDR2 環境で、MemoryType が 0 を返す環境(SMBIOSMemoryType は未サポート)もありましたし、
DDR3 環境において、SMBIOSMemoryType と MemoryType の両方が 18h を返すケースも見つけました。

こうなると、[Table 76] に無い "LPDDR4x" を搭載した環境で、何が返されるのかが気になるところ。
たとえば Surface Book 3 が LPDDR4x を搭載していたはずですが、果たして
LPDDR4 (1Eh) となるのか、Unknown (02h) や Other (01h) あるいは 0h や null なのか…?


閑話休題


さて、その [7.18.2] には、このような説明も記されています。
| NOTE Refer to 6.3 for the CIM properties associated with this enumerated value.

それに従い、[6.3] "SMBIOS fields and CIM MOF properties" の項を参照してみます。28 ページですね。

そこには、先の [7.18.2] の "Memory Device Type" に対してこんな説明があります。
| CIM_PhysicalMemory.MemoryType uses a different enumeration than SMBIOS.
(CIM_PhysicalMemory.MemoryType は、SMBIOS のとは異なる列挙値を使用する)

さて、突然 CIM_PhysicalMemory という用語が出てきましたが、docs 側に
「class Win32_PhysicalMemory : CIM_PhysicalMemory」という記述があることから、
これが Win32_PhysicalMemory の派生元クラスであることが分かるかと思います。

また、docs の MemoryType プロパティの説明にも、
「This property is inherited from CIM_PhysicalMemory.」とありますね。

ゆえにこれは
 Win32_PhysicalMemory クラスの MemoryType プロパティの値は
 Table 76 から取得されてはいるが、Table 76 とは異なる列挙値である。
ということを意味しているのだと読み取りました。
引用返信 編集キー/
■97199 / inTopicNo.7)  Re[6]: メモリーの種類を取得する方法
□投稿者/ 魔界の仮面弁士 (3061回)-(2021/04/12(Mon) 00:21:26)
No97197 (魔界の仮面弁士) に追記
> こうなると、[Table 76] に無い "LPDDR4x" を搭載した環境で、何が返されるのかが気になるところ。
> たとえば Surface Book 3 が LPDDR4x を搭載していたはずですが、果たして
> LPDDR4 (1Eh) となるのか、Unknown (02h) や Other (01h) あるいは 0h や null なのか…?

No97188 で提示した DSP0134 Version 3.2.0 は、どうやら情報が少し古いようです。
https://www.dmtf.org/dsp/DSP0134


Version 3.2.0 の 98 ページ [Table 76] "Memory Device: Type" には 1Fh までの値しか定義されていませんが、
Version 3.4.0 の 103〜104 ページ [Table 77] "Memory Device: Type" にて、後続値として
 20h : HBM (High Bandwidth Memory)
 21h : HBM2 (High Bandwidth Memory Generation 2)
 22h : DDR5
 23h : LPDDR5
が追加されていることを確認しました。

しかしこの版にも LPDDR4x は定義されていませんでした。
1Eh (LPDDR4) はあるのですけれどね。

LPDDR4x 機(Surface Book 3 など)で SMBIOSMemoryType プロパティを試してみたい。
引用返信 編集キー/
■97389 / inTopicNo.8)  Re[7]: メモリーの種類を取得する方法
□投稿者/ 黒子 (4回)-(2021/05/06(Thu) 22:03:29)
返事が遅れてしまいましたが
納得しました。
どうもありがとうございます。

解決済み
引用返信 編集キー/


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

このトピックに書きこむ

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

管理者用

- Child Tree -