質問

私はプログラム間ダイアログにMailSlots(Delphi 7)を使用していますが、すべては問題ありません。

しかし、私のプログラムの1つ(Windows XP)をWindowsサービスとして使用すると、別の(クラシック管理者ユーザー)プログラムがMailSlotに書き込んでみると、「MailSlot Access Dened」というメッセージがあります。サービスにはシステムの権利があるので、それは確かに権利の問題であることを理解していますが、...解決策は何ですか?

役に立ちましたか?

解決

電話するとき CreateMailslot(), 、aを指定します SECURITY_DESCRIPTOR これにより、MailSlotへのすべてのアクセスが可能になります。

var
  ...
  sd: SECURITY_DESCRIPTOR;
  sa: SECURITY_ATTRIBUTES; 
begin
  ...
  InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION);
  SetSecurityDescriptorDacl(@sd, True, nil, False);

  sa.lpSecurityDescriptor := @sd; 
  sa.bInheritHandle := Frue; 

  ... := CreateMailslot(..., @sa);
  ...
end;

他のヒント

私はC ++ EmbarCardero 2010を使用していますが、の解決策にいくつかの変更を行う必要があります レミー・レボー createmailslot関数は、型security_descriptor *のポインターではなく、タイプSecurity_attributes *のポインターを受信するためです。

C ++での私のソリューションは次のとおりです。

SECURITY_DESCRIPTOR sd;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorDacl(&sd, true, NULL, false);

SECURITY_ATTRIBUTES sa;
sa.lpSecurityDescriptor=&sd;
sa.bInheritHandle=true;
this->pHandleMailSlot = CreateMailslot("your mail slot path", 0, -1, &sa);

注:私の場合、3つのアプリケーション:

  1. MailSlotを使用したサービス(Embarcadero C ++ 2010)
  2. クライアントMailSlot(.NET V4)を備えたサービス
  3. クライアントMailSlot(.NET V4)を備えたWPF
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top