1234567891011121314151617181920212223242526272829303132333435363738394041 |
- // Copyright 2012 The Go Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style
- // license that can be found in the LICENSE file.
- // +build windows
- // func servicemain(argc uint32, argv **uint16)
- TEXT ·servicemain(SB),7,$0
- MOVL CX, ·sArgc(SB)
- MOVL DX, ·sArgv(SB)
- SUBQ $32, SP // stack for the first 4 syscall params
- MOVQ ·sName(SB), CX
- MOVQ $·servicectlhandler(SB), DX
- MOVQ ·cRegisterServiceCtrlHandlerW(SB), AX
- CALL AX
- CMPQ AX, $0
- JE exit
- MOVQ AX, ·ssHandle(SB)
- MOVQ ·goWaitsH(SB), CX
- MOVQ ·cSetEvent(SB), AX
- CALL AX
- MOVQ ·cWaitsH(SB), CX
- MOVQ $4294967295, DX
- MOVQ ·cWaitForSingleObject(SB), AX
- CALL AX
- exit:
- ADDQ $32, SP
- RET
- // I do not know why, but this seems to be the only way to call
- // ctlHandlerProc on Windows 7.
- // func servicectlhandler(ctl uint32) uintptr
- TEXT ·servicectlhandler(SB),7,$0
- MOVQ ·ctlHandlerProc(SB), AX
- JMP AX
|