Skip to content

Commit

Permalink
minor fixes, winsvc api
Browse files Browse the repository at this point in the history
  • Loading branch information
notaz committed Oct 25, 2015
1 parent 427da1c commit 354f550
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 20 deletions.
1 change: 1 addition & 0 deletions stdc.list
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ __strupr
_sprintf
_vsprintf
_fprintf
_printf
__strlwr
__fullpath
_toupper
Expand Down
2 changes: 2 additions & 0 deletions tools/protoparse.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,8 @@ static const char *known_ptr_types[] = {
"REFCLSID",
"REFGUID",
"REFIID",
"SC_HANDLE",
"SERVICE_STATUS_HANDLE",
"HOOKPROC",
"DLGPROC",
"TIMERPROC",
Expand Down
45 changes: 25 additions & 20 deletions tools/translate.c
Original file line number Diff line number Diff line change
Expand Up @@ -597,24 +597,27 @@ static const char *parse_stack_el(const char *name, char *extra_reg,
if (p == NULL)
aerr("%s IDA stackvar not set?\n", __func__);
}
if (!('0' <= *s && *s <= '9')) {
aerr("%s IDA stackvar offset not set?\n", __func__);
return NULL;
}
if (s[0] == '0' && s[1] == 'x')
s += 2;
len = p - s;
if (len < sizeof(buf) - 1) {
strncpy(buf, s, len);
buf[len] = 0;
errno = 0;
val = strtol(buf, &endp, 16);
if (val == 0 || *endp != 0 || errno != 0) {
aerr("%s num parse fail for '%s'\n", __func__, buf);
return NULL;
if ('0' <= *s && *s <= '9') {
if (s[0] == '0' && s[1] == 'x')
s += 2;
len = p - s;
if (len < sizeof(buf) - 1) {
strncpy(buf, s, len);
buf[len] = 0;
errno = 0;
val = strtol(buf, &endp, 16);
if (val == 0 || *endp != 0 || errno != 0) {
aerr("%s num parse fail for '%s'\n", __func__, buf);
return NULL;
}
}
p++;
}
else {
// probably something like [esp+arg_4+2]
p = s;
val = 0;
}
p++;
}
else
p = name + 4;
Expand Down Expand Up @@ -1419,7 +1422,7 @@ static void parse_op(struct parsed_op *op, char words[16][256], int wordc)

case OP_CALL:
// needed because of OPF_DATA
op->regmask_src = op->regmask_dst;
op->regmask_src |= op->regmask_dst;
// trashed regs must be explicitly detected later
op->regmask_dst = 0;
break;
Expand Down Expand Up @@ -8410,8 +8413,10 @@ static void gen_hdr_dep_pass(int i, int opcnt, unsigned char *cbits,
& ~regmask_save;
regmask_dst |= po->regmask_dst;

if (po->flags & OPF_TAIL)
return;
if (po->flags & OPF_TAIL) {
if (!(po->flags & OPF_CC)) // not cond. tailcall
return;
}
}
}

Expand Down Expand Up @@ -8566,7 +8571,7 @@ static void gen_hdr(const char *funcn, int opcnt)
}

// pass7
memset(cbits, 0, sizeof(cbits));
memset(cbits, 0, (opcnt + 7) / 8);
regmask_dep = regmask_use = 0;
has_ret = -1;

Expand Down
47 changes: 47 additions & 0 deletions win32.hlist
Original file line number Diff line number Diff line change
Expand Up @@ -2032,6 +2032,53 @@ DWORD WINAPI lineTranslateDialogA(HLINEAPP,DWORD,DWORD,HWND,LPCSTR);
DWORD WINAPI lineUnhold(HCALL);
DWORD WINAPI lineUnparkA(HLINE,DWORD,LPHCALL,LPCSTR);

