|
|
/*++
Copyright (c) 1999 Microsoft Corporation
Module Name:
osfiles.c
Abstract:
<abstract>
Author:
Calin Negreanu (calinn) 08 Mar 2000
Revision History:
<alias> <date> <comments>
--*/
//
// 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 (); }
|