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.
17 Change History (most recent first):
20 Revision 1.4 2006/08/14 23:25:41 cheshire
21 Re-licensed mDNSResponder daemon source code under Apache License, Version 2.0
23 Revision 1.3 2005/07/07 19:18:29 shersche
24 Fix error in previous checkin, change SystemServiceIsDisabled() to IsSystemServiceDisabled()
26 Revision 1.2 2005/06/30 17:55:35 shersche
27 <rdar://problem/4096913> Implement ISSystemServiceDisabled(). This is used to determine how long we should wait to connect to the system service.
29 Revision 1.1 2004/06/18 03:55:11 rpantos
30 Move DLL up to main level; additional integration from Scott.
32 Revision 1.1 2004/02/21 04:16:50 bradley
33 DLL wrapper for DNS-SD API.
38 #include <DebugServices.h>
40 BOOL APIENTRY
DllMain( HANDLE inModule
, DWORD inReason
, LPVOID inReserved
)
47 case DLL_PROCESS_ATTACH
:
48 case DLL_THREAD_ATTACH
:
49 case DLL_THREAD_DETACH
:
50 case DLL_PROCESS_DETACH
:
58 IsSystemServiceDisabled()
60 ENUM_SERVICE_STATUS
* lpService
= NULL
;
64 DWORD bytesNeeded
= 0;
66 DWORD resumeHandle
= 0;
73 sc
= OpenSCManager( NULL
, NULL
, SC_MANAGER_ENUMERATE_SERVICE
);
74 err
= translate_errno( sc
, GetLastError(), kUnknownErr
);
75 require_noerr( err
, exit
);
77 srvType
= SERVICE_WIN32
;
78 srvState
= SERVICE_STATE_ALL
;
82 // Call EnumServicesStatus using the handle returned by OpenSCManager
84 ok
= EnumServicesStatus ( sc
, srvType
, srvState
, lpService
, dwBytes
, &bytesNeeded
, &srvCount
, &resumeHandle
);
86 if ( ok
|| ( GetLastError() != ERROR_MORE_DATA
) )
96 dwBytes
= bytesNeeded
;
98 lpService
= ( ENUM_SERVICE_STATUS
* ) malloc( dwBytes
);
99 require_action( lpService
, exit
, ret
= FALSE
);
102 err
= translate_errno( ok
, GetLastError(), kUnknownErr
);
103 require_noerr( err
, exit
);
105 for ( i
= 0; i
< srvCount
; i
++ )
107 if ( strcmp( lpService
[i
].lpServiceName
, "Bonjour Service" ) == 0 )
109 if ( ( lpService
[i
].ServiceStatus
.dwCurrentState
== SERVICE_PAUSED
) || ( lpService
[i
].ServiceStatus
.dwCurrentState
== SERVICE_STOPPED
) )
127 CloseServiceHandle ( sc
);