Dies ist ein sehr häufiges Muster in der Windows-API; Sie geben der Funktion einen Puffer und die Größe des Puffers (oft als Zeichenanzahl), und der Aufruf schlägt fehl, wenn der Puffer zu klein ist.
#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);
Ihr Puffer ist sehr groß (MSDN sagt: „Die maximal unterstützte Pfadgröße ist MAX_PATH“), so sollte jede INF-Pfad halten können, aber die Funktion ist so ausgelegt, Sie es zunächst mit einem NULL aufrufen Puffer:
die Größe des Rückgabepuffers zu bestimmen, die enthalten die vollständig qualifizierten Dateinamen der angegebenen INF-Datei in dem Treiber speichern, SetupGetInfDriverStoreLocation rufen und ReturnBuffer auf NULL gesetzt ReturnBufferSize auf Null erforderlich ist, und liefern RequiredSize. SetupGetInfDriverStoreLocation gibt die erforderliche Puffergröße in RequiredSize zurück.
Ich würde dies das "peek, allocate, get" -Muster nennen. Wenn sich die Daten möglicherweise tatsächlich ändern, sollten Sie sie in einer Schleife aufrufen, bis der Aufruf "get" erfolgreich ist.