|
|
/*****************************************************************************/ /*
/* Copyright (c) 2001 Microsoft Corporation, All Rights Reserved /
/*
/*****************************************************************************/
#ifndef __WMI_FilePrivateProfile_H__
#define __WMI_FilePrivateProfile_H__
DWORD APIENTRY WMI_FILE_GetPrivateProfileStringW( LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpDefault, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName );
UINT APIENTRY WMI_FILE_GetPrivateProfileIntW( LPCWSTR lpAppName, LPCWSTR lpKeyName, INT nDefault, LPCWSTR lpFileName );
BOOL APIENTRY WMI_FILE_WritePrivateProfileStringW( LPCWSTR lpAppName, LPCWSTR lpKeyName, LPCWSTR lpString, LPCWSTR lpFileName );
DWORD APIENTRY WMI_FILE_GetPrivateProfileSectionW( LPCWSTR lpAppName, LPWSTR lpReturnedString, DWORD nSize, LPCWSTR lpFileName ); BOOL APIENTRY WMI_FILE_WritePrivateProfileSectionW( LPCWSTR lpAppName, LPCWSTR lpString, LPCWSTR lpFileName );
class CWMI_FILE_IniFileObject { public: ULONG m_EnvironmentUpdateCount; HANDLE m_FileHandle; BOOL m_WriteAccess; BOOL m_UnicodeFile; BOOL m_LockedFile; ULONG m_EndOfFile; PVOID m_BaseAddress; SIZE_T m_CommitSize; SIZE_T m_RegionSize; ULONG m_UpdateOffset; ULONG m_UpdateEndOffset; ULONG m_DirectoryInformationLength; FILE_STANDARD_INFORMATION m_StandardInformation;
CWMI_FILE_IniFileObject(); ~CWMI_FILE_IniFileObject(); };
class CWMI_FILE_IniFile { public:
typedef enum _INIFILE_OPERATION { Enum_ReadKeyValueOp, Enum_WriteKeyValueOp, Enum_ReadKeyNamesOp, Enum_ReadSectionNamesOp, Enum_ReadSectionOp, Enum_WriteSectionOp } INIFILE_OPERATION;
INIFILE_OPERATION m_Operation; BOOL m_IsWriteOperation; CWMI_FILE_IniFileObject m_IniFile; LPCWSTR m_FileName; ANSI_STRING m_ApplicationName; ANSI_STRING m_VariableName; UNICODE_STRING m_ApplicationNameU; UNICODE_STRING m_VariableNameU; BOOL m_IsMultiValueStrings;
LPSTR m_ValueBuffer; ULONG m_ValueLength; LPWSTR m_ValueBufferU; ULONG m_ValueLengthU; ULONG m_ResultChars; ULONG m_ResultMaxChars; LPWSTR m_ResultBufferU;
PVOID m_TextCurrent; PVOID m_TextStart; PVOID m_TextEnd;
ANSI_STRING m_SectionName; ANSI_STRING m_KeywordName; ANSI_STRING m_KeywordValue; PANSI_STRING m_AnsiSectionName; PANSI_STRING m_AnsiKeywordName; PANSI_STRING m_AnsiKeywordValue; UNICODE_STRING m_SectionNameU; UNICODE_STRING m_KeywordNameU; UNICODE_STRING m_KeywordValueU; PUNICODE_STRING m_UnicodeSectionName; PUNICODE_STRING m_UnicodeKeywordName; PUNICODE_STRING m_UnicodeKeywordValue;
CWMI_FILE_IniFile(); ~CWMI_FILE_IniFile();
static NTSTATUS ReadWriteIniFile( IN BOOL WriteOperation, IN BOOL SectionOperation, IN LPCWSTR FileName, IN LPCWSTR ApplicationName, IN LPCWSTR VariableName, IN OUT LPWSTR VariableValue, IN OUT PULONG VariableValueLength );
NTSTATUS CaptureIniFileParameters( INIFILE_OPERATION a_Operation, BOOL a_WriteOperation, BOOL a_MultiValueStrings, LPCWSTR a_FileName, LPCWSTR a_ApplicationName, LPCWSTR a_VariableName, LPWSTR a_VariableValue, PULONG a_ResultMaxChars );
NTSTATUS OpenIniFileOnDisk();
NTSTATUS ReadWriteIniFileOnDisk();
NTSTATUS CloseIniFileOnDisk();
NTSTATUS ReadKeywordValue();
NTSTATUS ReadKeywordNames();
NTSTATUS ReadSection();
NTSTATUS ReadSectionNames();
NTSTATUS AdvanceTextPointer( IN ULONG StopAt );
NTSTATUS FindSection();
NTSTATUS FindKeyword();
BOOL GetApplicationName( OUT PANSI_STRING *ApplicationName OPTIONAL, OUT PUNICODE_STRING *ApplicationNameU OPTIONAL );
BOOL GetVariableName( OUT PANSI_STRING *VariableName OPTIONAL, OUT PUNICODE_STRING *VariableNameU OPTIONAL );
BOOL GetVariableValue( OUT PBYTE *VariableValue OPTIONAL, OUT LPWSTR *VariableValueU OPTIONAL, OUT PULONG VariableValueLength );
NTSTATUS AppendStringToResultBuffer( IN PANSI_STRING String OPTIONAL, IN PUNICODE_STRING StringU OPTIONAL, IN BOOL IncludeNull );
NTSTATUS AppendBufferToResultBuffer( IN PBYTE Buffer OPTIONAL, IN LPWSTR BufferU OPTIONAL, IN ULONG Chars, IN BOOL IncludeNull );
NTSTATUS WriteKeywordValue( IN PUNICODE_STRING VariableName OPTIONAL );
NTSTATUS ModifyMappedFile( IN PVOID AddressInFile, IN ULONG SizeToRemove, IN PVOID InsertBuffer, IN ULONG InsertAmount );
NTSTATUS WriteSection();
NTSTATUS AppendNullToResultBuffer() { return AppendBufferToResultBuffer(NULL, NULL, 0, TRUE ); }
};
#endif
|