IWDFPropertyStoreFactory::RetrieveDevicePropertyStore 메서드(wudfddi.h)
[경고: UMDF 2는 UMDF의 최신 버전이며 UMDF 1을 대체합니다. 모든 새 UMDF 드라이버는 UMDF 2를 사용하여 작성해야 합니다. UMDF 1에 새 기능이 추가되지 않으며 최신 버전의 Windows 10 UMDF 1에 대한 지원이 제한됩니다. 유니버설 Windows 드라이버는 UMDF 2를 사용해야 합니다. 자세한 내용은 UMDF를 사용하여 시작 참조하세요.]
RetrieveDevicePropertyStore 메서드는 드라이버가 레지스트리에 액세스하는 데 사용할 수 있는 속성 저장소 인터페이스를 검색합니다.
구문
HRESULT RetrieveDevicePropertyStore(
[in] PWDF_PROPERTY_STORE_ROOT RootSpecifier,
[in] WDF_PROPERTY_STORE_RETRIEVE_FLAGS Flags,
[in] REGSAM DesiredAccess,
[in] PCWSTR SubkeyPath,
[out] IWDFNamedPropertyStore2 **PropertyStore,
[out] WDF_PROPERTY_STORE_DISPOSITION *Disposition
);
매개 변수
[in] RootSpecifier
드라이버 할당 WDF_PROPERTY_STORE_ROOT 구조체의 주소입니다. 드라이버는 이 구조를 채워 RetrieveDevicePropertyStore 가 검색하는 속성 저장소를 식별합니다.
[in] Flags
UMDF가 없는 경우 지정된 레지스트리 항목을 만들어야 하는지 여부와 Windows를 다시 시작할 때 새 항목을 삭제해야 하는지 여부를 지정하는 WDF_PROPERTY_STORE_RETRIEVE_FLAGS 형식의 플래그입니다.
[in] DesiredAccess
드라이버에서 사용할 레지스트리에 대한 액세스 유형을 지정하는 REGSAM 형식의 비트 마스크입니다. REGSAM 형식은 Winreg.h에 정의되며 REGSAM의 Windows SDK 설명되어 있습니다. 비트 마스크는 GENERIC_WRITE, KEY_CREATE_SUB_KEY 또는 WRITE_DAC 액세스를 지정해서는 안됩니다. 드라이버가 KEY_CREATE_SUB_KEY 지정할 수는 없지만 RetrieveDevicePropertyStore 를 호출하면 하위 키가 만들어질 수 있습니다.
[in] SubkeyPath
RootSpecifier 매개 변수가 지정하는 레지스트리 키 아래에 있는 하위 키의 이름을 나타내는 호출자 제공 문자열에 대한 포인터입니다. 이 매개 변수는 선택 사항이며 NULL일 수 있습니다. 설명에서 자세한 내용을 참조하세요.
[out] PropertyStore
IWDFNamedPropertyStore2 인터페이스에 대한 포인터를 수신하는 위치의 주소입니다. 드라이버는 이 인터페이스를 사용하여 레지스트리의 값에 액세스합니다.
[out] Disposition
WDF_PROPERTY_STORE_DISPOSITION 형식의 값을 받는 위치의 주소입니다.
반환 값
RetrieveDevicePropertyStore 는 작업이 성공하면 S_OK 반환합니다. 그렇지 않으면 메서드는 다음 값 중 하나를 반환할 수 있습니다.
반환 코드 | 설명 |
---|---|
|
호출자가 잘못된 입력 인수를 제공했습니다. |
|
메모리를 할당하지 못했습니다. |
이 메서드는 Winerror.h에 포함된 다른 값 중 하나를 반환할 수 있습니다.
설명
드라이버는 RetrieveDevicePropertyStore 를 호출하여 드라이버의 소프트웨어 키, 현재 디바이스의 하드웨어 키, 현재 디바이스가 지원하는 디바이스 인터페이스의 키 또는 DEVICEMAP 키에 대한 액세스 권한을 얻을 수 있습니다.
SubkeyPath 매개 변수를 제공하는 경우 드라이버의 서비스 이름과 같은 고유한 이름을 사용해야 합니다. 드라이버는 하위 키를 사용하여 디바이스별 정보를 저장할 수 있습니다.
RetrieveDevicePropertyStore를 사용하여 레지스트리에 액세스하는 방법에 대한 자세한 내용은 UMDF 기반 드라이버에서 레지스트리 사용을 참조하세요.
예제
다음 코드 예제에서는 디바이스의 하드웨어 키 아래 PortName 항목에 할당된 값을 검색합니다.
IWDFPropertyStoreFactory *pPropertyStoreFactory = NULL;
WDF_PROPERTY_STORE_ROOT RootSpecifier;
IWDFNamedPropertyStore2 * pHardwarePropertyStore2 = NULL;
PROPVARIANT comPortPV;
WCHAR portName[] = L"PortName";
HRESULT hr;
...
//
// Get the property store factory interface.
//
hr = m_FxDevice->QueryInterface(IID_PPV_ARGS(&pPropertyStoreFactory));
if (FAILED(hr))
{
goto Exit;
}
//
//Initialize the WDF_PROPERTY_STORE_ROOT structure. We want to open the
// \Device Parameters subkey under the device's hardware key.
//
RtlZeroMemory(&RootSpecifier,
sizeof(WDF_PROPERTY_STORE_ROOT));
RootSpecifier.LengthCb = sizeof(WDF_PROPERTY_STORE_ROOT);
RootSpecifier.RootClass = WdfPropertyStoreRootClassHardwareKey;
RootSpecifier.Qualifier.HardwareKey.ServiceName = WDF_PROPERTY_STORE_HARDWARE_KEY_ROOT;
//
// Get the property store interface for the hardware key of the
// device that m_FxDevice represents.
//
hr = pPropertyStoreFactory->RetrieveDevicePropertyStore(
&RootSpecifier,
WdfPropertyStoreNormal,
KEY_QUERY_VALUE,
NULL,
&pHardwarePropertyStore2,
NULL
);
if (FAILED(hr))
{
goto Exit;
}
//
// Get the value of the "PortName" entry, which is stored under
// the device's \Device Parameters subkey.
//
PropVariantInit(&comPortPV);
hr = pHardwarePropertyStore2->GetNamedValue(portName,
&comPortPV);
if (FAILED(hr))
{
goto Exit;
}
...
Exit:
SAFE_RELEASE(pHardwarePropertyStore2);
SAFE_RELEASE(pPropertyStoreFactory);
...
요구 사항
요구 사항 | 값 |
---|---|
지원 종료 | UMDF 2.0 이상에서는 사용할 수 없습니다. |
대상 플랫폼 | 데스크톱 |
최소 UMDF 버전 | 1.9 |
머리글 | wudfddi.h(Wudfddi.h 포함) |
DLL | WUDFx.dll |
추가 정보
IWDFDevice::RetrieveDevicePropertyStore