//+--------------------------------------------------------------------------- // // Microsoft Windows // Copyright (C) Microsoft Corporation, 1997. // // File: N C S E T U P . H // // Contents: HRESULT wrappers for the Setup Api. // // Notes: // // Author: shaunco 16 Apr 1997 // //---------------------------------------------------------------------------- #pragma once #ifndef _NCSETUP_H_ #define _NCSETUP_H_ #include #include "ncstring.h" enum SD_DEID_FLAG_TYPE { SDDFT_FLAGS, SDDFT_FLAGSEX, }; enum SD_FLAGS_BINARY_OP { SDFBO_AND, SDFBO_OR, SDFBO_XOR, }; //+--------------------------------------------------------------------------- // Lower level wrappers // HRESULT HrSetupCommitFileQueue (HWND hwndOwner, HSPFILEQ hfq, PSP_FILE_CALLBACK pfc, PVOID pvCtx); HRESULT HrSetupInitDefaultQueueCallbackEx (HWND hwndOwner, HWND hwndAlternate, UINT uMsg, DWORD dwReserved1, PVOID dwReserved2, PVOID* ppvCtx); HRESULT HrSetupOpenFileQueue (HSPFILEQ* phfq); HRESULT HrSetupOpenInfFile (PCWSTR pszFileName, PCWSTR pszInfClass, DWORD dwInfStyle, UINT* punErrorLine, HINF* phinf); HRESULT HrSetupFindFirstLine (HINF hinf, PCWSTR pszSection, PCWSTR pszKey, INFCONTEXT* pctx); HRESULT HrSetupFindNextLine (const INFCONTEXT& ctxIn, INFCONTEXT* pctxOut); HRESULT HrSetupFindNextMatchLine (const INFCONTEXT& ctxIn, PCWSTR pszKey, INFCONTEXT* pctxOut); HRESULT HrSetupGetLineByIndex (HINF hinf, PCWSTR pszSection, DWORD dwIndex, INFCONTEXT* pctx); HRESULT HrSetupGetLineCount (HINF hinf, PCWSTR pszSection, ULONG* pulCount); HRESULT HrSetupGetBinaryField (const INFCONTEXT& ctx, DWORD dwFieldIndex, BYTE* pbBuf, DWORD cbBuf, DWORD* pbRequired); HRESULT HrSetupGetIntField (const INFCONTEXT& ctx, DWORD dwFieldIndex, INT* pnValue); HRESULT HrSetupGetMultiSzField (const INFCONTEXT& ctx, DWORD dwFieldIndex, PWSTR pszBuf, DWORD cchBuf, DWORD* pcchRequired); HRESULT HrSetupGetMultiSzFieldWithAlloc (const INFCONTEXT& ctx, DWORD dwFieldIndex, PWSTR* ppszBuf); HRESULT HrSetupGetStringField (const INFCONTEXT& ctx, DWORD dwFieldIndex, tstring* pstr); HRESULT HrSetupGetStringField (const INFCONTEXT& ctx, DWORD dwFieldIndex, PWSTR pszBuf, DWORD cchBuf, DWORD* pcchRequired); HRESULT HrSetupScanFileQueueWithNoCallback (HSPFILEQ hfq, DWORD dwFlags, HWND hwnd, PDWORD pdwResult); VOID SetupCloseInfFileSafe(HINF hinf); //+--------------------------------------------------------------------------- // Intermediate functionality // HRESULT HrSetupGetMultiSzFieldMapToDword (const INFCONTEXT& ctx, DWORD dwFieldIndex, const MAP_SZ_DWORD* aMapSzDword, UINT cMapSzDword, DWORD* pdwValue); HRESULT HrSetupGetStringFieldMapToDword (const INFCONTEXT& ctx, DWORD dwFieldIndex, const MAP_SZ_DWORD* aMapSzDword, UINT cMapSzDword, DWORD* pdwValue); HRESULT HrSetupGetStringFieldAsBool (const INFCONTEXT& ctx, DWORD dwFieldIndex, BOOL* pfValue); //+--------------------------------------------------------------------------- // Find first and get // HRESULT HrSetupGetFirstDword (HINF hinf, PCWSTR pszSection, PCWSTR pszKey, DWORD* pdwValue); HRESULT HrSetupGetFirstString (HINF hinf, PCWSTR pszSection, PCWSTR pszKey, tstring* pstr); HRESULT HrSetupGetFirstMultiSzFieldWithAlloc (HINF hinf, PCWSTR szSection, PCWSTR szKey, PWSTR *pszOut); HRESULT HrSetupGetFirstMultiSzMapToDword (HINF hinf, PCWSTR pszSection, PCWSTR pszKey, const MAP_SZ_DWORD* aMapSzDword, UINT cMapSzDword, DWORD* pdwValue); HRESULT HrSetupGetFirstStringMapToDword (HINF hinf, PCWSTR pszSection, PCWSTR pszKey, const MAP_SZ_DWORD* aMapSzDword, UINT cMapSzDword, DWORD* pdwValue); HRESULT HrSetupGetFirstStringAsBool (HINF hinf, PCWSTR pszSection, PCWSTR pszKey, BOOL* pfValue); HRESULT HrSetupGetInfInformation (LPCVOID pvInfSpec, DWORD dwSearchControl, PSP_INF_INFORMATION* ppinfInfo); HRESULT HrSetupIsValidNt5Inf (HINF hinf); HRESULT HrSetupQueryInfVersionInformation (PSP_INF_INFORMATION pinfInfo, UINT uiIndex, PCWSTR szKey, PWSTR* ppszInfo); //+-------------------------------------------------------------------------- // SetupDi* wrappers and helpers // HRESULT HrSetupCopyOemInf(IN const tstring& strSourceName, IN const tstring& strSourceMediaLocation, OPTIONAL IN DWORD dwSourceMediaType, IN DWORD dwCopyStyle, OUT tstring* pstrDestFilename, OPTIONAL OUT tstring* pstrDestFilenameComponent OPTIONAL); HRESULT HrSetupCopyOemInfBuffer( IN PCWSTR pszSourceName, IN PCWSTR pszSourceMediaLocation, OPTIONAL IN DWORD SourceMediaType, IN DWORD CopyStyle, OUT PWSTR pszDestFilename, IN DWORD cchDestFilename, OUT PWSTR* ppszDestFilenameComponent OPTIONAL); HRESULT HrSetupDiBuildDriverInfoList(IN HDEVINFO hdi, IN OUT PSP_DEVINFO_DATA pdeid, IN DWORD dwDriverType); HRESULT HrSetupDiCallClassInstaller(DI_FUNCTION dif, HDEVINFO hdi, PSP_DEVINFO_DATA pdeid); HRESULT HrSetupDiCreateDeviceInfo(IN HDEVINFO hdi, IN PCWSTR szDeviceName, IN const GUID& guidClass, PCWSTR szDesc, IN HWND hwndParent, IN DWORD dwFlags, OUT PSP_DEVINFO_DATA pdeid); HRESULT HrSetupDiEnumDeviceInfo(IN HDEVINFO hdi, IN DWORD dwIndex, PSP_DEVINFO_DATA pdeid); HRESULT HrSetupDiEnumDriverInfo(IN HDEVINFO hdi, PSP_DEVINFO_DATA pdeid, IN DWORD dwDriverType, IN DWORD dwIndex, OUT PSP_DRVINFO_DATA pdrid); HRESULT HrSetupDiSelectBestCompatDrv(IN HDEVINFO hdi, IN OUT PSP_DEVINFO_DATA pdeid); HRESULT HrSetupDiGetClassDevs ( IN const GUID* pguidClass, OPTIONAL IN PCWSTR pszEnumerator, OPTIONAL IN HWND hwndParent, OPTIONAL IN DWORD dwFlags, OUT HDEVINFO* phdi); HRESULT HrSetupDiGetDeviceInfoListClass(IN HDEVINFO hdi, OUT GUID* pGuid); HRESULT HrSetupDiGetDeviceInstanceId(IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, OUT PWSTR pszId, IN DWORD cchId, OUT DWORD* cchRequired); HRESULT HrSetupDiInstallDevice(IN HDEVINFO hdi, IN OUT PSP_DEVINFO_DATA pdeid); HRESULT HrSetupDiOpenDevRegKey(IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN DWORD dwScope, IN DWORD dwHwProfile, IN DWORD dwKeyType, IN REGSAM samDesired, OUT HKEY* phkey); HRESULT HrSetupDiSetClassInstallParams(IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN PSP_CLASSINSTALL_HEADER pcih, IN DWORD cbSize); HRESULT HrSetupDiGetFixedSizeClassInstallParams(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid, PSP_CLASSINSTALL_HEADER pcih, int cbSize); HRESULT HrSetupDiGetSelectedDriver(IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, OUT PSP_DRVINFO_DATA pdrid); HRESULT HrSetupDiGetDriverInfoDetail(IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN PSP_DRVINFO_DATA pdrid, OUT PSP_DRVINFO_DETAIL_DATA* ppdridd); HRESULT HrSetupDiSetSelectedDriver(IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN OUT PSP_DRVINFO_DATA pdrid); HRESULT HrSetupDiCreateDevRegKey(IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN DWORD dwScope, IN DWORD dwHwProfile, IN DWORD dwKeyType, IN HINF hinf, PCWSTR szInfSectionName, OUT HKEY* phkey); HRESULT HrSetupDiGetActualSectionToInstall(IN HINF hinf, IN PCWSTR szSectionName, OUT tstring* pstrActualSectionName, OUT tstring* pstrExtension OPTIONAL); HRESULT HrSetupDiGetActualSectionToInstallWithAlloc(IN HINF hinf, IN PWSTR pszSection, OUT PWSTR* ppszActualSection, OUT PWSTR* ppszExtension OPTIONAL); HRESULT HrSetupDiGetActualSectionToInstallWithBuffer( IN HINF hinf, IN PCWSTR pszSection, OUT PWSTR pszActualSection, IN DWORD cchActualSection, OUT DWORD* pcchRequired, OUT PWSTR* ppszExtension OPTIONAL); HRESULT HrSetupDiGetDeviceInstallParams(IN const HDEVINFO hdi, IN const PSP_DEVINFO_DATA pdeid, OPTIONAL OUT PSP_DEVINSTALL_PARAMS pdeip); HRESULT HrSetupDiGetDriverInstallParams(IN const HDEVINFO hdi, IN const PSP_DEVINFO_DATA pdeid, OPTIONAL IN const PSP_DRVINFO_DATA pdrid, OUT PSP_DRVINSTALL_PARAMS pdrip); void SetupDiSetConfigFlags(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid, DWORD dwFlags, SD_FLAGS_BINARY_OP eOp); HRESULT HrSetupDiSetDeviceInstallParams(IN const HDEVINFO hdi, IN const PSP_DEVINFO_DATA pdeid, OPTIONAL IN const PSP_DEVINSTALL_PARAMS pdeip); HRESULT HrSetupDiSetDriverInstallParams(IN const HDEVINFO hdi, IN const PSP_DEVINFO_DATA pdeid, OPTIONAL IN const PSP_DRVINFO_DATA pdrid, IN const PSP_DRVINSTALL_PARAMS pdrip); HRESULT HrSetupDiSetDeipFlags(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid, DWORD dwFlags, SD_DEID_FLAG_TYPE eFlagType, SD_FLAGS_BINARY_OP eOp); HRESULT HrSetupDiRemoveDevice(IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid); HRESULT HrSetupDiOpenDeviceInfo(IN const HDEVINFO hdi, IN PCWSTR szPnpInstanceId, IN HWND hwndParent, IN DWORD dwOpenFlags, OUT PSP_DEVINFO_DATA pdeid OPTIONAL); HRESULT HrSetupDiCreateDeviceInfoList(const GUID* pguidClass, HWND hwndParent, HDEVINFO* phdi); HRESULT HrSetupDiGetDeviceName(IN HDEVINFO hdi, PSP_DEVINFO_DATA pdeid, OUT PWSTR* ppszName); HRESULT HrSetupDiSetDeviceName ( IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN PCWSTR szDeviceName); HRESULT HrSetupDiGetDeviceRegistryPropertyWithAlloc( IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN DWORD dwProperty, OUT DWORD* pdwRegType, OPTIONAL OUT BYTE** ppbBuffer); HRESULT HrSetupDiGetDeviceRegistryProperty( IN HDEVINFO hdi, IN PSP_DEVINFO_DATA pdeid, IN DWORD dwProperty, OUT DWORD* pdwRegType, OPTIONAL OUT BYTE* pbBuffer, IN DWORD cbBufferSize, OUT DWORD* pcbRequiredSize OPTIONAL ); HRESULT HrSetupDiSetDeviceRegistryProperty(IN HDEVINFO hdi, IN OUT PSP_DEVINFO_DATA pdeid, IN DWORD dwProperty, IN const BYTE* pbBuffer, IN DWORD cbSize); HRESULT HrSetupDiSendPropertyChangeNotification(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid, DWORD dwStateChange, DWORD dwScope, DWORD dwProfileId); BOOL FSetupDiCheckIfRestartNeeded(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid); HRESULT HrSetupDiGetClassImageList(PSP_CLASSIMAGELIST_DATA pcild); HRESULT HrSetupDiDestroyClassImageList(PSP_CLASSIMAGELIST_DATA pcild); VOID SetupDiDestroyDeviceInfoListSafe(HDEVINFO hdi); HRESULT HrSetupDiGetClassImageIndex(PSP_CLASSIMAGELIST_DATA pcild, const GUID* pguidClass, INT* pnIndex); HRESULT HrSetupDiGetParentWindow(IN const HDEVINFO hdi, IN const PSP_DEVINFO_DATA pdeid, OUT HWND* phwndParent); HRESULT HrSetupInstallFilesFromInfSection(HINF hinf, HINF hinfLayout, HSPFILEQ hfq, PCWSTR szSection, PCWSTR szSourcePath, UINT ulFlags); HRESULT HrSetupInstallFromInfSection(HWND hwnd, HINF hinf, PCWSTR szSection, UINT ulFlags, HKEY hkey, PCWSTR szSource, UINT ulCopyFlags, PSP_FILE_CALLBACK pfc, PVOID pvCtx, HDEVINFO hdi, PSP_DEVINFO_DATA pdeid); HRESULT HrSetupInstallServicesFromInfSection(HINF hinf, PCWSTR szSection, DWORD dwFlags); HRESULT HrFindDeviceOnInterface ( const GUID* pguidDeviceId, const GUID* pguidInterfaceId, PCWSTR pszwReferenceString, DWORD dwFlagsAndAttributes, HANDLE* phFile); HRESULT HrInstallSoftwareDeviceOnInterface ( const GUID* pguidDeviceId, const GUID* pguidInterfaceId, PCWSTR pszwReferenceString, BOOL fForceInstall, PCWSTR pszwInfFilename, HWND hwndParent); #if defined(REMOTE_BOOT) HRESULT HrIsRemoteBootAdapter(HDEVINFO hdi, PSP_DEVINFO_DATA pdeid); #endif //+--------------------------------------------------------------------------- // // Class: CSetupInfFile // // Purpose: Handles operations on an INF file. // // Justification: // This is a class instead of seperate functions to allow us to move // towards the error handling model associated with throwing exceptions. // That is, when one of these objects is declared on the stack, and // an exception is thrown, it will clean itself up. (This object // does NOT explicitly throw any exceptions.) // class CSetupInfFile { public: CSetupInfFile (); ~CSetupInfFile () { EnsureClosed(); } void Close (); HRESULT HrOpen (PCWSTR pszFileName, PCWSTR pszInfClass, DWORD dwInfStyle, UINT* punErrorLine); HINF Hinf (); HRESULT HrGetDword (PCWSTR pszSection, PCWSTR pszKey, DWORD* pdwValue); HRESULT HrGetString (PCWSTR pszSection, PCWSTR pszKey, tstring* pstr); HRESULT HrGetStringAsBool (PCWSTR pszSection, PCWSTR pszKey, BOOL* pfValue); HRESULT HrGetStringMapToDword (PCWSTR pszSection, PCWSTR pszKey, const MAP_SZ_DWORD* aMapSzDword, UINT cMapSzDword, DWORD* pdwValue); HRESULT HrGetMultiSzMapToDword (PCWSTR pszSection, PCWSTR pszKey, const MAP_SZ_DWORD* aMapSzDword, UINT cMapSzDword, DWORD* pdwValue); protected: void EnsureClosed (); HINF m_hinf; }; inline CSetupInfFile::CSetupInfFile () { m_hinf = NULL; } inline HRESULT CSetupInfFile::HrOpen (PCWSTR pszFileName, PCWSTR pszInfClass, DWORD dwInfStyle, UINT* punErrorLine) { AssertSzH (!m_hinf, "You must first close the previous one you opened."); return HrSetupOpenInfFile (pszFileName, pszInfClass, dwInfStyle, punErrorLine, &m_hinf); } inline HINF CSetupInfFile::Hinf () { AssertSzH (m_hinf, "You must call HrOpen first."); return m_hinf; } inline HRESULT CSetupInfFile::HrGetDword (PCWSTR pszSection, PCWSTR pszKey, DWORD* pdwValue) { return HrSetupGetFirstDword (Hinf(), pszSection, pszKey, pdwValue); } inline HRESULT CSetupInfFile::HrGetString (PCWSTR pszSection, PCWSTR pszKey, tstring* pstr) { return HrSetupGetFirstString (Hinf(), pszSection, pszKey, pstr); } inline HRESULT CSetupInfFile::HrGetStringAsBool (PCWSTR pszSection, PCWSTR pszKey, BOOL* pfValue) { return HrSetupGetFirstStringAsBool (Hinf(), pszSection, pszKey, pfValue); } inline HRESULT CSetupInfFile::HrGetStringMapToDword (PCWSTR pszSection, PCWSTR pszKey, const MAP_SZ_DWORD* aMapSzDword, UINT cMapSzDword, DWORD* pdwValue) { return HrSetupGetFirstStringMapToDword (Hinf(), pszSection, pszKey, aMapSzDword, cMapSzDword, pdwValue); } inline HRESULT CSetupInfFile::HrGetMultiSzMapToDword (PCWSTR pszSection, PCWSTR pszKey, const MAP_SZ_DWORD* aMapSzDword, UINT cMapSzDword, DWORD* pdwValue) { return HrSetupGetFirstMultiSzMapToDword (Hinf(), pszSection, pszKey, aMapSzDword, cMapSzDword, pdwValue); } inline BOOL IsValidHandle(HANDLE h) { return (h && INVALID_HANDLE_VALUE != h); } // Moved from oemupgrd.h // HRESULT HrInstallFromInfSectionInFile(IN HWND hwndParent, IN PCWSTR szInfName, IN PCWSTR szSection, IN HKEY hkeyRelative, IN BOOL fQuietInstall); #endif // _NCSETUP_H_