/*++ Copyright (c) 1999 Microsoft Corporation Module Name: osfiles.c Abstract: Author: Calin Negreanu (calinn) 08 Mar 2000 Revision History: --*/ // // Includes // #include "pch.h" #include "logmsg.h" #include "osfiles.h" #define DBG_OSFILES "OsFiles" // // Strings // // None // // Constants // // None // // Macros // // None // // Types // // None // // Globals // MIG_ATTRIBUTEID g_OsFileAttribute; PCTSTR g_InfPath = NULL; // // Macro expansion list // // None // // Private function prototypes // // None // // Macro expansion definition // // None // // Private prototypes // SGMENUMERATIONCALLBACK SgmOsFilesCallback; VCMENUMERATIONCALLBACK VcmOsFilesCallback; // // Code // BOOL WINAPI OsFilesSgmInitialize ( IN PMIG_LOGCALLBACK LogCallback, IN PVOID Reserved ) { HINF infHandle; UINT sizeNeeded; ENVENTRY_TYPE dataType; LogReInit (NULL, NULL, NULL, (PLOGCALLBACK) LogCallback); g_OsFileAttribute = IsmRegisterAttribute (S_ATTRIBUTE_OSFILE, FALSE); if (IsmGetEnvironmentValue ( IsmGetRealPlatform (), NULL, S_GLOBAL_INF_HANDLE, (PBYTE)(&infHandle), sizeof (HINF), &sizeNeeded, &dataType ) && (sizeNeeded == sizeof (HINF)) && (dataType == ENVENTRY_BINARY) ) { if (!InitMigDbEx (infHandle)) { DEBUGMSG((DBG_ERROR, "Error initializing OsFiles database")); return FALSE; } } return TRUE; } BOOL WINAPI OsFilesSgmQueueEnumeration ( IN PVOID Reserved ) { ENCODEDSTRHANDLE pattern; pattern = IsmCreateSimpleObjectPattern (NULL, TRUE, NULL, TRUE); IsmHookEnumeration (MIG_FILE_TYPE, pattern, SgmOsFilesCallback, (ULONG_PTR) 0, TEXT("OsFiles")); IsmDestroyObjectHandle (pattern); return TRUE; } BOOL WINAPI OsFilesSgmQueueHighPriorityEnumeration ( IN PVOID Reserved ) { ENCODEDSTRHANDLE pattern; pattern = IsmCreateSimpleObjectPattern (NULL, TRUE, NULL, TRUE); IsmHookEnumeration (MIG_FILE_TYPE, pattern, SgmOsFilesCallback, (ULONG_PTR) 0, TEXT("OsFiles")); IsmDestroyObjectHandle (pattern); return TRUE; } UINT SgmOsFilesCallback ( PCMIG_OBJECTENUMDATA Data, ULONG_PTR CallerArg ) { FILE_HELPER_PARAMS params; params.ObjectName = Data->ObjectName; params.NativeObjectName = Data->NativeObjectName; params.Handled = FALSE; params.FindData = (PWIN32_FIND_DATA)(Data->Details.DetailsData); params.ObjectNode = Data->ObjectNode; params.ObjectLeaf = Data->ObjectLeaf; params.IsNode = Data->IsNode; params.IsLeaf = Data->IsLeaf; MigDbTestFile (¶ms); return CALLBACK_ENUM_CONTINUE; } BOOL WINAPI OsFilesVcmInitialize ( IN PMIG_LOGCALLBACK LogCallback, IN PVOID Reserved ) { HINF infHandle; UINT sizeNeeded; ENVENTRY_TYPE dataType; LogReInit (NULL, NULL, NULL, (PLOGCALLBACK) LogCallback); if (IsmGetRealPlatform () == PLATFORM_DESTINATION) { // we don't have any work to do SetLastError (ERROR_SUCCESS); return FALSE; } g_OsFileAttribute = IsmRegisterAttribute (S_ATTRIBUTE_OSFILE, FALSE); if (IsmGetEnvironmentValue ( IsmGetRealPlatform (), NULL, S_GLOBAL_INF_HANDLE, (PBYTE)(&infHandle), sizeof (HINF), &sizeNeeded, &dataType ) && (sizeNeeded == sizeof (HINF)) && (dataType == ENVENTRY_BINARY) ) { if (!InitMigDbEx (infHandle)) { DEBUGMSG((DBG_ERROR, "Error initializing OsFiles database")); return FALSE; } } return TRUE; } BOOL WINAPI OsFilesVcmQueueEnumeration ( IN PVOID Reserved ) { ENCODEDSTRHANDLE pattern; pattern = IsmCreateSimpleObjectPattern (NULL, TRUE, NULL, TRUE); IsmHookEnumeration (MIG_FILE_TYPE, pattern, VcmOsFilesCallback, (ULONG_PTR) 0, TEXT("OsFiles")); IsmDestroyObjectHandle (pattern); return TRUE; } BOOL WINAPI OsFilesVcmQueueHighPriorityEnumeration ( IN PVOID Reserved ) { ENCODEDSTRHANDLE pattern; pattern = IsmCreateSimpleObjectPattern (NULL, TRUE, NULL, TRUE); IsmHookEnumeration (MIG_FILE_TYPE, pattern, VcmOsFilesCallback, (ULONG_PTR) 0, TEXT("OsFiles")); IsmDestroyObjectHandle (pattern); return TRUE; } UINT VcmOsFilesCallback ( PCMIG_OBJECTENUMDATA Data, ULONG_PTR CallerArg ) { FILE_HELPER_PARAMS params; params.ObjectName = Data->ObjectName; params.NativeObjectName = Data->NativeObjectName; params.Handled = FALSE; params.FindData = (PWIN32_FIND_DATA)(Data->Details.DetailsData); params.ObjectNode = Data->ObjectNode; params.ObjectLeaf = Data->ObjectLeaf; params.IsNode = Data->IsNode; params.IsLeaf = Data->IsLeaf; MigDbTestFile (¶ms); return CALLBACK_ENUM_CONTINUE; } BOOL OsFilesInitialize ( VOID ) { return TRUE; } VOID OsFilesTerminate ( VOID ) { DoneMigDbEx (); }