int WINAPI WinMain()

in src/main/cpp/cleaner/windows/src/main.c [428:485]


int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hi, PSTR pszCmdLine, int nCmdShow) {
    UNREFERENCED_PARAMETER(hInstance);
    UNREFERENCED_PARAMETER(hi);
    UNREFERENCED_PARAMETER(pszCmdLine);
    UNREFERENCED_PARAMETER(nCmdShow);
    int argumentsNumber = 0;
    DWORD i=0;
    DWORD  threadCounter = 0;
    DWORD dwThread;
    WCHAR ** commandLine = CommandLineToArgvW(GetCommandLineW(), &argumentsNumber);
    HANDLE * runningThreads = (HANDLE *) LocalAlloc(LPTR, sizeof(HANDLE) * MAXIMUM_THREADS);
    
    for(i=0;i<MAXIMUM_THREADS;i++) {
        runningThreads[i] = INVALID_HANDLE_VALUE;
    }
    changeCurrentDirectory();
    
    if(argumentsNumber==2) {
        WCHAR * filename = commandLine[1];
        HANDLE fileList = CreateFileW(filename, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, 0, OPEN_EXISTING, FILE_FLAG_DELETE_ON_CLOSE, 0);
        if(fileList!=0) {
            WCHAR ** files = NULL;
            DWORD number = 0;
            DWORD allThreadsUsed=0;
            readStringList(fileList, &files, &number);
            CloseHandle(fileList);
            
            if(files!=NULL) {
                Sleep(INITIAL_DELAY);
                for(i=0;i<number;i++) {
                    WCHAR * file = files[i];
                    if(file!=NULL) {
                        if(lstrlenW(file)>0)  {
                            getFreeIndexForNextThread(runningThreads, MAXIMUM_THREADS, &threadCounter);
                            runningThreads [threadCounter] = CreateThread( NULL, 0, &deleteFileThread, (LPVOID) file, 0, &dwThread );
                            threadCounter++;
                            if(threadCounter==MAXIMUM_THREADS) allThreadsUsed = 1;
                        }
                    }
                }
                
                WaitForMultipleObjects(allThreadsUsed ? MAXIMUM_THREADS : threadCounter,
                        runningThreads, TRUE, INFINITE);
                
                for(i=0;i<number;i++) {
                    if(files[i]!=NULL) LocalFree(files[i]);
                }
                
                LocalFree(files);
            }
        }
    }
    LocalFree(commandLine);
    LocalFree(runningThreads);
    //removeItself();
    removeItselfUsingCmd();
    return 0;
}