#include "pch.h" #include #include #include #include #include #include //extern LPSTR g_lpszCmdLine; HANDLE CreateFile( LPCTSTR lpFileName, // pointer to name of the file DWORD dwDesiredAccess, // access (read-write) mode DWORD dwShareMode, // share mode LPSECURITY_ATTRIBUTES lpSecurityAttributes, // pointer to security descriptor DWORD dwCreationDistribution, // how to create DWORD dwFlagsAndAttributes, // file attributes HANDLE hTemplateFile // handle to file with attributes to copy ) { int oflag = 0, pmode = 0, iHandle = -1; if ((dwDesiredAccess & GENERIC_READ) && (dwDesiredAccess & GENERIC_WRITE)) oflag = _O_RDWR; else if (dwDesiredAccess & GENERIC_WRITE) oflag = _O_WRONLY; else oflag = _O_RDONLY; switch (dwCreationDistribution) { case CREATE_NEW: oflag |= (_O_CREAT | _O_EXCL); break; case CREATE_ALWAYS: case TRUNCATE_EXISTING: oflag |= _O_TRUNC; break; case OPEN_ALWAYS: oflag |= _O_CREAT; } if (dwShareMode & FILE_SHARE_READ) pmode |= _S_IREAD; if (dwShareMode & FILE_SHARE_WRITE) pmode |= _S_IWRITE; iHandle = _open(lpFileName, oflag, pmode); if (-1 == iHandle) return (HANDLE) INVALID_HANDLE_VALUE; else return (HANDLE) iHandle; } BOOL WriteFile( HANDLE hFile, // handle to file to write to LPCVOID lpBuffer, // pointer to data to write to file DWORD nNumberOfBytesToWrite, // number of bytes to write LPDWORD lpNumberOfBytesWritten, // pointer to number of bytes written LPOVERLAPPED lpOverlapped // pointer to structure needed for overlapped I/O ) { *lpNumberOfBytesWritten = (DWORD) _write(hFile, lpBuffer, (unsigned int)nNumberOfBytesToWrite); return (*lpNumberOfBytesWritten == nNumberOfBytesToWrite); } BOOL MoveFileEx( LPCTSTR lpExistingFileName, // address of name of the existing file LPCTSTR lpNewFileName, // address of new name for the file DWORD dwFlags // flag to determine how to move file ) { // // BUGBUG: Try renaming first and then delete file // if (dwFlags & MOVEFILE_REPLACE_EXISTING) { if (_access(lpNewFileName, 0) == 0) remove(lpNewFileName); } return (rename(lpExistingFileName, lpNewFileName) == 0); } BOOL CloseHandle( HANDLE hObject // handle to object to close ) { // We should check if this is really a file hande... return (!_close(hObject)); } #if 0 DWORD SearchPath( LPCTSTR lpPath, // address of search path LPCTSTR lpFileName, // address of filename LPCTSTR lpExtension, // address of extension DWORD nBufferLength, // size, in characters, of buffer LPTSTR lpBuffer, // address of buffer for found filename LPTSTR far *lpFilePart // address of pointer to file component ) { LPSTR pszPath; LPSTR pszFile; LPSTR pEnv; int len = 0, prevlen; pszPath = (LPSTR)_fcalloc(1, MAX_PATH*3); pszFile = (LPSTR)_fcalloc(1, MAX_PATH); // // Create an environment variable for searchenv to use. // strcpy(pszPath, ICW_PATH); strcat(pszPath, "="); len = strlen(pszPath); if (NULL == lpPath) { // // Directory from which the application laoded // /* prevlen = len; _fstrcpy(szPath+len, g_lpszCmdLine); for ( ; szPath[len] != ' ' && szPath[len] != '\0'; len++) ; for ( ; len > prevlen+1 && szPath[len] != '\\'; len--) ; szPath[len++] = ';'; */ // // Windows system directory // len += GetSystemDirectory(pszPath+len, MAX_PATH); pszPath[len++] = ';'; // // Windows directory // len += GetWindowsDirectory(pszPath+len, MAX_PATH); // // PATH environment variable // if ((pEnv = getenv("PATH")) != NULL) { pszPath[len++] = ';'; for ( ; *pEnv; pEnv++) pszPath[len++] = *pEnv; } pszPath[len] = '\0'; } else { lstrcpy(pszPath+len, lpPath); } // // Set the environment variable so _searchenv can use it // _putenv(pszPath); // // Append the extension to the file, if necessary // lstrcpy(pszFile, lpFileName); len = lstrlen(pszFile); if ((pszFile[len] != '.') && (lpExtension != NULL)) lstrcat(pszFile, lpExtension); _searchenv(pszFile, ICW_PATH, lpBuffer); // // Clear the temporary environment variable before freeing the memory // lstrcpy(pszFile, ICW_PATH); lstrcat(pszFile, "="); _putenv(pszFile); _ffree(pszFile); _ffree(pszPath); return (lstrlen(lpBuffer)); } #endif //0