Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

StartService & SetHook & OpenFileMapping все вместе не работает :(

2.7K
02 февраля 2007 года
barracuda
76 / / 29.03.2004
Помогите разобраться OpenFileMapping возвращает "отказано в доступе".
Делаю так:
Создаю сервис, в сервисе создаю МапФайл с именем "blabla", загружаю DLLку с хуком, при инициализации DLLки открываю МапФайл с тем же именем. Dllка в контексте сервиса работает. В любом другом контексте OpenFileMapping возвращает "отказано в доступе". Но если Хук запускаю не из сервиса, а из простой программы все работает нормально. Объясните где я туп?


//Начало HookDll.DLL
BOOL GetMap()
{
//Открывает МапФайл и если ошибка выводим сообщение об ошибке
hMapObject = OpenFileMapping(FILE_MAP_WRITE, TRUE, "blabla");
if(hMapObject == NULL){
FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), (LPTSTR) &lpMsgBuf, 0, NULL);
MessageBox(NULL, lpMsgBuf, "Error", 0);
return FALSE;
}
}

//Старт DLL
BOOL WINAPI DllEntryPoint( HINSTANCE hinstDll, DWORD fdwRreason, LPVOID){
if(fdwRreason == DLL_PROCESS_ATTACH) GetMap();
}

//Функция Хука
ULONG WINAPI KeyboardProc(int code,WPARAM wParam,LPARAM lParam){return 0;}
//Конец HookDll.DLL


//Начало Service.exe
BOOL AddHook ()
{
//Создаем МапФайл в файле подкачки
hMapObject = CreateFileMapping(0xFFFFFFFF, NULL, PAGE_READWRITE, 0, 256, "blabla");
Struct = (PVOID)MapViewOfFile(hMapObject, FILE_MAP_ALL_ACCESS, 0, 0, 0);

//Загружаем DLLку и стартуем Хук
hLib = LoadLibrary("HookDll.dll");
KeybrdProc = (HOOKPROC)GetProcAddress(hLib, "KeyboardProc");
hHook = SetWindowsHookEx(WH_KEYBOARD, KeybrdProc, hLib, 0);
}

void MyServiceStart ()
{
//Инициализируем сервис
memset(&MyServiceStatus, 0, sizeof(MyServiceStatus))
MyServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS | SERVICE_INTERACTIVE_PROCESS;
MyServiceStatus.dwCurrentState = SERVICE_RUNNING;
MyServiceStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN;
MyServiceStatus.dwWaitHint = 1;
MyServiceStatusHandle = RegisterServiceCtrlHandler(NPFServiceName, MyHandler);
SetServiceStatus (MyServiceStatusHandle, &MyServiceStatus);

AddHook ();
whie(0);
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE, LPSTR, int)
{
//запускаем сервис
SERVICE_TABLE_ENTRY DispatchTable[] = {{TEXT("MyService"), MyServiceStart}, {NULL, NULL}};
StartServiceCtrlDispatcher( DispatchTable);
}
//Конец Service.exe

Заранее спасибо!
2.7K
05 февраля 2007 года
barracuda
76 / / 29.03.2004
Цитата: barracuda
Помогите разобраться OpenFileMapping возвращает "отказано в доступе".




Похоже никто незнает...
а все оказалось очь просто... добавил сикьюрити и все заработало:

SECURITY_ATTRIBUTES sa;
SECURITY_DESCRIPTOR sd;

InitializeSecurityDescriptor(&sd,SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);

sa.lpSecurityDescriptor = &sd;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;

hMapObject = CreateFileMapping(h, &sa, PAGE_READWRITE, 0, size, Name);

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог