Pregunta

Utilizo correo (en Delphi 7) para el cuadro de diálogo Interprograms y todo está bien.

Pero cuando uso uno de mis programas (en Windows XP) como servicio de Windows, tengo un mensaje "MororSlot Access denegado", cuando otro programa (usuarios de administrador clásico) intenta escribir en Mailslot. Entiendo que seguramente es un problema de derechos ya que el servicio tiene derechos del sistema, pero ... ¿cuál es la solución?

¿Fue útil?

Solución

Al llamar CreateMailslot(), especifique un SECURITY_DESCRIPTOR Eso permite todo el acceso al maga, por ejemplo, por ejemplo:

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;

Otros consejos

Utilizo C ++ Embarcardero 2010, y tengo que hacer algunas modificaciones a la solución de Remy Lebeau Porque la función CreateMailSlot recibe un puntero de tipo Security_Attributes *, y no un puntero de tipo Security_descriptor *.

Mi solución en C ++ es:

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);

Nota: En mi caso tengo tres aplicaciones:

  1. Un servicio con Mailslot (Embarcadero C ++ 2010)
  2. Un servicio con un cliente Mailslot (.net v4)
  3. Un WPF con un cliente Mailslot (.net v4)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top