593 lines
20 KiB
C++
593 lines
20 KiB
C++
//+---------------------------------------------------------------------------
|
|
//
|
|
// 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 <setupapi.h>
|
|
#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_
|
|
|