Я хочу защитить свое приложение.Поэтому я читаю серийный номер жесткого диска и сравниваю.Приложение имеет хороший результат в режиме администратора, но оно имеет плохой результат в стандартном режиме пользователя.
Я написал свое приложение на C #.Но для чтения серийного номера жесткого диска я использовал файл dll, который я написал в Delphi.
hDevice := CreateFile( '\\.\PhysicalDrive0:', GENERIC_READ or GENERIC_WRITE ,
FILE_SHARE_READ or FILE_SHARE_WRITE , nil, OPEN_EXISTING, 0, 0 );
Я пытаюсь использовать NET, поэтому я использовал класс WMI Win32_DiskDrive
, но этот метод также имеет плохие результаты в стандартном пользовательском режиме.
private string getserial()
{
string SerialNumber = "";
string dataForSerial = string.Empty;
ManagementObjectSearcher Finder = new ManagementObjectSearcher("Select * from Win32_OperatingSystem");
string Name = "";
foreach (ManagementObject OS in Finder.Get()) Name = OS["Name"].ToString();
// Name = "Microsoft Windows XP Professional|C:\WINDOWS|\Device\Harddisk0\Partition1"
int ind = Name.IndexOf("Harddisk") + 8;
int HardIndex = Convert.ToInt16(Name.Substring(ind, 1));
Finder = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE Index=" + HardIndex);
foreach (ManagementObject HardDisks in Finder.Get())
foreach (ManagementObject HardDisk in HardDisks.GetRelated("Win32_PhysicalMedia"))
SerialNumber = HardDisk["SerialNumber"].ToString();
// SerialNumber = dataForSerial;
return SerialNumber;
}
В стандартном пользовательском режиме:
- В случае Delphi dll выдает ошибку отказа в доступе
- В случае WMI выводотличается от обычного пользователя от администратора.
Примечание : эта проблема (№ 2) существует только в Windows 7.