Sabit sürücü seri numarasını WMI'dan almak için bazı kodum var.WMI HDD Seri Numarası Transposed
SelectQuery selectQuery = new SelectQuery("Win32_PhysicalMedia");
ManagementObjectSearcher searcher =
new ManagementObjectSearcher(selectQuery);
foreach (ManagementObject wmi_PM in searcher.Get())
{
string str = wmi_PM["SerialNumber"];
}
İlk başta çalıştığını ve doğru seri numarasını aldığını düşündüm. Yine de bir karşılaştırma ile kullanmaya çalıştıktan sonra, WMI raporlarının tam olarak doğru olmadığını bildirdim. WMI seri numarası, bir dizi boşluk ile doldurulur ve ayrıca karakterler aktarılır.
gerçek sürücü seri numarası etiket üzerinde yazılı ve bazı araçlar (muhtemelen DeviceIoControl kullanarak) "3RH8B1BG", WMI ancak " R38H1BGB" döndürür tarafından döndürülen .
Gerçek Seri No: 3RH8B1BG
WMI Seri No: R38H1BGB
SiSoftware Sandra gibi bazı araçlar, gerçi bu yastıklı ve aktarılmamıştır sayıda gerçek değil seri numarasını döndürür. Diğer her pozisyonu aktarırsanız, WMI değeri seri numarasıdır. Bu normal mi? sadece doğru değere dönüştürmek için kod yazmalı mıyım?
WMI'yi kullanmaktan kaçınmaya çalışıyorum, ancak ağda bir şeylerin nasıl yapılacağını bulmak artık WMI örneklerini geri getiriyor.
Farklı üreticilerin 2 farklı sabit diski için WMI değeri seri numarası her ikisi de tek bir disk değil, bu nedenle dönüştürülür.
Güncelleme: Şaşırtıcı Deviceıocontrol yanı bir aktarılmış seri numarasını döndürür http://addressof.com/blog/archive/2004/02/14/392.aspx
Deviceıocontrol
kullanarak bazı kod bulundu. diğer herhangi inanmak can DeviceIoControl ve WMI için standarttır
// function to decode the serial numbers of IDE hard drives
// using the IOCTL_STORAGE_QUERY_PROPERTY command
char * flipAndCodeBytes (const char * str,
int pos,
int flip,
char * buf)
{
...
}
tahmin: üstündeki CorySmith tarafından kodunda bir SwapChars
Private Shared Function SwapChars(ByVal chars() As Char) As String
For i As Integer = 0 To chars.Length - 2 Step 2
chars.Reverse(chars, i, 2)
Next
Return New String(chars).Trim
End Function
c işlev vardır ++ diye bahseder kod için kapağı vardır Karşı karşıya olduğum çözümler ya da örnekler buna sahip değildi.
Wow, bir [PDP-11] üzerinde çalışıyorsunuz gibi görünüyor (http://en.wikipedia.org/wiki/Endianness#Middle-endian)! – sarnold
Aslında PDP-11 ile aynı küçük endian bayt siparişi veren bir bilgisayarda çalışıyor. Yani ben ve Windows (Windows CE değil, Windows Phone değil) çalıştırıyorsanız, siz de öyle. Tek çalışma çözümü DeviceIoControl'ü çağırmak ve orijinal posteri bulduğunuzda baytları kendiniz çevirmektir. WMI'yi çağırırsanız, WMI'nin sizin için baytları döndürüp döndürmediğini bilmiyorsunuzdur. –