Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ; ### Author: Vyacheslav, 2016.
- ; ### Use this file as you wish. Comment or write me a PM if you like it. :)
- .386
- .MODEL flat, stdcall
- OPTION casemap: none
- ; ############### Includes & libraries ##################################################
- .NOLIST
- INCLUDE windows.inc
- INCLUDE kernel32.inc
- INCLUDE shell32.inc
- INCLUDELIB kernel32.lib
- INCLUDELIB shell32.lib
- INCLUDELIB user32.lib
- INCLUDELIB shlwapi.lib
- .LISTALL
- ; ############### Constants Section #####################################################
- CREATE_DEFAULT_ERROR_MODE EQU 4000000h
- ; ############### Data Section ##########################################################
- .CONST
- szAbout DB "Block PC sleep while child process is executing.",13,10
- DB "Usage: blocksleep <exe_filename> [arguments]",13,10,13,10,0
- slAbout = $-szAbout
- szErrorSetState DB "ERROR: Can't set thread execution state via SetThreadExecutionState WinAPI finction",13,10
- DB "See https://msdn.microsoft.com/ru-ru/library/windows/desktop/aa373208(v=vs.85).aspx for more info.",13,10,0
- slErrorSetState = $-szErrorSetState
- szCreateProcessError DW 'E','R','R','O','R',':',' ','C','a','n','''','t',' ','s','t','a','r','t',' ','p','r','o','c','e','s','s',' '
- DW '"','%','s','"',' ','%','s',' ','w','i','t','h',' '
- DW 'C','r','e','a','t','e','P','r','o','c','e','s','s',' ','f','u','n','c','t','i','o','n','.',0
- szCreateProcessAdd DB 13,10
- DB "See why this could happen at https://msdn.microsoft.com/ru-ru/library/windows/desktop/ms682425(v=vs.85).aspx",13,10,0
- slCreateProcessAdd = $-szCreateProcessAdd
- szWaitForError DB "ERROR: WaitForSingleObject function failed with code 0x%08x",13,10,0
- szGetExitCodeError DB "ERROR: GetExitCodeProcess function failed.",13,10,0
- .DATA?
- HInstance DD ?
- hStdout DD ?
- dwOldState DD ?
- stSI STARTUPINFO <>
- stPI PROCESS_INFORMATION <>
- szBuffer DW 8192 DUP(?)
- ; ############### Procedures declarations ###############################################
- wsprintfW PROTO C :DWORD,:VARARG
- GetCommandLineW PROTO
- PathGetArgsW PROTO :DWORD
- PathRemoveArgsW PROTO :DWORD
- PathUnquoteSpacesW PROTO :DWORD
- CreateProcessW PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD,:DWORD
- WriteConsoleW PROTO :DWORD,:DWORD,:DWORD,:DWORD,:DWORD
- ; ############### Module declarations ###################################################
- ; ############### Code Section ##########################################################
- .CODE
- Move proc USES EDI ESI ECX, Source:DWORD, Dest:DWORD, Count:DWORD
- MOV ESI, Source
- MOV EDI, Dest
- MOV ECX, Count
- CMP EDI, ESI
- JA @1
- JE @2
- SAR ECX, 2
- JS @2
- REP MOVSD
- MOV ECX, Count
- AND ECX, 03H
- REP MOVSB
- JMP @2
- @1: LEA ESI, [ESI+ECX-4]
- LEA EDI, [EDI+ECX-4]
- SAR ECX, 2
- JS @2
- STD
- REP MOVSD
- MOV ECX, Count
- AND ECX, 03H
- ADD ESI, 4-1
- ADD EDI, 4-1
- REP MOVSB
- CLD
- @2: RET
- Move endp
- Start:
- MOV EBX, -1
- INVOKE GetStdHandle, STD_OUTPUT_HANDLE
- MOV hStdout, EAX
- INVOKE GetCommandLineW
- MOV ESI, EAX
- INVOKE PathGetArgsW, ESI
- MOV ESI, EAX
- MOV AX, WORD PTR [ESI]
- TEST AX, AX
- JNE @F
- PUSH 0
- MOV EAX, ESP
- INVOKE WriteConsoleA, hStdout, OFFSET szAbout, slAbout, EAX, NULL
- POP EAX
- JMP Exit
- @@: MOV EBX, -2
- INVOKE SetThreadExecutionState, ES_CONTINUOUS or ES_SYSTEM_REQUIRED
- MOV dwOldState, EAX
- TEST EAX, EAX
- JNE @F
- PUSH 0
- MOV EAX, ESP
- INVOKE WriteConsoleA, hStdout, OFFSET szErrorSetState, slErrorSetState, EAX, NULL
- POP EAX
- JMP Exit
- @@: MOV EDI, ESI
- MOV AX, 0
- XOR ECX, ECX
- DEC ECX ; ECX = -1
- REPNE SCASW
- NEG ECX
- SHL ECX, 1
- PUSH ECX
- INVOKE LocalAlloc, LMEM_FIXED, ECX
- MOV EDI, EAX
- POP ECX
- INVOKE Move, ESI, EDI, ECX
- INVOKE PathRemoveArgsW, EDI
- INVOKE PathUnquoteSpacesW, EDI
- INVOKE PathGetArgsW, ESI
- MOV ESI, EAX
- MOV stSI.cb, SIZEOF STARTUPINFO
- MOV stSI.dwFlags, STARTF_FORCEOFFFEEDBACK
- INVOKE CreateProcessW, EDI, ESI, NULL, NULL, FALSE, CREATE_DEFAULT_ERROR_MODE, NULL, NULL, OFFSET stSI, OFFSET stPI
- PUSH EAX
- INVOKE LocalFree, EDI
- POP EAX
- TEST EAX, EAX
- JNE @F
- INVOKE wsprintfW, OFFSET szBuffer, OFFSET szCreateProcessError, EDI, ESI
- PUSH 0
- MOV ECX, ESP
- INVOKE WriteConsoleW, hStdout, OFFSET szBuffer, EAX, ECX, NULL
- MOV EAX, ESP
- INVOKE WriteConsoleA, hStdout, OFFSET szCreateProcessAdd, slCreateProcessAdd, EAX, NULL
- POP EAX
- JMP ExitRetState
- @@: INVOKE CloseHandle, stPI.hThread
- INVOKE WaitForSingleObject, stPI.hProcess, INFINITE
- CMP EAX, WAIT_OBJECT_0
- JE @F
- INVOKE wsprintfA, OFFSET szBuffer, OFFSET szWaitForError, EAX
- PUSH 0
- MOV ECX, ESP
- INVOKE WriteConsoleA, hStdout, OFFSET szBuffer, EAX, ECX, NULL
- POP EAX
- JMP ExitCloseProcess
- @@: PUSH 0
- INVOKE GetExitCodeProcess, stPI.hProcess, ESP
- TEST EAX, EAX
- POP EAX
- JE @F
- INVOKE wsprintfA, OFFSET szBuffer, OFFSET szGetExitCodeError, EAX
- PUSH 0
- MOV ECX, ESP
- INVOKE WriteConsoleA, hStdout, OFFSET szBuffer, EAX, ECX, NULL
- POP EAX
- JMP ExitCloseProcess
- @@: MOV EBX, EAX
- ExitCloseProcess:
- INVOKE CloseHandle, stPI.hProcess
- ExitRetState:
- MOV EAX, dwOldState
- OR EAX, ES_CONTINUOUS
- INVOKE SetThreadExecutionState, EAX
- Exit:
- INVOKE ExitProcess, EBX
- END Start
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement