1 /* -*- Mode: C; tab-width: 4 -*-
3 * Copyright (c) 2004 Apple Computer, Inc. All rights reserved.
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
19 #include <DebugServices.h>
21 BOOL APIENTRY
DllMain( HANDLE inModule
, DWORD inReason
, LPVOID inReserved
)
28 case DLL_PROCESS_ATTACH
:
29 case DLL_THREAD_ATTACH
:
30 case DLL_THREAD_DETACH
:
31 case DLL_PROCESS_DETACH
:
39 IsSystemServiceDisabled()
41 ENUM_SERVICE_STATUS
* lpService
= NULL
;
45 DWORD bytesNeeded
= 0;
47 DWORD resumeHandle
= 0;
54 sc
= OpenSCManager( NULL
, NULL
, SC_MANAGER_ENUMERATE_SERVICE
);
55 err
= translate_errno( sc
, GetLastError(), kUnknownErr
);
56 require_noerr( err
, exit
);
58 srvType
= SERVICE_WIN32
;
59 srvState
= SERVICE_STATE_ALL
;
63 // Call EnumServicesStatus using the handle returned by OpenSCManager
65 ok
= EnumServicesStatus ( sc
, srvType
, srvState
, lpService
, dwBytes
, &bytesNeeded
, &srvCount
, &resumeHandle
);
67 if ( ok
|| ( GetLastError() != ERROR_MORE_DATA
) )
77 dwBytes
= bytesNeeded
;
79 lpService
= ( ENUM_SERVICE_STATUS
* ) malloc( dwBytes
);
80 require_action( lpService
, exit
, ret
= FALSE
);
83 err
= translate_errno( ok
, GetLastError(), kUnknownErr
);
84 require_noerr( err
, exit
);
86 for ( i
= 0; i
< srvCount
; i
++ )
88 if ( strcmp( lpService
[i
].lpServiceName
, "Bonjour Service" ) == 0 )
90 if ( ( lpService
[i
].ServiceStatus
.dwCurrentState
== SERVICE_PAUSED
) || ( lpService
[i
].ServiceStatus
.dwCurrentState
== SERVICE_STOPPED
) )
108 CloseServiceHandle ( sc
);