Ответы пользователя по тегу C++
  • Почему драйвер зависает, и не вызывает DeviceAdd функцию, а только DriverEntry?

    @armadillo-cld Автор вопроса
    Проблема была в коде драйвера.
    Вот рабочий Hello World
    #include <ntddk.h>  
    #include <wdm.h>
    
    VOID DriverUnload(PDRIVER_OBJECT Driver)
    {
    	UNREFERENCED_PARAMETER(Driver);
    	return;
    }
    
    NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObject, PUNICODE_STRING RegistryPath)
    {
    UNREFERENCED_PARAMETER(pDriverObject);
    UNREFERENCED_PARAMETER(RegistryPath);
    DbgPrint("Hello, world!");
    pDriverObject->DriverUnload = 
    return STATUS_SUCCESS;
    }


    Как оказалось, не всегда для драйвера нужно создавать устройство (IoCreateDevice), что бы потом в Unload прописать его удаление. Достаточно просто добавить функцию Unload и добавить её в pDriverObject, и всё заработает.
    Ответ написан
    Комментировать
  • Что делать если listen возвращает 10022?

    @armadillo-cld Автор вопроса
    Так и не понял в чём заключалась проблема, но мне кажется что нужно было использовать ::bind а не bind
    Нашел рабочий код тут: https://www.binarytides.com/code-tcp-socket-server...
    WSACleanup();
    	WSADATA wsaData;
    	SOCKET sListen, newConnection;
    	struct sockaddr_in server, client;
    	int c;
    	
    	if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
    		dlg->AddLog("Error WSAStartup");
    		return -1;
    	}
    
    	if ((sListen = socket(AF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET) {
    		dlg->AddLog("Error create socket sListen");
    		return -1;
    	}
    
    	server.sin_family = AF_INET;
    	server.sin_addr.s_addr = inet_addr(IP.c_str());
    	server.sin_port = htons(atoi(PORT.c_str()));
    
    	int result = ::bind(sListen, (struct sockaddr*)&server, sizeof(server));
    	if (result != 0) {
    		string code = to_string(WSAGetLastError());
    		dlg->AddLog(string("Bind error: " + code).c_str());
    	}
    
    	listen(sListen, 256);
    
    	dlg->AddLog("Waiting for connections...");
    
    	c = sizeof(struct sockaddr_in);
    
    	newConnection = accept(sListen, (struct sockaddr*)&client, &c);
    	if (newConnection == INVALID_SOCKET) {
    		dlg->AddLog("Error accept");
    	}
    
    	dlg->AddLog("Connected new user!");
    
    	closesocket(sListen);
    Ответ написан
    Комментировать
  • InternetReadFile добавляет ересь в конец строки. Что делать?

    @armadillo-cld Автор вопроса
    Кхм-кхм...
    Мне, наверное, пора идти спать, 5 часов утра как-никак.
    Решение возникло сразу же, когда я посмотрел на массив.
    Объявлен был так:
    strContent[1024];
    По сути там же ничего нет, так что было достаточно заполнить его нулями:
    strContent[1024] = {0};
    И всё заработало.
    Не расценивайте как спам, просто был невнимателен, а решение оставлю, вдруг у кого то тоже такое будет.
    Ответ написан
    2 комментария
  • Не получается внедрить dll в процесс?

    @armadillo-cld Автор вопроса
    Сам смеялся. Решение было достаточно лёгким.
    Я вызывал функцию не правильно.
    Вызывал:
    di.inject_DLL("winhex.exe", di.GetPID("winhex.exe"));

    Нужно:
    di.inject_DLL("module.dll", di.GetPID("winhex.exe"));

    Всем спасибо за помощь.
    Ответ написан
    Комментировать