использовать функцию SetupGetInfDriverStoreLocation

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 как:

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.

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

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]