////////////////////////////////////////////////////////////////////////////////////////////// // // Win32Unicode.h // // Copyright (C) 1998, 1999 Microsoft Corporation. All rights reserved. // // Abstract : // // History : // // 05/06/1999 luish Created // ////////////////////////////////////////////////////////////////////////////////////////////// #include "Win32API.h" #include "AppManDebug.h" #include "Global.h" #include "AppMan.h" #include "Resource.h" //To flag as DBG_WIN32 #ifdef DBG_MODULE #undef DBG_MODULE #endif #define DBG_MODULE DBG_WIN32 ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// CWin32API::CWin32API(void) { FUNCTION("CWin32API::CWin32API (void)"); OSVERSIONINFO sVersionInfo; // // Default down to OS_VERSION_WIN32S in case the call to GetVersionEx() fails // m_dwOSVersion = OS_VERSION_WIN32S; sVersionInfo.dwOSVersionInfoSize = sizeof(sVersionInfo); if (GetVersionEx(&sVersionInfo)) { switch (sVersionInfo.dwPlatformId) { case VER_PLATFORM_WIN32_NT : m_dwOSVersion = OS_VERSION_WINNT; break; case VER_PLATFORM_WIN32_WINDOWS : if ((sVersionInfo.dwMajorVersion > 4)||((sVersionInfo.dwMajorVersion == 4)&&(sVersionInfo.dwMinorVersion > 0))) { m_dwOSVersion = OS_VERSION_WIN98; } else { if (1111 <= sVersionInfo.dwBuildNumber) { m_dwOSVersion = OS_VERSION_WIN95_OSR2; } else { m_dwOSVersion = OS_VERSION_WIN95; } } break; case VER_PLATFORM_WIN32s : m_dwOSVersion = OS_VERSION_WIN32S; break; } } } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// CWin32API::~CWin32API(void) { FUNCTION("CWin32API::~CWin32API (void)"); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::WideCharToMultiByte(LPCWSTR wszSourceString, const DWORD dwSourceLen, LPSTR szDestinationString, const DWORD dwDestinationLen) { FUNCTION("CWin32API::WideCharToMultiByte ()"); DWORD dwCount; dwCount = 0; // // Check to make sure that the basic incoming parameters are valid // if ((NULL == wszSourceString)||(0 == dwSourceLen)) { return 0; } // // If the dwDestinationLen parameter is set to 0, then the user is just fishing for the strlen of wszSourceString. // Otherwise the user wants to copy some stuff. // if (0 == dwDestinationLen) { while ((dwCount < dwSourceLen)&&(0 != wszSourceString[dwCount])) { dwCount++; } } else { // // Check some additional parameters for validity // if (NULL == szDestinationString) { return 0; } while ((dwCount < dwSourceLen)&&(0 != wszSourceString[dwCount])) { szDestinationString[dwCount] = (CHAR) wszSourceString[dwCount]; dwCount++; } szDestinationString[dwCount] = 0; //dwCount = ::WideCharToMultiByte(CP_ACP, 0, wszSourceString, dwSourceLen, szDestinationString, dwDestinationLen, NULL, NULL); } return dwCount; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::MultiByteToWideChar(LPCSTR szSourceString, const DWORD dwSourceLen, LPWSTR wszDestinationString, const DWORD dwDestinationLen) { FUNCTION("CWin32API::MultiByteToWideChar()"); DWORD dwCount = 0; // // Check to make sure that the basic incoming parameters are valid // if ((NULL == szSourceString)||(0 == dwSourceLen)) { return 0; } // // If the dwDestinationLen parameter is set to 0, then the user is just fishing for the strlen of wszSourceString. // Otherwise the user wants to copy some stuff. // if (0 == dwDestinationLen) { while ((dwCount < dwSourceLen)&&(0 != szSourceString[dwCount])) { dwCount++; } } else { // // Check some additional parameters for validity // if (NULL == wszDestinationString) { return 0; } while ((dwCount < dwSourceLen)&&(0 != szSourceString[dwCount])) { wszDestinationString[dwCount] = (WCHAR) szSourceString[dwCount]; dwCount++; } wszDestinationString[dwCount] = 0; //dwCount = ::MultiByteToWideChar(CP_ACP, 0, szSourceString, dwSourceLen, wszDestinationString, dwDestinationLen); } return dwCount; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetOSVersion(void) { FUNCTION("CWin32API::GetOSVersion ()"); return m_dwOSVersion; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDriveType(LPCSTR lpRootPathName) { FUNCTION("CWin32API::GetDriveType ()"); return ::GetDriveType(lpRootPathName); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDriveType(LPCWSTR lpRootPathName) { FUNCTION("CWin32API::GetDriveType ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpRootPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return GetDriveType(szString); } return DRIVE_NO_ROOT_DIR; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::IsDriveFormatted(LPCSTR lpRootPathName) { FUNCTION("CWin32API::IsDriveFormatted()"); BOOL fReturnValue = FALSE; DWORD dwVolumeSerial; if (GetVolumeInformation(lpRootPathName, NULL, 0, &(dwVolumeSerial))) { fReturnValue = TRUE; } return fReturnValue; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::IsDriveFormatted(LPCWSTR lpRootPathName) { FUNCTION("CWin32API::IsDriveFormatted()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpRootPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return IsDriveFormatted(szString); } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // // We want to make sure to create all the directories in the lpPathName tree // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::CreateDirectory(LPCSTR lpPathName, const BOOL fInitAppManRoot) { FUNCTION("CWin32API::CreateDirectory ()"); CHAR szString[MAX_PATH_CHARCOUNT+1]; DWORD dwIndex; BOOL fSuccess = TRUE; // // Does the directory already exist // if (!FileExists(lpPathName)) { // // Make sure the Application Manager root paths are build if required // if (fInitAppManRoot) { WCHAR wszAppManRoot[MAX_PATH_CHARCOUNT+1]; WCHAR wszAppManSetup[MAX_PATH_CHARCOUNT+1]; WCHAR wszString[MAX_PATH_CHARCOUNT+1]; DWORD dwDeviceIndex; // // Create the root AppMan directory on the device if it doesn't already exist BUG BUG // dwDeviceIndex = (DWORD) lpPathName[0]; (OS_VERSION_9x & GetOSVersion()) ? GetResourceStringW(IDS_APPMAN9x, wszAppManRoot, MAX_PATH_CHARCOUNT): GetResourceStringW(IDS_APPMANNT, wszAppManRoot, MAX_PATH_CHARCOUNT); swprintf(wszString, L"%c:\\%s", dwDeviceIndex, wszAppManRoot); if (FALSE == FileExists(wszString)) { CreateDirectory(wszString, FALSE); SetFileAttributes(wszString, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_READONLY); } // // Now create the root AppMan system directory on the device if it doesn't already exist // GetResourceStringW(IDS_APPMAN, wszAppManSetup, MAX_PATH_CHARCOUNT); swprintf(wszString, L"%c:\\%s\\%s", dwDeviceIndex, wszAppManRoot, wszAppManSetup); if (FALSE == FileExists(wszString)) { CreateDirectory(wszString, FALSE); SetFileAttributes(wszString, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_READONLY); } } // // Copy the first three bytes from lpPathName to szString (i.e. "C:\x") // dwIndex = 4; memcpy(szString, lpPathName, dwIndex); szString[dwIndex] = 0; // // Continue copying the lpPathName string to szString and everytime the '\' character is // detected, try to create that directory // while ((MAX_PATH_CHARCOUNT > dwIndex)&&(fSuccess)&&(0 != lpPathName[dwIndex])) { if (('\\' == lpPathName[dwIndex])&&(!FileExists(szString))) { fSuccess = ::CreateDirectoryA(szString, NULL); } szString[dwIndex] = lpPathName[dwIndex]; szString[dwIndex+1] = 0; dwIndex++; } fSuccess = ::CreateDirectoryA(szString, NULL); } return fSuccess; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::CreateDirectory(LPCWSTR lpPathName, const BOOL fInitAppManRoot) { FUNCTION("CWin32API::CreateDirectory ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return CreateDirectory(szString, fInitAppManRoot); } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::RemoveDirectory(LPCSTR lpszPathName) { FUNCTION("CWin32API::RemoveDirectory ()"); WIN32_FIND_DATA FindData; HANDLE hFindFile; BOOL fContinue; char szFileMask[MAX_PATH_CHARCOUNT], szFilename[MAX_PATH_CHARCOUNT]; // // Define the file mask // wsprintfA(szFileMask, "%s\\*.*", lpszPathName); // // For each file in the file mask, delete it if it has the archive bit on // (INVALID_HANDLE_VALUE == (hFindFile = FindFirstFile(szFileMask, &FindData))) ? fContinue = FALSE : fContinue = TRUE; while (TRUE == fContinue) { // // Check to see whether we need to step into a directory // if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { // // This is a directory, so lets delete it // if (FindData.cFileName[0] != '.') { wsprintfA(szFilename, "%s\\%s", lpszPathName, FindData.cFileName); RemoveDirectory(szFilename); ::RemoveDirectory(szFilename); } } else { wsprintfA(szFilename, "%s\\%s", lpszPathName, FindData.cFileName); SetFileAttributes(szFilename, FILE_ATTRIBUTE_NORMAL); DeleteFile(szFilename); } fContinue = FindNextFile(hFindFile, &FindData); } FindClose(hFindFile); return ::RemoveDirectory(lpszPathName); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::RemoveDirectory(LPCWSTR lpPathName) { FUNCTION("CWin32API::RemoveDirectory ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return RemoveDirectory(szString); } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDirectorySize(LPCSTR lpPathName) { FUNCTION("CWin32API::GetDirectorySize ()"); WIN32_FIND_DATA FindData; HANDLE hFindFile; BOOL fContinue; DWORD dwKilobytes; char szFileMask[MAX_PATH_CHARCOUNT], szFilename[MAX_PATH_CHARCOUNT]; // // Start at 0 // dwKilobytes = 0; // // Define the file mask // wsprintfA(szFileMask, "%s\\*.*", lpPathName); // // For each file in the file mask, delete it if it has the archive bit on // (INVALID_HANDLE_VALUE == (hFindFile = FindFirstFile(szFileMask, &FindData))) ? fContinue = FALSE : fContinue = TRUE; while (TRUE == fContinue) { // // Check to see whether we need to step into a directory // if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { if (FindData.cFileName[0] != '.') { wsprintfA(szFilename, "%s\\%s", lpPathName, FindData.cFileName); dwKilobytes += GetDirectorySize(szFilename); } } else { dwKilobytes += FindData.nFileSizeLow >> 10; dwKilobytes += FindData.nFileSizeHigh << 22; } fContinue = FindNextFile(hFindFile, &FindData); } FindClose(hFindFile); return dwKilobytes; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDirectorySize(LPCWSTR lpPathName) { FUNCTION("CWin32API::GetDirectorySize ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return GetDirectorySize(szString); } return 0; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::CreateProcess(LPSTR lpCommandLine, PROCESS_INFORMATION * lpProcessInfo) { FUNCTION("CWin32API::CreateProcess ()"); STARTUPINFO sStartupInfo; ZeroMemory(&sStartupInfo, sizeof(sStartupInfo)); sStartupInfo.cb = sizeof(sStartupInfo); ZeroMemory(lpProcessInfo, sizeof(PROCESS_INFORMATION)); return ::CreateProcess(NULL, lpCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &sStartupInfo, lpProcessInfo); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::CreateProcess(LPWSTR lpCommandLine, PROCESS_INFORMATION * lpProcessInfo) { FUNCTION("CWin32API::CreateProcess ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpCommandLine, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return CreateProcess(szString, lpProcessInfo); } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::CreateProcess(LPSTR lpApplication, LPSTR lpCommandLine, PROCESS_INFORMATION * lpProcessInfo) { FUNCTION("CWin32API::CreateProcess ()"); STARTUPINFO sStartupInfo; ZeroMemory(&sStartupInfo, sizeof(sStartupInfo)); sStartupInfo.cb = sizeof(sStartupInfo); ZeroMemory(lpProcessInfo, sizeof(PROCESS_INFORMATION)); return ::CreateProcess(lpApplication, lpCommandLine, NULL, NULL, FALSE, 0, NULL, NULL, &sStartupInfo, lpProcessInfo); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::CreateProcess(LPWSTR /*lpApplication*/, LPWSTR lpCommandLine, PROCESS_INFORMATION * lpProcessInfo) // Get rid of /W4 warning. { FUNCTION("CWin32API::CreateProcess ()"); CHAR szApplicationString[MAX_PATH_CHARCOUNT]; CHAR szCommandLineString[MAX_PATH_CHARCOUNT]; ZeroMemory(szCommandLineString, sizeof(szCommandLineString)); if (WideCharToMultiByte(lpCommandLine, MAX_PATH_CHARCOUNT, szCommandLineString, MAX_PATH_CHARCOUNT)) { ZeroMemory(szApplicationString, sizeof(szApplicationString)); if (WideCharToMultiByte(lpCommandLine, MAX_PATH_CHARCOUNT, szApplicationString, MAX_PATH_CHARCOUNT)) { return CreateProcess(szApplicationString, szCommandLineString, lpProcessInfo); } } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::IsValidFilename(LPCSTR lpFilename) { FUNCTION("CWin32API::IsValidFilename ()"); BOOL fValid = TRUE; DWORD dwStringLen, dwIndex; dwStringLen = StrLenA(lpFilename); dwIndex = strcspn(lpFilename, "\\/<>:|*?\"\x0\x1\x2\x3\x4\x5\x6\x7\x8\x9\xa\xb\xc\xd\xe\xf\x10\x11\x12\x13\x14\x15\x16\x17\x18\x19\x1a\x1b\x1c\x1d\x1e") + 1; if (255 < dwStringLen) { fValid = FALSE; } else if (1 == dwStringLen) { fValid = FALSE; } else if ((0 == _strnicmp(lpFilename, ".", 1))||(0 == _strnicmp(lpFilename, "..", 2))) { fValid = FALSE; } else if ((dwStringLen > dwIndex)&&(0 < dwIndex)) { fValid = FALSE; } return fValid; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::IsValidFilename(LPCWSTR lpFilename) { FUNCTION("CWin32API::IsValidFilename ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpFilename, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return IsValidFilename(szString); } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::FileExists(LPCSTR lpFilename) { FUNCTION("CWin32API::FileExists ()"); WIN32_FIND_DATA sFindFileInfo; HANDLE hFindFileHandle; hFindFileHandle = FindFirstFile(lpFilename, &sFindFileInfo); if (INVALID_HANDLE_VALUE == hFindFileHandle) { return FALSE; } FindClose(hFindFileHandle); return TRUE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::FileExists(LPCWSTR lpFilename) { FUNCTION("CWin32API::FileExists ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpFilename, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return FileExists(szString); } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::FileAttributes(LPCSTR lpFilename) { FUNCTION("CWin32API::FileAttributes()"); WIN32_FIND_DATA sFindFileInfo; HANDLE hFindFileHandle; hFindFileHandle = FindFirstFile(lpFilename, &sFindFileInfo); if (INVALID_HANDLE_VALUE == hFindFileHandle) { return 0; } FindClose(hFindFileHandle); return sFindFileInfo.dwFileAttributes; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::FileAttributes(LPCWSTR lpFilename) { FUNCTION("CWin32API::FileAttributes()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpFilename, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return FileAttributes(szString); } return 0; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetFileSize(LPCSTR lpFilename) { FUNCTION("CWin32API::GetFileSize()"); HANDLE hFileHandle; DWORD dwFileSize; dwFileSize = 0; hFileHandle = CreateFile(lpFilename, GENERIC_READ, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL); if (INVALID_HANDLE_VALUE != hFileHandle) { dwFileSize = (::GetFileSize(hFileHandle, NULL)) / 1024; CloseHandle(hFileHandle); } return dwFileSize; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetFileSize(LPCWSTR lpFilename) { FUNCTION("CWin32API::GetFileSize()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpFilename, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return GetFileSize(szString); } return 0; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// HANDLE CWin32API::CreateFile(LPCSTR lpFilename, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes) { FUNCTION("CWin32API::CreateFile ()"); return ::CreateFile(lpFilename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// HANDLE CWin32API::CreateFile(LPCWSTR lpFilename, DWORD dwDesiredAccess, DWORD dwShareMode, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes) { FUNCTION("CWin32API::CreateFile ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpFilename, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return CreateFile(szString, dwDesiredAccess, dwShareMode, dwCreationDisposition, dwFlagsAndAttributes); } return INVALID_HANDLE_VALUE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::DeleteFile(LPCSTR lpFilename) { FUNCTION("CWin32API::DeleteFile ()"); return ::DeleteFile(lpFilename); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::DeleteFile(LPCWSTR lpFilename) { FUNCTION("CWin32API::DeleteFile ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpFilename, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return DeleteFile(szString); } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// HANDLE CWin32API::CreateFileMapping(HANDLE hFile, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCSTR lpName) { FUNCTION("CWin32API::CreateFileMapping ()"); return ::CreateFileMapping(hFile, NULL, flProtect, dwMaximumSizeHigh, dwMaximumSizeLow, lpName); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// HANDLE CWin32API::CreateFileMapping(HANDLE hFile, DWORD flProtect, DWORD dwMaximumSizeHigh, DWORD dwMaximumSizeLow, LPCWSTR lpName) { FUNCTION("CWin32API::CreateFileMapping ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return CreateFileMapping(hFile, flProtect, dwMaximumSizeHigh, dwMaximumSizeLow, szString); } return NULL; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::CopyFile(LPCSTR lpSourceFileName, LPCSTR lpDestinationFileName, BOOL bFailIfExists) { FUNCTION("CWin32API::CopyFile ()"); return ::CopyFile(lpSourceFileName, lpDestinationFileName, bFailIfExists); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::CopyFile(LPCWSTR lpSourceFileName, LPCWSTR lpDestinationFileName, BOOL bFailIfExists) { FUNCTION("CWin32API::CopyFile ()"); CHAR szSource[MAX_PATH_CHARCOUNT]; CHAR szDestination[MAX_PATH_CHARCOUNT]; ZeroMemory(szSource, sizeof(szSource)); if (WideCharToMultiByte(lpSourceFileName, MAX_PATH_CHARCOUNT, szSource, MAX_PATH_CHARCOUNT)) { ZeroMemory(szDestination, sizeof(szDestination)); if (WideCharToMultiByte(lpDestinationFileName, MAX_PATH_CHARCOUNT, szDestination, MAX_PATH_CHARCOUNT)) { return CopyFile(szSource, szDestination, bFailIfExists); } } return FALSE; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDriveSize(LPCSTR lpRootPathName) { FUNCTION("CWin32API::GetDriveSize ()"); ULARGE_INTEGER lFreeBytesAvailableToCaller, lTotalSize, lTotalFreeBytes; DWORD dwTotalNumberOfClusters, dwSectorsPerCluster, dwBytesPerSector, dwNumberOfFreeClusters; DWORD dwReturnValue = 0; if (OS_VERSION_WIN95_OSR2 <= GetOSVersion()) { // // Excellent, we can use the better GetDiskFreeSpaceEx function // if (GetDiskFreeSpaceEx(lpRootPathName, &lFreeBytesAvailableToCaller, &lTotalSize, &lTotalFreeBytes)) { dwReturnValue = lTotalSize.LowPart >> 10; dwReturnValue += lTotalSize.HighPart << 22; } } else { // // Bummer we must make use of the GetDiskFreeSpace function // if (GetDiskFreeSpace(lpRootPathName, &dwSectorsPerCluster, &dwBytesPerSector, &dwNumberOfFreeClusters, &dwTotalNumberOfClusters)) { dwReturnValue = ((dwTotalNumberOfClusters * dwSectorsPerCluster * dwBytesPerSector) / 1024); } } return dwReturnValue; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDriveSize(LPCWSTR lpRootPathName) { FUNCTION("CWin32API::GetDriveSize ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpRootPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return GetDriveSize(szString); } return 0; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDriveFreeSpace(LPCSTR lpRootPathName) { FUNCTION("CWin32API::GetDriveFreeSpace ()"); ULARGE_INTEGER lFreeBytesAvailableToCaller, lTotalSize, lTotalFreeBytes; DWORD dwTotalNumberOfClusters, dwSectorsPerCluster, dwBytesPerSector, dwNumberOfFreeClusters; DWORD dwReturnValue = 0; if (OS_VERSION_WIN95_OSR2 <= GetOSVersion()) { // // Excellent, we can use the better GetDiskFreeSpaceEx function // if (GetDiskFreeSpaceEx(lpRootPathName, &lFreeBytesAvailableToCaller, &lTotalSize, &lTotalFreeBytes)) { dwReturnValue = lTotalFreeBytes.LowPart >> 10; dwReturnValue += lTotalFreeBytes.HighPart << 22; } } else { // // Bummer we must make use of the GetDiskFreeSpace function // if (GetDiskFreeSpace(lpRootPathName, &dwSectorsPerCluster, &dwBytesPerSector, &dwNumberOfFreeClusters, &dwTotalNumberOfClusters)) { dwReturnValue = ((dwNumberOfFreeClusters * dwSectorsPerCluster * dwBytesPerSector) / 1024); } } return dwReturnValue; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDriveFreeSpace(LPCWSTR lpRootPathName) { FUNCTION("CWin32API::GetDriveFreeSpace ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpRootPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return GetDriveFreeSpace(szString); } return 0; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDriveUserFreeSpace(LPCSTR lpRootPathName) { FUNCTION("CWin32API::GetDriveUserFreeSpace ()"); ULARGE_INTEGER lFreeBytesAvailableToCaller, lTotalSize, lTotalFreeBytes; DWORD dwTotalNumberOfClusters, dwSectorsPerCluster, dwBytesPerSector, dwNumberOfFreeClusters; DWORD dwReturnValue = 0; if (OS_VERSION_WIN95_OSR2 <= GetOSVersion()) { // // Excellent, we can use the better GetDiskFreeSpaceEx function // if (GetDiskFreeSpaceEx(lpRootPathName, &lFreeBytesAvailableToCaller, &lTotalSize, &lTotalFreeBytes)) { dwReturnValue = lFreeBytesAvailableToCaller.LowPart >> 10; dwReturnValue += lFreeBytesAvailableToCaller.HighPart << 22; } } else { // // Bummer we must make use of the GetDiskFreeSpace function // if (GetDiskFreeSpace(lpRootPathName, &dwSectorsPerCluster, &dwBytesPerSector, &dwNumberOfFreeClusters, &dwTotalNumberOfClusters)) { dwReturnValue = ((dwNumberOfFreeClusters * dwSectorsPerCluster * dwBytesPerSector) / 1024); } } return dwReturnValue; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// DWORD CWin32API::GetDriveUserFreeSpace(LPCWSTR lpRootPathName) { FUNCTION("CWin32API::GetDriveUserFreeSpace ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpRootPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return GetDriveUserFreeSpace(szString); } return 0; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::GetVolumeInformation(LPCSTR lpRootPathName, LPSTR lpVolumeLabel, const DWORD dwVolumeLabelSize, LPDWORD lpdwVolumeSerialNumber) { FUNCTION("CWin32API::GetVolumeInformation ()"); return ::GetVolumeInformation(lpRootPathName, lpVolumeLabel, dwVolumeLabelSize, lpdwVolumeSerialNumber, NULL, NULL, NULL, 0); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::GetVolumeInformation(LPCWSTR lpRootPathName, LPSTR lpVolumeLabel, const DWORD dwVolumeLabelSize, LPDWORD lpdwVolumeSerialNumber) { FUNCTION("CWin32API::GetVolumeInformation ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpRootPathName, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return GetVolumeInformation(szString, lpVolumeLabel, dwVolumeLabelSize, lpdwVolumeSerialNumber); } return 0; } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::SetFileAttributes(LPCSTR lpFilename, const DWORD dwFileAttributes) { FUNCTION("CWin32API::SetFileAttributes ()"); return ::SetFileAttributes(lpFilename, dwFileAttributes); } ////////////////////////////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////////////////////////////// BOOL CWin32API::SetFileAttributes(LPCWSTR lpFilename, const DWORD dwFileAttributes) { FUNCTION("CWin32API::SetFileAttributes ()"); CHAR szString[MAX_PATH_CHARCOUNT]; ZeroMemory(szString, sizeof(szString)); if (WideCharToMultiByte(lpFilename, MAX_PATH_CHARCOUNT, szString, MAX_PATH_CHARCOUNT)) { return SetFileAttributes(szString, dwFileAttributes); } return 0; }