dism
启用了所有需要的选项
public object SetKeyStatus(Dictionary<string, string> request)
{
if (!request.ContainsKey("Key") || !request.ContainsKey("Blocked"))
{
return GenerateErrorResponse<object>(GULErrorCode.ERR_KEYBOARD_FILTER_INVALID_ARGUMENT, "Missing 'Key' or 'Blocked' parameter.");
}
string key = request["Key"];
if (!bool.TryParse(request["Blocked"], out bool disable))
{
return GenerateErrorResponse<object>(GULErrorCode.ERR_KEYBOARD_FILTER_INVALID_ARGUMENT, "Invalid 'Blocked' value. Expected 'true' or 'false'.");
}
try
{
string query = $"SELECT * FROM WEKF_PredefinedKey WHERE Id = '{key}'";
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"root\standardcimv2\embedded", query))
{
foreach (ManagementObject obj in searcher.Get())
{
obj["Enabled"] = disable ? 1 : 0 ; // true = Disable (block), false = Enable (allow)
PutOptions options = new PutOptions { Type = PutType.UpdateOnly};
ManagementPath path = obj.Put(options);
obj.Get(); // Ensure the object updates its internal state
logger.log($"[*********]Result : {path}");
//ManagementPath path = obj.Put();
//logger.log($"[*********]Result : {path}");
return GenerateSuccessResponse<object>("setkeystatus", key, disable);
}
}
throw new GULException(GULErrorCode.ERR_KEYBOARD_FILTER_KEY_NOT_FOUND, $"Key '{key}' not found.");
}
catch (ManagementException ex)
{
return GenerateErrorResponse<object>(GULErrorCode.ERR_KEYBOARD_FILTER_WMI_WRITE_FAILED, $"WMI write operation failed: {ex.Message}");
}
catch (GULException gex)
{
return GenerateErrorResponse<object>(gex.ErrorCode, gex.Message);
}
catch (Exception ex)
{
return GenerateErrorResponse<object>(GULErrorCode.ERR_KEYBOARD_FILTER_PROCESSING_EXCEPTION, $"Error setting key status: {ex.Message}");
}
}
它不能启用过滤器,并且CAD处于活动状态。它作为系统服务运行并具有本地系统特权。但这有效
$key = "Ctrl+Alt+Del"
$setkey = Get-WMIObject -class WEKF_PredefinedKey –computer localhost –namespace root\standardcimv2\embedded | where {$_.Id -eq "$key"};
$setkey.Id = $key
$setkey.Enabled = 1;
$setkey.Put();
我想念什么?
eventViewer事件:
Log Name: Microsoft-Windows-WMI-Activity/Operational
Source: Microsoft-Windows-WMI-Activity
Date: 3/5/2025 11:07:02 PM
Event ID: 5857
Task Category: None
Level: Information
Keywords:
User: NETWORK SERVICE
Computer: LTP
Description:
keyboardfilter provider started with result code 0x0. HostProcess = wmiprvse.exe; ProcessID = 11432; ProviderPath = %systemroot%\system32\wbem\keyboardfilterwmi.dll
Event Xml:
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event">
<System>
<Provider Name="Microsoft-Windows-WMI-Activity" Guid="{1418ef04-b0b4-4623-bf7e-d74ab47bbdaa}" />
<EventID>5857</EventID>
<Version>0</Version>
<Level>0</Level>
<Task>0</Task>
<Opcode>0</Opcode>
<Keywords>0x4000000000000000</Keywords>
<TimeCreated SystemTime="2025-03-05T23:07:02.1554728Z" />
<EventRecordID>1760</EventRecordID>
<Correlation />
<Execution ProcessID="11432" ThreadID="2396" />
<Channel>Microsoft-Windows-WMI-Activity/Operational</Channel>
<Computer>LTP</Computer>
<Security UserID="S-1-5-20" />
</System>
<UserData>
<Operation_StartedOperational xmlns="http://manifests.microsoft.com/win/2006/windows/WMI">
<ProviderName>keyboardfilter</ProviderName>
<Code>0x0</Code>
<HostProcess>wmiprvse.exe</HostProcess>
<ProcessID>11432</ProcessID>
<ProviderPath>%systemroot%\system32\wbem\keyboardfilterwmi.dll</ProviderPath>
</Operation_StartedOperational>
</UserData>
</Event>
您的方法无法正确更新
Enabled
Put()
.
上调用
ManagementObject
。
确定启用属性的设置正确。在
Put()
ManagementObject
请检查一下。这应该确保正确更新
public object SetKeyStatus(Dictionary<string, string> request)
{
if (!request.ContainsKey("Key") || !request.ContainsKey("Blocked"))
{
return GenerateErrorResponse<object>(GULErrorCode.ERR_KEYBOARD_FILTER_INVALID_ARGUMENT, "Missing 'Key' or 'Blocked' parameter.");
}
string key = request["Key"];
if (!bool.TryParse(request["Blocked"], out bool disable))
{
return GenerateErrorResponse<object>(GULErrorCode.ERR_KEYBOARD_FILTER_INVALID_ARGUMENT, "Invalid 'Blocked' value. Expected 'true' or 'false'.");
}
try
{
string query = $"SELECT * FROM WEKF_PredefinedKey WHERE Id = '{key}'";
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(@"root\standardcimv2\embedded", query))
{
foreach (ManagementObject obj in searcher.Get())
{
obj["Enabled"] = disable ? 1 : 0; // true = Disable (block), false = Enable (allow)
PutOptions options = new PutOptions { Type = PutType.UpdateOnly };
obj.Put(options); // Save the changes
obj.Get(); // Ensure the object updates its internal state
logger.log($"[*********]Result : {obj.Path}");
return GenerateSuccessResponse<object>("setkeystatus", key, disable);
}
}
throw new GULException(GULErrorCode.ERR_KEYBOARD_FILTER_KEY_NOT_FOUND, $"Key '{key}' not found.");
}
catch (ManagementException ex)
{
return GenerateErrorResponse<object>(GULErrorCode.ERR_KEYBOARD_FILTER_WMI_WRITE_FAILED, $"WMI write operation failed: {ex.Message}");
}
catch (GULException gex)
{
return GenerateErrorResponse<object>(gex.ErrorCode, gex.Message);
}
catch (Exception ex)
{
return GenerateErrorResponse<object>(GULErrorCode.ERR_KEYBOARD_FILTER_PROCESSING_EXCEPTION, $"Error setting key status: {ex.Message}");
}
}