为什么这不起作用,但是类似的电源壳操作却是

问题描述 投票:0回答:1
我使用
    dism
  1. 启用了所有需要的选项
    
  2. Method:

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
c# windows powershell wmi get-wmiobject
1个回答
0
投票
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}"); } }
  • 属性。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.