2017-02-16 12 views
-1
BOOL SetupGetInfDriverStoreLocation(
    _In_  PCTSTR    FileName, 
    _In_opt_ PSP_ALTPLATFORM_INFO AlternatePlatformInfo, 
    _In_opt_ PCTSTR    LocaleName, 
    _Out_  PTSTR    ReturnBuffer, 
    _In_  DWORD    ReturnBufferSize, 
    _Out_opt_ PDWORD    RequiredSize 
); 

Как я могу назвать эту функцию, если у меня есть FileName как:использование функции SetupGetInfDriverStoreLocation

TCHAR FileName[MAX_VALUE_NAME]; 

where #define MAX_VALUE_NAME 16383 

ответ

1

Это очень общий шаблон в 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.

Я бы назвал это шаблоном «заглянуть, выделите, получите». Если есть вероятность, что данные могут действительно измениться, вы должны вызвать их в цикле до тех пор, пока вызов «получить» не удастся.