/*++ Copyright (c) 1997-1999 Microsoft Corporation Module Name: ntutils.c Abstract: This module contains various tools from NT land. Made a separate file because of the use of various nt headers. --*/ #include #pragma hdrstop #include #include BOOL FrsIsDiskWriteCacheEnabled( IN PWCHAR Path ) /*++ Description: Determines if the disk has enabled write caching. Arguments: Path - Fully qualified path of a file or directory Return value: TRUE if write cache is enabled, FALSE otherwise. --*/ { #undef DEBSUB #define DEBSUB "FrsIsDiskWriteCacheEnabled:" DWORD WStatus; ULONG bytesTransferred; PWCHAR Volume = NULL; HANDLE driveHandle = INVALID_HANDLE_VALUE; DISK_CACHE_INFORMATION cacheInfo; cacheInfo.WriteCacheEnabled = FALSE; try { // // Extract the volume from Path // Volume = FrsWcsVolume(Path); if (!Volume) { goto CLEANUP; } // // Open handle to the PhysicalDrive // DPRINT1(4, ":S: Checking the write cache state on %ws\n", Volume); driveHandle = CreateFile(Volume, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if (!HANDLE_IS_VALID(driveHandle)) { WStatus = GetLastError(); DPRINT1_WS(4, ":S: WARN - Could not open drive %ws;", Volume, WStatus); goto CLEANUP; } // // Get cache info - IOCTL_DISK_GET_CACHE_INFORMATION // if (!DeviceIoControl(driveHandle, IOCTL_DISK_GET_CACHE_INFORMATION, NULL, 0, &cacheInfo, sizeof(DISK_CACHE_INFORMATION), &bytesTransferred, NULL)) { WStatus = GetLastError(); DPRINT1_WS(4, ":S: WARN - DeviceIoControl(%ws);", Volume, WStatus); goto CLEANUP; } DPRINT2(4, ":S: NEW IOCTL: Write cache on %ws is %s\n", Volume, (cacheInfo.WriteCacheEnabled) ? "Enabled (WARNING)" : "Disabled"); CLEANUP:; } except (EXCEPTION_EXECUTE_HANDLER) { GET_EXCEPTION_CODE(WStatus); DPRINT_WS(0, "ERROR - Exception.", WStatus); } // // Cleanup handles, memory, ... // try { FRS_CLOSE(driveHandle ); FrsFree(Volume); } except (EXCEPTION_EXECUTE_HANDLER) { GET_EXCEPTION_CODE(WStatus); DPRINT_WS(0, "ERROR - Cleanup Exception.", WStatus); } return cacheInfo.WriteCacheEnabled; } // IsDiskWriteCacheEnabled