サービス MMC から SERVICE_CONTROL_STOP を受信した直後に停止できないことがあるサービス アプリケーションを作成しています。私は現在、次のように処理しています:(疑似コードで):
DWORD
HandlerEx(
DWORD dwControl,
DWORD dwEventType,
PVOID pvEventData,
PVOID pvContext
)
{
switch( dwControl )
{
case SERVICE_CONTROL_STOP:
if ( CanStopServiceNow() )
{
ReportStatus( SERVICE_STOP_PENDING );
DoStopService();
ReportStatus( SERVICE_STOPPED );
return NO_ERROR;
}
else
return ERROR_BUSY;
break;
}
return NO_ERROR;
}
サービスが停止できる場合 (実際に停止する場合) は問題なく動作しますが、停止できない場合は、Windows が返すエラー (この例では ERROR_BUSY) を報告することを期待します。代わりに、Windows は次のようなメッセージを表示します。
"The service did not return an error.
This could be an internal Windows error or an internal service error."
私の質問は、サービスが現在停止できないことを SCM に報告し、MMC に返された実際のエラー コードに関するメッセージを表示させる方法です。