¿Cómo obtengo el nombre de visualización del servicio en C ++?

Estoy tratando de obtener el nombre para mostrar del servicio en ejecución usando c ++. Estaba intentando usar la función GetServiceDisplayName pero no parece funcionar, no estoy seguro de por qué.

TTServiceBegin( const char *svcName, PFNSERVICE pfnService, bool *svc, PFNTERMINATE pfnTerm,
int flags, int argc, char *argv[], DWORD dynamiteThreadWaitTime )
{
SC_HANDLE serviceStatusHandle;
DWORD dwSizeNeeded = 0 ;
TCHAR* szKeyName = NULL ;

serviceStatusHandle=OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE ,SC_MANAGER_ALL_ACCESS);

GetServiceDisplayName(serviceStatusHandle,svcName, NULL, &dwSizeNeeded);
if(dwSizeNeeded)
{
    szKeyName = new char[dwSizeNeeded+1];
    ZeroMemory(szKeyName,dwSizeNeeded+1);
    if(GetServiceDisplayName(serviceStatusHandle ,svcName,szKeyName,&dwSizeNeeded)!=0)
    {
        MessageBox(0,szKeyName,"Got the key name",0);
    }


}        

Cuando ejecuto este código, nunca puedo ver el valor de szKeyName en mi depurador y entra en el bloque if para el cuadro de mensaje pero nunca muestra el cuadro de mensaje. No estoy seguro de por qué?

¿De todos modos, para que esto funcione, se obtenga el nombre para mostrar del servicio o cualquier otra forma más fácil de realizar esa tarea?

Respuestas a la pregunta(2)

Su respuesta a la pregunta