summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuri Benditovich <yuri.benditovich@daynix.com>2019-03-11 20:56:38 +0200
committerYan Vugenfirer <yan@daynix.com>2019-04-15 11:19:13 +0300
commit3652e2a34d92bb91df6c09aba1f0f34304b1c733 (patch)
treeab87e2ffacbeeee3f27a56be056e6e973d427d41
parent7ad99b074c91428a5e7eab9eb1ada8288606036b (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.h29
-rw-r--r--UsbDk/UsbDkDataHiderPublic.h38
-rw-r--r--UsbDkHelper/UsbDkHelper.cpp20
-rw-r--r--UsbDkHelper/UsbDkHelperHider.h9
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