-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 为:如何调用此函数:

TCHAR  FileName[MAX_VALUE_NAME];

where #define MAX_VALUE_NAME 16383
4

1 回答 1

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”调用成功。

于 2017-02-16T12:11:23.307 回答