Потребовалось один код переписать с С++ на С. Код под Win7. на С++ выглядел код так (и работало нормально): Код (Text): .... IFileOperation *pFileOp = NULL; BIND_OPTS3 bo = {0}; wchar_t EIFOMoniker[] = L"Elevation:Administrator!new:{3ad05575-8857-4850-9277-11b85bdb8e09}"; ... bo.cbStruct = sizeof(bo); bo.dwClassContext = CLSCTX_LOCAL_SERVER; if (CoGetObject(EIFOMoniker, &bo, __uuidof(IFileOperation), reinterpret_cast< void ** >(&pFileOp)) == S_OK) .. Пытался переписать на Си, вышло вот что: Код (Text): IFileOperationVtbl* pFileOp = NULL; BIND_OPTS3 bo = {0}; wchar_t EIFOMoniker[] = L"Elevation:Administrator!new:{3ad05575-8857-4850-9277-11b85bdb8e09}"; ... bo.cbStruct = sizeof(bo); bo.dwClassContext = CLSCTX_LOCAL_SERVER; if (CoGetObject(EIFOMoniker, (BIND_OPTS*)&bo, &IID_IFileOperation, (void **)&pFileOp) == S_OK) Но данный код почему-то не работает. Возвращая статус E_INVALIDARG (0x80070057L)
В принципе то кода и нет другова. Перед этим кодом выполняется тока CoInitialize(NULL); да, именно CoGetObject возвращает. Вообще весь это-то код находится в DLL которая внедряется в эксплорер.
Что, решил на шару взять чужой кодес тихого запуска под UAC, и даже лень разобраться с одной ф-цией?))) Не хорошо
2 onSide не умничай, кодес чужой брать я не собираюсь, а тока технологию копирования файла. причем официально документированную в MSDN. Но необходимо на Си, а не на С++ написать, а с COM ранее практически не работал, по этому и не знаю как.
Вообще сначала пробовал делать в виде шелкода, но был глюк вышеописанный, потом подумал чтобы сделать для отладки в виде DLL и как оказалась ошибка была в том, что вызывал данные функции из DllEntry (DLL_PROCESS_ATTACH), ну и подправил IFileOperation* pFileOp = NULL; К томуже баг был в том что при юзанье в виде шелкода забывал GUID копировать вместе с шелкодом