Как получить уникальный номер (серийный номер/идентификатор) для процессора (CPU), SCSI, Display и IDE с использованием программы на C++, отличной от WMI и asm-кода?Как получить серийный номер для жесткого диска
ответ
Поскольку вы упоминаете WMI, я предполагаю, что вы работаете над Windows. Поиск GetVolumeInformation().
это звучит как что-то для лицензионного программного обеспечения, GetVolumeInformation() возвращает последовательный том, который изменяется каждый раз, когда диск отформатирован и является тривиальным изменением в программном обеспечении. Серийный номер производителя был бы более полезным. – hplbsh
В Windows вы можете получить информацию процессора с переменной окружения * ПРОЦЕССОР _ **, вы можете разобрать серийный номер тома из об, МАС-адрес от маршрута печати
Если вы хотите, чтобы сделать это кросс-платформенный (и если это для лицензирования программного обеспечения), то платформа с открытым исходным кодом, такая как Linux, все равно поднимает проблему на совершенно новый уровень и требует другого подхода. Однако вы все равно можете получать много информации, анализируя вывод из стандартных инструментов.
Вы действительно должны рассмотреть WMI. В прежние времена BIOS был бы полезен, но все его заменили HAL.
CodeProject всегда стоит поискать в таких случаях.
Ссылка - код C#, вопрос отмечен C++. – atoMerz
Ниже приведен код, я использую, чтобы получить серийный жесткий диск для игры, так что мошенники постоянно запрещены (и они не могут вернуться в без получения нового диска!):
string GetMachineID()
{
// LPCTSTR szHD = "C:\\"; // ERROR
string ss;
ss = "Err_StringIsNull";
UCHAR szFileSys[255],
szVolNameBuff[255];
DWORD dwSerial;
DWORD dwMFL;
DWORD dwSysFlags;
int error = 0;
bool success = GetVolumeInformation(LPCTSTR("C:\\"), (LPTSTR)szVolNameBuff,
255, &dwSerial,
&dwMFL, &dwSysFlags,
(LPTSTR)szFileSys,
255);
if (!success) {
ss = "Err_Not_Elevated";
}
std::stringstream errorStream;
errorStream << dwSerial;
return string(errorStream.str().c_str());
}
Хотя является потенциальной ошибке, после чего, если для Windows установлен на диск, отличный от C:\
, это легко исправить.
ВНИМАНИЕ! Вместо серийного номера жесткого диска это решение дает вам серийный номер громкости, который сильно отличается. –
@JustShadow Невозможно получить * фактический * серийный номер жесткого диска в Windows без использования специальных инструментов для каждого производителя. Это извлекает «серийный номер», который Windows дает вам как серийный диск, поэтому этот ответ действителен. – cybermonkey
Это полное решение: https://stackoverflow.com/questions/24049367/how-do-i-get-the-disk-drive-serial-number-in-cc/48741695#48741695 Он обматывает вызовы WMI и дополнительных инструментов не требуется –
Вы должны хотя бы добавить платформу. –