#c# #settings #wmi #parental-control
#c# #Настройки #wmi #родительский контроль
Вопрос:
Я действительно новичок в WMI и COM.
Я хочу изменить некоторые параметры для родительского контроля учетных записей пользователей, и единственным доступным API является WMI. Используемый класс поставщика WMI — WpcUserSettings.
Я не понимаю, как изменить параметры для каждого пользователя. Должен ли я создавать ManagmentObject этого класса для каждого пользователя или они уже созданы для каждого пользователя.
Если бы кто-нибудь мог дать мне пример кода для одного пользователя, это действительно помогло бы.
Спасибо!
Редактировать: Еще раз привет. Я использовал ваш пример, чтобы получить имена учетных записей пользователей и SID. Однако, когда я ищу WpcUserSettings, результата нет, я использовал WMI Studio для проверки этого класса, и там нет экземпляра, поэтому я не могу прочитать или установить атрибуты. У вас есть идея, как это исправить?
ИСПРАВЛЕНИЕ: Хорошо, я нашел трюк. Вы должны вызвать метод AddUser(SID) WpcSystemSettings с помощью ManagementObject.Вызовите метод () для каждого пользователя, которого вы хотите добавить в управление родительским контролем. Затем вы можете включить родительский контроль в WpcUserSettings и делать все, что захотите.
Ответ №1:
WpcUserSettings
Класс wmi, который существует в rootCIMV2ApplicationsWindowsParentalControls
пространстве имен, не предоставляет никаких методов для обновления данных пользователем, но все доступные свойства доступны для чтения / записи, за исключением, очевидно, SID
свойства. вы можете перебирать свойства для конкретного пользователя и изменять значения.
Таким образом, вы можете создать запрос Wmi, используя предложение типа для извлечения всех пользователей SELECT * FROM WpcUserSettings
или это предложение для изменения свойств конкретного пользователя
SELECT * FROM WpcUserSettings Where SID="the SID of the user to modify"
затем обновите значения свойств, которые вы хотите изменить, и, наконец, вызовите Put
метод для установки новых значений.
проверьте этот пример приложения.
using System;
using System.Collections.Generic;
using System.Management;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
try
{
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\CIMV2\Applications\WindowsParentalControls", "SELECT * FROM WpcUserSettings");
foreach (ManagementObject queryObj in searcher.Get())
{
if (queryObj["SID"] == "The user SID to modify")
{
//set the properties here
queryObj["AppRestrictions"] = true;
queryObj["HourlyRestrictions"] = true;
queryObj["LoggingRequired"] = false;
//queryObj["LogonHours"] = ;
//queryObj["OverrideRequests"] = ;
queryObj["WpcEnabled"] = true;
queryObj.Put();
}
}
}
catch (ManagementException e)
{
Console.WriteLine("An error occurred setting the WMI data: " e.Message);
}
Console.ReadKey();
}
}
}
Комментарии:
1. Можем ли мы также добавить переопределения приложений программно. Я видел, что там есть WpcAppOverride. Я могу прочитать ограничения, применяемые в интерфейсе Windows, используя вышеупомянутую запись. Но не можете создать новые.