CreateService を使用して、Windows XPE に Windows サービスをインストールしています。管理者のみがサービスを開始/停止/一時停止/再開できるように設定したいと思います。
現在、次を使用してサービスをインストールしています。
schService = CreateService(schSCManager,
ServiceName,
ServiceDisplayName, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
binaryPathName, // service's binary (this program)
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
そして、サービスは、PowerUsers グループのメンバーがサービスを開始および停止できるようなセキュリティで終了します。sc sdshow を使用してセキュリティ記述子を調べることができることがわかりました。また、適切な処理を行う SDDL 行を作成しました。
また、私たちの Win XPE インストールには sc.exe バイナリが含まれていないため、この特定のシステムをセットアップするためにそれを実際に使用できないことも知りました。
したがって、私が知っておく必要があるのは、CreateService 呼び出しを行うときに、このサービスにセキュリティ記述子を設定するために使用する必要がある API は何かということです。私は Windows セキュリティ API にまったく慣れていないため、どこから始めればよいかわかりません。
更新: 答えは SetServiceObjectSecurity (以下) です。次の質問: SecurityDescriptor をセットアップする最良の方法は何ですか? デフォルトの記述子を取得してから変更するのが最善ですか? それとも、まったく新しい記述子を作成する必要がありますか?