- Implement ImpersonateLoggedOnUser().

- Moved some security related functions to better places.

svn path=/trunk/; revision=8870
This commit is contained in:
Eric Kohl 2004-03-25 11:30:07 +00:00
parent 8a8167ab4d
commit 9e558fcc6a
7 changed files with 663 additions and 509 deletions

View file

@ -1,4 +1,4 @@
# $Id: makefile,v 1.38 2004/03/10 21:56:04 navaraf Exp $ # $Id: makefile,v 1.39 2004/03/25 11:30:07 ekohl Exp $
PATH_TO_TOP = ../.. PATH_TO_TOP = ../..
@ -34,10 +34,10 @@ SECURITY_OBJECTS = \
sec/sid.o sec/sid.o
SERVICE_OBJECTS = \ SERVICE_OBJECTS = \
service/eventlog.o \
service/scm.o \ service/scm.o \
service/sctrl.o \ service/sctrl.o \
service/undoc.o \ service/undoc.o
service/eventlog.o
TOKEN_OBJECTS = \ TOKEN_OBJECTS = \
token/privilege.o \ token/privilege.o \

View file

@ -1,4 +1,4 @@
/* $Id: misc.c,v 1.11 2004/03/08 18:09:05 sedwards Exp $ /* $Id: misc.c,v 1.12 2004/03/25 11:30:07 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries * PROJECT: ReactOS system libraries
@ -6,11 +6,13 @@
* PURPOSE: Miscellaneous security functions * PURPOSE: Miscellaneous security functions
*/ */
#include <debug.h>
#define NTOS_MODE_USER #define NTOS_MODE_USER
#include <ntos.h> #include <ntos.h>
#include <windows.h> #include <windows.h>
#define NDEBUG
#include <debug.h>
/* /*
* @implemented * @implemented
@ -36,6 +38,40 @@ AreAnyAccessesGranted(DWORD GrantedAccess,
} }
/******************************************************************************
* GetFileSecurityA [ADVAPI32.@]
*
* Obtains Specified information about the security of a file or directory.
*
* PARAMS
* lpFileName [I] Name of the file to get info for
* RequestedInformation [I] SE_ flags from "winnt.h"
* pSecurityDescriptor [O] Destination for security information
* nLength [I] Length of pSecurityDescriptor
* lpnLengthNeeded [O] Destination for length of returned security information
*
* RETURNS
* Success: TRUE. pSecurityDescriptor contains the requested information.
* Failure: FALSE. lpnLengthNeeded contains the required space to return the info.
*
* NOTES
* The information returned is constrained by the callers access rights and
* privileges.
*
* @unimplemented
*/
BOOL WINAPI
GetFileSecurityA (LPCSTR lpFileName,
SECURITY_INFORMATION RequestedInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor,
DWORD nLength,
LPDWORD lpnLengthNeeded)
{
DPRINT("GetFileSecurityW : stub\n");
return TRUE;
}
/* /*
* @implemented * @implemented
*/ */
@ -62,6 +98,22 @@ GetKernelObjectSecurity(HANDLE Handle,
} }
/******************************************************************************
* SetFileSecurityA [ADVAPI32.@]
* Sets the security of a file or directory
*
* @unimplemented
*/
BOOL STDCALL
SetFileSecurityA (LPCSTR lpFileName,
SECURITY_INFORMATION RequestedInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor)
{
DPRINT("SetFileSecurityA : stub\n");
return TRUE;
}
/* /*
* @implemented * @implemented
*/ */
@ -78,9 +130,9 @@ SetKernelObjectSecurity(HANDLE Handle,
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
SetLastError(RtlNtStatusToDosError(Status)); SetLastError(RtlNtStatusToDosError(Status));
return(FALSE); return FALSE;
} }
return(TRUE); return TRUE;
} }
@ -97,12 +149,85 @@ MapGenericMask(PDWORD AccessMask,
/* /*
* @unimplemented * @implemented
*/ */
BOOL STDCALL BOOL STDCALL
ImpersonateLoggedOnUser(HANDLE hToken) ImpersonateLoggedOnUser(HANDLE hToken)
{ {
return FALSE; SECURITY_QUALITY_OF_SERVICE Qos;
OBJECT_ATTRIBUTES ObjectAttributes;
HANDLE NewToken;
TOKEN_TYPE Type;
ULONG ReturnLength;
BOOL Duplicated;
NTSTATUS Status;
/* Get the token type */
Status = NtQueryInformationToken (hToken,
TokenType,
&Type,
sizeof(TOKEN_TYPE),
&ReturnLength);
if (!NT_SUCCESS(Status))
{
SetLastError (RtlNtStatusToDosError (Status));
return FALSE;
}
if (Type == TokenPrimary)
{
/* Create a duplicate impersonation token */
Qos.Length = sizeof(SECURITY_QUALITY_OF_SERVICE);
Qos.ImpersonationLevel = SecurityImpersonation;
Qos.ContextTrackingMode = SECURITY_DYNAMIC_TRACKING;
Qos.EffectiveOnly = FALSE;
ObjectAttributes.Length = sizeof(OBJECT_ATTRIBUTES);
ObjectAttributes.RootDirectory = NULL;
ObjectAttributes.ObjectName = NULL;
ObjectAttributes.Attributes = 0;
ObjectAttributes.SecurityDescriptor = NULL;
ObjectAttributes.SecurityQualityOfService = &Qos;
Status = NtDuplicateToken (hToken,
TOKEN_IMPERSONATE | TOKEN_QUERY,
&ObjectAttributes,
FALSE,
TokenImpersonation,
&NewToken);
if (!NT_SUCCESS(Status))
{
SetLastError (RtlNtStatusToDosError (Status));
return FALSE;
}
Duplicated = TRUE;
}
else
{
/* User the original impersonation token */
NewToken = hToken;
Duplicated = FALSE;
}
/* Impersonate the the current thread */
Status = NtSetInformationThread (NtCurrentThread (),
ThreadImpersonationToken,
NewToken,
sizeof(HANDLE));
if (Duplicated == TRUE)
{
NtClose (NewToken);
}
if (!NT_SUCCESS(Status))
{
SetLastError (RtlNtStatusToDosError (Status));
return FALSE;
}
return TRUE;
} }
@ -118,9 +243,9 @@ ImpersonateSelf(SECURITY_IMPERSONATION_LEVEL ImpersonationLevel)
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
SetLastError(RtlNtStatusToDosError(Status)); SetLastError(RtlNtStatusToDosError(Status));
return(FALSE); return FALSE;
} }
return(TRUE); return TRUE;
} }
@ -140,9 +265,9 @@ RevertToSelf(VOID)
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS(Status))
{ {
SetLastError(RtlNtStatusToDosError(Status)); SetLastError(RtlNtStatusToDosError(Status));
return(FALSE); return FALSE;
} }
return(TRUE); return TRUE;
} }
@ -207,4 +332,170 @@ GetUserNameW( LPWSTR lpszName, LPDWORD lpSize )
return TRUE; return TRUE;
} }
/******************************************************************************
* LookupAccountSidA [ADVAPI32.@]
*
* @unimplemented
*/
BOOL STDCALL
LookupAccountSidA (LPCSTR lpSystemName,
PSID lpSid,
LPSTR lpName,
LPDWORD cchName,
LPSTR lpReferencedDomainName,
LPDWORD cchReferencedDomainName,
PSID_NAME_USE peUse)
{
DPRINT1("LookupAccountSidA is unimplemented, but returns success\n");
return TRUE;
}
/******************************************************************************
* LookupAccountSidW [ADVAPI32.@]
*
* @unimplemented
*/
BOOL STDCALL
LookupAccountSidW (LPCWSTR lpSystemName,
PSID lpSid,
LPWSTR lpName,
LPDWORD cchName,
LPWSTR lpReferencedDomainName,
LPDWORD cchReferencedDomainName,
PSID_NAME_USE peUse)
{
DPRINT1("LookupAccountSidW is unimplemented, but returns success\n");
return TRUE;
}
/**********************************************************************
* LookupPrivilegeValueA EXPORTED
*
* @implemented
*/
BOOL STDCALL
LookupPrivilegeValueA (LPCSTR lpSystemName,
LPCSTR lpName,
PLUID lpLuid)
{
UNICODE_STRING SystemName;
UNICODE_STRING Name;
BOOL Result;
/* Remote system? */
if (lpSystemName != NULL)
{
RtlCreateUnicodeStringFromAsciiz (&SystemName,
(LPSTR)lpSystemName);
}
/* Check the privilege name is not NULL */
if (lpName == NULL)
{
SetLastError (ERROR_INVALID_PARAMETER);
return FALSE;
}
RtlCreateUnicodeStringFromAsciiz (&Name,
(LPSTR)lpName);
Result = LookupPrivilegeValueW ((lpSystemName != NULL) ? SystemName.Buffer : NULL,
Name.Buffer,
lpLuid);
RtlFreeUnicodeString (&Name);
/* Remote system? */
if (lpSystemName != NULL)
{
RtlFreeUnicodeString (&SystemName);
}
return Result;
}
/**********************************************************************
* LookupPrivilegeValueW EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeValueW (LPCWSTR lpSystemName,
LPCWSTR lpName,
PLUID lpLuid)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/**********************************************************************
* LookupPrivilegeDisplayNameA EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeDisplayNameA (LPCSTR lpSystemName,
LPCSTR lpName,
LPSTR lpDisplayName,
LPDWORD cbDisplayName,
LPDWORD lpLanguageId)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/**********************************************************************
* LookupPrivilegeDisplayNameW EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeDisplayNameW (LPCWSTR lpSystemName,
LPCWSTR lpName,
LPWSTR lpDisplayName,
LPDWORD cbDisplayName,
LPDWORD lpLanguageId)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/**********************************************************************
* LookupPrivilegeNameA EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeNameA (LPCSTR lpSystemName,
PLUID lpLuid,
LPSTR lpName,
LPDWORD cbName)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/**********************************************************************
* LookupPrivilegeNameW EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeNameW (LPCWSTR lpSystemName,
PLUID lpLuid,
LPWSTR lpName,
LPDWORD cbName)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/* EOF */ /* EOF */

