SoloCodigo

Programación General => C/C++ => C++ Builder => Mensaje iniciado por: afiler en Jueves 12 de Octubre de 2006, 22:10

Título: Servicios Windows
Publicado por: afiler en Jueves 12 de Octubre de 2006, 22:10
Hola , como puedo desde C++ , invocar un servicio windows y manipularlo como objeto para poder acceder a los metodos que posea este servicio.


si alguien cacha.... por fa
Título: Re: Servicios Windows
Publicado por: Eternal Idol en Jueves 12 de Octubre de 2006, 22:44
http://msdn.microsoft.com/library/en-us/dl...se/services.asp (http://msdn.microsoft.com/library/en-us/dllproc/base/services.asp)
Título: Re: Servicios Windows
Publicado por: afiler en Viernes 13 de Octubre de 2006, 00:02
Cita de: "Eternal Idol"
http://msdn.microsoft.com/library/en-us/dl...se/services.asp (http://msdn.microsoft.com/library/en-us/dllproc/base/services.asp)
Idol, estuve viendo la información , lo que me podria servir es el
openService que devuelve el Handle , pero este  es solo una cabecera al servicio.

Lo que requiero es invocar al servicio mediante alguna funcion que me devuelva un Object  y luego llamar a un metodo especifico de este.



Objec.metodoXXXXX()
Título: Re: Servicios Windows
Publicado por: Eternal Idol en Viernes 13 de Octubre de 2006, 08:05
Muy bien pero .. ¿Donde dice que un servicio es un objeto? Eso no es cierto ... se pueden escribir servicios en assembly o en C perfectamente.
Título: Re: Servicios Windows
Publicado por: afiler en Viernes 13 de Octubre de 2006, 17:47
Cita de: "Eternal Idol"
Muy bien pero .. ¿Donde dice que un servicio es un objeto? Eso no es cierto ... se pueden escribir servicios en assembly o en C perfectamente.
Solo cite "objetos" para explicar lo que necesito, pero bueno ,  finalmente al invocar un servicio con openService obtengo un handler el cual me retorna la estructura del servicio, la duda ahora es como acceder a un metodo o funcion X de este servicio windows.  


POr si acaso este servicio que señalo es un .exe que al ejecutarlo queda corriendo como un servicio win. el cual posee un metodo que al pasarle ciertos parametros
este retorna un valor encriptado.
Título: Re: Servicios Windows
Publicado por: Eternal Idol en Viernes 13 de Octubre de 2006, 18:12
Cita de: "afiler"
Solo cite "objetos" para explicar lo que necesito, pero bueno ,  finalmente al invocar un servicio con openService obtengo un handler el cual me retorna la estructura del servicio, la duda ahora es como acceder a un metodo o funcion X de este servicio windows.
Bien pero es mejor tratar de ser exactos, sino generas confusion y es mas dificil que se te pueda ayudar. Por ir al caso, tampoco es cierto que OpenService te devuelva ninguna estructura del servicio en lo absoluto. Si s cierto que te devuelve un HANDLE y con el mismo podes hacer varias cosas. Supongo que lo que estas buscando es ControlService que sirve tanto para las funciones comunes (stop, pause, etc) como para las definidas por el servicio en particular.
Título: Re: Servicios Windows
Publicado por: afiler en Sábado 14 de Octubre de 2006, 21:11
Hola , revise el   ControlService, pero vi que solo retorna informacion del servicio, este es el codigo que utilice:

 
void ControlService(SC_HANDLE schService) {

   
    SERVICE_STATUS ssStatus;
    DWORD fdwAccess;
    DWORD dwStartTickCount, dwWaitTime;

   fdwAccess = SERVICE_USER_DEFINED_CONTROL



   if (! ControlService(
            schService,   // handle to service
            129,   // control value to send, este numero va de 128 a 256
            &ssStatus) )  // address of status info
    {
        printf("ControlService failed (%d)\n", GetLastError());
       // return FALSE;
    }


   


    printf("\nStatus of Sample_Srv: \n");
    printf("  Service Type: 0x%x\n", ssStatus.dwServiceType);
    printf("  Current State: 0x%x\n", ssStatus.dwCurrentState);
    printf("  Controls Accepted: 0x%x\n",
        ssStatus.dwControlsAccepted);
    printf("  Exit Code: %d\n", ssStatus.dwWin32ExitCode);
    printf("  Service Specific Exit Code: %d\n",
        ssStatus.dwServiceSpecificExitCode);
    printf("  Check Point: %d\n", ssStatus.dwCheckPoint);
    printf("  Wait Hint: %d\n", ssStatus.dwWaitHint);


}
Bueno antes me cree un open service para pasarle al Controlservice el SC_HANDLE

Y la verdad no se como poder invocar un metodo en particular del servicio.
Título: Re: Servicios Windows
Publicado por: Eternal Idol en Sábado 14 de Octubre de 2006, 23:16
Cita de: "afiler"
Hola , revise el   ControlService, pero vi que solo retorna informacion del servicio, este es el codigo que utilice:

Y la verdad no se como poder invocar un metodo en particular del servicio.
Viste mal, lee la documentacion de la funcion. Con la misma podes como ya te dije antes parar, pausar, resumir un servicio y usar las funciones especificas del mismo.

¿Quien dice que ese servicio tiene el metodo que decis exportado de esta manera? ¿Donde esta su documentacion?
Título: Re: Servicios Windows
Publicado por: afiler en Lunes 16 de Octubre de 2006, 17:51
A vale lo que pasa es que es un servicio  hecho de tipo COM, en la docu. me dicen que se debe invocar al metodo DLC040, y me enviaron un ejemplo en Visual Basic donde
referencian el servicio como libreria

  Dim cripto As New Seg

y luego



cripto.DLC040(parametros xxxxxxxx)

"Seg" es la clase que corresponde al servicio. eso es lo que tengo de documentacion.
Título: Re: Servicios Windows
Publicado por: Eternal Idol en Lunes 16 de Octubre de 2006, 19:16
COM es otra historia totalmente diferente a los servicios de Windows. Mi recomendacion es que les pidas o un ejemplo para Builder de esto mismo o de ser posible una interfaz mas simple de usar desde C/C++ (como una DLL) ...