Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

359 lines
12 KiB

//=================================================================
//
// DllUtils.h
//
// Copyright (c) 1999-2001 Microsoft Corporation, All Rights Reserved
//
//=================================================================
#ifndef _DLL_UTILS_H_
#define _DLL_UTILS_H_
#define UNRECOGNIZED_VARIANT_TYPE FALSE
#include "DllWrapperBase.h"
#ifdef WIN9XONLY
#include "Cim32NetApi.h"
#endif
#include "sid.h"
#include <list>
#ifdef UNICODE
#define W2A(w, a, cb) lstrcpynW ( a, w, cb / sizeof ( WCHAR ) )
#define TOBSTRT(x) x
#else
#define W2A(w, a, cb) WideCharToMultiByte( \
CP_ACP, \
0, \
w, \
-1, \
a, \
cb, \
NULL, \
NULL)
#define TOBSTRT(x) _bstr_t(x)
#endif
#define VWIN32_DIOC_DOS_IOCTL 1
#define VWIN32_DIOC_DOS_INT13 4
#define VWIN32_DIOC_DOS_DRIVEINFO 6
#define CARRY_FLAG 0x1
#define MAXITOA 18
#define MAXI64TOA 33
// In theory, this is defined in winnt.h, but not in our current one
#ifndef FILE_ATTRIBUTE_ENCRYPTED
#define FILE_ATTRIBUTE_ENCRYPTED 0x00000040
#endif
typedef std::list<CHString> CHStringList;
typedef std::list<CHString>::iterator CHStringList_Iterator;
// To Get Cim32NetApi
#ifdef WIN9XONLY
CCim32NetApi* WINAPI GetCim32NetApiPtr();
void WINAPI FreeCim32NetApiPtr();
#endif
// platform identification
DWORD WINAPI GetPlatformMajorVersion(void);
DWORD WINAPI GetPlatformMinorVersion(void);
DWORD WINAPI GetPlatformBuildNumber(void);
#ifdef WIN9XONLY
bool WINAPI IsWin95(void);
bool WINAPI IsWin98(void);
bool WINAPI IsMillennium(void);
#endif
#ifdef NTONLY
bool WINAPI IsWinNT52(void);
bool WINAPI IsWinNT51(void);
bool WINAPI IsWinNT5(void);
bool WINAPI IsWinNT351(void);
bool WINAPI IsWinNT4(void);
#endif
// error logging
void WINAPI LogEnumValueError( LPCWSTR szFile, DWORD dwLine, LPCWSTR szKey, LPCWSTR szId );
void WINAPI LogOpenRegistryError( LPCWSTR szFile, DWORD dwLine, LPCWSTR szKey );
void WINAPI LogError( LPCTSTR szFile, DWORD dwLine, LPCTSTR szKey );
void WINAPI LogLastError( LPCTSTR szFile, DWORD dwLine );
class CConfigMgrDevice;
class CInstance;
void WINAPI SetConfigMgrProperties(CConfigMgrDevice *pDevice, CInstance *pInstance);
// map standard API return values (defined WinError.h)
// to WBEMish hresults (defined in WbemCli.h)
HRESULT WINAPI WinErrorToWBEMhResult(LONG error);
#pragma pack(push, 1)
typedef struct _DEVIOCTL_REGISTERS {
DWORD reg_EBX;
DWORD reg_EDX;
DWORD reg_ECX;
DWORD reg_EAX;
DWORD reg_EDI;
DWORD reg_ESI;
DWORD reg_Flags;
} DEVIOCTL_REGISTERS, *PDEVIOCTL_REGISTERS;
typedef struct BPB { /* */
WORD wBytesPerSector; // Bytes per sector
BYTE btSectorsPerCluster; // Sectors per cluster
WORD wReservedSectors; // Number of reserved sectors
BYTE btNumFats; // Number of FATs
WORD wEntriesInRoot; // Number of root-directory entries
WORD wTotalSectors; // Total number of sectors
BYTE btMediaIdByte; // Media descriptor
WORD wSectorsPerFat; // Number of sectors per FAT
WORD wSectorsPerTrack; // Number of sectors per track
WORD wHeads; // Number of heads
DWORD dwHiddenSecs; // Number of hidden sectors
DWORD dwSectorsPerTrack; // Number of sectors if wTotalSectors == 0
} BPB, *PBPB;
typedef struct _DEVICEPARMS {
BYTE btSpecialFunctions; // Special functions
BYTE btDeviceType; // Device type
WORD wDeviceAttribs; // Device attributes
WORD wCylinders; // Number of cylinders
BYTE btMediaType; // Media type
// Beginning of BIOS parameter block (BPB)
BPB stBPB;
BYTE reserved[6]; //
} DEVICEPARMS, *PDEVICEPARMS;
typedef struct _A_BF_BPB {
BPB stBPB;
USHORT A_BF_BPB_BigSectorsPerFat; /* BigFAT Fat sectors */
USHORT A_BF_BPB_BigSectorsPerFatHi; /* High word of BigFAT Fat sectrs */
USHORT A_BF_BPB_ExtFlags; /* Other flags */
USHORT A_BF_BPB_FS_Version; /* File system version */
USHORT A_BF_BPB_RootDirStrtClus; /* Starting cluster of root directory */
USHORT A_BF_BPB_RootDirStrtClusHi;
USHORT A_BF_BPB_FSInfoSec; /* Sector number in the reserved */
/* area where the BIGFATBOOTFSINFO */
/* structure is. If this is >= */
/* oldBPB.BPB_ReservedSectors or */
/* == 0 there is no FSInfoSec */
USHORT A_BF_BPB_BkUpBootSec; /* Sector number in the reserved */
/* area where there is a backup */
/* copy of all of the boot sectors */
/* If this is >= */
/* oldBPB.BPB_ReservedSectors or */
/* == 0 there is no backup copy. */
USHORT A_BF_BPB_Reserved[6]; /* Reserved for future expansion */
} A_BF_BPB, *PA_BF_BPB;
#define MAX_SECTORS_IN_TRACK 128 // MAXIMUM SECTORS ON A DISK.
typedef struct A_SECTORTABLE {
WORD ST_SECTORNUMBER;
WORD ST_SECTORSIZE;
} A_SECTORTABLE;
typedef struct _EA_DEVICEPARAMETERS {
BYTE btSpecialFunctions; // Special functions
BYTE btDeviceType; // Device type
WORD wDeviceAttribs; // Device attributes
WORD dwCylinders; // Number of cylinders
BYTE btMediaType; // Media type
A_BF_BPB stBPB32; // Fat32 Bios parameter block
BYTE RESERVED1[32];
WORD EDP_TRACKTABLEENTRIES;
A_SECTORTABLE stSectorTable[MAX_SECTORS_IN_TRACK];
} EA_DEVICEPARAMETERS, *PEA_DEVICEPARAMETERS;
typedef struct _DRIVE_MAP_INFO {
BYTE btAllocationLength;
BYTE btInfoLength;
BYTE btFlags;
BYTE btInt13Unit;
DWORD dwAssociatedDriveMap;
__int64 i64PartitionStartRBA;
} DRIVE_MAP_INFO, *PDRIVE_MAP_INFO;
typedef struct _ExtGetDskFreSpcStruc {
WORD Size; // Size of structure (out)
WORD Level; // Level (must be zero)
DWORD SectorsPerCluster;
DWORD BytesPerSector;
DWORD AvailableClusters;
DWORD TotalClusters;
DWORD AvailablePhysSectors;
DWORD TotalPhysSectors;
DWORD AvailableAllocationUnits;
DWORD TotalAllocationUnits;
DWORD Rsvd1;
DWORD Rsvd2;
} ExtGetDskFreSpcStruc, *pExtGetDskFreSpcStruc;
#pragma pack(pop)
BOOL LoadStringW(CHString &sString, UINT nID);
void Format(CHString &sString, UINT nFormatID, ...);
void FormatMessageW(CHString &sString, UINT nFormatID, ...);
int LoadStringW(UINT nID, LPWSTR lpszBuf, UINT nMaxBuf);
#ifdef WIN9XONLY
BOOL WINAPI GetDeviceParms(PDEVICEPARMS pstDeviceParms, UINT nDrive);
BOOL WINAPI GetDeviceParmsFat32(PEA_DEVICEPARAMETERS pstDeviceParms, UINT nDrive);
BOOL WINAPI GetDriveMapInfo(PDRIVE_MAP_INFO pDriveMapInfo, UINT nDrive);
BOOL WINAPI VWIN32IOCTL(PDEVIOCTL_REGISTERS preg, DWORD dwCall);
BYTE WINAPI GetBiosUnitNumberFromPNPID(CHString strDeviceID);
#endif
#ifdef NTONLY
void WINAPI TranslateNTStatus( DWORD dwStatus, CHString & chsValue);
BOOL WINAPI GetServiceFileName(LPCTSTR szService, CHString &strFileName);
bool WINAPI GetServiceStatus( CHString a_chsService, CHString &a_chsStatus ) ;
#endif
void WINAPI ConfigStatusToCimStatus ( DWORD a_Status , CHString &a_StringStatus ) ;
CHString WINAPI GetFileTypeDescription(LPCTSTR szExtension);
bool WINAPI CompareVariantsNoCase(const VARIANT *v1, const VARIANT *v2);
bool WINAPI GetManufacturerFromFileName(LPCTSTR szFile, CHString &strMfg);
bool WINAPI GetVersionFromFileName(LPCTSTR szFile, CHString &strVersion);
BOOL WINAPI EnablePrivilegeOnCurrentThread(LPCTSTR szPriv);
bool WINAPI GetFileInfoBlock(LPCTSTR szFile, LPVOID *pInfo);
bool WINAPI GetVarFromInfoBlock(LPVOID pInfo, LPCTSTR szVar, CHString &strValue);
BOOL WINAPI GetVersionLanguage(void *vpInfo, WORD *wpLang, WORD *wpCodePage);
BOOL WINAPI Get_ExtFreeSpace(BYTE btDriveName, ExtGetDskFreSpcStruc *pstExtGetDskFreSpcStruc);
HRESULT WINAPI GetHKUserNames(CHStringList &list);
VOID WINAPI EscapeBackslashes(CHString& chstrIn, CHString& chstrOut);
VOID WINAPI EscapeQuotes(CHString& chstrIn, CHString& chstrOut);
VOID WINAPI RemoveDoubleBackslashes(const CHString& chstrIn, CHString& chstrOut);
CHString WINAPI RemoveDoubleBackslashes(const CHString& chstrIn);
void WINAPI SetSinglePrivilegeStatusObject(MethodContext* pContext, const WCHAR* pPrivilege);
bool WINAPI StrToIdentifierAuthority(const CHString& str, SID_IDENTIFIER_AUTHORITY& identifierAuthority);
bool WINAPI WhackToken(CHString& str, CHString& token);
PSID WINAPI StrToSID(const CHString& str);
#ifdef WIN9XONLY
class HoldSingleCim32NetPtr
{
public:
HoldSingleCim32NetPtr();
~HoldSingleCim32NetPtr();
static void WINAPI FreeCim32NetApiPtr();
static CCim32NetApi* WINAPI GetCim32NetApiPtr();
private:
static CCritSec m_csCim32Net;
static HINSTANCE m_spCim32NetApiHandle ;
};
#endif
// Used to get WBEM time from a filename. We need this because FAT and NTFS
// work differently.
enum FT_ENUM
{
FT_CREATION_DATE,
FT_MODIFIED_DATE,
FT_ACCESSED_DATE
};
CHString WINAPI GetDateTimeViaFilenameFiletime(LPCTSTR szFilename, FILETIME *pFileTime);
CHString WINAPI GetDateTimeViaFilenameFiletime(LPCTSTR szFilename, FT_ENUM ftWhich);
CHString WINAPI GetDateTimeViaFilenameFiletime(BOOL bNTFS, FILETIME *pFileTime);
// Used to validate a numbered device ID is OK.
// Example: ValidateNumberedDeviceID("VideoController7", "VideoController", pdwWhich)
// returns TRUE, pdwWhich = 7.
// Example: ValidateNumberedDeviceID("BadDeviceID", "VideoController", pdwWhich)
// returns FALSE, pdwWhich unchanged
BOOL WINAPI ValidateNumberedDeviceID(LPCWSTR szDeviceID, LPCWSTR szTag, DWORD *pdwWhich);
// Critical sections used by various classes.
extern CCritSec g_csPrinter;
extern CCritSec g_csSystemName;
#ifdef WIN9XONLY
extern CCritSec g_csVXD;
#endif
bool WINAPI DelayLoadDllExceptionFilter(PEXCEPTION_POINTERS pep);
#ifdef NTONLY
HRESULT CreatePageFile(
LPCWSTR wstrPageFileName,
const LARGE_INTEGER liInitial,
const LARGE_INTEGER liMaximum,
const CInstance& Instance);
#endif
#if NTONLY >= 5
bool GetAllUsersName(CHString& chstrAllUsersName);
bool GetDefaultUsersName(CHString& chstrDefaultUsersName);
bool GetCommonStartup(CHString& chstrCommonStartup);
#endif
BOOL GetLocalizedNTAuthorityString(
CHString& chstrNT_AUTHORITY);
BOOL GetLocalizedBuiltInString(
CHString& chstrBuiltIn);
BOOL GetSysAccountNameAndDomain(
PSID_IDENTIFIER_AUTHORITY a_pAuthority,
CSid& a_accountsid,
BYTE a_saCount = 0,
DWORD a_dwSubAuthority1 = 0,
DWORD a_dwSubAuthority2 = 0);
// neccessary structures for GetFileVersionInfo
#include <pshpack4.h>
typedef struct tag_StringTable {
WORD wLength;
WORD wValueLength;
WORD wType;
WCHAR szKey[8];
} StringTable;
typedef struct tag_StringFileInfo {
WORD wLength;
WORD wValueLength;
WORD wType;
WCHAR szKey[ sizeof("StringFileInfo") ];
StringTable Children;
} StringFileInfo ;
typedef struct tagVERHEAD {
WORD wTotLen;
WORD wValLen;
WORD wType; /* always 0 */
WCHAR szKey[(sizeof("VS_VERSION_INFO")+3)&~03];
VS_FIXEDFILEINFO vsf;
} VERHEAD ;
#include <poppack.h>
#endif