DWORD cbBufSize,
LPDWORD pcbBytesNeeded)
{
+ QUERY_SERVICE_LOCK_STATUSA LockStatus;
+ LPQUERY_SERVICE_LOCK_STATUSA lpStatusPtr;
+ DWORD dwBufferSize;
DWORD dwError;
TRACE("QueryServiceLockStatusA() called\n");
+ if (lpLockStatus == NULL || cbBufSize < sizeof(QUERY_SERVICE_LOCK_STATUSA))
+ {
+ lpStatusPtr = &LockStatus;
+ dwBufferSize = sizeof(QUERY_SERVICE_LOCK_STATUSA);
+ }
+ else
+ {
+ lpStatusPtr = lpLockStatus;
+ dwBufferSize = cbBufSize;
+ }
+
RpcTryExcept
{
/* Call to services.exe using RPC */
dwError = RQueryServiceLockStatusA((SC_RPC_HANDLE)hSCManager,
- lpLockStatus,
- cbBufSize,
+ lpStatusPtr,
+ dwBufferSize,
pcbBytesNeeded);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
return FALSE;
}
- if (lpLockStatus->lpLockOwner != NULL)
+ if (lpStatusPtr->lpLockOwner != NULL)
{
- lpLockStatus->lpLockOwner =
- (LPSTR)((UINT_PTR)lpLockStatus + (UINT_PTR)lpLockStatus->lpLockOwner);
+ lpStatusPtr->lpLockOwner =
+ (LPSTR)((UINT_PTR)lpStatusPtr + (UINT_PTR)lpStatusPtr->lpLockOwner);
}
TRACE("QueryServiceLockStatusA() done\n");
DWORD cbBufSize,
LPDWORD pcbBytesNeeded)
{
+ QUERY_SERVICE_LOCK_STATUSW LockStatus;
+ LPQUERY_SERVICE_LOCK_STATUSW lpStatusPtr;
+ DWORD dwBufferSize;
DWORD dwError;
TRACE("QueryServiceLockStatusW() called\n");
+ if (lpLockStatus == NULL || cbBufSize < sizeof(QUERY_SERVICE_LOCK_STATUSW))
+ {
+ lpStatusPtr = &LockStatus;
+ dwBufferSize = sizeof(QUERY_SERVICE_LOCK_STATUSW);
+ }
+ else
+ {
+ lpStatusPtr = lpLockStatus;
+ dwBufferSize = cbBufSize;
+ }
+
RpcTryExcept
{
/* Call to services.exe using RPC */
dwError = RQueryServiceLockStatusW((SC_RPC_HANDLE)hSCManager,
- lpLockStatus,
- cbBufSize,
+ lpStatusPtr,
+ dwBufferSize,
pcbBytesNeeded);
}
RpcExcept(EXCEPTION_EXECUTE_HANDLER)
return FALSE;
}
- if (lpLockStatus->lpLockOwner != NULL)
+ if (lpStatusPtr->lpLockOwner != NULL)
{
- lpLockStatus->lpLockOwner =
- (LPWSTR)((UINT_PTR)lpLockStatus + (UINT_PTR)lpLockStatus->lpLockOwner);
+ lpStatusPtr->lpLockOwner =
+ (LPWSTR)((UINT_PTR)lpStatusPtr + (UINT_PTR)lpStatusPtr->lpLockOwner);
}
TRACE("QueryServiceLockStatusW() done\n");