// winsvc.h
WINADVAPI BOOL WINAPI ChangeServiceConfigA(SC_HANDLE,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,LPDWORD,LPCSTR,LPCSTR,LPCSTR,LPCSTR);
WINADVAPI BOOL WINAPI ChangeServiceConfigW(SC_HANDLE,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,LPDWORD,LPCWSTR,LPCWSTR,LPCWSTR,LPCWSTR);
WINADVAPI BOOL WINAPI ChangeServiceConfig2A(SC_HANDLE,DWORD,LPVOID);
WINADVAPI BOOL WINAPI ChangeServiceConfig2W(SC_HANDLE,DWORD,LPVOID);
WINADVAPI BOOL WINAPI CloseServiceHandle(SC_HANDLE);
WINADVAPI BOOL WINAPI ControlService(SC_HANDLE,DWORD,LPSERVICE_STATUS);
WINADVAPI SC_HANDLE WINAPI CreateServiceA(SC_HANDLE,LPCSTR,LPCSTR,DWORD,DWORD,DWORD,DWORD,LPCSTR,LPCSTR,PDWORD,LPCSTR,LPCSTR,LPCSTR);
WINADVAPI SC_HANDLE WINAPI CreateServiceW(SC_HANDLE,LPCWSTR,LPCWSTR,DWORD,DWORD,DWORD,DWORD,LPCWSTR,LPCWSTR,PDWORD,LPCWSTR,LPCWSTR,LPCWSTR);
WINADVAPI BOOL WINAPI DeleteService(SC_HANDLE);
WINADVAPI BOOL WINAPI EnumDependentServicesA(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSA,DWORD,PDWORD,PDWORD);
WINADVAPI BOOL WINAPI EnumDependentServicesW(SC_HANDLE,DWORD,LPENUM_SERVICE_STATUSW,DWORD,PDWORD,PDWORD);
WINADVAPI BOOL WINAPI EnumServicesStatusA(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSA,DWORD,PDWORD,PDWORD,PDWORD);
WINADVAPI BOOL WINAPI EnumServicesStatusW(SC_HANDLE,DWORD,DWORD,LPENUM_SERVICE_STATUSW,DWORD,PDWORD,PDWORD,PDWORD);
WINADVAPI BOOL WINAPI EnumServicesStatusExA(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCSTR);
WINADVAPI BOOL WINAPI EnumServicesStatusExW(SC_HANDLE,SC_ENUM_TYPE,DWORD,DWORD,LPBYTE,DWORD,LPDWORD,LPDWORD,LPDWORD,LPCWSTR);
WINADVAPI BOOL WINAPI GetServiceDisplayNameA(SC_HANDLE,LPCSTR,LPSTR,PDWORD);
WINADVAPI BOOL WINAPI GetServiceDisplayNameW(SC_HANDLE,LPCWSTR,LPWSTR,PDWORD);
WINADVAPI BOOL WINAPI GetServiceKeyNameA(SC_HANDLE,LPCSTR,LPSTR,PDWORD);
WINADVAPI BOOL WINAPI GetServiceKeyNameW(SC_HANDLE,LPCWSTR,LPWSTR,PDWORD);
WINADVAPI SC_LOCK WINAPI LockServiceDatabase(SC_HANDLE);
WINADVAPI BOOL WINAPI NotifyBootConfigStatus(BOOL);
WINADVAPI SC_HANDLE WINAPI OpenSCManagerA(LPCSTR,LPCSTR,DWORD);
WINADVAPI SC_HANDLE WINAPI OpenSCManagerW(LPCWSTR,LPCWSTR,DWORD);
WINADVAPI SC_HANDLE WINAPI OpenServiceA(SC_HANDLE,LPCSTR,DWORD);
WINADVAPI SC_HANDLE WINAPI OpenServiceW(SC_HANDLE,LPCWSTR,DWORD);
WINADVAPI BOOL WINAPI QueryServiceConfigA(SC_HANDLE,LPQUERY_SERVICE_CONFIGA,DWORD,PDWORD);
WINADVAPI BOOL WINAPI QueryServiceConfigW(SC_HANDLE,LPQUERY_SERVICE_CONFIGW,DWORD,PDWORD);
WINADVAPI BOOL WINAPI QueryServiceConfig2A(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
WINADVAPI BOOL WINAPI QueryServiceConfig2W(SC_HANDLE,DWORD,LPBYTE,DWORD,LPDWORD);
WINADVAPI BOOL WINAPI QueryServiceLockStatusA(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSA,DWORD,PDWORD);
WINADVAPI BOOL WINAPI QueryServiceLockStatusW(SC_HANDLE,LPQUERY_SERVICE_LOCK_STATUSW,DWORD,PDWORD);
WINADVAPI BOOL WINAPI QueryServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR,DWORD,LPDWORD);
WINADVAPI BOOL WINAPI QueryServiceStatus(SC_HANDLE,LPSERVICE_STATUS);
WINADVAPI BOOL WINAPI QueryServiceStatusEx(SC_HANDLE,SC_STATUS_TYPE,LPBYTE,DWORD,LPDWORD);
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerA(LPCSTR,LPHANDLER_FUNCTION);
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerW(LPCWSTR,LPHANDLER_FUNCTION);
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA(LPCSTR,LPHANDLER_FUNCTION_EX,LPVOID);
WINADVAPI SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExW(LPCWSTR,LPHANDLER_FUNCTION_EX,LPVOID);
WINADVAPI BOOL WINAPI SetServiceObjectSecurity(SC_HANDLE,SECURITY_INFORMATION,PSECURITY_DESCRIPTOR);
WINADVAPI BOOL WINAPI SetServiceStatus(SERVICE_STATUS_HANDLE,LPSERVICE_STATUS);
WINADVAPI BOOL WINAPI StartServiceA(SC_HANDLE,DWORD,LPCSTR*);
WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherA(LPSERVICE_TABLE_ENTRYA);
WINADVAPI BOOL WINAPI StartServiceCtrlDispatcherW(LPSERVICE_TABLE_ENTRYW);
WINADVAPI BOOL WINAPI StartServiceW(SC_HANDLE,DWORD,LPCWSTR*);
WINADVAPI BOOL WINAPI UnlockServiceDatabase(SC_LOCK);

// ddraw.h dsound.h
HRESULT WINAPI DirectDrawCreate(GUID *driver_guid, IDirectDraw **ddraw, IUnknown *outer);
HRESULT WINAPI DirectDrawCreateEx(GUID *driver_guid, void **ddraw, REFIID interface_iid, IUnknown *outer);
Expand Down

0 comments on commit 354f550

Please sign in to comment.