2017-02-16 3 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 
); 

Wie kann ich diese Funktion aufrufen, wenn ich Dateinamen haben wie:Verwendung SetupGetInfDriverStoreLocation Funktion

TCHAR FileName[MAX_VALUE_NAME]; 

where #define MAX_VALUE_NAME 16383 

Antwort

1

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.

Verwandte Themen