Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
65a468ef
Commit
65a468ef
authored
Aug 16, 2014
by
Nikolay Sivov
Committed by
Alexandre Julliard
Aug 25, 2014
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
advapi32: Use heap* helpers in service code.
parent
4c782606
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
76 additions
and
71 deletions
+76
-71
advapi32_misc.h
dlls/advapi32/advapi32_misc.h
+6
-0
service.c
dlls/advapi32/service.c
+70
-71
No files found.
dlls/advapi32/advapi32_misc.h
View file @
65a468ef
...
...
@@ -42,6 +42,12 @@ static inline void *heap_alloc( size_t len )
return
HeapAlloc
(
GetProcessHeap
(),
0
,
len
);
}
static
void
*
heap_alloc_zero
(
size_t
len
)
__WINE_ALLOC_SIZE
(
1
);
static
inline
void
*
heap_alloc_zero
(
size_t
len
)
{
return
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
len
);
}
static
void
*
heap_realloc
(
void
*
mem
,
size_t
len
)
__WINE_ALLOC_SIZE
(
2
);
static
inline
void
*
heap_realloc
(
void
*
mem
,
size_t
len
)
{
...
...
dlls/advapi32/service.c
View file @
65a468ef
...
...
@@ -51,12 +51,12 @@ WINE_DEFAULT_DEBUG_CHANNEL(service);
void
__RPC_FAR
*
__RPC_USER
MIDL_user_allocate
(
SIZE_T
len
)
{
return
HeapAlloc
(
GetProcessHeap
(),
0
,
len
);
return
heap_alloc
(
len
);
}
void
__RPC_USER
MIDL_user_free
(
void
__RPC_FAR
*
ptr
)
{
HeapFree
(
GetProcessHeap
(),
0
,
ptr
);
heap_free
(
ptr
);
}
typedef
struct
service_data_t
...
...
@@ -111,7 +111,7 @@ LPWSTR SERV_dup( LPCSTR str )
if
(
!
str
)
return
NULL
;
len
=
MultiByteToWideChar
(
CP_ACP
,
0
,
str
,
-
1
,
NULL
,
0
);
wstr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
len
*
sizeof
(
WCHAR
)
);
wstr
=
heap_alloc
(
len
*
sizeof
(
WCHAR
)
);
MultiByteToWideChar
(
CP_ACP
,
0
,
str
,
-
1
,
wstr
,
len
);
return
wstr
;
}
...
...
@@ -130,7 +130,7 @@ static inline LPWSTR SERV_dupmulti(LPCSTR str)
len
++
;
n
++
;
wstr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
len
*
sizeof
(
WCHAR
)
);
wstr
=
heap_alloc
(
len
*
sizeof
(
WCHAR
)
);
MultiByteToWideChar
(
CP_ACP
,
0
,
str
,
n
,
wstr
,
len
);
return
wstr
;
}
...
...
@@ -234,7 +234,7 @@ static LPWSTR service_get_pipe_name(void)
if
(
ret
!=
ERROR_SUCCESS
||
type
!=
REG_DWORD
)
return
NULL
;
len
=
sizeof
(
format
)
/
sizeof
(
WCHAR
)
+
10
/* strlenW("4294967295") */
;
name
=
HeapAlloc
(
GetProcessHeap
(),
0
,
len
*
sizeof
(
WCHAR
));
name
=
heap_alloc
(
len
*
sizeof
(
WCHAR
));
if
(
!
name
)
return
NULL
;
snprintfW
(
name
,
len
,
format
,
service_current
);
...
...
@@ -254,7 +254,7 @@ static HANDLE service_open_pipe(void)
if
(
GetLastError
()
!=
ERROR_PIPE_BUSY
)
break
;
}
while
(
WaitNamedPipeW
(
szPipe
,
NMPWAIT_USE_DEFAULT_WAIT
));
HeapFree
(
GetProcessHeap
(),
0
,
szPipe
);
heap_free
(
szPipe
);
return
handle
;
}
...
...
@@ -294,13 +294,13 @@ static DWORD WINAPI service_thread(LPVOID arg)
{
LPWSTR
*
argv
,
p
;
argv
=
HeapAlloc
(
GetProcessHeap
(),
0
,
(
argc
+
1
)
*
sizeof
(
LPWSTR
));
argv
=
heap_alloc
(
(
argc
+
1
)
*
sizeof
(
LPWSTR
));
for
(
argc
=
0
,
p
=
str
;
*
p
;
p
+=
strlenW
(
p
)
+
1
)
argv
[
argc
++
]
=
p
;
argv
[
argc
]
=
NULL
;
info
->
proc
.
w
(
argc
,
argv
);
HeapFree
(
GetProcessHeap
(),
0
,
argv
);
heap_free
(
argv
);
}
else
{
...
...
@@ -308,17 +308,17 @@ static DWORD WINAPI service_thread(LPVOID arg)
DWORD
lenA
;
lenA
=
WideCharToMultiByte
(
CP_ACP
,
0
,
str
,
len
,
NULL
,
0
,
NULL
,
NULL
);
strA
=
HeapAlloc
(
GetProcessHeap
(),
0
,
lenA
);
strA
=
heap_alloc
(
lenA
);
WideCharToMultiByte
(
CP_ACP
,
0
,
str
,
len
,
strA
,
lenA
,
NULL
,
NULL
);
argv
=
HeapAlloc
(
GetProcessHeap
(),
0
,
(
argc
+
1
)
*
sizeof
(
LPSTR
));
argv
=
heap_alloc
(
(
argc
+
1
)
*
sizeof
(
LPSTR
));
for
(
argc
=
0
,
p
=
strA
;
*
p
;
p
+=
strlen
(
p
)
+
1
)
argv
[
argc
++
]
=
p
;
argv
[
argc
]
=
NULL
;
info
->
proc
.
a
(
argc
,
argv
);
HeapFree
(
GetProcessHeap
(),
0
,
argv
);
HeapFree
(
GetProcessHeap
(),
0
,
strA
);
heap_free
(
argv
);
heap_free
(
strA
);
}
return
0
;
}
...
...
@@ -336,8 +336,8 @@ static DWORD service_handle_start(service_data *service, const WCHAR *data, DWOR
return
ERROR_SERVICE_ALREADY_RUNNING
;
}
HeapFree
(
GetProcessHeap
(),
0
,
service
->
args
);
service
->
args
=
HeapAlloc
(
GetProcessHeap
(),
0
,
count
*
sizeof
(
WCHAR
));
heap_free
(
service
->
args
);
service
->
args
=
heap_alloc
(
count
*
sizeof
(
WCHAR
));
memcpy
(
service
->
args
,
data
,
count
*
sizeof
(
WCHAR
)
);
service
->
thread
=
CreateThread
(
NULL
,
0
,
service_thread
,
service
,
0
,
NULL
);
...
...
@@ -390,19 +390,19 @@ static DWORD WINAPI service_control_dispatcher(LPVOID arg)
if
(
count
<
info
.
total_size
)
{
data_size
=
info
.
total_size
-
FIELD_OFFSET
(
service_start_info
,
data
);
data
=
HeapAlloc
(
GetProcessHeap
(),
0
,
data_size
);
data
=
heap_alloc
(
data_size
);
r
=
ReadFile
(
disp
->
pipe
,
data
,
data_size
,
&
count
,
NULL
);
if
(
!
r
)
{
if
(
GetLastError
()
!=
ERROR_BROKEN_PIPE
)
ERR
(
"pipe read failed error %u
\n
"
,
GetLastError
()
);
HeapFree
(
GetProcessHeap
(),
0
,
data
);
heap_free
(
data
);
break
;
}
if
(
count
!=
data_size
)
{
ERR
(
"partial pipe read %u/%u
\n
"
,
count
,
data_size
);
HeapFree
(
GetProcessHeap
(),
0
,
data
);
heap_free
(
data
);
break
;
}
}
...
...
@@ -442,12 +442,12 @@ static DWORD WINAPI service_control_dispatcher(LPVOID arg)
done:
WriteFile
(
disp
->
pipe
,
&
result
,
sizeof
(
result
),
&
count
,
NULL
);
HeapFree
(
GetProcessHeap
(),
0
,
data
);
heap_free
(
data
);
}
CloseHandle
(
disp
->
pipe
);
CloseServiceHandle
(
disp
->
manager
);
HeapFree
(
GetProcessHeap
(),
0
,
disp
);
heap_free
(
disp
);
return
1
;
}
...
...
@@ -459,13 +459,13 @@ static BOOL service_run_main_thread(void)
DWORD
i
,
n
,
ret
;
HANDLE
wait_handles
[
MAXIMUM_WAIT_OBJECTS
];
UINT
wait_services
[
MAXIMUM_WAIT_OBJECTS
];
dispatcher_data
*
disp
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sizeof
(
*
disp
)
);
dispatcher_data
*
disp
=
heap_alloc
(
sizeof
(
*
disp
)
);
disp
->
manager
=
OpenSCManagerW
(
NULL
,
NULL
,
SC_MANAGER_CONNECT
);
if
(
!
disp
->
manager
)
{
ERR
(
"failed to open service manager error %u
\n
"
,
GetLastError
());
HeapFree
(
GetProcessHeap
(),
0
,
disp
);
heap_free
(
disp
);
return
FALSE
;
}
...
...
@@ -474,7 +474,7 @@ static BOOL service_run_main_thread(void)
{
WARN
(
"failed to create control pipe error %u
\n
"
,
GetLastError
());
CloseServiceHandle
(
disp
->
manager
);
HeapFree
(
GetProcessHeap
(),
0
,
disp
);
heap_free
(
disp
);
SetLastError
(
ERROR_FAILED_SERVICE_CONTROLLER_CONNECT
);
return
FALSE
;
}
...
...
@@ -590,13 +590,13 @@ BOOL WINAPI StartServiceCtrlDispatcherA( const SERVICE_TABLE_ENTRYA *servent )
return
FALSE
;
}
services
=
HeapAlloc
(
GetProcessHeap
(),
0
,
nb_services
*
sizeof
(
*
services
)
);
services
=
heap_alloc
(
nb_services
*
sizeof
(
*
services
)
);
for
(
i
=
0
;
i
<
nb_services
;
i
++
)
{
DWORD
len
=
MultiByteToWideChar
(
CP_ACP
,
0
,
servent
[
i
].
lpServiceName
,
-
1
,
NULL
,
0
);
DWORD
sz
=
FIELD_OFFSET
(
service_data
,
name
[
len
]
);
info
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sz
);
info
=
heap_alloc_zero
(
sz
);
MultiByteToWideChar
(
CP_ACP
,
0
,
servent
[
i
].
lpServiceName
,
-
1
,
info
->
name
,
len
);
info
->
proc
.
a
=
servent
[
i
].
lpServiceProc
;
info
->
unicode
=
FALSE
;
...
...
@@ -638,13 +638,13 @@ BOOL WINAPI StartServiceCtrlDispatcherW( const SERVICE_TABLE_ENTRYW *servent )
return
FALSE
;
}
services
=
HeapAlloc
(
GetProcessHeap
(),
0
,
nb_services
*
sizeof
(
*
services
)
);
services
=
heap_alloc
(
nb_services
*
sizeof
(
*
services
)
);
for
(
i
=
0
;
i
<
nb_services
;
i
++
)
{
DWORD
len
=
strlenW
(
servent
[
i
].
lpServiceName
)
+
1
;
DWORD
sz
=
FIELD_OFFSET
(
service_data
,
name
[
len
]
);
info
=
HeapAlloc
(
GetProcessHeap
(),
HEAP_ZERO_MEMORY
,
sz
);
info
=
heap_alloc_zero
(
sz
);
strcpyW
(
info
->
name
,
servent
[
i
].
lpServiceName
);
info
->
proc
.
w
=
servent
[
i
].
lpServiceProc
;
info
->
unicode
=
TRUE
;
...
...
@@ -767,14 +767,14 @@ SetServiceStatus( SERVICE_STATUS_HANDLE hService, LPSERVICE_STATUS lpStatus )
SC_HANDLE
WINAPI
OpenSCManagerA
(
LPCSTR
lpMachineName
,
LPCSTR
lpDatabaseName
,
DWORD
dwDesiredAccess
)
{
LPWSTR
lpMachineNameW
,
lpDatabaseNam
eW
;
LPWSTR
machineW
,
databas
eW
;
SC_HANDLE
ret
;
lpMachineNam
eW
=
SERV_dup
(
lpMachineName
);
lpDatabaseNam
eW
=
SERV_dup
(
lpDatabaseName
);
ret
=
OpenSCManagerW
(
lpMachineNameW
,
lpDatabaseNam
eW
,
dwDesiredAccess
);
HeapFree
(
GetProcessHeap
(),
0
,
lpDatabaseNam
eW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpMachineNam
eW
);
machin
eW
=
SERV_dup
(
lpMachineName
);
databas
eW
=
SERV_dup
(
lpDatabaseName
);
ret
=
OpenSCManagerW
(
machineW
,
databas
eW
,
dwDesiredAccess
);
heap_free
(
databas
eW
);
heap_free
(
machin
eW
);
return
ret
;
}
...
...
@@ -925,7 +925,7 @@ SC_HANDLE WINAPI OpenServiceA( SC_HANDLE hSCManager, LPCSTR lpServiceName,
lpServiceNameW
=
SERV_dup
(
lpServiceName
);
ret
=
OpenServiceW
(
hSCManager
,
lpServiceNameW
,
dwDesiredAccess
);
HeapFree
(
GetProcessHeap
(),
0
,
lpServiceNameW
);
heap_free
(
lpServiceNameW
);
return
ret
;
}
...
...
@@ -1059,13 +1059,13 @@ CreateServiceA( SC_HANDLE hSCManager, LPCSTR lpServiceName,
lpBinaryPathNameW
,
lpLoadOrderGroupW
,
lpdwTagId
,
lpDependenciesW
,
lpServiceStartNameW
,
lpPasswordW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpServiceNameW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpDisplayNameW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpBinaryPathNameW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpLoadOrderGroupW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpDependenciesW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpServiceStartNameW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpPasswordW
);
heap_free
(
lpServiceNameW
);
heap_free
(
lpDisplayNameW
);
heap_free
(
lpBinaryPathNameW
);
heap_free
(
lpLoadOrderGroupW
);
heap_free
(
lpDependenciesW
);
heap_free
(
lpServiceStartNameW
);
heap_free
(
lpPasswordW
);
return
r
;
}
...
...
@@ -1141,8 +1141,7 @@ BOOL WINAPI StartServiceA( SC_HANDLE hService, DWORD dwNumServiceArgs,
TRACE
(
"(%p,%d,%p)
\n
"
,
hService
,
dwNumServiceArgs
,
lpServiceArgVectors
);
if
(
dwNumServiceArgs
)
lpwstr
=
HeapAlloc
(
GetProcessHeap
(),
0
,
dwNumServiceArgs
*
sizeof
(
LPWSTR
)
);
lpwstr
=
heap_alloc
(
dwNumServiceArgs
*
sizeof
(
LPWSTR
)
);
for
(
i
=
0
;
i
<
dwNumServiceArgs
;
i
++
)
lpwstr
[
i
]
=
SERV_dup
(
lpServiceArgVectors
[
i
]);
...
...
@@ -1152,8 +1151,8 @@ BOOL WINAPI StartServiceA( SC_HANDLE hService, DWORD dwNumServiceArgs,
if
(
dwNumServiceArgs
)
{
for
(
i
=
0
;
i
<
dwNumServiceArgs
;
i
++
)
HeapFree
(
GetProcessHeap
(),
0
,
lpwstr
[
i
]);
HeapFree
(
GetProcessHeap
(),
0
,
lpwstr
);
heap_free
(
lpwstr
[
i
]);
heap_free
(
lpwstr
);
}
return
r
;
...
...
@@ -1291,7 +1290,7 @@ BOOL WINAPI QueryServiceConfigA( SC_HANDLE hService, LPQUERY_SERVICE_CONFIGA con
TRACE
(
"%p %p %d %p
\n
"
,
hService
,
config
,
size
,
needed
);
if
(
!
(
buffer
=
HeapAlloc
(
GetProcessHeap
(),
0
,
2
*
size
)))
if
(
!
(
buffer
=
heap_alloc
(
2
*
size
)))
{
SetLastError
(
ERROR_NOT_ENOUGH_MEMORY
);
return
FALSE
;
...
...
@@ -1337,7 +1336,7 @@ BOOL WINAPI QueryServiceConfigA( SC_HANDLE hService, LPQUERY_SERVICE_CONFIGA con
ret
=
TRUE
;
done:
HeapFree
(
GetProcessHeap
(),
0
,
buffer
);
heap_free
(
buffer
);
return
ret
;
}
...
...
@@ -1457,7 +1456,7 @@ BOOL WINAPI QueryServiceConfig2A(SC_HANDLE hService, DWORD dwLevel, LPBYTE buffe
LPBYTE
bufferW
=
NULL
;
if
(
buffer
&&
size
)
bufferW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
size
);
bufferW
=
heap_alloc
(
size
);
ret
=
QueryServiceConfig2W
(
hService
,
dwLevel
,
bufferW
,
size
,
needed
);
if
(
!
ret
)
goto
cleanup
;
...
...
@@ -1492,7 +1491,7 @@ BOOL WINAPI QueryServiceConfig2A(SC_HANDLE hService, DWORD dwLevel, LPBYTE buffe
}
cleanup:
HeapFree
(
GetProcessHeap
(),
0
,
bufferW
);
heap_free
(
bufferW
);
return
ret
;
}
...
...
@@ -1568,7 +1567,7 @@ EnumServicesStatusA( SC_HANDLE hmngr, DWORD type, DWORD state, LPENUM_SERVICE_ST
returned
,
resume_handle
);
sz
=
max
(
2
*
size
,
sizeof
(
*
servicesW
)
);
if
(
!
(
servicesW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
)))
if
(
!
(
servicesW
=
heap_alloc
(
sz
)))
{
SetLastError
(
ERROR_NOT_ENOUGH_MEMORY
);
return
FALSE
;
...
...
@@ -1602,7 +1601,7 @@ EnumServicesStatusA( SC_HANDLE hmngr, DWORD type, DWORD state, LPENUM_SERVICE_ST
ret
=
TRUE
;
done:
HeapFree
(
GetProcessHeap
(),
0
,
servicesW
);
heap_free
(
servicesW
);
return
ret
;
}
...
...
@@ -1683,7 +1682,7 @@ EnumServicesStatusExA( SC_HANDLE hmngr, SC_ENUM_TYPE level, DWORD type, DWORD st
size
,
needed
,
returned
,
resume_handle
,
debugstr_a
(
group
));
sz
=
max
(
2
*
size
,
sizeof
(
*
servicesW
)
);
if
(
!
(
servicesW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
sz
)))
if
(
!
(
servicesW
=
heap_alloc
(
sz
)))
{
SetLastError
(
ERROR_NOT_ENOUGH_MEMORY
);
return
FALSE
;
...
...
@@ -1691,10 +1690,10 @@ EnumServicesStatusExA( SC_HANDLE hmngr, SC_ENUM_TYPE level, DWORD type, DWORD st
if
(
group
)
{
int
len
=
MultiByteToWideChar
(
CP_ACP
,
0
,
group
,
-
1
,
NULL
,
0
);
if
(
!
(
groupW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
len
*
sizeof
(
WCHAR
)
)))
if
(
!
(
groupW
=
heap_alloc
(
len
*
sizeof
(
WCHAR
)
)))
{
SetLastError
(
ERROR_NOT_ENOUGH_MEMORY
);
HeapFree
(
GetProcessHeap
(),
0
,
servicesW
);
heap_free
(
servicesW
);
return
FALSE
;
}
MultiByteToWideChar
(
CP_ACP
,
0
,
group
,
-
1
,
groupW
,
len
*
sizeof
(
WCHAR
)
);
...
...
@@ -1729,8 +1728,8 @@ EnumServicesStatusExA( SC_HANDLE hmngr, SC_ENUM_TYPE level, DWORD type, DWORD st
ret
=
TRUE
;
done:
HeapFree
(
GetProcessHeap
(),
0
,
servicesW
);
HeapFree
(
GetProcessHeap
(),
0
,
groupW
);
heap_free
(
servicesW
);
heap_free
(
groupW
);
return
ret
;
}
...
...
@@ -1813,7 +1812,7 @@ BOOL WINAPI GetServiceKeyNameA( SC_HANDLE hSCManager, LPCSTR lpDisplayName,
lpDisplayNameW
=
SERV_dup
(
lpDisplayName
);
if
(
lpServiceName
)
lpServiceNameW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
*
lpcchBuffer
*
sizeof
(
WCHAR
));
lpServiceNameW
=
heap_alloc
(
*
lpcchBuffer
*
sizeof
(
WCHAR
));
else
lpServiceNameW
=
NULL
;
...
...
@@ -1839,8 +1838,8 @@ BOOL WINAPI GetServiceKeyNameA( SC_HANDLE hSCManager, LPCSTR lpDisplayName,
ret
=
TRUE
;
cleanup:
HeapFree
(
GetProcessHeap
(),
0
,
lpServiceNameW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpDisplayNameW
);
heap_free
(
lpServiceNameW
);
heap_free
(
lpDisplayNameW
);
return
ret
;
}
...
...
@@ -1936,7 +1935,7 @@ BOOL WINAPI GetServiceDisplayNameA( SC_HANDLE hSCManager, LPCSTR lpServiceName,
lpServiceNameW
=
SERV_dup
(
lpServiceName
);
if
(
lpDisplayName
)
lpDisplayNameW
=
HeapAlloc
(
GetProcessHeap
(),
0
,
*
lpcchBuffer
*
sizeof
(
WCHAR
));
lpDisplayNameW
=
heap_alloc
(
*
lpcchBuffer
*
sizeof
(
WCHAR
));
else
lpDisplayNameW
=
NULL
;
...
...
@@ -1963,8 +1962,8 @@ BOOL WINAPI GetServiceDisplayNameA( SC_HANDLE hSCManager, LPCSTR lpServiceName,
ret
=
TRUE
;
cleanup:
HeapFree
(
GetProcessHeap
(),
0
,
lpDisplayNameW
);
HeapFree
(
GetProcessHeap
(),
0
,
lpServiceNameW
);
heap_free
(
lpDisplayNameW
);
heap_free
(
lpServiceNameW
);
return
ret
;
}
...
...
@@ -2089,12 +2088,12 @@ BOOL WINAPI ChangeServiceConfigA( SC_HANDLE hService, DWORD dwServiceType,
wLoadOrderGroup
,
lpdwTagId
,
wDependencies
,
wServiceStartName
,
wPassword
,
wDisplayName
);
HeapFree
(
GetProcessHeap
(),
0
,
wBinaryPathName
);
HeapFree
(
GetProcessHeap
(),
0
,
wLoadOrderGroup
);
HeapFree
(
GetProcessHeap
(),
0
,
wDependencies
);
HeapFree
(
GetProcessHeap
(),
0
,
wServiceStartName
);
HeapFree
(
GetProcessHeap
(),
0
,
wPassword
);
HeapFree
(
GetProcessHeap
(),
0
,
wDisplayName
);
heap_free
(
wBinaryPathName
);
heap_free
(
wLoadOrderGroup
);
heap_free
(
wDependencies
);
heap_free
(
wServiceStartName
);
heap_free
(
wPassword
);
heap_free
(
wDisplayName
);
return
r
;
}
...
...
@@ -2118,7 +2117,7 @@ BOOL WINAPI ChangeServiceConfig2A( SC_HANDLE hService, DWORD dwInfoLevel,
r
=
ChangeServiceConfig2W
(
hService
,
dwInfoLevel
,
&
sdw
);
HeapFree
(
GetProcessHeap
(),
0
,
sdw
.
lpDescription
);
heap_free
(
sdw
.
lpDescription
);
}
else
if
(
dwInfoLevel
==
SERVICE_CONFIG_FAILURE_ACTIONS
)
{
...
...
@@ -2133,8 +2132,8 @@ BOOL WINAPI ChangeServiceConfig2A( SC_HANDLE hService, DWORD dwInfoLevel,
r
=
ChangeServiceConfig2W
(
hService
,
dwInfoLevel
,
&
faw
);
HeapFree
(
GetProcessHeap
(),
0
,
faw
.
lpRebootMsg
);
HeapFree
(
GetProcessHeap
(),
0
,
faw
.
lpCommand
);
heap_free
(
faw
.
lpRebootMsg
);
heap_free
(
faw
.
lpCommand
);
}
else
if
(
dwInfoLevel
==
SERVICE_CONFIG_PRESHUTDOWN_INFO
)
{
...
...
@@ -2277,7 +2276,7 @@ SERVICE_STATUS_HANDLE WINAPI RegisterServiceCtrlHandlerExA( LPCSTR name, LPHANDL
nameW
=
SERV_dup
(
name
);
ret
=
RegisterServiceCtrlHandlerExW
(
nameW
,
handler
,
context
);
HeapFree
(
GetProcessHeap
(),
0
,
nameW
);
heap_free
(
nameW
);
return
ret
;
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment