From abd20337e2a2ec1c4a34c1b839ee0ed575689527 Mon Sep 17 00:00:00 2001 From: Simon Rozman Date: Wed, 29 Jul 2020 10:10:42 +0200 Subject: api: split api.h As the project grew, api.h got bloated. Signed-off-by: Simon Rozman --- api/api.h | 117 +----------------------------------------------- api/api.vcxproj | 4 ++ api/api.vcxproj.filters | 12 +++++ api/devmgmt.h | 67 +++++++++++++++++++++++++++ api/namespace.h | 21 +++++++++ api/nci.h | 22 +++++++++ api/pch.h | 4 ++ api/registry.h | 41 +++++++++++++++++ 8 files changed, 172 insertions(+), 116 deletions(-) create mode 100644 api/devmgmt.h create mode 100644 api/namespace.h create mode 100644 api/nci.h create mode 100644 api/registry.h diff --git a/api/api.h b/api/api.h index d304193..1c1fa65 100644 --- a/api/api.h +++ b/api/api.h @@ -6,70 +6,10 @@ #pragma once #include -#include typedef _Return_type_success_(return == ERROR_SUCCESS) DWORD WINTUN_STATUS; -extern HINSTANCE ResourceModule; - -_Check_return_ -HANDLE -TakeNameMutex(_In_z_ const WCHAR *Pool); - -void -ReleaseNameMutex(_In_ HANDLE Mutex); - -void -NamespaceInit(); - -void -NamespaceCleanup(); - -extern DWORD(WINAPI *NciSetConnectionName)(_In_ const GUID *Guid, _In_z_ const WCHAR *NewName); - -extern DWORD(WINAPI *NciGetConnectionName)( - _In_ const GUID *Guid, - _Out_z_bytecap_(InDestNameBytes) WCHAR *Name, - _In_ DWORD InDestNameBytes, - _Out_opt_ DWORD *OutDestNameBytes); - -void -NciInit(); - -void -NciCleanup(); - -#define MAX_REG_PATH \ - 256 /* Maximum registry path length \ - https://support.microsoft.com/en-us/help/256986/windows-registry-information-for-advanced-users */ -WINTUN_STATUS -RegistryOpenKeyWait( - _In_ HKEY Key, - _In_z_count_c_(MAX_REG_PATH) const WCHAR *Path, - _In_ DWORD Access, - _In_ DWORD Timeout, - _Out_ HKEY *KeyOut); - -WINTUN_STATUS -RegistryWaitForKey(_In_ HKEY Key, _In_z_count_c_(MAX_REG_PATH) const WCHAR *Path, _In_ DWORD Timeout); - -WINTUN_STATUS -RegistryGetString(_Inout_ WCHAR **Buf, _In_ DWORD Len, _In_ DWORD ValueType); - -WINTUN_STATUS -RegistryGetMultiString(_Inout_ WCHAR **Buf, _In_ DWORD Len, _In_ DWORD ValueType); - -WINTUN_STATUS -RegistryQueryString(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _Out_ WCHAR **Value); - -WINTUN_STATUS -RegistryQueryStringWait(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _In_ DWORD Timeout, _Out_ WCHAR **Value); - -WINTUN_STATUS -RegistryQueryDWORD(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _Out_ DWORD *Value); - -WINTUN_STATUS -RegistryQueryDWORDWait(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _In_ DWORD Timeout, _Out_ DWORD *Value); +extern HINSTANCE ResourceModule; WINTUN_STATUS WINAPI WintunGetVersion( @@ -77,58 +17,3 @@ WintunGetVersion( _Out_ DWORD *DriverVersionMin, _Out_ DWORD *NdisVersionMaj, _Out_ DWORD *NdisVersionMin); - -#define MAX_POOL 256 -#define MAX_INSTANCE_ID MAX_PATH /* TODO: Is MAX_PATH always enough? */ - -typedef struct _WINTUN_ADAPTER -{ - GUID CfgInstanceID; - WCHAR DevInstanceID[MAX_INSTANCE_ID]; - DWORD LuidIndex; - DWORD IfType; - WCHAR Pool[MAX_POOL]; -} WINTUN_ADAPTER; - -void WINAPI -WintunFreeAdapter(_In_ WINTUN_ADAPTER *Adapter); - -WINTUN_STATUS WINAPI -WintunGetAdapter(_In_z_count_c_(MAX_POOL) const WCHAR *Pool, _In_z_count_c_(MAX_ADAPTER_NAME) const WCHAR *Name, _Out_ WINTUN_ADAPTER **Adapter); - -WINTUN_STATUS WINAPI -WintunGetAdapterName(_In_ const WINTUN_ADAPTER *Adapter, _Out_cap_c_(MAX_ADAPTER_NAME) WCHAR *Name); - -WINTUN_STATUS WINAPI -WintunSetAdapterName(_In_ const WINTUN_ADAPTER *Adapter, _In_z_count_c_(MAX_ADAPTER_NAME) const WCHAR *Name); - -void WINAPI -WintunGetAdapterGUID(_In_ const WINTUN_ADAPTER *Adapter, _Out_ GUID *Guid); - -void WINAPI -WintunGetAdapterLUID(_In_ const WINTUN_ADAPTER *Adapter, _Out_ LUID *Luid); - -WINTUN_STATUS WINAPI -WintunGetAdapterDeviceObject(_In_ const WINTUN_ADAPTER *Adapter, _Out_ HANDLE *Handle); - -WINTUN_STATUS WINAPI -WintunCreateAdapter( - _In_z_count_c_(MAX_POOL) const WCHAR *Pool, - _In_z_count_c_(MAX_ADAPTER_NAME) const WCHAR *Name, - _In_opt_ const GUID *RequestedGUID, - _Out_ WINTUN_ADAPTER **Adapter, - _Inout_ BOOL *RebootRequired); - -WINTUN_STATUS WINAPI -WintunDeleteAdapter(_In_ const WINTUN_ADAPTER *Adapter, _Inout_ BOOL *RebootRequired); - -typedef BOOL(CALLBACK *WINTUN_ENUMPROC)(_In_ const WINTUN_ADAPTER *Adapter, _In_ LPARAM Param); - -WINTUN_STATUS WINAPI -WintunEnumAdapters(_In_z_count_c_(MAX_POOL) const WCHAR *Pool, _In_ WINTUN_ENUMPROC Func, _In_ LPARAM Param); - -void -DevmgmtInit(); - -void -DevmgmtCleanup(); diff --git a/api/api.vcxproj b/api/api.vcxproj index 89cc0a6..19fdd17 100644 --- a/api/api.vcxproj +++ b/api/api.vcxproj @@ -186,7 +186,11 @@ + + + + diff --git a/api/api.vcxproj.filters b/api/api.vcxproj.filters index 6f8c334..c556ec4 100644 --- a/api/api.vcxproj.filters +++ b/api/api.vcxproj.filters @@ -31,6 +31,18 @@ Header Files + + Header Files + + + Header Files + + + Header Files + + + Header Files + diff --git a/api/devmgmt.h b/api/devmgmt.h new file mode 100644 index 0000000..d03fec7 --- /dev/null +++ b/api/devmgmt.h @@ -0,0 +1,67 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * Copyright (C) 2018-2020 WireGuard LLC. All Rights Reserved. + */ + +#pragma once + +#include "api.h" +#include + +#define MAX_POOL 256 +#define MAX_INSTANCE_ID MAX_PATH /* TODO: Is MAX_PATH always enough? */ + +typedef struct _WINTUN_ADAPTER +{ + GUID CfgInstanceID; + WCHAR DevInstanceID[MAX_INSTANCE_ID]; + DWORD LuidIndex; + DWORD IfType; + WCHAR Pool[MAX_POOL]; +} WINTUN_ADAPTER; + +void WINAPI +WintunFreeAdapter(_In_ WINTUN_ADAPTER *Adapter); + +WINTUN_STATUS WINAPI +WintunGetAdapter( + _In_z_count_c_(MAX_POOL) const WCHAR *Pool, + _In_z_count_c_(MAX_ADAPTER_NAME) const WCHAR *Name, + _Out_ WINTUN_ADAPTER **Adapter); + +WINTUN_STATUS WINAPI +WintunGetAdapterName(_In_ const WINTUN_ADAPTER *Adapter, _Out_cap_c_(MAX_ADAPTER_NAME) WCHAR *Name); + +WINTUN_STATUS WINAPI +WintunSetAdapterName(_In_ const WINTUN_ADAPTER *Adapter, _In_z_count_c_(MAX_ADAPTER_NAME) const WCHAR *Name); + +void WINAPI +WintunGetAdapterGUID(_In_ const WINTUN_ADAPTER *Adapter, _Out_ GUID *Guid); + +void WINAPI +WintunGetAdapterLUID(_In_ const WINTUN_ADAPTER *Adapter, _Out_ LUID *Luid); + +WINTUN_STATUS WINAPI +WintunGetAdapterDeviceObject(_In_ const WINTUN_ADAPTER *Adapter, _Out_ HANDLE *Handle); + +WINTUN_STATUS WINAPI +WintunCreateAdapter( + _In_z_count_c_(MAX_POOL) const WCHAR *Pool, + _In_z_count_c_(MAX_ADAPTER_NAME) const WCHAR *Name, + _In_opt_ const GUID *RequestedGUID, + _Out_ WINTUN_ADAPTER **Adapter, + _Inout_ BOOL *RebootRequired); + +WINTUN_STATUS WINAPI +WintunDeleteAdapter(_In_ const WINTUN_ADAPTER *Adapter, _Inout_ BOOL *RebootRequired); + +typedef BOOL(CALLBACK *WINTUN_ENUMPROC)(_In_ const WINTUN_ADAPTER *Adapter, _In_ LPARAM Param); + +WINTUN_STATUS WINAPI +WintunEnumAdapters(_In_z_count_c_(MAX_POOL) const WCHAR *Pool, _In_ WINTUN_ENUMPROC Func, _In_ LPARAM Param); + +void +DevmgmtInit(); + +void +DevmgmtCleanup(); diff --git a/api/namespace.h b/api/namespace.h new file mode 100644 index 0000000..b5e77a9 --- /dev/null +++ b/api/namespace.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * Copyright (C) 2018-2020 WireGuard LLC. All Rights Reserved. + */ + +#pragma once + +#include + +_Check_return_ +HANDLE +TakeNameMutex(_In_z_ const WCHAR *Pool); + +void +ReleaseNameMutex(_In_ HANDLE Mutex); + +void +NamespaceInit(); + +void +NamespaceCleanup(); diff --git a/api/nci.h b/api/nci.h new file mode 100644 index 0000000..5090c90 --- /dev/null +++ b/api/nci.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * Copyright (C) 2018-2020 WireGuard LLC. All Rights Reserved. + */ + +#pragma once + +#include + +extern DWORD(WINAPI *NciSetConnectionName)(_In_ const GUID *Guid, _In_z_ const WCHAR *NewName); + +extern DWORD(WINAPI *NciGetConnectionName)( + _In_ const GUID *Guid, + _Out_z_bytecap_(InDestNameBytes) WCHAR *Name, + _In_ DWORD InDestNameBytes, + _Out_opt_ DWORD *OutDestNameBytes); + +void +NciInit(); + +void +NciCleanup(); diff --git a/api/pch.h b/api/pch.h index 1e0b311..d8cc07c 100644 --- a/api/pch.h +++ b/api/pch.h @@ -6,6 +6,10 @@ #pragma once #include "api.h" +#include "devmgmt.h" +#include "namespace.h" +#include "nci.h" +#include "registry.h" #include #include diff --git a/api/registry.h b/api/registry.h new file mode 100644 index 0000000..82d0b42 --- /dev/null +++ b/api/registry.h @@ -0,0 +1,41 @@ +/* SPDX-License-Identifier: GPL-2.0 + * + * Copyright (C) 2018-2020 WireGuard LLC. All Rights Reserved. + */ + +#pragma once + +#include "api.h" + +#define MAX_REG_PATH \ + 256 /* Maximum registry path length \ + https://support.microsoft.com/en-us/help/256986/windows-registry-information-for-advanced-users */ + +WINTUN_STATUS +RegistryOpenKeyWait( + _In_ HKEY Key, + _In_z_count_c_(MAX_REG_PATH) const WCHAR *Path, + _In_ DWORD Access, + _In_ DWORD Timeout, + _Out_ HKEY *KeyOut); + +WINTUN_STATUS +RegistryWaitForKey(_In_ HKEY Key, _In_z_count_c_(MAX_REG_PATH) const WCHAR *Path, _In_ DWORD Timeout); + +WINTUN_STATUS +RegistryGetString(_Inout_ WCHAR **Buf, _In_ DWORD Len, _In_ DWORD ValueType); + +WINTUN_STATUS +RegistryGetMultiString(_Inout_ WCHAR **Buf, _In_ DWORD Len, _In_ DWORD ValueType); + +WINTUN_STATUS +RegistryQueryString(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _Out_ WCHAR **Value); + +WINTUN_STATUS +RegistryQueryStringWait(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _In_ DWORD Timeout, _Out_ WCHAR **Value); + +WINTUN_STATUS +RegistryQueryDWORD(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _Out_ DWORD *Value); + +WINTUN_STATUS +RegistryQueryDWORDWait(_In_ HKEY Key, _In_opt_z_ const WCHAR *Name, _In_ DWORD Timeout, _Out_ DWORD *Value); -- cgit v1.2.3-59-g8ed1b