Ich versuche COM-Sicherheit von DLL zu initialisieren, aber ich bekomme Fehler 800401f0
. Im mit meist einen standart Ansatz,Initialisierung der COM-Sicherheit fehlgeschlagen
Code:
HRESULT hres;
hres = CoInitializeEx(0, COINIT_MULTITHREADED);
// Step 2: --------------------------------------------------
// Set general COM security levels --------------------------
hres = CoInitializeSecurity(
NULL,
-1, // COM authentication
NULL, // Authentication services
NULL, // Reserved
RPC_C_AUTHN_LEVEL_DEFAULT, // Default authentication
RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
NULL, // Authentication info
EOAC_NONE, // Additional capabilities
NULL // Reserved
);
und es funktioniert ziemlich gut, wenn ich es von meinem app.exe laufen, aber Problem ist, dass im Innern es .DLL- ausgeführt wird, der tatsächlich ist ein Funktionserweiterer für Main.exe (das habe ich keinen Zugang - Quelle oder irgendwelche).
Und der ganze Code, den ich verwende, um Maschinendaten wie zu erhalten - BIOS Version, über IWbemClassObject
& IEnumWbemClassObject
, so frag du mich, was sind die leichter/einfachen Wege zur Lösung es, oder retriving die Hardware-Daten (wie BIOSVersion
Win32_BIOS SerialNumber
Win32_VideoController Name
?
in Ordnung, jetzt ist es ein bisschen klarer, also sollte ich einen Aufruf für 'DLLMain DLLDLL_THREAD_ATTACH' machen? 'BOOL APIENTRY DllMain (HMODULE hModule, \t DWORD ul_reason_for_call, \t LPVOID LpReserved \t)' 'Fall DLL_THREAD_ATTACH: SetCOMInit()' - dass das, was Worker-Thread wäre? – LighFusion
Ich bin mir nicht sicher, ob ich richtig verstanden habe, aber Sie können nicht einfach COM in DllMain Anruf initialisieren. Sie müssen einen Thread erstellen, der eigentlich ein kniffliges Geschäft ist: http://stackoverflow.com/questions/1688290/creating-a-thread-in-dllmain –
Verdammt, das scheint wirklich hart, vielleicht gibt es ein paar bessere Möglichkeiten HWID-Informationen abrufen, um das Programm auf der Maschine, die es ausführt, zu binden. – LighFusion