|
|
/*++
Copyright (c) 2001 Microsoft Corporation
Module Name:
RemoveOverlappedFlagFromCreateFile.cpp
Abstract:
This modified version of kernel32!CreateFile* prevents an app from using the FILE_FLAG_OVERLAPPED flag if the app doesn't handle it correctly.
Notes:
This is a general shim.
History:
06/22/2001 linstev Created
--*/
#include "precomp.h"
IMPLEMENT_SHIM_BEGIN(RemoveOverlappedFlagFromCreateFile) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(CreateFileA) APIHOOK_ENUM_ENTRY(CreateFileW) APIHOOK_ENUM_END
/*++
Take out FILE_FLAG_OVERLAPPED if we are on a drive
--*/
HANDLE APIHOOK(CreateFileA)( LPSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ) { if ((dwFlagsAndAttributes & FILE_FLAG_OVERLAPPED) && (GetDriveTypeFromFileNameA(lpFileName) != DRIVE_UNKNOWN)) { dwFlagsAndAttributes &= ~FILE_FLAG_OVERLAPPED; LOGN(eDbgLevelInfo, "[CreateFileA] \"%s\": removed OVERLAPPED flag", lpFileName); }
return ORIGINAL_API(CreateFileA)(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); }
/*++
Take out FILE_FLAG_OVERLAPPED if we are on a drive
--*/
HANDLE APIHOOK(CreateFileW)( LPWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes, HANDLE hTemplateFile ) { if ((dwFlagsAndAttributes & FILE_FLAG_OVERLAPPED) && (GetDriveTypeFromFileNameW(lpFileName) != DRIVE_UNKNOWN)) { dwFlagsAndAttributes &= ~FILE_FLAG_OVERLAPPED; LOGN(eDbgLevelInfo, "[CreateFileW] \"%S\": removed OVERLAPPED flag", lpFileName); }
return ORIGINAL_API(CreateFileW)(lpFileName, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); }
/*++
Register hooked functions
--*/
HOOK_BEGIN APIHOOK_ENTRY(KERNEL32.DLL, CreateFileA) APIHOOK_ENTRY(KERNEL32.DLL, CreateFileW) HOOK_END
IMPLEMENT_SHIM_END
|