В настоящее время я изучаю VSHADOW.EXE 3.0 из MS Windows SDK 6.1. Я сделал версию, которая может быть скомпилирована в DLL, которая экспортирует только одну вновь написанную функцию, которая ожидает командную строку в виде строки, токенизирует ее и затем вызывает старый wmain
. DLL не COM-сервер.
Он работает точно так же, как старый, когда скомпилирован как EXE, но не совсем работает, когда скомпилирован как DLL, потому что этот вызов не выполняется:
CoInitializeSecurity(NULL, -1, NULL, NULL,
RPC_C_AUTHN_LEVEL_PKT_PRIVACY,
RPC_C_IMP_LEVEL_IDENTIFY,
NULL, EOAC_NONE, NULL);
, который завершается с ошибкой HRESULT
0x80010119
(RPC_E_TOO_LATE
, Безопасность должна быть инициализирована перед маршалингом или демаршалированием любых интерфейсов. Его нельзя изменить после инициализации. )
Я запускаю экспортированную функцию из программы VB6, где функция импортируется с помощью Declare Function vss Lib vshadow.dll ...
.
Означает ли ошибка, что программа VB6 уже называется CoInitializeSecurity
? Что я могу сделать против ошибки?
Кроме того, у меня есть еще один вопрос: почему были выбраны именно значения безопасности RPC_C_AUTHN_LEVEL_PKT_PRIVACY
и RPC_C_IMP_LEVEL_IDENTIFY
? Какое влияние окажут другие настройки?