-
- // Short circuit if we've already done this
-
- require_action_quiet( !g_doneCheck, exit, g_doneCheck = TRUE );
-
+ SC_HANDLE scm = NULL;
+ SC_HANDLE service = NULL;
+ SERVICE_STATUS status;
+ mStatus err;
+ BOOL ok = TRUE;
+
+ // Initialize flag
+
+ *inVirtualPC = FALSE;
+
+ // Find out if WMI is running
+
+ scm = OpenSCManager( 0, 0, SC_MANAGER_CONNECT );
+ err = translate_errno( scm, (OSStatus) GetLastError(), kOpenErr );
+ require_noerr( err, exit );
+
+ service = OpenService( scm, TEXT( "winmgmt" ), SERVICE_QUERY_STATUS );
+ err = translate_errno( service, (OSStatus) GetLastError(), kNotFoundErr );
+ require_noerr( err, exit );
+
+ ok = QueryServiceStatus( service, &status );
+ err = translate_errno( ok, (OSStatus) GetLastError(), kAuthenticationErr );
+ require_noerr( err, exit );
+ require_action( status.dwCurrentState == SERVICE_RUNNING, exit, err = kUnknownErr );
+