Here is the bug/problem.
VMProtectSetSerialNumber() returned: 32
VMProtectGetSerialNumberData() returned: True
Despite it return True, serial number data is empty when state is other than 0
How to get serial data with state <>0 ?
It’s useful for many porposes.
VMProtectGetSerialNumberData(VMProtectSerialNumberData *data, int size) returns FALSE in two cases:
if (data == NULL) return FALSE;
if (size < sizeof(VMProtectSerialNumberData)) return FALSE;
In other cases VMProtectGetSerialNumberData returns TRUE. Anyway, VMProtectGetSerialNumberData returns the current state of you serial number in VMProtectSerialNumberData.nState, so you can check it before usage of VMProtectSerialNumberData like this:
VMProtectSerialNumberData data;
...
if (VMProtectGetSerialNumberData(&data, sizeof(data)) && data.nState == SERIAL_STATE_SUCCESS) {
// your serial number is valid and "data" isn't empty
}