aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/adapter.c12
-rw-r--r--api/registry.c11
-rw-r--r--api/registry.h6
3 files changed, 17 insertions, 12 deletions
diff --git a/api/adapter.c b/api/adapter.c
index d1e8786..878f6ba 100644
--- a/api/adapter.c
+++ b/api/adapter.c
@@ -391,10 +391,10 @@ GetNetCfgInstanceId(_In_ HDEVINFO DevInfo, _In_ SP_DEVINFO_DATA *DevInfoData, _O
if (Key == INVALID_HANDLE_VALUE)
return LOG_LAST_ERROR(L"Opening device registry key failed");
WCHAR *ValueStr;
- DWORD Result = RegistryQueryString(Key, L"NetCfgInstanceId", &ValueStr);
+ DWORD Result = RegistryQueryString(Key, L"NetCfgInstanceId", &ValueStr, TRUE);
if (Result != ERROR_SUCCESS)
{
- LOG_ERROR(L"Failed to query NetCfgInstanceId value", Result);
+ LOG(WINTUN_LOG_ERR, L"Failed to query NetCfgInstanceId value");
goto cleanupKey;
}
if (FAILED(CLSIDFromString(ValueStr, CfgInstanceID)))
@@ -532,10 +532,10 @@ CreateAdapterData(
/* Read the NetCfgInstanceId value and convert to GUID. */
WCHAR *ValueStr;
- Result = RegistryQueryString(Key, L"NetCfgInstanceId", &ValueStr);
+ Result = RegistryQueryString(Key, L"NetCfgInstanceId", &ValueStr, TRUE);
if (Result != ERROR_SUCCESS)
{
- LOG_ERROR(L"Failed to query NetCfgInstanceId value", Result);
+ LOG(WINTUN_LOG_ERR, L"Failed to query NetCfgInstanceId value");
goto cleanupAdapter;
}
if (FAILED(CLSIDFromString(ValueStr, &(*Adapter)->CfgInstanceID)))
@@ -928,10 +928,10 @@ GetTcpipInterfaceRegPath(_In_ const WINTUN_ADAPTER *Adapter, _Out_cap_c_(MAX_REG
if (Result != ERROR_SUCCESS)
return LOG_ERROR(L"Failed to open registry key", Result);
WCHAR *Paths;
- Result = RegistryQueryString(TcpipAdapterRegKey, L"IpConfig", &Paths);
+ Result = RegistryQueryString(TcpipAdapterRegKey, L"IpConfig", &Paths, TRUE);
if (Result != ERROR_SUCCESS)
{
- LOG_ERROR(L"Failed to query IpConfig value", Result);
+ LOG(WINTUN_LOG_ERR, L"Failed to query IpConfig value");
goto cleanupTcpipAdapterRegKey;
}
if (!Paths[0])
diff --git a/api/registry.c b/api/registry.c
index a36b27e..f1e2372 100644
--- a/api/registry.c
+++ b/api/registry.c
@@ -180,7 +180,8 @@ RegistryQuery(
_In_opt_z_ const WCHAR *Name,
_Out_opt_ DWORD *ValueType,
_Out_ void **Buf,
- _Inout_ DWORD *BufLen)
+ _Inout_ DWORD *BufLen,
+ _In_ BOOL Log)
{
HANDLE Heap = GetProcessHeap();
for (;;)
@@ -193,15 +194,15 @@ RegistryQuery(
return ERROR_SUCCESS;
HeapFree(Heap, 0, *Buf);
if (Result != ERROR_MORE_DATA)
- return LOG_ERROR(L"Querying value failed", Result);
+ return Log ? LOG_ERROR(L"Querying value failed", Result) : Result;
}
}
WINTUN_STATUS
-RegistryQueryString(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _Out_ WCHAR **Value)
+RegistryQueryString(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _Out_ WCHAR **Value, _In_ BOOL Log)
{
DWORD ValueType, Size = 256 * sizeof(WCHAR);
- DWORD Result = RegistryQuery(Key, Name, &ValueType, Value, &Size);
+ DWORD Result = RegistryQuery(Key, Name, &ValueType, Value, &Size, Log);
if (Result != ERROR_SUCCESS)
return Result;
switch (ValueType)
@@ -236,7 +237,7 @@ RegistryQueryStringWait(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _In_ DWORD
LOG_ERROR(L"Failed to setup notification", Result);
break;
}
- Result = RegistryQueryString(Key, Name, Value);
+ Result = RegistryQueryString(Key, Name, Value, FALSE);
if (Result != ERROR_FILE_NOT_FOUND && Result != ERROR_PATH_NOT_FOUND)
break;
LONGLONG TimeLeft = Deadline - GetTickCount64();
diff --git a/api/registry.h b/api/registry.h
index 16322d3..783280a 100644
--- a/api/registry.h
+++ b/api/registry.h
@@ -81,11 +81,15 @@ RegistryGetMultiString(_Inout_ WCHAR **Buf, _In_ DWORD Len, _In_ DWORD ValueType
* string from the multi-string is returned. The string must be released with
* HeapFree(GetProcessHeap(), 0, Value) after use.
*
+ * @Log Set to TRUE to log all failures; FALSE to skip logging the innermost errors. Skipping innermost
+ * errors reduces log clutter when we are using RegistryQueryString() from
+ * RegistryQueryStringWait() and some errors are expected to occur.
+ *
* @return ERROR_SUCCESS on success; ERROR_INVALID_DATATYPE when the registry value is not a string; Win32 error code
* otherwise.
*/
WINTUN_STATUS
-RegistryQueryString(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _Out_ WCHAR **Value);
+RegistryQueryString(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _Out_ WCHAR **Value, _In_ BOOL Log);
/**
* Reads string value from registry key. It waits for the registry value to become available.