Ich möchte die festverdrahtete Seriennummer von der Festplatte erhalten, aber nicht mit WMI. Ich habe versucht, WMI-Code zu verwenden, und es funktioniert auf meinem Computer nicht sicher. Gibt es in .NET eine Alternative, um die Seriennummer einer physischen Festplatte zu finden?Wie kann ich die Seriennummer des Festplattengeräts finden, ohne das WMI in .NET zu verwenden?
Antwort
loszulegen Dies soll dazu beitragen:
How to get Physical HDD serial number without WMI
In Bezug auf Ihr Problem mit WMI nicht Daten zurückgegeben; Sind Sie sicher, wie Sie die richtigen Berechtigungen zum Abrufen von Daten aus WMI erhalten? Sie können WMI Tools verwenden, um dies zu überprüfen/zu beheben.
Ich führe den Code im eingeschränkten Account-Modus. Also ich denke, das ist das Problem. Gibt es irgendeine Möglichkeit, wie ich meine Privilegien innerhalb des begrenzten Kontos erhöhen kann? –
Ich glaube nicht. Wäre das nicht alles, um den Benutzern Privilegien zuzuweisen? Oder wenn Sie das admin-Passwort kennen, können Sie den "runas" -Befehl verwenden. – Espo
Sie können die Verwendung:
Win32-API-Funktion, um diese Informationen zu erhalten, wenn Sie WMI vermeiden müssen. Die verknüpfte Seite enthält die Deklarationssignatur (in VB & C#) für die API-Funktion zusammen mit Beispielcode.
Gibt es nicht die Volume-Seriennummer zurück? Ich möchte die Seriennummer des Geräts, die sich nicht mit der Formatierung ändert –
@Xinxua - Entschuldigung, Sie haben Recht. Es gibt das Volume und nicht die Seriennummer des Geräts zurück. Ich denke, der einzige Weg, dies ohne WMI zu erreichen, besteht darin, in untergeordnete Betriebssystemfunktionen, die von C++/nicht verwaltetem Code aufgerufen werden (wie bei der anderen Espo-Antwort), herunterzufahren, wenn Sie mit eingeschränkten Windows-Kontoberechtigungen und WMI arbeiten (wahrscheinlich deshalb), dann bezweifle ich, dass das Aufrufen von C++ - DLL-Funktionen von einer .NET-Anwendung aus funktioniert, es sei denn, Sie können Code als höhere Berechtigung ausführen/ausführen, und dazu würden die entsprechenden Zugriffs-/Kennwörter erforderlich sein. – CraigTP
Sie möchten WMI für dieses verwenden - this article has an example.
Verwenden WMI von Server-Explorer in VS
- Open Server-Explorer
- Erweitern Sie Ihre Maschine
- Expand-Management-Klassen
- erweitern Disk-Laufwerke
- Wählen Sie das Laufwerk
- ziehen Sie es auf ein Formular, um den generierten Code zu sehen
- Acc ess die VolumeSerialNumber Eigenschaft im Code
Rauh bereit:
using System;
using System.Management;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
ManagementClass mangnmt = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection mcol = mangnmt.GetInstances();
string result = "";
foreach (ManagementObject strt in mcol)
{
result += "Name : " + Convert.ToString(strt["Name"]) + Environment.NewLine;
result += "VolumeName : " + Convert.ToString(strt["VolumeName"]) + Environment.NewLine;
result += "VolumeSerialNumber: " + Convert.ToString(strt["VolumeSerialNumber"]) + Environment.NewLine;
result += Environment.NewLine;
}
Console.Out.WriteLine(result);
Console.In.ReadLine();
}
}
}
Hinweis gibt es auch andere Attribute, die Sie verwenden können, und wenn Sie die Details für eine bestimmte Platte wollen, müssen Sie einige Berechnungen durchführen müssen über die Ergebnisse.
Hoffe, dass hilft!
Dies verwendet immer noch WMI – Smith
Ich benutze hdd Firmware Track in meinen Projekten. Ich programmierte hinter dem MDI-Formular, um nach der hdd Firmware-Nummer zu suchen, dann seine Schleife auf allen zur Verfügung gestellten Zahlen von hdds der Firmencomputer und wenn es irgendjemandem unter diesen zur Verfügung gestellten hdds firmwarennummern entspricht, dann laufen die Anwendung und das laden mdi Formular anderes weise zur Verfügung stellt Nachricht "Die Anwendung ist nicht auf diesem Computer registriert, bitte rufen Sie Herrn Afridi, um diese Anwendung auf 00923339176357 zu registrieren. Meine E-Mail-Adresse ist [email protected] Ich werde vollständigen Quellcode des Abrufs, wie professionell hdd Firmware-Nummer und wie zu programmieren um andere durch illegale Verwendung Ihrer App zu stoppen
Eine schöne Sache, die Sie alle Firmwarechardfirmware auf einmal spezifizieren und die Anwendung zuerst die hdd Firmwarennummer wählen lassen sollten, speichern Sie sie in einer Variablen und wählen Sie dann den Wert von Diese Variable (ein String-Wert) und Loop eins nach dem anderen mit jeder hdd-Nummer von uns logischer Operator ODER. Wenn es eine übereinstimmende Nummer unter den Firmen-hdds-Zahlen mit variablem Wert findet, dann sollte die App das Hauptformular (mdi) laden, andernfalls den Benutzer zur Registrierung benachrichtigen.
Der Beispielcode wird mit vb6 bereitgestellt. Sie können später einfach in vb.net programmieren, indem Sie verstehen, wie Sie nicht verwalteten Code in einer verwalteten .net-Anwendung aufrufen. In diesem Fall wird eine .dll.
Ihre besten Optionen Fenster api ist,
Ich habe eine einfache Suche und erhielt diese
General processor info und auch read this post
Eine perfekt funktionierende Lösung ist hier zu finden:
http://www.codeproject.com/Articles/16941/Get-Physical-HDD-Serial-Number-without-WMI
[Bearbeiten] Sorry, verpasst, dass eine re Diesbezüglich wurde bereits berichtet.
Verwenden der createfile wie unten gezeigt. Es erfordert möglicherweise administrative Berechtigungen. Fügen Sie 4 Textfelder und eine Schaltfläche in Ihrem Code hinzu.
private const int CREATE_NEW = 1;
private const int OPEN_EXISTING = 3;
private const uint GENERIC_READ = 0x80000000;
private const uint GENERIC_WRITE = 0x40000000;
// 10000000000000000000000000000000 --- GENERIC_READ
// 01000000000000000000000000000000 --- GENERIC_WRITE
// 00100000000000000000000000000000 --- GENERIC_EXECUTE
// 00010000000000000000000000000000 --- GENERIC_ALL
//Securable objects use an access mask format in which the
//four high-order bits specify generic access rights
private const int FILE_SHARE_READ = 0x1;
private const int FILE_SHARE_WRITE = 0x2;
// 00000000000000000000000000000001 --- FILE_SHARE_READ
// 00000000000000000000000000000010 --- FILE_SHARE_WRITE
// 00000000000000000000000000000100 --- FILE_SHARE_DELETE
private const int VER_PLATFORM_WIN32_NT = 2;
private const int DFP_RECEIVE_DRIVE_DATA = 0x7C088;
// 0 000000000000111 11 0 00000100010 00
// Common Device Type Required Access Custom Function Code Transfer Type
private const int INVALID_HANDLE_VALUE = -1;
public enum DriveTypes { Fixed, Removable, Unknown };
public string[] DriveStrings = { "Fixed", "Removable", "Unknown" };
[StructLayout(LayoutKind.Sequential, Size = 8)]
private class IDEREGS
{
public byte Features;
public byte SectorCount;
public byte SectorNumber;
public byte CylinderLow;
public byte CylinderHigh;
public byte DriveHead;
public byte Command;
public byte Reserved;
}
[StructLayout(LayoutKind.Sequential, Size = 32)]
private class SENDCMDINPARAMS
{
public int BufferSize;
public IDEREGS DriveRegs;
public byte DriveNumber;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public byte[] Reserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
public int[] Reserved2;
public SENDCMDINPARAMS()
{
DriveRegs = new IDEREGS();
Reserved = new byte[3];
Reserved2 = new int[4];
}
}
[StructLayout(LayoutKind.Sequential, Size = 12)]
private class DRIVERSTATUS
{
public byte DriveError;
public byte IDEStatus;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public byte[] Reserved;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 2)]
public int[] Reserved2;
public DRIVERSTATUS()
{
Reserved = new byte[2];
Reserved2 = new int[2];
}
}
[StructLayout(LayoutKind.Sequential)]
private class IDSECTOR
{
public short GenConfig;
public short NumberCylinders;
public short Reserved;
public short NumberHeads;
public short BytesPerTrack;
public short BytesPerSector;
public short SectorsPerTrack;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 3)]
public short[] VendorUnique;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 20)]
public char[] SerialNumber;
public short BufferClass;
public short BufferSize;
public short ECCSize;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 8)]
public char[] FirmwareRevision;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 40)]
public char[] ModelNumber;
public short MoreVendorUnique;
public short DoubleWordIO;
public short Capabilities;
public short Reserved1;
public short PIOTiming;
public short DMATiming;
public short BS;
public short NumberCurrentCyls;
public short NumberCurrentHeads;
public short NumberCurrentSectorsPerTrack;
public int CurrentSectorCapacity;
public short MultipleSectorCapacity;
public short MultipleSectorStuff;
public int TotalAddressableSectors;
public short SingleWordDMA;
public short MultiWordDMA;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 382)]
public byte[] Reserved2;
public IDSECTOR()
{
VendorUnique = new short[3];
Reserved2 = new byte[382];
FirmwareRevision = new char[8];
SerialNumber = new char[20];
ModelNumber = new char[40];
}
}
[StructLayout(LayoutKind.Sequential)]
private class SENDCMDOUTPARAMS
{
public int BufferSize;
public DRIVERSTATUS Status;
public IDSECTOR IDS;
public SENDCMDOUTPARAMS()
{
Status = new DRIVERSTATUS();
IDS = new IDSECTOR();
}
}
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern int CloseHandle(int hObject);
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern int CreateFile(
string lpFileName,
uint dwDesiredAccess,
int dwShareMode,
int lpSecurityAttributes,
int dwCreationDisposition,
int dwFlagsAndAttributes,
int hTemplateFile
);
[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern int DeviceIoControl(
int hDevice,
int dwIoControlCode,
[In(), Out()] SENDCMDINPARAMS lpInBuffer,
int lpInBufferSize,
[In(), Out()] SENDCMDOUTPARAMS lpOutBuffer,
int lpOutBufferSize,
ref int lpBytesReturned,
int lpOverlapped
);
private string SwapChars(char[] chars)
{
for (int i = 0; i <= chars.Length - 2; i += 2)
{
char t;
t = chars[i];
chars[i] = chars[i + 1];
chars[i + 1] = t;
}
string s = new string(chars);
return s;
}
private void button1_Click(object sender, System.EventArgs e)
{
string serialNumber = " ", model = " ", firmware = " ";
bool result;
DriveTypes driveType = DriveTypes.Unknown;
int handle, returnSize = 0;
int driveNumber = 0;
SENDCMDINPARAMS sci = new SENDCMDINPARAMS();
SENDCMDOUTPARAMS sco = new SENDCMDOUTPARAMS();
if (Environment.OSVersion.Platform == PlatformID.Win32NT)
// \\.\PhysicalDrive0 Opens the first physical drive.
// \\.\PhysicalDrive2 Opens the third physical drive.
// see more info on http://msdn.microsoft.com/en-us/library/aa365247%28VS.85%29.aspx
handle = CreateFile("\\\\.\\PhysicalDrive" + "0", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0);
else // for win'9x
handle = CreateFile("\\\\.\\Smartvsd", 0, 0, 0, CREATE_NEW, 0, 0);
if (handle != INVALID_HANDLE_VALUE)
{
sci.DriveNumber = (byte)driveNumber;
sci.BufferSize = Marshal.SizeOf(sco);
sci.DriveRegs.DriveHead = (byte)(0xA0 | driveNumber << 4);
sci.DriveRegs.Command = 0xEC;
sci.DriveRegs.SectorCount = 1;
sci.DriveRegs.SectorNumber = 1;
if (DeviceIoControl(handle, DFP_RECEIVE_DRIVE_DATA, sci, Marshal.SizeOf(sci), sco, Marshal.SizeOf(sco), ref returnSize, 0) != 0)
{
serialNumber = SwapChars(sco.IDS.SerialNumber);
model = SwapChars(sco.IDS.ModelNumber);
firmware = SwapChars(sco.IDS.FirmwareRevision);
}
textBox1.Text = serialNumber;
textBox2.Text = model;
textBox3.Text = firmware;
if ((sco.IDS.GenConfig & 0x80) == 0x40)
driveType = DriveTypes.Removable;
else if ((sco.IDS.GenConfig & 0x40) == 0x40)
driveType = DriveTypes.Fixed;
else
driveType = DriveTypes.Unknown;
CloseHandle(handle);
textBox4.Text = DriveStrings[(int)driveType];
}
}
- 1. Ermitteln der Seriennummer des USB-Laufwerks ohne WMI
- 2. Wie kann ich die WMI-Leistung in .NET verbessern?
- 3. Wie bekomme ich die Version des entfernten Betriebssystems in .Net, ohne WMI?
- 4. Wie bekomme ich den BIOS-Hersteller und das Modell in C++, ohne WMI zu verwenden?
- 5. Datenbankgröße über WMI in .NET
- 6. Wie kann ich die Gesamtgröße des physischen Speichers mit PowerShell ohne WMI ermitteln?
- 7. PC-Monitor-Informationen mit .NET/WMI erhalten
- 8. .Net Remoting ohne .Net Remoting zu verwenden?
- 9. Das .NET-Framework von Mono und WMI
- 10. WMI .NET Ungültige Abfrage
- 11. Java: Wie kann ich die Seriennummer in Aufzählungstyp zählen?
- 12. Wie veröffentlicht man WMI-Klassen in .net?
- 13. Das Ende einer Teilzeichenfolge in .NET finden
- 14. Kann ich das Typoskript ohne requireJS verwenden?
- 15. Wie kann ich die virtuelle Tastatur öffnen, ohne das Textfeld in Xcode zu verwenden?
- 16. Wie kann ich eine Seriennummer für die folgende Abfrage hinzufügen
- 17. Wie kann ich das Zentrum des Objekts finden?
- 18. Wie bekomme ich die Seriennummer von Festplatten?
- 19. Gleiche Seriennummer auf mehreren Android-Geräten. Adb ist nutzlos. Wie kann ich die Seriennummer ändern?
- 20. Wie kann ich die Dateien des lokalen Verzeichnisses durchsuchen, ohne OpenFileDialog zu verwenden? (C#)
- 21. Wie verwende ich WMI-Ereignisse in C#
- 22. Kann ich .net 4.0 beta ohne vs2010 verwenden?
- 23. Zugriff auf USB mit Java, um die Seriennummer des USB-Sticks zu finden #/unique-ID
- 24. Kann das .NET WebBrowser-Steuerelement IE9 verwenden?
- 25. Verwenden von PowerShell und WMI zum Lesen des Sicherheitsprotokolls
- 26. Wie kann ich die Liste von Erlangs Liste verketten, ohne das List-Modul zu verwenden?
- 27. Kann ich Visual Studio Community 2015 ohne .NET verwenden?
- 28. Wie kann ich die WMI-Leistung mithilfe von Delphi verbessern?
- 29. Wie kann ich() ohne abort() verwenden?
- 30. Wie kann ich die Funktion "Veröffentlichen" in Visual Studio 2008 verwenden, ohne den Inhalt des Zielordners zu löschen?
Öffnen Sie die Box und schauen Sie? – inspite
Diese so oft gefragt worden ist ... –
Nein, das ein Unterschied ist .......... er die Seriennummer jedes Volumen der Festplatte – Pritesh