Release 951124
Tue Nov 21 18:49:10 1995 Alexandre Julliard <julliard@sunsite.unc.edu>
* [configure.in] [Makefile] [misc/dos_fs.c]
Got rid of autoconf.h file.
* [debugger/dbg.y]
More logical behavior upon syntax errors.
* [include/hook.h] [windows/hook.c]
Changed hook structure and rewrote most of the hook functions for
better compatibility, based on investigations by Alex Korobka.
* [include/message.h] [windows/message.c]
Added hooks to message queue structure and made the structure
layout Windows-compatible.
Added support for WH_MOUSE, WH_KEYBOARD, WH_HARDWARE and
WH_JOURNALRECORD hooks.
* [misc/main.c]
Added command-line option for changing the language at run-time
(not implemented yet), based on a suggestion from Michael Patra.
* [objects/cursoricon.c]
Fixed silly SEGPTR bug in DumpIcon().
Mon Nov 20 22:22:22 1995 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [controls/listbox.c] [controls/combo.c] [include/listbox.h]
Partial implementaion of LBS_EXTENDEDSEL style,
yet more updates for drag & drop support. Now works.
* [windows/defwnd.c]
More message handlers.
* [windows/win.c]
DragObject, DragDetect, AnyPopup functions.
* [controls/listbox.c]
More kludgy fixes (WM_...TOITEM, etc.).
* [objects/cursoricon.c] [objects/oembitmap.c]
IconToCursor skeleton, patch for OBM_LoadCursorIcon to handle new
cursor.
* [include/bitmaps/ocr*]
New OEM cursors.
Mon Nov 20 11:05:20 EST 1995 Jim Peterson <jspeter@birch.ee.vt.edu>
* [toolkit/heap.c]
Swapped flags and size arguments to LocalRealloc as per changes in
memory/local.c by William Magro in previous release.
* [include/wintypes.h]
Reinstated the #define's for 'min' and 'max', since they're part of
the Windows API. I really don't think it's a wise idea, so I put
a '#ifndef DONT_DEFINE_min_AND_max' around them. I think the actual
WINE code should never use these (it should use 'MIN' and 'MAX'
instead).
* [loader/*]
Put '#ifndef WINELIB' around many things that WINElib should not need.
* [controls/edit.c]
Took out many '#if defined(WINELIB)' sections with the associated
comment 'temporary fix, until Local memory is correctly implemented in
WINELIB', since the effective translations are now in
toolkit/miscstubs.c.
Took out the #ifndef's I put in EDIT_ClearText. Whoever modified this
file fixed (or at least postponed) the bug I had encountered.
* [loader/task.c]
Put an #ifdef in TASK_CreateTask() that hardwires the current drive to
C: This will probably cause a lot of trouble if this change is
forgotten in the future, but it will let things like the OpenFileName
dialog work for now.
* [toolkit/libres.c] [toolkit/Makefile.in] [toolkit/Makefile]
[include/libres.h]
Made new libres.c file, which will contain functions for supporting
accessing resources by name in WINElib. 'winerc' will need to be
changed.
* [toolkit/heap.c]
Refined memory routines to allow for differences between LocalAlloc
and GlobalAlloc and between LocalSize and GlobalSize.
* [windows/message.c] [include/windows.h]
Defined the GetCurrentTime routine in windows/message.c, and removed
the #define in windows.h.
Mon Nov 20 00:36:42 MET 1995 Sven Verdoolaege <skimo@dns.ufsia.ac.be>
* [*/*]
Added new debugging type DEBUG_WIN32 and DEBUG_ENV.
* [loader/module.c]
Added undocumented GetExpWinVer.
* [tools/build.c]
Previous code didn't pop possibly changed %esi, %edi and %edx
from the stack.
* [win32/advapi.c]
Added GetUserNameA.
* [win32/code_page.c]
Added stub for MultiByteToWideChar.
* [win32/console.c]
Added SetConsoleCtrlHandler stub.
* [win32/file.c]
Added ReadFile CreateFileA GetFileInformationByHandle stubs.
Added CloseHandle.
* [win32/memory.c]
Changed VirtualAlloc and VirtualFree.
* [win32/process.c]
Added ExitProcess.
Sun Nov 19 17:54:42 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [include/windows.h]
Fixed a few broken structure definitions.
* [loader/resource.c]
FindResource(): Need to check for '#xxx' strings here.
* [miscemu/int21.c]
FindNext(): Return MS-DOS filenames uppercase.
* [objects/cursoricon.c]
CreateIcon(), CreateCursor(): Added missing element to CURSORICONINFO
initializers.
* [misc/file.c]
_lopen(): Files opened in OF_WRITE mode are truncated.
OpenFile(): Ignore OF_READ/OF_WRITE/OF_READWRITE when files are
created; use read/write mode.
* [misc/profile.c]
load(): Rewritten.
* [misc/commdlg.c]
Fixed bad call to strncpy() that smashed the stack.
* [controls/combo.c] [windows/winpos.c] [memory/selector.c]
Operator precedence fixes. People who use gcc 2.7.1 don't need a
debugger :-)
* [if1632/gdi.spec] [objects/palette.c]
Add ResizePalette() and AnimatePalette() stubs. They don't do anything,
but sometimes that's good enough.
Fri Nov 17 09:10:35 GMT 1995 John Harvey <john@division.co.uk>
* [include/wine.h] [include/registers.h] [include/winsock.h]
Added definitions for Unixware.
* [loader/signal.c] [misc/comm.c] [misc/winsocket.c]
Misc. fixes for Unixware.
* [loader/task.c]
Made assignemts to context in InitTask for registers use the macros
from registers.h to make them more portable. (Needed for Unixware)
* [tools/build.c]
Fixed register acces routines to work on Unixware. Bit grubby but
it seems to work.
* [controls/edit.c]
EDIT_WM_NCCreate allocates local heap if hasn't been previously
allocated.
* [miscemu/int21.c]
mkdir now creates directory with permission to access it.
* [misc/dos_fs.c]
mkdir now creates directory with permission to access it.
DOS_opendir now uses linked list of dirents to avoid problems with
realloc changing address of malloced memory.
Thu Nov 16 12:47:13 1995 Michael Patra <patra@itp1.Physik.TU-Berlin.DE>
* [controls/menu.c]
MENU_CalcItemSize(): Fixed handling of empty menu items.
Sat Nov 11 21:46:54 1995 Hans de Graaff <graaff@twi72.twi.tudelft.nl>
* [misc/file.c]
In OpenFile, unlink should be done on the unix filename.
Sat Nov 11 16:43:29 1995 Cameron Heide (heide@ee.ualberta.ca)
* [include/handle32.h]
New header file containing internal Win32 kernel handle
information.
* [win32/file.c]
Added ReadFile, CreateFile, and CloseFileHandle, and did
some reorganizing to match the new handle allocation scheme.
* [win32/init.c]
Added CloseHandle and the creation of standard I/O handles.
* [win32/object_mgt.c]
New module for allocating and freeing Win32 kernel handles.
1995-11-26 14:59:11 +01:00
|
|
|
/*
|
|
|
|
* Win32 advapi functions
|
|
|
|
*
|
Release 951212
Mon Dec 11 19:08:55 1995 Alexandre Julliard <julliard@sunsite.unc.edu>
* [misc/lstr.c]
Replaced wine_strncpy() by a 32-bit version of lstrcpyn(), since
they do the same job.
* [tools/build.c]
Fixed __attribute__((stdcall)) to make it compile with gcc
versions under 2.7. Doesn't mean it will run OK though...
Sat Dec 09 13:22:58 1995 Cameron Heide <heide@ee.ualberta.ca>
* [include/kernel32.h] [include/winerror.h]
Added file attribute definitions and more error codes.
* [win32/error.c]
Added some rudimentary errno-to-Win32 error conversion
code.
* [win32/file.c]
Added to GetFileInformationByHandle, filled in some known
error codes, and switched to dprintf_win32.
* [win32/time.c]
Added GetLocalTime.
Fri Dec 8 14:37:39 1995 Jim Peterson <jspeter@birch.ee.vt.edu>
* [controls/combo.c]
Converted functions of the type LONG _(HWND,WORD,LONG) to the type
LRESULT _(HWND,WPARAM,LPARAM) where needed.
* [include/libres.h]
Restructured libres prototypes to closer match the windows API.
* [include/windows.h]
Changed several API prototypes' parameter types from 'short' to INT,
which is #defined as short in the emulator, but is a normal int in
WINELIB32. Also changed SEGPTR from DWORD to void* when WINELIB32.
(This creates a lot of warnings at library-compile time, but less
warnings at app-compile time. I'll remove the warnings soon.)
* [loader/resource.c]
Fixed parameter mismatch in call to LIBRES_FindResource(). Changed
various implementations of the LIBRES_* API functions.
* [loader/signal.c]
Deleted local 'i' from win_fault(), since it was unused.
* [objects/bitblt.c]
Mirrored changes to include/windows.h mentioned above.
* [toolkit/hello3.c]
Changed LoadMenuIndirect() call to LoadMenu() to test the new
resource registration technique.
* [toolkit/libres.c]
Removed definition of 'struct resource' and fixed bugs in the resource
implementation. Implemented LIBRES_FindResource.
* [windows/graphics.c]
Mirrored changes to include/windows.h mentioned above.
Thu Dec 7 23:15:56 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [controls/edit.c]
LOCAL_HeapExists: Changed parameter to HANDLE. For WineLib, return true
* [controls/listbox.c]
CreateListBoxStruct: Initialize HeapSel to 0 for WineLib
* [include/listbox.h]
change HeapSel from WORD to HANDLE
* [include/resource.h][rc/winerc.c]
struct ResourceTable: removed
struct resource: moved to header file
autoregister resources if supported by compiler
* [memory/local.h]
LOCAL_GetHeap: expect HANDLE rather than WORD
* [toolkit/Makefile.in]
Add ALLCFLAGS to make hello3
* [toolkit/heap.c]
LocalFree, HEAP_Free: handle 0 parameter gracefully
Wed Dec 06 15:34:23 1995 Greg Cooper <cooper@ima-inc.com>
* [misc/winsocket.c]
Fixed the msgsnd and msgrcv errors that winsock programs get.
Wed Dec 06 12:47:23 MET 1995 Sven Verdoolaege <skimo@dns.ufsia.ac.be>
* [if1632/kernel.spec]
Fixed _hread and _hwrite return type
* [if1632/relay32.c] [loader/pe_image.c]
Hacked loading of PE-dll's in
* [win32/advapi.c]
Added stubs for RegCreateKeyEx, RegSetValueEx, RegQueryValueEx
* [win32/file.c]
Added stubs for OpenFileMapping, CreateFileMapping, MapViewOfFileEx
* [win32/process.c]
Added stubs for CreateMutexA, ReleaseMutex, CreateEventA,
WaitForSingleObject, DuplicateHandle, GetCurrentProcess
Mon Dec 04 13:06:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [include/wine.h] [misc/lstr.c]
Define wine_strncpy(). This function does not pad the buffer with
zeroes like GNU strncpy(), which might break some Windows programs
that pass bogus size arguments.
* [loader/module.c]: GetModuleFileName(),
[misc/commdlg.c]: GetFileTitle(),
[misc/keyboard.c], [misc/lstr.c]: lstrcpyn(),
[misc/ole2nls.c], [misc/profile.c], [multimedia/mcistring.c],
[multimedia/mmsystem.c], [objects/font.c]:
Use wine_strncpy() where strings are returned to Windows programs.
* [objects/metafile.c]
PlayMetafile(): Clear the handle table before using it.
* [misc/shell.c] [misc/main.c]
Rename SHELL_RegCheckForRoot() to SHELL_Init() and call it from main().
* [misc/profile.c]
load(): Need to handle comments.
* [toolkit/libres.c]
Make it compile.
* [windows/nonclient.c]
Use MAKE_SEGPTR macro in two places where a user heap block used
to be allocated instead.
Sat Dec 02 16:43:43 1995 Ramon Garcia <ramon@ie3.clubs.etsit.upm.es>
* [windows/winpos.c]
In function SetWindowPos: do not redraw the parent of
a window if the specified window is placed on the top.
This avoids that ShowWindow(hwnd,1) hides hwnd instead
of showing it.
Sat Dec 02 11:00:00 1995 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/scroll.c]
Now it can scroll children along with the client region of parent
window. Tried to optimize update region calculation.
* [windows/mdi.c]
ScrollChildren function, more other features added. Basically
a rewrite.
* [windows/winpos.c] [windows/focus.c]
Reimplemented window activation and focus handling.
* [windows/nonclient.c]
Added new flag WIN_NCACTIVATED.
* [windows/message.c] [loader/task.c]
Small changes (to maintain linked list of message queues).
Wed Nov 29 15:51:48 1995 Daniel Schepler <daniel@shep13.wustl.edu>
* [include/options.h] [misc/main.c] [windows/defwnd.c]
[windows/event.c] [windows/nonclient.c] [windows/win.c] [Wine.man]
Implemented a -managed option to replace the standard Windows
frame of top-level windows with the window manager's decorations.
If a top-level window makes its own frame, this will still show
up, inside the window manager decorations (I believe ctl3dv2.dll
would do this, although I can't test this).
1995-12-12 19:49:11 +01:00
|
|
|
* Copyright 1995 Sven Verdoolaege
|
2005-01-14 16:13:40 +01:00
|
|
|
* Copyright 2005 Mike McCormack
|
2007-05-07 22:11:07 +02:00
|
|
|
* Copyright 2007 Rolf Kalbermatter
|
2002-03-10 00:29:33 +01:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
2006-05-18 14:49:52 +02:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
Release 951124
Tue Nov 21 18:49:10 1995 Alexandre Julliard <julliard@sunsite.unc.edu>
* [configure.in] [Makefile] [misc/dos_fs.c]
Got rid of autoconf.h file.
* [debugger/dbg.y]
More logical behavior upon syntax errors.
* [include/hook.h] [windows/hook.c]
Changed hook structure and rewrote most of the hook functions for
better compatibility, based on investigations by Alex Korobka.
* [include/message.h] [windows/message.c]
Added hooks to message queue structure and made the structure
layout Windows-compatible.
Added support for WH_MOUSE, WH_KEYBOARD, WH_HARDWARE and
WH_JOURNALRECORD hooks.
* [misc/main.c]
Added command-line option for changing the language at run-time
(not implemented yet), based on a suggestion from Michael Patra.
* [objects/cursoricon.c]
Fixed silly SEGPTR bug in DumpIcon().
Mon Nov 20 22:22:22 1995 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [controls/listbox.c] [controls/combo.c] [include/listbox.h]
Partial implementaion of LBS_EXTENDEDSEL style,
yet more updates for drag & drop support. Now works.
* [windows/defwnd.c]
More message handlers.
* [windows/win.c]
DragObject, DragDetect, AnyPopup functions.
* [controls/listbox.c]
More kludgy fixes (WM_...TOITEM, etc.).
* [objects/cursoricon.c] [objects/oembitmap.c]
IconToCursor skeleton, patch for OBM_LoadCursorIcon to handle new
cursor.
* [include/bitmaps/ocr*]
New OEM cursors.
Mon Nov 20 11:05:20 EST 1995 Jim Peterson <jspeter@birch.ee.vt.edu>
* [toolkit/heap.c]
Swapped flags and size arguments to LocalRealloc as per changes in
memory/local.c by William Magro in previous release.
* [include/wintypes.h]
Reinstated the #define's for 'min' and 'max', since they're part of
the Windows API. I really don't think it's a wise idea, so I put
a '#ifndef DONT_DEFINE_min_AND_max' around them. I think the actual
WINE code should never use these (it should use 'MIN' and 'MAX'
instead).
* [loader/*]
Put '#ifndef WINELIB' around many things that WINElib should not need.
* [controls/edit.c]
Took out many '#if defined(WINELIB)' sections with the associated
comment 'temporary fix, until Local memory is correctly implemented in
WINELIB', since the effective translations are now in
toolkit/miscstubs.c.
Took out the #ifndef's I put in EDIT_ClearText. Whoever modified this
file fixed (or at least postponed) the bug I had encountered.
* [loader/task.c]
Put an #ifdef in TASK_CreateTask() that hardwires the current drive to
C: This will probably cause a lot of trouble if this change is
forgotten in the future, but it will let things like the OpenFileName
dialog work for now.
* [toolkit/libres.c] [toolkit/Makefile.in] [toolkit/Makefile]
[include/libres.h]
Made new libres.c file, which will contain functions for supporting
accessing resources by name in WINElib. 'winerc' will need to be
changed.
* [toolkit/heap.c]
Refined memory routines to allow for differences between LocalAlloc
and GlobalAlloc and between LocalSize and GlobalSize.
* [windows/message.c] [include/windows.h]
Defined the GetCurrentTime routine in windows/message.c, and removed
the #define in windows.h.
Mon Nov 20 00:36:42 MET 1995 Sven Verdoolaege <skimo@dns.ufsia.ac.be>
* [*/*]
Added new debugging type DEBUG_WIN32 and DEBUG_ENV.
* [loader/module.c]
Added undocumented GetExpWinVer.
* [tools/build.c]
Previous code didn't pop possibly changed %esi, %edi and %edx
from the stack.
* [win32/advapi.c]
Added GetUserNameA.
* [win32/code_page.c]
Added stub for MultiByteToWideChar.
* [win32/console.c]
Added SetConsoleCtrlHandler stub.
* [win32/file.c]
Added ReadFile CreateFileA GetFileInformationByHandle stubs.
Added CloseHandle.
* [win32/memory.c]
Changed VirtualAlloc and VirtualFree.
* [win32/process.c]
Added ExitProcess.
Sun Nov 19 17:54:42 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [include/windows.h]
Fixed a few broken structure definitions.
* [loader/resource.c]
FindResource(): Need to check for '#xxx' strings here.
* [miscemu/int21.c]
FindNext(): Return MS-DOS filenames uppercase.
* [objects/cursoricon.c]
CreateIcon(), CreateCursor(): Added missing element to CURSORICONINFO
initializers.
* [misc/file.c]
_lopen(): Files opened in OF_WRITE mode are truncated.
OpenFile(): Ignore OF_READ/OF_WRITE/OF_READWRITE when files are
created; use read/write mode.
* [misc/profile.c]
load(): Rewritten.
* [misc/commdlg.c]
Fixed bad call to strncpy() that smashed the stack.
* [controls/combo.c] [windows/winpos.c] [memory/selector.c]
Operator precedence fixes. People who use gcc 2.7.1 don't need a
debugger :-)
* [if1632/gdi.spec] [objects/palette.c]
Add ResizePalette() and AnimatePalette() stubs. They don't do anything,
but sometimes that's good enough.
Fri Nov 17 09:10:35 GMT 1995 John Harvey <john@division.co.uk>
* [include/wine.h] [include/registers.h] [include/winsock.h]
Added definitions for Unixware.
* [loader/signal.c] [misc/comm.c] [misc/winsocket.c]
Misc. fixes for Unixware.
* [loader/task.c]
Made assignemts to context in InitTask for registers use the macros
from registers.h to make them more portable. (Needed for Unixware)
* [tools/build.c]
Fixed register acces routines to work on Unixware. Bit grubby but
it seems to work.
* [controls/edit.c]
EDIT_WM_NCCreate allocates local heap if hasn't been previously
allocated.
* [miscemu/int21.c]
mkdir now creates directory with permission to access it.
* [misc/dos_fs.c]
mkdir now creates directory with permission to access it.
DOS_opendir now uses linked list of dirents to avoid problems with
realloc changing address of malloced memory.
Thu Nov 16 12:47:13 1995 Michael Patra <patra@itp1.Physik.TU-Berlin.DE>
* [controls/menu.c]
MENU_CalcItemSize(): Fixed handling of empty menu items.
Sat Nov 11 21:46:54 1995 Hans de Graaff <graaff@twi72.twi.tudelft.nl>
* [misc/file.c]
In OpenFile, unlink should be done on the unix filename.
Sat Nov 11 16:43:29 1995 Cameron Heide (heide@ee.ualberta.ca)
* [include/handle32.h]
New header file containing internal Win32 kernel handle
information.
* [win32/file.c]
Added ReadFile, CreateFile, and CloseFileHandle, and did
some reorganizing to match the new handle allocation scheme.
* [win32/init.c]
Added CloseHandle and the creation of standard I/O handles.
* [win32/object_mgt.c]
New module for allocating and freeing Win32 kernel handles.
1995-11-26 14:59:11 +01:00
|
|
|
*/
|
|
|
|
|
2020-04-29 04:44:00 +02:00
|
|
|
#include <stdarg.h>
|
|
|
|
#include "windef.h"
|
|
|
|
#include "winbase.h"
|
|
|
|
#include "winsvc.h"
|
|
|
|
#include "wine/unicode.h"
|
|
|
|
#include "wine/debug.h"
|
2003-12-02 04:48:53 +01:00
|
|
|
|
2020-04-29 04:44:00 +02:00
|
|
|
#include "advapi32_misc.h"
|
2003-12-02 04:48:53 +01:00
|
|
|
|
2020-04-29 04:44:00 +02:00
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(service);
|
2003-12-02 04:48:53 +01:00
|
|
|
|
2008-03-21 09:49:57 +01:00
|
|
|
/******************************************************************************
|
2020-04-29 04:44:00 +02:00
|
|
|
* LockServiceDatabase [ADVAPI32.@]
|
2008-03-21 09:49:57 +01:00
|
|
|
*/
|
2020-04-29 04:44:00 +02:00
|
|
|
SC_LOCK WINAPI LockServiceDatabase( SC_HANDLE manager )
|
2008-03-21 09:49:57 +01:00
|
|
|
{
|
2020-04-29 04:44:00 +02:00
|
|
|
/* this function is a no-op in Vista and above */
|
|
|
|
TRACE("%p\n", manager);
|
|
|
|
return (SC_LOCK)0xdeadbeef;
|
2008-03-21 09:49:57 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
2020-04-29 04:44:00 +02:00
|
|
|
* UnlockServiceDatabase [ADVAPI32.@]
|
2008-03-21 09:49:57 +01:00
|
|
|
*/
|
2020-04-29 04:44:00 +02:00
|
|
|
BOOL WINAPI UnlockServiceDatabase( SC_LOCK lock )
|
2008-03-21 09:49:57 +01:00
|
|
|
{
|
2020-04-29 04:44:00 +02:00
|
|
|
/* this function is a no-op in Vista and above */
|
|
|
|
TRACE("%p\n", lock);
|
2009-01-19 20:18:24 +01:00
|
|
|
return TRUE;
|
2008-03-21 09:49:57 +01:00
|
|
|
}
|
|
|
|
|
2005-01-14 17:20:41 +01:00
|
|
|
/******************************************************************************
|
|
|
|
* EnumServicesStatusA [ADVAPI32.@]
|
|
|
|
*/
|
|
|
|
BOOL WINAPI
|
2010-10-27 12:03:28 +02:00
|
|
|
EnumServicesStatusA( SC_HANDLE hmngr, DWORD type, DWORD state, LPENUM_SERVICE_STATUSA
|
|
|
|
services, DWORD size, LPDWORD needed, LPDWORD returned,
|
|
|
|
LPDWORD resume_handle )
|
2005-01-14 17:20:41 +01:00
|
|
|
{
|
2010-10-27 12:03:28 +02:00
|
|
|
BOOL ret;
|
|
|
|
unsigned int i;
|
|
|
|
ENUM_SERVICE_STATUSW *servicesW = NULL;
|
|
|
|
DWORD sz, n;
|
|
|
|
char *p;
|
|
|
|
|
|
|
|
TRACE("%p 0x%x 0x%x %p %u %p %p %p\n", hmngr, type, state, services, size, needed,
|
|
|
|
returned, resume_handle);
|
|
|
|
|
2017-11-07 14:10:39 +01:00
|
|
|
if (!hmngr)
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_HANDLE );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if (!needed || !returned)
|
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_ADDRESS );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-06-09 22:00:15 +02:00
|
|
|
sz = max( 2 * size, sizeof(*servicesW) );
|
2014-08-16 09:18:13 +02:00
|
|
|
if (!(servicesW = heap_alloc( sz )))
|
2010-10-27 12:03:28 +02:00
|
|
|
{
|
|
|
|
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2011-06-09 22:00:15 +02:00
|
|
|
ret = EnumServicesStatusW( hmngr, type, state, servicesW, sz, needed, returned, resume_handle );
|
2010-10-27 12:03:28 +02:00
|
|
|
if (!ret) goto done;
|
|
|
|
|
|
|
|
p = (char *)services + *returned * sizeof(ENUM_SERVICE_STATUSA);
|
|
|
|
n = size - (p - (char *)services);
|
|
|
|
ret = FALSE;
|
|
|
|
for (i = 0; i < *returned; i++)
|
|
|
|
{
|
|
|
|
sz = WideCharToMultiByte( CP_ACP, 0, servicesW[i].lpServiceName, -1, p, n, NULL, NULL );
|
|
|
|
if (!sz) goto done;
|
|
|
|
services[i].lpServiceName = p;
|
|
|
|
p += sz;
|
|
|
|
n -= sz;
|
|
|
|
if (servicesW[i].lpDisplayName)
|
|
|
|
{
|
|
|
|
sz = WideCharToMultiByte( CP_ACP, 0, servicesW[i].lpDisplayName, -1, p, n, NULL, NULL );
|
|
|
|
if (!sz) goto done;
|
|
|
|
services[i].lpDisplayName = p;
|
|
|
|
p += sz;
|
|
|
|
n -= sz;
|
|
|
|
}
|
2011-06-10 10:14:07 +02:00
|
|
|
else services[i].lpDisplayName = NULL;
|
2010-10-27 12:03:28 +02:00
|
|
|
services[i].ServiceStatus = servicesW[i].ServiceStatus;
|
|
|
|
}
|
|
|
|
|
|
|
|
ret = TRUE;
|
|
|
|
|
|
|
|
done:
|
2014-08-16 09:18:13 +02:00
|
|
|
heap_free( servicesW );
|
2010-10-27 12:03:28 +02:00
|
|
|
return ret;
|
2005-01-14 17:20:41 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
* EnumServicesStatusW [ADVAPI32.@]
|
|
|
|
*/
|
|
|
|
BOOL WINAPI
|
2020-04-28 05:35:34 +02:00
|
|
|
EnumServicesStatusW( SC_HANDLE manager, DWORD type, DWORD state, ENUM_SERVICE_STATUSW *status,
|
|
|
|
DWORD size, DWORD *ret_size, DWORD *ret_count, DWORD *resume_handle )
|
2005-01-14 17:20:41 +01:00
|
|
|
{
|
2020-04-28 05:35:34 +02:00
|
|
|
ENUM_SERVICE_STATUS_PROCESSW *status_ex;
|
|
|
|
DWORD alloc_size, count, i;
|
|
|
|
WCHAR *p;
|
2010-10-27 12:03:28 +02:00
|
|
|
|
2020-04-28 05:35:34 +02:00
|
|
|
TRACE("%p 0x%x 0x%x %p %u %p %p %p\n", manager, type, state, status, size,
|
|
|
|
ret_size, ret_count, resume_handle);
|
2010-10-27 12:03:28 +02:00
|
|
|
|
2020-04-28 05:35:34 +02:00
|
|
|
if (!manager)
|
2010-10-27 12:03:28 +02:00
|
|
|
{
|
|
|
|
SetLastError( ERROR_INVALID_HANDLE );
|
|
|
|
return FALSE;
|
|
|
|
}
|
2020-04-28 05:35:34 +02:00
|
|
|
|
|
|
|
if (!ret_size || !ret_count)
|
2017-11-07 14:10:39 +01:00
|
|
|
{
|
2020-04-28 05:35:34 +02:00
|
|
|
SetLastError( ERROR_INVALID_PARAMETER );
|
2017-11-07 14:10:39 +01:00
|
|
|
return FALSE;
|
|
|
|
}
|
2010-10-27 12:03:28 +02:00
|
|
|
|
2020-04-28 05:35:34 +02:00
|
|
|
*ret_size = 0;
|
|
|
|
*ret_count = 0;
|
|
|
|
if (!EnumServicesStatusExW( manager, SC_ENUM_PROCESS_INFO, type, state,
|
|
|
|
NULL, 0, &alloc_size, &count, resume_handle, NULL )
|
|
|
|
&& GetLastError() != ERROR_MORE_DATA)
|
|
|
|
return FALSE;
|
|
|
|
|
|
|
|
if (!(status_ex = heap_alloc( alloc_size )))
|
2011-06-09 22:00:15 +02:00
|
|
|
{
|
2017-11-07 14:10:39 +01:00
|
|
|
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
|
|
|
|
return FALSE;
|
2011-06-09 22:00:15 +02:00
|
|
|
}
|
|
|
|
|
2020-04-28 05:35:34 +02:00
|
|
|
if (!EnumServicesStatusExW( manager, SC_ENUM_PROCESS_INFO, type, state, (BYTE *)status_ex,
|
|
|
|
alloc_size, &alloc_size, &count, resume_handle, NULL )
|
|
|
|
&& GetLastError() != ERROR_MORE_DATA)
|
2010-10-27 12:03:28 +02:00
|
|
|
{
|
2020-04-28 05:35:34 +02:00
|
|
|
heap_free( status_ex );
|
|
|
|
return FALSE;
|
2010-10-27 12:03:28 +02:00
|
|
|
}
|
|
|
|
|
2020-04-28 05:35:34 +02:00
|
|
|
for (i = 0; i < count; i++)
|
2010-10-27 12:03:28 +02:00
|
|
|
{
|
2020-04-28 05:35:34 +02:00
|
|
|
*ret_size += sizeof(ENUM_SERVICE_STATUSW);
|
|
|
|
*ret_size += (strlenW( status_ex[i].lpServiceName ) + 1) * sizeof(WCHAR);
|
|
|
|
if (status_ex[i].lpDisplayName)
|
|
|
|
*ret_size += (strlenW( status_ex[i].lpDisplayName ) + 1) * sizeof(WCHAR);
|
|
|
|
|
|
|
|
if (*ret_size <= size)
|
|
|
|
++*ret_count;
|
2010-10-27 12:03:28 +02:00
|
|
|
}
|
|
|
|
|
2020-04-28 05:35:34 +02:00
|
|
|
p = (WCHAR *)(status + *ret_count);
|
|
|
|
for (i = 0; i < *ret_count; i++)
|
2010-10-27 12:03:28 +02:00
|
|
|
{
|
2020-04-28 05:35:34 +02:00
|
|
|
strcpyW( p, status_ex[i].lpServiceName );
|
|
|
|
status[i].lpServiceName = (WCHAR *)p;
|
|
|
|
p += strlenW( p ) + 1;
|
|
|
|
if (status_ex[i].lpDisplayName)
|
2017-11-07 14:10:39 +01:00
|
|
|
{
|
2020-04-28 05:35:34 +02:00
|
|
|
strcpyW( p, status_ex[i].lpDisplayName );
|
|
|
|
status[i].lpDisplayName = (WCHAR *)p;
|
|
|
|
p += strlenW( p ) + 1;
|
2017-11-07 14:10:39 +01:00
|
|
|
}
|
2020-04-28 05:35:34 +02:00
|
|
|
else status[i].lpDisplayName = NULL;
|
|
|
|
|
|
|
|
status[i].ServiceStatus.dwServiceType = status_ex[i].ServiceStatusProcess.dwServiceType;
|
|
|
|
status[i].ServiceStatus.dwCurrentState = status_ex[i].ServiceStatusProcess.dwCurrentState;
|
|
|
|
status[i].ServiceStatus.dwControlsAccepted = status_ex[i].ServiceStatusProcess.dwControlsAccepted;
|
|
|
|
status[i].ServiceStatus.dwWin32ExitCode = status_ex[i].ServiceStatusProcess.dwWin32ExitCode;
|
|
|
|
status[i].ServiceStatus.dwServiceSpecificExitCode = status_ex[i].ServiceStatusProcess.dwServiceSpecificExitCode;
|
|
|
|
status[i].ServiceStatus.dwCheckPoint = status_ex[i].ServiceStatusProcess.dwCheckPoint;
|
|
|
|
status[i].ServiceStatus.dwWaitHint = status_ex[i].ServiceStatusProcess.dwWaitHint;
|
2017-11-07 14:10:39 +01:00
|
|
|
}
|
|
|
|
|
2020-04-28 05:35:34 +02:00
|
|
|
heap_free( status_ex );
|
|
|
|
if (*ret_size > size)
|
2017-11-07 14:10:39 +01:00
|
|
|
{
|
|
|
|
SetLastError( ERROR_MORE_DATA );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2020-04-28 05:35:34 +02:00
|
|
|
*ret_size = 0;
|
2010-10-27 12:03:28 +02:00
|
|
|
return TRUE;
|
2005-01-14 17:20:41 +01:00
|
|
|
}
|
|
|
|
|
2007-04-22 22:29:02 +02:00
|
|
|
/******************************************************************************
|
|
|
|
* EnumServicesStatusExA [ADVAPI32.@]
|
|
|
|
*/
|
|
|
|
BOOL WINAPI
|
2010-10-29 12:53:37 +02:00
|
|
|
EnumServicesStatusExA( SC_HANDLE hmngr, SC_ENUM_TYPE level, DWORD type, DWORD state,
|
|
|
|
LPBYTE buffer, DWORD size, LPDWORD needed, LPDWORD returned,
|
|
|
|
LPDWORD resume_handle, LPCSTR group )
|
2007-04-22 22:29:02 +02:00
|
|
|
{
|
2010-10-29 12:53:37 +02:00
|
|
|
BOOL ret;
|
|
|
|
unsigned int i;
|
|
|
|
ENUM_SERVICE_STATUS_PROCESSA *services = (ENUM_SERVICE_STATUS_PROCESSA *)buffer;
|
|
|
|
ENUM_SERVICE_STATUS_PROCESSW *servicesW = NULL;
|
|
|
|
WCHAR *groupW = NULL;
|
|
|
|
DWORD sz, n;
|
|
|
|
char *p;
|
|
|
|
|
|
|
|
TRACE("%p %u 0x%x 0x%x %p %u %p %p %p %s\n", hmngr, level, type, state, buffer,
|
|
|
|
size, needed, returned, resume_handle, debugstr_a(group));
|
|
|
|
|
2011-06-09 22:00:15 +02:00
|
|
|
sz = max( 2 * size, sizeof(*servicesW) );
|
2014-08-16 09:18:13 +02:00
|
|
|
if (!(servicesW = heap_alloc( sz )))
|
2010-10-29 12:53:37 +02:00
|
|
|
{
|
|
|
|
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
if (group)
|
|
|
|
{
|
|
|
|
int len = MultiByteToWideChar( CP_ACP, 0, group, -1, NULL, 0 );
|
2014-08-16 09:18:13 +02:00
|
|
|
if (!(groupW = heap_alloc( len * sizeof(WCHAR) )))
|
2010-10-29 12:53:37 +02:00
|
|
|
{
|
|
|
|
SetLastError( ERROR_NOT_ENOUGH_MEMORY );
|
2014-08-16 09:18:13 +02:00
|
|
|
heap_free( servicesW );
|
2010-10-29 12:53:37 +02:00
|
|
|
return FALSE;
|
|
|
|
}
|
2020-04-29 04:44:00 +02:00
|
|
|
MultiByteToWideChar( CP_ACP, 0, group, -1, groupW, len * sizeof(WCHAR) );
|
2017-11-07 14:10:40 +01:00
|
|
|
}
|
|
|
|
|
2020-04-29 04:44:00 +02:00
|
|
|
ret = EnumServicesStatusExW( hmngr, level, type, state, (BYTE *)servicesW, sz,
|
|
|
|
needed, returned, resume_handle, groupW );
|
|
|
|
if (!ret) goto done;
|
2017-11-07 14:10:40 +01:00
|
|
|
|
2020-04-29 04:44:00 +02:00
|
|
|
p = (char *)services + *returned * sizeof(ENUM_SERVICE_STATUS_PROCESSA);
|
|
|
|
n = size - (p - (char *)services);
|
|
|
|
ret = FALSE;
|
|
|
|
for (i = 0; i < *returned; i++)
|
|
|
|
{
|
|
|
|
sz = WideCharToMultiByte( CP_ACP, 0, servicesW[i].lpServiceName, -1, p, n, NULL, NULL );
|
|
|
|
if (!sz) goto done;
|
|
|
|
services[i].lpServiceName = p;
|
|
|
|
p += sz;
|
|
|
|
n -= sz;
|
|
|
|
if (servicesW[i].lpDisplayName)
|
2017-11-07 14:10:40 +01:00
|
|
|
{
|
2020-04-29 04:44:00 +02:00
|
|
|
sz = WideCharToMultiByte( CP_ACP, 0, servicesW[i].lpDisplayName, -1, p, n, NULL, NULL );
|
|
|
|
if (!sz) goto done;
|
|
|
|
services[i].lpDisplayName = p;
|
|
|
|
p += sz;
|
|
|
|
n -= sz;
|
2017-11-07 14:10:40 +01:00
|
|
|
}
|
2020-04-29 04:44:00 +02:00
|
|
|
else services[i].lpDisplayName = NULL;
|
|
|
|
services[i].ServiceStatusProcess = servicesW[i].ServiceStatusProcess;
|
2017-11-07 14:10:40 +01:00
|
|
|
}
|
|
|
|
|
2020-04-29 04:44:00 +02:00
|
|
|
ret = TRUE;
|
|
|
|
|
|
|
|
done:
|
|
|
|
heap_free( servicesW );
|
|
|
|
heap_free( groupW );
|
|
|
|
return ret;
|
2007-04-22 22:29:02 +02:00
|
|
|
}
|
|
|
|
|
2005-01-14 17:20:41 +01:00
|
|
|
/******************************************************************************
|
|
|
|
* GetServiceKeyNameA [ADVAPI32.@]
|
|
|
|
*/
|
Stub implementations for GetKernelObjectSecurity,
GetPrivateObjectSecurity, GetServiceKeyName{A,W},
ImpersonateNamedPipeClient, InitiateSystemShutdown{A,W},
IsTokenRestricted, LogonUser{A,W}, LookupAccountNameW,
LookupPrivilegeDisplayName{A,W}, MapGenericMask,
ObjectCloseAuditAlarm{A,W}, ObjectOpenAuditAlarm{A,W},
ObjectPrivilegeAuditAlarm{A,W}, PrivilegedServiceAuditAlarm{A,W},
QueryServiceLockStatus{A,W}, SetAclInformation,
SetPrivateObjectSecurity, SetSecurityDescriptorControl,
SetServiceBits, LsaSetInformationPolicy, LsaLookupNames,
LsaEnumerateTrustedDomains.
2005-01-03 18:12:51 +01:00
|
|
|
BOOL WINAPI GetServiceKeyNameA( SC_HANDLE hSCManager, LPCSTR lpDisplayName,
|
|
|
|
LPSTR lpServiceName, LPDWORD lpcchBuffer )
|
|
|
|
{
|
2008-03-16 22:12:08 +01:00
|
|
|
LPWSTR lpDisplayNameW, lpServiceNameW;
|
|
|
|
DWORD sizeW;
|
|
|
|
BOOL ret = FALSE;
|
|
|
|
|
|
|
|
TRACE("%p %s %p %p\n", hSCManager,
|
|
|
|
debugstr_a(lpDisplayName), lpServiceName, lpcchBuffer);
|
|
|
|
|
2020-04-28 05:35:31 +02:00
|
|
|
lpDisplayNameW = strdupAW(lpDisplayName);
|
2008-03-16 22:12:08 +01:00
|
|
|
if (lpServiceName)
|
2014-08-16 09:18:13 +02:00
|
|
|
lpServiceNameW = heap_alloc(*lpcchBuffer * sizeof(WCHAR));
|
2008-03-16 22:12:08 +01:00
|
|
|
else
|
|
|
|
lpServiceNameW = NULL;
|
|
|
|
|
|
|
|
sizeW = *lpcchBuffer;
|
|
|
|
if (!GetServiceKeyNameW(hSCManager, lpDisplayNameW, lpServiceNameW, &sizeW))
|
|
|
|
{
|
2008-05-27 04:58:49 +02:00
|
|
|
if (lpServiceName && *lpcchBuffer)
|
2008-03-16 22:12:08 +01:00
|
|
|
lpServiceName[0] = 0;
|
|
|
|
*lpcchBuffer = sizeW*2; /* we can only provide an upper estimation of string length */
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
|
|
|
|
if (!WideCharToMultiByte(CP_ACP, 0, lpServiceNameW, (sizeW + 1), lpServiceName,
|
|
|
|
*lpcchBuffer, NULL, NULL ))
|
|
|
|
{
|
|
|
|
if (*lpcchBuffer && lpServiceName)
|
|
|
|
lpServiceName[0] = 0;
|
|
|
|
*lpcchBuffer = WideCharToMultiByte(CP_ACP, 0, lpServiceNameW, -1, NULL, 0, NULL, NULL);
|
|
|
|
goto cleanup;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* lpcchBuffer not updated - same as in GetServiceDisplayNameA */
|
|
|
|
ret = TRUE;
|
|
|
|
|
|
|
|
cleanup:
|
2014-08-16 09:18:13 +02:00
|
|
|
heap_free(lpServiceNameW);
|
|
|
|
heap_free(lpDisplayNameW);
|
2008-03-16 22:12:08 +01:00
|
|
|
return ret;
|
Stub implementations for GetKernelObjectSecurity,
GetPrivateObjectSecurity, GetServiceKeyName{A,W},
ImpersonateNamedPipeClient, InitiateSystemShutdown{A,W},
IsTokenRestricted, LogonUser{A,W}, LookupAccountNameW,
LookupPrivilegeDisplayName{A,W}, MapGenericMask,
ObjectCloseAuditAlarm{A,W}, ObjectOpenAuditAlarm{A,W},
ObjectPrivilegeAuditAlarm{A,W}, PrivilegedServiceAuditAlarm{A,W},
QueryServiceLockStatus{A,W}, SetAclInformation,
SetPrivateObjectSecurity, SetSecurityDescriptorControl,
SetServiceBits, LsaSetInformationPolicy, LsaLookupNames,
LsaEnumerateTrustedDomains.
2005-01-03 18:12:51 +01:00
|
|
|
}
|
|
|
|
|
2005-01-14 17:20:41 +01:00
|
|
|
/******************************************************************************
|
|
|
|
* QueryServiceLockStatusA [ADVAPI32.@]
|
|
|
|
*/
|
Stub implementations for GetKernelObjectSecurity,
GetPrivateObjectSecurity, GetServiceKeyName{A,W},
ImpersonateNamedPipeClient, InitiateSystemShutdown{A,W},
IsTokenRestricted, LogonUser{A,W}, LookupAccountNameW,
LookupPrivilegeDisplayName{A,W}, MapGenericMask,
ObjectCloseAuditAlarm{A,W}, ObjectOpenAuditAlarm{A,W},
ObjectPrivilegeAuditAlarm{A,W}, PrivilegedServiceAuditAlarm{A,W},
QueryServiceLockStatus{A,W}, SetAclInformation,
SetPrivateObjectSecurity, SetSecurityDescriptorControl,
SetServiceBits, LsaSetInformationPolicy, LsaLookupNames,
LsaEnumerateTrustedDomains.
2005-01-03 18:12:51 +01:00
|
|
|
BOOL WINAPI QueryServiceLockStatusA( SC_HANDLE hSCManager,
|
|
|
|
LPQUERY_SERVICE_LOCK_STATUSA lpLockStatus,
|
|
|
|
DWORD cbBufSize, LPDWORD pcbBytesNeeded)
|
|
|
|
{
|
2006-10-03 15:48:41 +02:00
|
|
|
FIXME("%p %p %08x %p\n", hSCManager, lpLockStatus, cbBufSize, pcbBytesNeeded);
|
Stub implementations for GetKernelObjectSecurity,
GetPrivateObjectSecurity, GetServiceKeyName{A,W},
ImpersonateNamedPipeClient, InitiateSystemShutdown{A,W},
IsTokenRestricted, LogonUser{A,W}, LookupAccountNameW,
LookupPrivilegeDisplayName{A,W}, MapGenericMask,
ObjectCloseAuditAlarm{A,W}, ObjectOpenAuditAlarm{A,W},
ObjectPrivilegeAuditAlarm{A,W}, PrivilegedServiceAuditAlarm{A,W},
QueryServiceLockStatus{A,W}, SetAclInformation,
SetPrivateObjectSecurity, SetSecurityDescriptorControl,
SetServiceBits, LsaSetInformationPolicy, LsaLookupNames,
LsaEnumerateTrustedDomains.
2005-01-03 18:12:51 +01:00
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
2005-01-14 17:20:41 +01:00
|
|
|
/******************************************************************************
|
|
|
|
* QueryServiceLockStatusW [ADVAPI32.@]
|
|
|
|
*/
|
Stub implementations for GetKernelObjectSecurity,
GetPrivateObjectSecurity, GetServiceKeyName{A,W},
ImpersonateNamedPipeClient, InitiateSystemShutdown{A,W},
IsTokenRestricted, LogonUser{A,W}, LookupAccountNameW,
LookupPrivilegeDisplayName{A,W}, MapGenericMask,
ObjectCloseAuditAlarm{A,W}, ObjectOpenAuditAlarm{A,W},
ObjectPrivilegeAuditAlarm{A,W}, PrivilegedServiceAuditAlarm{A,W},
QueryServiceLockStatus{A,W}, SetAclInformation,
SetPrivateObjectSecurity, SetSecurityDescriptorControl,
SetServiceBits, LsaSetInformationPolicy, LsaLookupNames,
LsaEnumerateTrustedDomains.
2005-01-03 18:12:51 +01:00
|
|
|
BOOL WINAPI QueryServiceLockStatusW( SC_HANDLE hSCManager,
|
|
|
|
LPQUERY_SERVICE_LOCK_STATUSW lpLockStatus,
|
|
|
|
DWORD cbBufSize, LPDWORD pcbBytesNeeded)
|
|
|
|
{
|
2006-10-03 15:48:41 +02:00
|
|
|
FIXME("%p %p %08x %p\n", hSCManager, lpLockStatus, cbBufSize, pcbBytesNeeded);
|
Stub implementations for GetKernelObjectSecurity,
GetPrivateObjectSecurity, GetServiceKeyName{A,W},
ImpersonateNamedPipeClient, InitiateSystemShutdown{A,W},
IsTokenRestricted, LogonUser{A,W}, LookupAccountNameW,
LookupPrivilegeDisplayName{A,W}, MapGenericMask,
ObjectCloseAuditAlarm{A,W}, ObjectOpenAuditAlarm{A,W},
ObjectPrivilegeAuditAlarm{A,W}, PrivilegedServiceAuditAlarm{A,W},
QueryServiceLockStatus{A,W}, SetAclInformation,
SetPrivateObjectSecurity, SetSecurityDescriptorControl,
SetServiceBits, LsaSetInformationPolicy, LsaLookupNames,
LsaEnumerateTrustedDomains.
2005-01-03 18:12:51 +01:00
|
|
|
|
|
|
|
return FALSE;
|
|
|
|
}
|
2004-12-06 17:17:08 +01:00
|
|
|
|
|
|
|
/******************************************************************************
|
|
|
|
* GetServiceDisplayNameA [ADVAPI32.@]
|
|
|
|
*/
|
|
|
|
BOOL WINAPI GetServiceDisplayNameA( SC_HANDLE hSCManager, LPCSTR lpServiceName,
|
|
|
|
LPSTR lpDisplayName, LPDWORD lpcchBuffer)
|
|
|
|
{
|
2007-09-27 00:48:03 +02:00
|
|
|
LPWSTR lpServiceNameW, lpDisplayNameW;
|
|
|
|
DWORD sizeW;
|
|
|
|
BOOL ret = FALSE;
|
2007-05-07 21:54:56 +02:00
|
|
|
|
|
|
|
TRACE("%p %s %p %p\n", hSCManager,
|
2004-12-06 17:17:08 +01:00
|
|
|
debugstr_a(lpServiceName), lpDisplayName, lpcchBuffer);
|
2007-05-07 21:54:56 +02:00
|
|
|
|
2020-04-28 05:35:31 +02:00
|
|
|
lpServiceNameW = strdupAW(lpServiceName);
|
2007-09-27 00:48:03 +02:00
|
|
|
if (lpDisplayName)
|
2014-08-16 09:18:13 +02:00
|
|
|
lpDisplayNameW = heap_alloc(*lpcchBuffer * sizeof(WCHAR));
|
2007-09-27 00:48:03 +02:00
|
|
|
else
|
|
|
|
lpDisplayNameW = NULL;
|
2007-07-26 16:09:37 +02:00
|
|
|
|
2007-09-27 00:48:03 +02:00
|
|
|
sizeW = *lpcchBuffer;
|
|
|
|
if (!GetServiceDisplayNameW(hSCManager, lpServiceNameW, lpDisplayNameW, &sizeW))
|
2007-05-20 22:36:51 +02:00
|
|
|
{
|
2008-05-27 04:58:49 +02:00
|
|
|
if (lpDisplayName && *lpcchBuffer)
|
2008-03-16 22:12:08 +01:00
|
|
|
lpDisplayName[0] = 0;
|
2007-09-27 00:48:03 +02:00
|
|
|
*lpcchBuffer = sizeW*2; /* we can only provide an upper estimation of string length */
|
|
|
|
goto cleanup;
|
2007-05-20 22:36:51 +02:00
|
|
|
}
|
2007-09-27 00:48:03 +02:00
|
|
|
|
|
|
|
if (!WideCharToMultiByte(CP_ACP, 0, lpDisplayNameW, (sizeW + 1), lpDisplayName,
|
|
|
|
*lpcchBuffer, NULL, NULL ))
|
2007-05-07 21:54:56 +02:00
|
|
|
{
|
2008-03-16 22:12:08 +01:00
|
|
|
if (*lpcchBuffer && lpDisplayName)
|
|
|
|
lpDisplayName[0] = 0;
|
2007-09-27 00:48:03 +02:00
|
|
|
*lpcchBuffer = WideCharToMultiByte(CP_ACP, 0, lpDisplayNameW, -1, NULL, 0, NULL, NULL);
|
|
|
|
goto cleanup;
|
2007-05-07 21:54:56 +02:00
|
|
|
}
|
|
|
|
|
2007-09-27 00:48:03 +02:00
|
|
|
/* probably due to a bug GetServiceDisplayNameA doesn't modify lpcchBuffer on success.
|
|
|
|
* (but if the function succeeded it means that is a good upper estimation of the size) */
|
|
|
|
ret = TRUE;
|
2007-05-07 21:54:56 +02:00
|
|
|
|
2007-09-27 00:48:03 +02:00
|
|
|
cleanup:
|
2014-08-16 09:18:13 +02:00
|
|
|
heap_free(lpDisplayNameW);
|
|
|
|
heap_free(lpServiceNameW);
|
2007-07-26 16:09:37 +02:00
|
|
|
return ret;
|
2004-12-06 17:17:08 +01:00
|
|
|
}
|
|
|
|
|
2005-01-14 17:20:41 +01:00
|
|
|
/******************************************************************************
|
|
|
|
* SetServiceBits [ADVAPI32.@]
|
|
|
|
*/
|
Stub implementations for GetKernelObjectSecurity,
GetPrivateObjectSecurity, GetServiceKeyName{A,W},
ImpersonateNamedPipeClient, InitiateSystemShutdown{A,W},
IsTokenRestricted, LogonUser{A,W}, LookupAccountNameW,
LookupPrivilegeDisplayName{A,W}, MapGenericMask,
ObjectCloseAuditAlarm{A,W}, ObjectOpenAuditAlarm{A,W},
ObjectPrivilegeAuditAlarm{A,W}, PrivilegedServiceAuditAlarm{A,W},
QueryServiceLockStatus{A,W}, SetAclInformation,
SetPrivateObjectSecurity, SetSecurityDescriptorControl,
SetServiceBits, LsaSetInformationPolicy, LsaLookupNames,
LsaEnumerateTrustedDomains.
2005-01-03 18:12:51 +01:00
|
|
|
BOOL WINAPI SetServiceBits( SERVICE_STATUS_HANDLE hServiceStatus,
|
|
|
|
DWORD dwServiceBits,
|
|
|
|
BOOL bSetBitsOn,
|
|
|
|
BOOL bUpdateImmediately)
|
|
|
|
{
|
2006-10-03 15:48:41 +02:00
|
|
|
FIXME("%p %08x %x %x\n", hServiceStatus, dwServiceBits,
|
Stub implementations for GetKernelObjectSecurity,
GetPrivateObjectSecurity, GetServiceKeyName{A,W},
ImpersonateNamedPipeClient, InitiateSystemShutdown{A,W},
IsTokenRestricted, LogonUser{A,W}, LookupAccountNameW,
LookupPrivilegeDisplayName{A,W}, MapGenericMask,
ObjectCloseAuditAlarm{A,W}, ObjectOpenAuditAlarm{A,W},
ObjectPrivilegeAuditAlarm{A,W}, PrivilegedServiceAuditAlarm{A,W},
QueryServiceLockStatus{A,W}, SetAclInformation,
SetPrivateObjectSecurity, SetSecurityDescriptorControl,
SetServiceBits, LsaSetInformationPolicy, LsaLookupNames,
LsaEnumerateTrustedDomains.
2005-01-03 18:12:51 +01:00
|
|
|
bSetBitsOn, bUpdateImmediately);
|
|
|
|
return TRUE;
|
|
|
|
}
|
2005-11-03 10:53:27 +01:00
|
|
|
|
2007-12-20 15:00:42 +01:00
|
|
|
/******************************************************************************
|
|
|
|
* EnumDependentServicesA [ADVAPI32.@]
|
|
|
|
*/
|
|
|
|
BOOL WINAPI EnumDependentServicesA( SC_HANDLE hService, DWORD dwServiceState,
|
|
|
|
LPENUM_SERVICE_STATUSA lpServices, DWORD cbBufSize,
|
|
|
|
LPDWORD pcbBytesNeeded, LPDWORD lpServicesReturned )
|
|
|
|
{
|
|
|
|
FIXME("%p 0x%08x %p 0x%08x %p %p - stub\n", hService, dwServiceState,
|
|
|
|
lpServices, cbBufSize, pcbBytesNeeded, lpServicesReturned);
|
|
|
|
|
|
|
|
*lpServicesReturned = 0;
|
|
|
|
return TRUE;
|
|
|
|
}
|