View file

@ -1,4 +1,4 @@
/* $Id: sec.c,v 1.19 2004/02/25 23:54:13 sedwards Exp $ /* $Id: sec.c,v 1.20 2004/03/25 11:30:07 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries * PROJECT: ReactOS system libraries
@ -11,41 +11,11 @@
* Created 01/11/98 * Created 01/11/98
*/ */
#include <debug.h>
#define NTOS_MODE_USER #define NTOS_MODE_USER
#include <windows.h> #include <windows.h>
#include <ntos.h> #include <ntos.h>
/****************************************************************************** #include <debug.h>
* GetFileSecurityA [ADVAPI32.@]
*
* Obtains Specified information about the security of a file or directory.
*
* PARAMS
* lpFileName [I] Name of the file to get info for
* RequestedInformation [I] SE_ flags from "winnt.h"
* pSecurityDescriptor [O] Destination for security information
* nLength [I] Length of pSecurityDescriptor
* lpnLengthNeeded [O] Destination for length of returned security information
*
* RETURNS
* Success: TRUE. pSecurityDescriptor contains the requested information.
* Failure: FALSE. lpnLengthNeeded contains the required space to return the info.
*
* NOTES
* The information returned is constrained by the callers access rights and
* privileges.
*/
BOOL WINAPI
GetFileSecurityA( LPCSTR lpFileName,
SECURITY_INFORMATION RequestedInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor,
DWORD nLength, LPDWORD lpnLengthNeeded )
{
DPRINT("GetFileSecurityW : stub\n");
return TRUE;
}
/* /*
* @implemented * @implemented
@ -320,18 +290,6 @@ MakeSelfRelativeSD (
return TRUE; return TRUE;
} }
/******************************************************************************
* SetFileSecurityA [ADVAPI32.@]
* Sets the security of a file or directory
*/
BOOL STDCALL SetFileSecurityA( LPCSTR lpFileName,
SECURITY_INFORMATION RequestedInformation,
PSECURITY_DESCRIPTOR pSecurityDescriptor)
{
DPRINT("SetFileSecurityA : stub\n");
return TRUE;
}
/* /*
* @implemented * @implemented

View file

@ -1,4 +1,4 @@
/* $Id: sid.c,v 1.11 2004/03/10 21:34:42 fireball Exp $ /* $Id: sid.c,v 1.12 2004/03/25 11:30:07 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries * PROJECT: ReactOS system libraries
@ -18,15 +18,16 @@
BOOL STDCALL BOOL STDCALL
AllocateLocallyUniqueId(PLUID Luid) AllocateLocallyUniqueId(PLUID Luid)
{ {
NTSTATUS Status; NTSTATUS Status;
Status = NtAllocateLocallyUniqueId(Luid); Status = NtAllocateLocallyUniqueId (Luid);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS (Status))
{ {
SetLastError(RtlNtStatusToDosError(Status)); SetLastError (RtlNtStatusToDosError (Status));
return(FALSE); return FALSE;
} }
return(TRUE);
return TRUE;
} }
@ -34,26 +35,24 @@ AllocateLocallyUniqueId(PLUID Luid)
* @implemented * @implemented
*/ */
BOOL STDCALL BOOL STDCALL
AllocateAndInitializeSid ( AllocateAndInitializeSid (PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority, BYTE nSubAuthorityCount,
BYTE nSubAuthorityCount, DWORD dwSubAuthority0,
DWORD dwSubAuthority0, DWORD dwSubAuthority1,
DWORD dwSubAuthority1, DWORD dwSubAuthority2,
DWORD dwSubAuthority2, DWORD dwSubAuthority3,
DWORD dwSubAuthority3, DWORD dwSubAuthority4,
DWORD dwSubAuthority4, DWORD dwSubAuthority5,
DWORD dwSubAuthority5, DWORD dwSubAuthority6,
DWORD dwSubAuthority6, DWORD dwSubAuthority7,
DWORD dwSubAuthority7, PSID *pSid)
PSID *pSid
)
{ {
NTSTATUS Status; NTSTATUS Status;
Status = RtlAllocateAndInitializeSid (pIdentifierAuthority, Status = RtlAllocateAndInitializeSid (pIdentifierAuthority,
nSubAuthorityCount, nSubAuthorityCount,
dwSubAuthority0, dwSubAuthority0,
dwSubAuthority1, dwSubAuthority1,
dwSubAuthority2, dwSubAuthority2,
dwSubAuthority3, dwSubAuthority3,
dwSubAuthority4, dwSubAuthority4,
@ -61,171 +60,13 @@ AllocateAndInitializeSid (
dwSubAuthority6, dwSubAuthority6,
dwSubAuthority7, dwSubAuthority7,
pSid); pSid);
if (!NT_SUCCESS(Status)) if (!NT_SUCCESS (Status))
{ {
SetLastError (RtlNtStatusToDosError (Status)); SetLastError (RtlNtStatusToDosError (Status));
return FALSE; return FALSE;
} }
return TRUE; return TRUE;
}
/*
* @implemented
*/
BOOL
STDCALL
CopySid (
DWORD nDestinationSidLength,
PSID pDestinationSid,
PSID pSourceSid
)
{
NTSTATUS Status;
Status = RtlCopySid (nDestinationSidLength,
pDestinationSid,
pSourceSid);
if (!NT_SUCCESS(Status))
{
SetLastError (RtlNtStatusToDosError (Status));
return FALSE;
}
return TRUE;
}
/*
* @implemented
*/
BOOL
STDCALL
EqualPrefixSid (
PSID pSid1,
PSID pSid2
)
{
return RtlEqualPrefixSid (pSid1, pSid2);
}
/*
* @implemented
*/
BOOL
STDCALL
EqualSid (
PSID pSid1,
PSID pSid2
)
{
return RtlEqualSid (pSid1, pSid2);
}
/*
* @implemented
*/
PVOID
STDCALL
FreeSid (
PSID pSid
)
{
return RtlFreeSid (pSid);
}
/*
* @implemented
*/
DWORD
STDCALL
GetLengthSid (
PSID pSid
)
{
return (DWORD)RtlLengthSid (pSid);
}
/*
* @implemented
*/
PSID_IDENTIFIER_AUTHORITY
STDCALL
GetSidIdentifierAuthority (
PSID pSid
)
{
return RtlIdentifierAuthoritySid (pSid);
}
/*
* @implemented
*/
DWORD
STDCALL
GetSidLengthRequired (
UCHAR nSubAuthorityCount
)
{
return (DWORD)RtlLengthRequiredSid (nSubAuthorityCount);
}
/*
* @implemented
*/
PDWORD
STDCALL
GetSidSubAuthority (
PSID pSid,
DWORD nSubAuthority
)
{
return (PDWORD)RtlSubAuthoritySid (pSid, nSubAuthority);
}
/*
* @implemented
*/
PUCHAR
STDCALL
GetSidSubAuthorityCount (
PSID pSid
)
{
return RtlSubAuthorityCountSid (pSid);
}
/*
* @implemented
*/
BOOL
STDCALL
InitializeSid (
PSID Sid,
PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
BYTE nSubAuthorityCount
)
{
NTSTATUS Status;
Status = RtlInitializeSid (Sid,
pIdentifierAuthority,
nSubAuthorityCount);
if (!NT_SUCCESS(Status))
{
SetLastError (RtlNtStatusToDosError (Status));
return FALSE;
}
return TRUE;
} }
@ -233,40 +74,138 @@ InitializeSid (
* @implemented * @implemented
*/ */
BOOL STDCALL BOOL STDCALL
IsValidSid(PSID pSid) CopySid (DWORD nDestinationSidLength,
PSID pDestinationSid,
PSID pSourceSid)
{ {
return((BOOL)RtlValidSid(pSid)); NTSTATUS Status;
}
/****************************************************************************** Status = RtlCopySid (nDestinationSidLength,
* LookupAccountSidA [ADVAPI32.@] pDestinationSid,
* pSourceSid);
* @unimplemented if (!NT_SUCCESS (Status))
*/ {
BOOL STDCALL SetLastError (RtlNtStatusToDosError (Status));
LookupAccountSidA(LPCSTR lpSystemName, PSID lpSid, LPSTR lpName, return FALSE;
LPDWORD cchName, LPSTR lpReferencedDomainName, }
LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse)
return TRUE;
{
DPRINT1("LookupAccountSidA is unimplemented, but returns success\n");
return TRUE;
} }
/****************************************************************************** /*
* LookupAccountSidW [ADVAPI32.@] * @implemented
*
* @unimplemented
*/ */
BOOL STDCALL BOOL STDCALL
LookupAccountSidW(LPCWSTR lpSystemName, PSID lpSid, LPWSTR lpName, EqualPrefixSid (PSID pSid1,
LPDWORD cchName, LPWSTR lpReferencedDomainName, PSID pSid2)
LPDWORD cchReferencedDomainName, PSID_NAME_USE peUse)
{ {
DPRINT1("LookupAccountSidW is unimplemented, but returns success\n"); return RtlEqualPrefixSid (pSid1, pSid2);
return TRUE; }
/*
* @implemented
*/
BOOL STDCALL
EqualSid (PSID pSid1,
PSID pSid2)
{
return RtlEqualSid (pSid1, pSid2);
}
/*
* @implemented
*/
PVOID STDCALL
FreeSid (PSID pSid)
{
return RtlFreeSid (pSid);
}
/*
* @implemented
*/
DWORD STDCALL
GetLengthSid (PSID pSid)
{
return (DWORD)RtlLengthSid (pSid);
}
/*
* @implemented
*/
PSID_IDENTIFIER_AUTHORITY STDCALL
GetSidIdentifierAuthority (PSID pSid)
{
return RtlIdentifierAuthoritySid (pSid);
}
/*
* @implemented
*/
DWORD STDCALL
GetSidLengthRequired (UCHAR nSubAuthorityCount)
{
return (DWORD)RtlLengthRequiredSid (nSubAuthorityCount);
}
/*
* @implemented
*/
PDWORD STDCALL
GetSidSubAuthority (PSID pSid,
DWORD nSubAuthority)
{
return (PDWORD)RtlSubAuthoritySid (pSid, nSubAuthority);
}
/*
* @implemented
*/
PUCHAR STDCALL
GetSidSubAuthorityCount (PSID pSid)
{
return RtlSubAuthorityCountSid (pSid);
}
/*
* @implemented
*/
BOOL STDCALL
InitializeSid (PSID Sid,
PSID_IDENTIFIER_AUTHORITY pIdentifierAuthority,
BYTE nSubAuthorityCount)
{
NTSTATUS Status;
Status = RtlInitializeSid (Sid,
pIdentifierAuthority,
nSubAuthorityCount);
if (!NT_SUCCESS (Status))
{
SetLastError (RtlNtStatusToDosError (Status));
return FALSE;
}
return TRUE;
}
/*
* @implemented
*/
BOOL STDCALL
IsValidSid (PSID pSid)
{
return (BOOL)RtlValidSid (pSid);
} }
/* EOF */ /* EOF */

View file

@ -20,29 +20,24 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/ */
#define __USE_W32API #define NTOS_MODE_USER
#define _WIN32_WINNT 0x0501 #include <ntos.h>
#include <windows.h>
#include <stdarg.h> #include <stdarg.h>
#include "windef.h" #define NDEBUG
#include "winbase.h" #include <debug.h>
#include "winerror.h"
#include "winreg.h"
#include "wine/winternl.h"
#define YDEBUG
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
WINE_DECLARE_DEBUG_CHANNEL(eventlog);
/****************************************************************************** /******************************************************************************
* BackupEventLogA [ADVAPI32.@] * BackupEventLogA [ADVAPI32.@]
*/ */
BOOL WINAPI BackupEventLogA( HANDLE hEventLog, LPCSTR lpBackupFileName ) BOOL WINAPI
BackupEventLogA (HANDLE hEventLog,
LPCSTR lpBackupFileName)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
@ -53,39 +48,49 @@ BOOL WINAPI BackupEventLogA( HANDLE hEventLog, LPCSTR lpBackupFileName )
* lpBackupFileName [] * lpBackupFileName []
*/ */
BOOL WINAPI BOOL WINAPI
BackupEventLogW( HANDLE hEventLog, LPCWSTR lpBackupFileName ) BackupEventLogW (HANDLE hEventLog,
LPCWSTR lpBackupFileName)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* ClearEventLogA [ADVAPI32.@] * ClearEventLogA [ADVAPI32.@]
*/ */
BOOL WINAPI ClearEventLogA ( HANDLE hEventLog, LPCSTR lpBackupFileName ) BOOL WINAPI
ClearEventLogA (HANDLE hEventLog,
LPCSTR lpBackupFileName)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* ClearEventLogW [ADVAPI32.@] * ClearEventLogW [ADVAPI32.@]
*/ */
BOOL WINAPI ClearEventLogW ( HANDLE hEventLog, LPCWSTR lpBackupFileName ) BOOL WINAPI
ClearEventLogW (HANDLE hEventLog,
LPCWSTR lpBackupFileName)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* CloseEventLog [ADVAPI32.@] * CloseEventLog [ADVAPI32.@]
*/ */
BOOL WINAPI CloseEventLog ( HANDLE hEventLog ) BOOL WINAPI
CloseEventLog (HANDLE hEventLog)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* DeregisterEventSource [ADVAPI32.@] * DeregisterEventSource [ADVAPI32.@]
* Closes a handle to the specified event log * Closes a handle to the specified event log
@ -95,12 +100,14 @@ BOOL WINAPI CloseEventLog ( HANDLE hEventLog )
* *
* RETURNS STD * RETURNS STD
*/ */
BOOL WINAPI DeregisterEventSource( HANDLE hEventLog ) BOOL WINAPI
DeregisterEventSource (HANDLE hEventLog)
{ {
FIXME("(%p): stub\n",hEventLog); DPRINT1("(%p): stub\n",hEventLog);
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* GetNumberOfEventLogRecords [ADVAPI32.@] * GetNumberOfEventLogRecords [ADVAPI32.@]
* *
@ -109,12 +116,14 @@ BOOL WINAPI DeregisterEventSource( HANDLE hEventLog )
* NumberOfRecords [] * NumberOfRecords []
*/ */
BOOL WINAPI BOOL WINAPI
GetNumberOfEventLogRecords( HANDLE hEventLog, PDWORD NumberOfRecords ) GetNumberOfEventLogRecords (HANDLE hEventLog,
PDWORD NumberOfRecords)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* GetOldestEventLogRecord [ADVAPI32.@] * GetOldestEventLogRecord [ADVAPI32.@]
* *
@ -123,12 +132,14 @@ GetNumberOfEventLogRecords( HANDLE hEventLog, PDWORD NumberOfRecords )
* OldestRecord [] * OldestRecord []
*/ */
BOOL WINAPI BOOL WINAPI
GetOldestEventLogRecord( HANDLE hEventLog, PDWORD OldestRecord ) GetOldestEventLogRecord (HANDLE hEventLog,
PDWORD OldestRecord)
{ {
FIXME(":stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* NotifyChangeEventLog [ADVAPI32.@] * NotifyChangeEventLog [ADVAPI32.@]
* *
@ -136,22 +147,27 @@ GetOldestEventLogRecord( HANDLE hEventLog, PDWORD OldestRecord )
* hEventLog [] * hEventLog []
* hEvent [] * hEvent []
*/ */
BOOL WINAPI NotifyChangeEventLog( HANDLE hEventLog, HANDLE hEvent ) BOOL WINAPI
NotifyChangeEventLog (HANDLE hEventLog,
HANDLE hEvent)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* OpenBackupEventLogA [ADVAPI32.@] * OpenBackupEventLogA [ADVAPI32.@]
*/ */
HANDLE WINAPI HANDLE WINAPI
OpenBackupEventLogA( LPCSTR lpUNCServerName, LPCSTR lpFileName ) OpenBackupEventLogA (LPCSTR lpUNCServerName,
LPCSTR lpFileName)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return (HANDLE)1; return (HANDLE)1;
} }
/****************************************************************************** /******************************************************************************
* OpenBackupEventLogW [ADVAPI32.@] * OpenBackupEventLogW [ADVAPI32.@]
* *
@ -160,21 +176,27 @@ OpenBackupEventLogA( LPCSTR lpUNCServerName, LPCSTR lpFileName )
* lpFileName [] * lpFileName []
*/ */
HANDLE WINAPI HANDLE WINAPI
OpenBackupEventLogW( LPCWSTR lpUNCServerName, LPCWSTR lpFileName ) OpenBackupEventLogW (LPCWSTR lpUNCServerName,
LPCWSTR lpFileName)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return (HANDLE)1; return (HANDLE)1;
} }
/****************************************************************************** /******************************************************************************
* OpenEventLogA [ADVAPI32.@] * OpenEventLogA [ADVAPI32.@]
*/ */
HANDLE WINAPI OpenEventLogA(LPCSTR uncname,LPCSTR source) HANDLE WINAPI
OpenEventLogA (LPCSTR lpUNCServerName,
LPCSTR lpSourceName)
{ {
FIXME("(%s,%s),stub!\n",uncname,source); DPRINT1("(%s,%s),stub!\n",
return (HANDLE)0xcafe4242; lpUNCServerName, lpSourceName);
return (HANDLE)0xcafe4242;
} }
/****************************************************************************** /******************************************************************************
* OpenEventLogW [ADVAPI32.@] * OpenEventLogW [ADVAPI32.@]
* *
@ -183,22 +205,31 @@ HANDLE WINAPI OpenEventLogA(LPCSTR uncname,LPCSTR source)
* source [] * source []
*/ */
HANDLE WINAPI HANDLE WINAPI
OpenEventLogW( LPCWSTR uncname, LPCWSTR source ) OpenEventLogW (LPCWSTR lpUNCServerName,
LPCWSTR lpSourceName)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return (HANDLE)1; return (HANDLE)1;
} }
/****************************************************************************** /******************************************************************************
* ReadEventLogA [ADVAPI32.@] * ReadEventLogA [ADVAPI32.@]
*/ */
BOOL WINAPI ReadEventLogA( HANDLE hEventLog, DWORD dwReadFlags, DWORD dwRecordOffset, BOOL WINAPI
LPVOID lpBuffer, DWORD nNumberOfBytesToRead, DWORD *pnBytesRead, DWORD *pnMinNumberOfBytesNeeded ) ReadEventLogA (HANDLE hEventLog,
DWORD dwReadFlags,
DWORD dwRecordOffset,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
DWORD *pnBytesRead,
DWORD *pnMinNumberOfBytesNeeded)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* ReadEventLogW [ADVAPI32.@] * ReadEventLogW [ADVAPI32.@]
* *
@ -212,31 +243,45 @@ BOOL WINAPI ReadEventLogA( HANDLE hEventLog, DWORD dwReadFlags, DWORD dwRecordOf
* pnMinNumberOfBytesNeeded [] * pnMinNumberOfBytesNeeded []
*/ */
BOOL WINAPI BOOL WINAPI
ReadEventLogW( HANDLE hEventLog, DWORD dwReadFlags, DWORD dwRecordOffset, ReadEventLogW (HANDLE hEventLog,
LPVOID lpBuffer, DWORD nNumberOfBytesToRead, DWORD dwReadFlags,
DWORD *pnBytesRead, DWORD *pnMinNumberOfBytesNeeded ) DWORD dwRecordOffset,
LPVOID lpBuffer,
DWORD nNumberOfBytesToRead,
DWORD *pnBytesRead,
DWORD *pnMinNumberOfBytesNeeded)
{ {
FIXME("stub\n"); DPRINT1("stub\n");
return TRUE; return TRUE;
} }
/****************************************************************************** /******************************************************************************
* RegisterEventSourceA [ADVAPI32.@] * RegisterEventSourceA [ADVAPI32.@]
*/ */
HANDLE WINAPI RegisterEventSourceA( LPCSTR lpUNCServerName, LPCSTR lpSourceName ) HANDLE WINAPI
RegisterEventSourceA (LPCSTR lpUNCServerName,
LPCSTR lpSourceName)
{ {
UNICODE_STRING UNCServerName;
UNICODE_STRING lpUNCServerNameW; UNICODE_STRING SourceName;
UNICODE_STRING lpSourceNameW; HANDLE ret;
HANDLE ret;
RtlCreateUnicodeStringFromAsciiz(&lpUNCServerNameW, lpUNCServerName); RtlCreateUnicodeStringFromAsciiz (&UNCServerName,
RtlCreateUnicodeStringFromAsciiz(&lpSourceNameW, lpSourceName); (PSTR)lpUNCServerName);
ret = RegisterEventSourceW(lpUNCServerNameW.Buffer,lpSourceNameW.Buffer); RtlCreateUnicodeStringFromAsciiz (&SourceName,
RtlFreeUnicodeString (&lpUNCServerNameW); (PSTR)lpSourceName);
RtlFreeUnicodeString (&lpSourceNameW);
return ret; ret = RegisterEventSourceW (UNCServerName.Buffer,
SourceName.Buffer);
RtlFreeUnicodeString (&UNCServerName);
RtlFreeUnicodeString (&SourceName);
return ret;
} }
/****************************************************************************** /******************************************************************************
* RegisterEventSourceW [ADVAPI32.@] * RegisterEventSourceW [ADVAPI32.@]
* Returns a registered handle to an event log * Returns a registered handle to an event log
@ -250,43 +295,79 @@ HANDLE WINAPI RegisterEventSourceA( LPCSTR lpUNCServerName, LPCSTR lpSourceName
* Failure: NULL * Failure: NULL
*/ */
HANDLE WINAPI HANDLE WINAPI
RegisterEventSourceW( LPCWSTR lpUNCServerName, LPCWSTR lpSourceName ) RegisterEventSourceW (LPCWSTR lpUNCServerName,
LPCWSTR lpSourceName)
{ {
FIXME("(%s,%s): stub\n", debugstr_w(lpUNCServerName), DPRINT1("(%S, %S): stub\n",
debugstr_w(lpSourceName)); lpUNCServerName, lpSourceName);
return (HANDLE)1; return (HANDLE)1;
} }
/****************************************************************************** /******************************************************************************
* ReportEventA [ADVAPI32.@] * ReportEventA [ADVAPI32.@]
*/ */
BOOL WINAPI ReportEventA ( HANDLE hEventLog, WORD wType, WORD wCategory, DWORD dwEventID, BOOL WINAPI
PSID lpUserSid, WORD wNumStrings, DWORD dwDataSize, LPCSTR *lpStrings, LPVOID lpRawData) ReportEventA (HANDLE hEventLog,
WORD wType,
WORD wCategory,
DWORD dwEventID,
PSID lpUserSid,
WORD wNumStrings,
DWORD dwDataSize,
LPCSTR *lpStrings,
LPVOID lpRawData)
{ {
LPCWSTR *wideStrArray; LPCWSTR *wideStrArray;
UNICODE_STRING str; UNICODE_STRING str;
int i; int i;
BOOL ret; BOOL ret;
if (wNumStrings == 0) return TRUE; if (wNumStrings == 0)
if (!lpStrings) return TRUE; return TRUE;
wideStrArray = HeapAlloc(GetProcessHeap(), 0, sizeof(LPCWSTR) * wNumStrings); if (lpStrings == NULL)
for (i = 0; i < wNumStrings; i++) return TRUE;
wideStrArray = HeapAlloc (GetProcessHeap (),
0,
sizeof(LPCWSTR) * wNumStrings);
for (i = 0; i < wNumStrings; i++)
{ {
RtlCreateUnicodeStringFromAsciiz(&str, lpStrings[i]); RtlCreateUnicodeStringFromAsciiz (&str,
(PSTR)lpStrings[i]);
wideStrArray[i] = str.Buffer; wideStrArray[i] = str.Buffer;
} }
ret = ReportEventW(hEventLog, wType, wCategory, dwEventID, lpUserSid,
wNumStrings, dwDataSize, wideStrArray, lpRawData); ret = ReportEventW (hEventLog,
for (i = 0; i < wNumStrings; i++) wType,
wCategory,
dwEventID,
lpUserSid,
wNumStrings,
dwDataSize,
wideStrArray,
lpRawData);
for (i = 0; i < wNumStrings; i++)
{ {
if (wideStrArray[i]) HeapFree( GetProcessHeap(), 0, (LPSTR)wideStrArray[i] ); if (wideStrArray[i])
{
HeapFree (GetProcessHeap (),
0,
(LPSTR)wideStrArray[i]);
}
} }
HeapFree(GetProcessHeap(), 0, wideStrArray);
return ret; HeapFree (GetProcessHeap(),
0,
wideStrArray);
return ret;
} }
/****************************************************************************** /******************************************************************************
* ReportEventW [ADVAPI32.@] * ReportEventW [ADVAPI32.@]
* *
@ -302,35 +383,47 @@ BOOL WINAPI ReportEventA ( HANDLE hEventLog, WORD wType, WORD wCategory, DWORD d
* lpRawData [] * lpRawData []
*/ */
BOOL WINAPI BOOL WINAPI
ReportEventW( HANDLE hEventLog, WORD wType, WORD wCategory, ReportEventW (HANDLE hEventLog,
DWORD dwEventID, PSID lpUserSid, WORD wNumStrings, WORD wType,
DWORD dwDataSize, LPCWSTR *lpStrings, LPVOID lpRawData ) WORD wCategory,
DWORD dwEventID,
PSID lpUserSid,
WORD wNumStrings,
DWORD dwDataSize,
LPCWSTR *lpStrings,
LPVOID lpRawData)
{ {
int i; int i;
/* partial stub */ /* partial stub */
if (wNumStrings == 0) return TRUE; if (wNumStrings == 0)
if (!lpStrings) return TRUE; return TRUE;
for (i = 0; i < wNumStrings; i++) if (lpStrings == NULL)
return TRUE;
for (i = 0; i < wNumStrings; i++)
{ {
switch (wType) switch (wType)
{ {
case EVENTLOG_SUCCESS: case EVENTLOG_SUCCESS:
TRACE_(eventlog)("%s\n", debugstr_w(lpStrings[i])); DPRINT1("Success: %S\n", lpStrings[i]);
break; break;
case EVENTLOG_ERROR_TYPE: case EVENTLOG_ERROR_TYPE:
ERR_(eventlog)("%s\n", debugstr_w(lpStrings[i])); DPRINT1("Error: %S\n", lpStrings[i]);
break; break;
case EVENTLOG_WARNING_TYPE: case EVENTLOG_WARNING_TYPE:
WARN_(eventlog)("%s\n", debugstr_w(lpStrings[i])); DPRINT1("Warning: %S\n", lpStrings[i]);
break; break;
default: default:
TRACE_(eventlog)("%s\n", debugstr_w(lpStrings[i])); DPRINT1("Type %hu: %S\n", wType, lpStrings[i]);
break; break;
} }
} }
return TRUE;
return TRUE;
} }

View file

@ -1,4 +1,4 @@
/* $Id: privilege.c,v 1.6 2004/02/25 14:25:11 ekohl Exp $ /* $Id: privilege.c,v 1.7 2004/03/25 11:30:07 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries * PROJECT: ReactOS system libraries
@ -8,138 +8,11 @@
* UPDATE HISTORY: * UPDATE HISTORY:
* 20010317 ea stubs * 20010317 ea stubs
*/ */
#include <windows.h> #include <windows.h>
#include <ddk/ntddk.h> #include <ddk/ntddk.h>
/**********************************************************************
* LookupPrivilegeValueA EXPORTED
*
* @implemented
*/
BOOL STDCALL
LookupPrivilegeValueA (LPCSTR lpSystemName,
LPCSTR lpName,
PLUID lpLuid)
{
UNICODE_STRING SystemName;
UNICODE_STRING Name;
BOOL Result;
/* Remote system? */
if (lpSystemName != NULL)
{
RtlCreateUnicodeStringFromAsciiz (&SystemName,
(LPSTR)lpSystemName);
}
/* Check the privilege name is not NULL */
if (lpName == NULL)
{
SetLastError (ERROR_INVALID_PARAMETER);
return FALSE;
}
RtlCreateUnicodeStringFromAsciiz (&Name,
(LPSTR)lpName);
Result = LookupPrivilegeValueW ((lpSystemName != NULL) ? SystemName.Buffer : NULL,
Name.Buffer,
lpLuid);
RtlFreeUnicodeString (&Name);
/* Remote system? */
if (lpSystemName != NULL)
{
RtlFreeUnicodeString (&SystemName);
}
return Result;
}
/**********************************************************************
* LookupPrivilegeValueW EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeValueW (LPCWSTR lpSystemName,
LPCWSTR lpName,
PLUID lpLuid)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/**********************************************************************
* LookupPrivilegeDisplayNameA EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeDisplayNameA (LPCSTR lpSystemName,
LPCSTR lpName,
LPSTR lpDisplayName,
LPDWORD cbDisplayName,
LPDWORD lpLanguageId)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/**********************************************************************
* LookupPrivilegeDisplayNameW EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeDisplayNameW (LPCWSTR lpSystemName,
LPCWSTR lpName,
LPWSTR lpDisplayName,
LPDWORD cbDisplayName,
LPDWORD lpLanguageId)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/**********************************************************************
* LookupPrivilegeNameA EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeNameA (LPCSTR lpSystemName,
PLUID lpLuid,
LPSTR lpName,
LPDWORD cbName)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/**********************************************************************
* LookupPrivilegeNameW EXPORTED
*
* @unimplemented
*/
BOOL STDCALL
LookupPrivilegeNameW (LPCWSTR lpSystemName,
PLUID lpLuid,
LPWSTR lpName,
LPDWORD cbName)
{
SetLastError (ERROR_CALL_NOT_IMPLEMENTED);
return FALSE;
}
/********************************************************************** /**********************************************************************
* PrivilegeCheck EXPORTED * PrivilegeCheck EXPORTED
* *

View file

@ -1,4 +1,4 @@
/* $Id: token.c,v 1.9 2004/02/25 14:25:11 ekohl Exp $ /* $Id: token.c,v 1.10 2004/03/25 11:30:07 ekohl Exp $
* *
* COPYRIGHT: See COPYING in the top level directory * COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries * PROJECT: ReactOS system libraries
@ -283,7 +283,7 @@ DuplicateToken (HANDLE ExistingTokenHandle,
PHANDLE DuplicateTokenHandle) PHANDLE DuplicateTokenHandle)
{ {
return DuplicateTokenEx (ExistingTokenHandle, return DuplicateTokenEx (ExistingTokenHandle,
TOKEN_DUPLICATE|TOKEN_IMPERSONATE|TOKEN_QUERY, TOKEN_DUPLICATE | TOKEN_IMPERSONATE | TOKEN_QUERY,
NULL, NULL,
ImpersonationLevel, ImpersonationLevel,
TokenImpersonation, TokenImpersonation,