diff options
author | Yuri Benditovich <yuri.benditovich@daynix.com> | 2019-03-11 20:56:38 +0200 |
---|---|---|
committer | Yan Vugenfirer <yan@daynix.com> | 2019-04-15 11:19:13 +0300 |
commit | 3652e2a34d92bb91df6c09aba1f0f34304b1c733 (patch) | |
tree | ab87e2ffacbeeee3f27a56be056e6e973d427d41 | |
parent | 7ad99b074c91428a5e7eab9eb1ada8288606036b (diff) |
Preparation for extended rules for device hide
Extend structure USB_DK_HIDE_RULE by adding 'Type'
member derived from backward-compatible structure
USB_DK_HIDE_RULE_PUBLIC. Public API procedures of UsbDkHelper
receive USB_DK_HIDE_RULE_PUBLIC describing hiding rules.
Internally UsbDk works with extended structure.
Signed-off-by: Yuri Benditovich <yuri.benditovich@daynix.com>
-rw-r--r-- | UsbDk/UsbDkDataHider.h | 29 | ||||
-rw-r--r-- | UsbDk/UsbDkDataHiderPublic.h | 38 | ||||
-rw-r--r-- | UsbDkHelper/UsbDkHelper.cpp | 20 | ||||
-rw-r--r-- | UsbDkHelper/UsbDkHelperHider.h | 9 |
4 files changed, 78 insertions, 18 deletions
diff --git a/UsbDk/UsbDkDataHider.h b/UsbDk/UsbDkDataHider.h index b2a7e55..73c60a7 100644 --- a/UsbDk/UsbDkDataHider.h +++ b/UsbDk/UsbDkDataHider.h @@ -23,13 +23,26 @@ #pragma once -#define USB_DK_HIDE_RULE_MATCH_ALL ((ULONG64)(-1)) +#include "UsbDkDataHiderPublic.h" -typedef struct tag_USB_DK_HIDE_RULE +#ifdef __cplusplus +class USB_DK_HIDE_RULE : public USB_DK_HIDE_RULE_PUBLIC { - ULONG64 Hide; - ULONG64 Class; - ULONG64 VID; - ULONG64 PID; - ULONG64 BCD; -} USB_DK_HIDE_RULE, *PUSB_DK_HIDE_RULE; +public: + USB_DK_HIDE_RULE(PUSB_DK_HIDE_RULE_PUBLIC PublicRule = NULL, ULONG RuleType = USBDK_HIDER_RULE_DEFAULT) : + Type(RuleType) + { + if (PublicRule) + { + Hide = PublicRule->Hide; + Class = PublicRule->Class; + VID = PublicRule->VID; + PID = PublicRule->PID; + BCD = PublicRule->BCD; + } + } + ULONG64 Type; +}; + +typedef USB_DK_HIDE_RULE *PUSB_DK_HIDE_RULE; +#endif diff --git a/UsbDk/UsbDkDataHiderPublic.h b/UsbDk/UsbDkDataHiderPublic.h new file mode 100644 index 0000000..ef8393b --- /dev/null +++ b/UsbDk/UsbDkDataHiderPublic.h @@ -0,0 +1,38 @@ +/********************************************************************** +* Copyright (c) 2013-2014 Red Hat, Inc. +* +* Developed by Daynix Computing LTD. +* +* Authors: +* Dmitry Fleytman <dmitry@daynix.com> +* Kirill Moizik <kirill@daynix.com> +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +**********************************************************************/ + +#pragma once + +#define USB_DK_HIDE_RULE_MATCH_ALL ((ULONG64)(-1)) + +typedef struct tag_USB_DK_HIDE_RULE_PUBLIC +{ + ULONG64 Hide; + ULONG64 Class; + ULONG64 VID; + ULONG64 PID; + ULONG64 BCD; +} USB_DK_HIDE_RULE_PUBLIC, *PUSB_DK_HIDE_RULE_PUBLIC; + +#define USBDK_HIDER_RULE_DEFAULT 0 +#define USBDK_HIDER_RULE_DETERMINATIVE_TYPES 1 diff --git a/UsbDkHelper/UsbDkHelper.cpp b/UsbDkHelper/UsbDkHelper.cpp index f565b19..1121562 100644 --- a/UsbDkHelper/UsbDkHelper.cpp +++ b/UsbDkHelper/UsbDkHelper.cpp @@ -305,12 +305,13 @@ HANDLE UsbDk_CreateHiderHandle() } } -BOOL UsbDk_AddHideRule(HANDLE HiderHandle, PUSB_DK_HIDE_RULE Rule) +DLL BOOL UsbDk_AddExtendedHideRule(HANDLE HiderHandle, PUSB_DK_HIDE_RULE_PUBLIC PublicRule, ULONG Type) { + USB_DK_HIDE_RULE Rule(PublicRule, Type); try { auto HiderAccess = unpackHandle<UsbDkHiderAccess>(HiderHandle); - HiderAccess->AddHideRule(*Rule); + HiderAccess->AddHideRule(Rule); return TRUE; } catch (const exception &e) @@ -320,6 +321,11 @@ BOOL UsbDk_AddHideRule(HANDLE HiderHandle, PUSB_DK_HIDE_RULE Rule) } } +BOOL UsbDk_AddHideRule(HANDLE HiderHandle, PUSB_DK_HIDE_RULE_PUBLIC PublicRule) +{ + return UsbDk_AddExtendedHideRule(HiderHandle, PublicRule, USBDK_HIDER_RULE_DEFAULT); +} + BOOL UsbDk_ClearHideRules(HANDLE HiderHandle) { try @@ -374,12 +380,14 @@ InstallResult ModifyPersistentHideRules(const USB_DK_HIDE_RULE &Rule, } } -DLL InstallResult UsbDk_AddPersistentHideRule(PUSB_DK_HIDE_RULE Rule) +DLL InstallResult UsbDk_AddPersistentHideRule(PUSB_DK_HIDE_RULE_PUBLIC PublicRule) { - return ModifyPersistentHideRules(*Rule, &CRulesManager::AddRule); + USB_DK_HIDE_RULE Rule(PublicRule); + return ModifyPersistentHideRules(Rule, &CRulesManager::AddRule); } -DLL InstallResult UsbDk_DeletePersistentHideRule(PUSB_DK_HIDE_RULE Rule) +DLL InstallResult UsbDk_DeletePersistentHideRule(PUSB_DK_HIDE_RULE_PUBLIC PublicRule) { - return ModifyPersistentHideRules(*Rule, &CRulesManager::DeleteRule); + USB_DK_HIDE_RULE Rule(PublicRule); + return ModifyPersistentHideRules(Rule, &CRulesManager::DeleteRule); } diff --git a/UsbDkHelper/UsbDkHelperHider.h b/UsbDkHelper/UsbDkHelperHider.h index d4f4521..98df11d 100644 --- a/UsbDkHelper/UsbDkHelperHider.h +++ b/UsbDkHelper/UsbDkHelperHider.h @@ -35,7 +35,7 @@ #endif #endif -#include "UsbDkDataHider.h" +#include "UsbDkDataHiderPublic.h" #ifdef __cplusplus extern "C" { #endif @@ -79,7 +79,7 @@ extern "C" { * UsbDk_ClearHideRules() called * */ - DLL BOOL UsbDk_AddHideRule(HANDLE HiderHandle, PUSB_DK_HIDE_RULE Rule); + DLL BOOL UsbDk_AddHideRule(HANDLE HiderHandle, PUSB_DK_HIDE_RULE_PUBLIC Rule); /* Clear all hider rules * @@ -127,12 +127,13 @@ extern "C" { * device re-plug or system reboot. * */ - DLL InstallResult UsbDk_AddPersistentHideRule(PUSB_DK_HIDE_RULE Rule); + DLL InstallResult UsbDk_AddPersistentHideRule(PUSB_DK_HIDE_RULE_PUBLIC Rule); /* Delete specific persistent hide rule * * @params * IN - Rule - pointer to hide rule + * - Type - type of the rule * OUT - None * * @return @@ -144,7 +145,7 @@ extern "C" { * device re-plug or system reboot. * */ - DLL InstallResult UsbDk_DeletePersistentHideRule(PUSB_DK_HIDE_RULE Rule); + DLL InstallResult UsbDk_DeletePersistentHideRule(PUSB_DK_HIDE_RULE_PUBLIC Rule); #ifdef __cplusplus } #endif |