В дополнение к тому, что говорит Йоахим, вы не передаете серийный номер правильно. Вы должны передать указатель на одно значение.
DWORD disk_serialINT;
GetVolumeInformationA(NULL, NULL, NULL, &disk_serialINT, NULL, NULL, NULL, NULL);
В коде это усугубляется тем, что вы делаете здесь:
sprintf(disk_serialANSI, "%d", disk_serialINT);
Игнорирование неиницализированные переменной disk_serialANSI
, которая охватывает ответ Joachim, вы передаете указатель на строку формата "%d"
. Как только вы измените disk_serialINT
, чтобы быть единым значением, все будет лучше. Однако вы передаете значение unsigned в строку одного формата.
Пришло время отказаться от этих gnarly функций форматирования C и использовать стандартную библиотеку C++ для преобразования между целыми значениями и текстом.
Последним моментом является то, что вы должны проверить возвращаемое значение вызовов API Win32. Вы не знаете, удалось ли вызов функции выполнить. Вы не должны предполагать, что это так.Все это описано в документации к: https://msdn.microsoft.com/en-us/library/windows/desktop/aa364993.aspx
Эта программа печатает серийный номер тома, содержащего текущую директорию:
#include <Windows.h>
#include <iostream>
int main()
{
DWORD disk_serialINT;
if (!GetVolumeInformationA(NULL, NULL, NULL, &disk_serialINT, NULL,
NULL, NULL, NULL))
{
std::cout << "Failed: " << GetLastError() << std::endl;
return 1;
}
std::cout << "Current directory volume serial numnber: " << std::hex
<< disk_serialINT << std::endl;
return 0;
}
Три ошибки в этом коде, самое время обновить свои инструменты. –
Какую книгу на C++ вы используете? Он учит вас плохим практикам. –
Это мой частный проект. К сожалению, я не мог найти ни одной книги, из которой я мог бы узнать winapi. – DualCore