Treiberversion auslesen?
-
Hi,
weiss jemand, wie man die Treiberversion, so wie sie im Gerätemanager steht, ausliest? Treiberhersteller, Treiberdatum und Signaturgeber wären ebenfalls interessant.
Bisher benutze ich EnumServicesStatus() zusammen mit QueryServiceConfig(), allerdings sind da diese Informationen nicht enthalten.
MfG Hotblack
-
sooo ich hab dann doch nochmal nachgesehen (sorry wegen dem doppelpost (war ein wenig spät in der nacht glaub (oder ich hab was getrunken, kA mehr)))

auf jeden fall, schau mal:The GetFileVersionInfo function retrieves version information for the specified file.
Syntax
BOOL GetFileVersionInfo( LPTSTR lptstrFilename,
DWORD dwHandle,
DWORD dwLen,
LPVOID lpData
);und/oder
VerQueryValue Function
--------------------------------------------------------------------------------
The VerQueryValue function retrieves specified version information from the specified version-information resource. To retrieve the appropriate resource, before you call VerQueryValue, you must first call the GetFileVersionInfoSize function, and then the GetFileVersionInfo function.
Syntax
BOOL VerQueryValue( const LPVOID pBlock,
LPTSTR lpSubBlock,
PUINT lplpBuffer,
PUINT puLen
);Gruß
-
Danke, hatte mir schon gedacht, dass die als Ressource eingebunden sind, konnte aber keine Infos darüber finden.

Gruß
-
Hi nochmal

Weißt Du eigentlich, wie man an einen Treiber rankommt? Also steht ein Wert (Pfad?) in der Registry? Bzw., welche Extension haben Treiberdateien? *.???Thanks
-
Du kannst mittels EnumServicesStatus und QueryServiceConfig eine QUERY_SERVICE_CONFIG Struktur füllen, in der auch der binary name des Treibers enthalten ist. Wie sich das ganze verhält, wenn zu dem Treiber mehrere Dateien gehören, kann ich dir jetzt auch nicht sagen.

Gruß
SC_HANDLE scman = OpenSCManager(NULL,NULL,SC_MANAGER_ENUMERATE_SERVICE); if (scman) { ENUM_SERVICE_STATUS service, *lpservice; BOOL rc; DWORD bytesNeeded,servicesReturned,resumeHandle = 0; rc = EnumServicesStatus(scman,SERVICE_DRIVER,SERVICE_STATE_ALL,&service,sizeof(service), &bytesNeeded,&servicesReturned,&resumeHandle); if ((rc == FALSE) && (GetLastError() == ERROR_MORE_DATA)) { DWORD bytes = bytesNeeded + sizeof(ENUM_SERVICE_STATUS); lpservice = new ENUM_SERVICE_STATUS [bytes]; EnumServicesStatus(scman,SERVICE_DRIVER,SERVICE_STATE_ALL,lpservice,bytes, &bytesNeeded,&servicesReturned,&resumeHandle); TCHAR Buffer[1024]; // Should be enough for service info QUERY_SERVICE_CONFIG *lpqch = (QUERY_SERVICE_CONFIG*)Buffer; for (DWORD ndx = 0; ndx < servicesReturned; ndx++) { SC_HANDLE sh = OpenService(scman,lpservice[ndx].lpServiceName,SERVICE_QUERY_CONFIG); if (QueryServiceConfig(sh,lpqch,sizeof(Buffer),&bytesNeeded)) { CString strPath = lpqch->lpBinaryPathName; } CloseServiceHandle(sh); } // foreach service delete [] lpservice; } CloseServiceHandle(scman); }