Props for C++ Internal HWID Lock.
Code:
std::string GetHWID()
{
std::string m_sResult;
HANDLE m_hFile = CreateFileW(L"\\\\.\\PhysicalDrive0", 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);
if (m_hFile == INVALID_HANDLE_VALUE)
return { };
std::unique_ptr< std::remove_pointer <HANDLE >::type, void(*)(HANDLE) > m_hDevice
{
m_hFile, [](HANDLE handle)
{
CloseHandle(handle);
}
};
STORAGE_PROPERTY_QUERY m_PropertyQuery;
m_PropertyQuery.PropertyId = StorageDeviceProperty;
m_PropertyQuery.QueryType = PropertyStandardQuery;
STORAGE_DESCRIPTOR_HEADER m_DescHeader;
DWORD m_dwBytesReturned = 0;
if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
&m_DescHeader, sizeof(STORAGE_DESCRIPTOR_HEADER), &m_dwBytesReturned, NULL))
return { };
const DWORD m_dwOutBufferSize = m_DescHeader.Size;
std::unique_ptr< BYTE[] > m_pOutBuffer{ new BYTE[m_dwOutBufferSize] { } };
if (!DeviceIoControl(m_hDevice.get(), IOCTL_STORAGE_QUERY_PROPERTY, &m_PropertyQuery, sizeof(STORAGE_PROPERTY_QUERY),
m_pOutBuffer.get(), m_dwOutBufferSize, &m_dwBytesReturned, NULL))
return { };
STORAGE_DEVICE_DESCRIPTOR* m_pDeviceDescriptor = reinterpret_cast<STORAGE_DEVICE_DESCRIPTOR*>(m_pOutBuffer.get());
const DWORD m_dwSerialNumberOffset = m_pDeviceDescriptor->SerialNumberOffset;
if (m_dwSerialNumberOffset == 0)
return { };
m_sResult = reinterpret_cast<const char*>(m_pOutBuffer.get() + m_dwSerialNumberOffset);
m_sResult.erase(std::remove_if(m_sResult.begin(), m_sResult.end(), std::isspace), m_sResult.end());
return m_sResult;
}
You will need to make a new build of your program in order to retrieve new user.