/*++ Copyright (c) 1998 Microsoft Corporation Module Name: main.c Abstract: Implements a small utility that fills the disk for purposes of free space testing. Author: Jim Schmidt (jimschm) 18-Aug-2000 Revision History: () --*/ #include "pch.h" #include "wininet.h" #include HANDLE g_hHeap; HINSTANCE g_hInst; BOOL Init ( VOID ) { g_hHeap = GetProcessHeap(); g_hInst = GetModuleHandle (NULL); UtInitialize (NULL); return TRUE; } VOID Terminate ( VOID ) { UtTerminate (); } VOID HelpAndExit ( VOID ) { // // This routine is called whenever command line args are wrong // fprintf ( stderr, "Command Line Syntax:\n\n" " filler [/D:] [/C: [/M]]\n" " filler /Q [/D:]\n" "\nDescription:\n\n" " filler creates a file (bigfile.dat) on the current or specified\n" " drive, leaving only the specified amount of free space on the drive.\n" "\nArguments:\n\n" " free_space Specifies the amount of free space to leave on\n" " disk.\n" " /D Specifies the drive letter to fill (i.e. /D:C)\n" " /Q Queries the free space on the disk\n" " /C Executes command line specified in \n" " /M Issue message box if command line alters disk space\n" ); exit (1); } INT __cdecl _tmain ( INT argc, PCTSTR argv[] ) { TCHAR curDir[MAX_PATH]; TCHAR curFileS[MAX_PATH]; TCHAR curFileD[MAX_PATH]; PCTSTR cmdLine = NULL; PCTSTR cmdPtr = NULL; TCHAR newCmdLine[MAX_PATH]; GetCurrentDirectory (ARRAYSIZE(curDir), curDir); cmdLine = GetCommandLine (); if (!cmdLine) { _tprintf ("Error while getting the command line.\n"); exit (-1); } cmdPtr = _tcsstr (cmdLine, TEXT("loadstate")); if (!cmdPtr) { _tprintf ("Error while getting the command line.\n"); exit (-1); } StringCopyAB (newCmdLine, cmdLine, cmdPtr); StringCat (newCmdLine, TEXT("loadstate_u.exe")); cmdPtr = _tcschr (cmdPtr, TEXT(' ')); if (!cmdPtr) { _tprintf ("Error while getting the command line.\n"); exit (-1); } StringCat (newCmdLine, cmdPtr); // // Begin processing // if (!Init()) { exit (-1); } // // Do work here // { BOOL result = FALSE; STARTUPINFO startupInfo; PROCESS_INFORMATION processInformation; DWORD exitCode = -1; StringCopy (curFileS, curDir); StringCopy (AppendWack (curFileS), TEXT("guitrn_u.dll")); StringCopy (curFileD, curDir); StringCopy (AppendWack (curFileD), TEXT("guitrn.dll")); CopyFile (curFileS, curFileD, FALSE); StringCopy (curFileS, curDir); StringCopy (AppendWack (curFileS), TEXT("unctrn_u.dll")); StringCopy (curFileD, curDir); StringCopy (AppendWack (curFileD), TEXT("unctrn.dll")); CopyFile (curFileS, curFileD, FALSE); StringCopy (curFileS, curDir); StringCopy (AppendWack (curFileS), TEXT("script_u.dll")); StringCopy (curFileD, curDir); StringCopy (AppendWack (curFileD), TEXT("script.dll")); CopyFile (curFileS, curFileD, FALSE); StringCopy (curFileS, curDir); StringCopy (AppendWack (curFileS), TEXT("sysmod_u.dll")); StringCopy (curFileD, curDir); StringCopy (AppendWack (curFileD), TEXT("sysmod.dll")); CopyFile (curFileS, curFileD, FALSE); StringCopy (curFileS, curDir); StringCopy (AppendWack (curFileS), TEXT("migism_u.dll")); StringCopy (curFileD, curDir); StringCopy (AppendWack (curFileD), TEXT("migism.dll")); CopyFile (curFileS, curFileD, FALSE); ZeroMemory (&startupInfo, sizeof (STARTUPINFO)); startupInfo.cb = sizeof (STARTUPINFO); ZeroMemory (&processInformation, sizeof (PROCESS_INFORMATION)); result = CreateProcess ( NULL, newCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &startupInfo, &processInformation ); if (result && processInformation.hProcess && (processInformation.hProcess != INVALID_HANDLE_VALUE)) { WaitForSingleObject (processInformation.hProcess, INFINITE); if (!GetExitCodeProcess (processInformation.hProcess, &exitCode)) { exitCode = -1; } exit (exitCode); } } // // End of processing // Terminate(); return 0; }