ゲストアカウントにシステム時刻変更特権を追加(C言語)

説明:

LsaAddAccountRightsを使用して、ローカルマシン上の“Guests”というグループに対してシステム時刻の変更の特権を追加する。

キーワード:

LookupAccountName, LsaOpenPolicy, LsaAddAccountRights, LsaClose

サンプルコード:

void AddRights()
{
	LSA_UNICODE_STRING Rights[1];
	LSA_HANDLE hPolicy;
	LSA_OBJECT_ATTRIBUTES Attr;
	SECURITY_QUALITY_OF_SERVICE Quality;

	PSID psid;
	DWORD SidSize = 1000;
	LPWSTR DomainName;
	DWORD DomainNameSize = 1000;
	DWORD SidType;

	/* 初期設定 */
	Rights[0].Buffer = SE_SYSTEMTIME_NAME;
	Rights[0].Length = lstrlen(SE_SYSTEMTIME_NAME) * sizeof(WCHAR);
	Rights[0].MaximumLength = (lstrlen(SE_SYSTEMTIME_NAME) + 1) * sizeof(WCHAR);

	/* GuestsのSIDを取得 */
	psid = GlobalAlloc(GMEM_FIXED, SidSize);
	DomainName = GlobalAlloc(GMEM_FIXED, DomainNameSize);
	LookupAccountName(NULL, L"Guests", psid, &SidSize, DomainName, &DomainNameSize, &SidType);

	/* ポリシオブジェクトのオープン */
	Attr.Length = sizeof(Attr);
	Attr.RootDirectory = NULL;
	Attr.ObjectName = NULL;
	Attr.Attributes = 0;
	Attr.SecurityDescriptor = NULL;
	Attr.SecurityQualityOfService = &Quality;

	Quality.Length = sizeof(Quality);
	Quality.ImpersonationLevel = SecurityImpersonation;
	Quality.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
	Quality.EffectiveOnly = FALSE;

	LsaOpenPolicy(
		NULL,
		&Attr,
		POLICY_LOOKUP_NAMES | POLICY_CREATE_ACCOUNT,
		&hPolicy);

	/* アカウントに特権追加 */
	LsaAddAccountRights(
		hPolicy,
		psid,
		Rights,
		1);

	/* 後処理 */
	GlobalFree(psid);
	GlobalFree(DomainName);
	LsaClose(hPolicy);
}

(original text:1999/05/25 更新)

本ドキュメントの内容は保証しません。本ドキュメントによって生じた結果について、一切の責任を負いません。