Начал писать Windows service. Не могу понять почему не создаётся сервис. Может кто подскажет где я неправ? Code (ASM): format PE64 GUI 6.0 entry start include 'win64ax.inc' section '.data' data writeable executable SERVICE_NAME db "installAgent" SERVICE_DISP db "Эта пользовательская служба используется в сценариях платформы подключенных устройств" SCH dq ? SVC dq ? SC_MANAGER_ALL_ACCESS = 0xF003F section '.code' code readable executable proc start invoke OpenSCManagerA,0,0,SC_MANAGER_ALL_ACCESS mov [SCH],rax invoke GetCommandLineA invoke CreateServiceA,SCH,SERVICE_NAME,SERVICE_DISP,SC_MANAGER_ALL_ACCESS,0x00000010,0x00000002,0,rax,0,0,0,0,0 mov [SVC],rax invoke CloseServiceHandle,SCH invoke CloseServiceHandle,SVC ret endp invoke ExitProcess,rax section '.idata' import data readable writeable library kernel,'KERNEL32.DLL',\ user32,'USER32.DLL',\ advapi32,'ADVAPI32.DLL' import kernel,\ ExitProcess,'ExitProcess',\ GetCommandLineA,'GetCommandLineA' import user32,\ MessageBoxA,'MessageBoxA' import advapi32,\ OpenSCManagerA,'OpenSCManagerA',\ CreateServiceA,'CreateServiceA',\ CloseServiceHandle,'CloseServiceHandle'
Всё хорошо. CreateService возвращает хендл, и сразу заходит в ntdll Выполняется код: mov rcx,qword ptr ss:[rsp+C0] xor rcx,rsp call kernelbase.7FFE2FBB4E90 после которого в rax 0 Почему? Что он делает? Вот код который выполняю Code (ASM): format PE64 GUI 6.0 entry start include 'win64ax.inc' section '.data' data writeable executable SERVICE_NAME db "installAgent" SERVICE_DISP db "Эта пользовательская служба используется в сценариях платформы подключенных устройств" SCH dd ? SVC dd ? SC_MANAGER_ALL_ACCESS = 0xF003F SERVICE_START = 16 SERVICE_ALL_ACCESS = 0xF01FF SERVICE_INTERACTIVE_PROCESS = 0x00000100 SERVICE_WIN32_OWN_PROCESS = 0x00000010 SERVICE_AUTO_START = 0x00000002 section '.code' code readable executable proc start invoke OpenSCManagerA,0,0,SC_MANAGER_ALL_ACCESS mov [SCH],eax invoke GetCommandLineA invoke CreateServiceA,SCH,SERVICE_NAME,SERVICE_DISP,SERVICE_ALL_ACCESS,SERVICE_WIN32_OWN_PROCESS or SERVICE_INTERACTIVE_PROCESS,SERVICE_AUTO_START,0,rax,0,0,0,0,0 mov [SVC],eax invoke CloseServiceHandle,SCH invoke CloseServiceHandle,SVC ret endp invoke ExitProcess,rax section '.idata' import data readable writeable library kernel,'KERNEL32.DLL',\ user32,'USER32.DLL',\ advapi32,'ADVAPI32.DLL' import kernel,\ ExitProcess,'ExitProcess',\ GetCommandLineA,'GetCommandLineA' import user32,\ MessageBoxA,'MessageBoxA' import advapi32,\ OpenSCManagerA,'OpenSCManagerA',\ CreateServiceA,'CreateServiceA',\ CloseServiceHandle,'CloseServiceHandle' Причем mov [SCH],eax записывает хендл номально, а mov [SVC],eax не пишется
Code (ASM): format PE64 GUI 6.0 entry GLE include 'win64ax.inc' section '.data' data writeable executable ERR dq ? section '.code' code readable executable proc GLE invoke GetLastError mov ERR,rax invoke MessageBoxA invoke ExitProcess,rax endp Вот так вот?