Это очень общий шаблон в Windows API,; вы предоставляете функции буфер и размер буфера (часто как число символов), и вызов будет терпеть неудачу, если буфер слишком мал.
#define MAX_VALUE_NAME 16383
TCHAR fullpath[MAX_VALUE_NAME];
BOOL result = SetupGetInfDriverStoreLocation(TEXT("NameOfMyFile.inf"), 0, 0, fullpath, MAX_VALUE_NAME, 0);
if (result) MessageBox(0, fullpath, 0, 0);
Ваш буфер очень большой (MSDN говорит: «Максимальный поддерживаемый размер путь MAX_PATH»), поэтому он должен быть в состоянии провести любой .inf путь, но функция разработана таким образом, вы можете сначала вызвать его с NULL буфер:
для определения размера буфера возврата, который требуется, чтобы содержать полное имя файла из указанного файла INF в хранилище драйверов , вызовите SetupGetInfDriverStoreLocation и установить ReturnBuffer в NULL, ReturnBufferSize к нулю , и поставьте RequiredSize. SetupGetInfDriverStoreLocation вернет необходимый размер буфера в RequiredSize.
Я бы назвал это шаблоном «заглянуть, выделите, получите». Если есть вероятность, что данные могут действительно измениться, вы должны вызвать их в цикле до тех пор, пока вызов «получить» не удастся.