C++ を使用して、実行中のサービスの表示名を取得しようとしています。GetServiceDisplayName 関数を使用しようとしましたが、機能していないようです。理由はわかりません。
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);
}
}
このコードを実行すると、デバッガーで szKeyName の値が表示されず、メッセージ ボックスの if ブロックに入りますが、メッセージ ボックスは表示されません。なぜかわからない?
とにかく、これを機能させてサービスの表示名を取得するか、そのタスクを達成するための他の/より簡単な方法はありますか?