*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <advapi32.h>
#include "wine/debug.h"
WINE_DEFAULT_DEBUG_CHANNEL(advapi);
-WINE_DECLARE_DEBUG_CHANNEL(eventlog);
static RPC_UNICODE_STRING EmptyString = { 0, 0, L"" };
BackupFileName.Buffer = (LPSTR)lpBackupFileName;
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? strlen(lpBackupFileName) : 0;
+ BackupFileName.MaximumLength += sizeof(CHAR);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrBackupELFA(hEventLog,
&BackupFileName);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
BackupFileName.Buffer = (LPWSTR)lpBackupFileName;
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? wcslen(lpBackupFileName) * sizeof(WCHAR) : 0;
+ BackupFileName.MaximumLength += sizeof(WCHAR);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrBackupELFW(hEventLog,
&BackupFileName);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
BackupFileName.Buffer = (LPSTR)lpBackupFileName;
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? strlen(lpBackupFileName) : 0;
+ BackupFileName.MaximumLength += sizeof(CHAR);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrClearELFA(hEventLog,
&BackupFileName);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
BackupFileName.Buffer = (LPWSTR)lpBackupFileName;
BackupFileName.Length = BackupFileName.MaximumLength =
lpBackupFileName ? wcslen(lpBackupFileName) * sizeof(WCHAR) : 0;
+ BackupFileName.MaximumLength += sizeof(WCHAR);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrClearELFW(hEventLog,
&BackupFileName);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
TRACE("%p\n", hEventLog);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrCloseEL(&hEventLog);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
TRACE("%p\n", hEventLog);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrDeregisterEventSource(&hEventLog);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
}
+/******************************************************************************
+ * GetEventLogInformation [ADVAPI32.@]
+ *
+ * PARAMS
+ * hEventLog [I] Handle to event log
+ * dwInfoLevel [I] Level of event log information to return
+ * lpBuffer [O] Buffer that receives the event log information
+ * cbBufSize [I] Size of the lpBuffer buffer
+ * pcbBytesNeeded [O] Required buffer size
+ */
+BOOL WINAPI
+GetEventLogInformation(IN HANDLE hEventLog,
+ IN DWORD dwInfoLevel,
+ OUT LPVOID lpBuffer,
+ IN DWORD cbBufSize,
+ OUT LPDWORD pcbBytesNeeded)
+{
+ UNIMPLEMENTED;
+ SetLastError(ERROR_CALL_NOT_IMPLEMENTED);
+ return FALSE;
+}
+
+
/******************************************************************************
* GetNumberOfEventLogRecords [ADVAPI32.@]
*
TRACE("%p, %p\n", hEventLog, NumberOfRecords);
- _SEH_TRY
+ if(!NumberOfRecords)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ RpcTryExcept
{
Status = ElfrNumberOfRecords(hEventLog,
&Records);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
TRACE("%p, %p\n", hEventLog, OldestRecord);
- _SEH_TRY
+ if(!OldestRecord)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ RpcTryExcept
{
Status = ElfrOldestRecord(hEventLog,
&Oldest);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
FileName.Buffer = (LPWSTR)lpFileName;
FileName.Length = FileName.MaximumLength =
lpFileName ? wcslen(lpFileName) * sizeof(WCHAR) : 0;
+ FileName.MaximumLength += sizeof(WCHAR);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrOpenBELW((LPWSTR)lpUNCServerName,
&FileName,
- 0,
- 0,
+ 1,
+ 1,
&LogHandle);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
SourceName.Buffer = (LPWSTR)lpSourceName;
SourceName.Length = SourceName.MaximumLength =
lpSourceName ? wcslen(lpSourceName) * sizeof(WCHAR) : 0;
+ SourceName.MaximumLength += sizeof(WCHAR);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrOpenELW((LPWSTR)lpUNCServerName,
&SourceName,
&EmptyString,
- 0,
- 0,
+ 1,
+ 1,
&LogHandle);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
hEventLog, dwReadFlags, dwRecordOffset, lpBuffer,
nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded);
- _SEH_TRY
+ if(!pnBytesRead || !pnMinNumberOfBytesNeeded)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ /* If buffer is NULL set nNumberOfBytesToRead to 0 to prevent rpcrt4 from
+ trying to access a null pointer */
+ if (!lpBuffer)
+ {
+ nNumberOfBytesToRead = 0;
+ }
+
+ RpcTryExcept
{
Status = ElfrReadELA(hEventLog,
dwReadFlags,
&bytesRead,
&minNumberOfBytesNeeded);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
+
+ *pnBytesRead = (DWORD)bytesRead;
+ *pnMinNumberOfBytesNeeded = (DWORD)minNumberOfBytesNeeded;
if (!NT_SUCCESS(Status))
{
return FALSE;
}
- *pnBytesRead = (DWORD)bytesRead;
- *pnMinNumberOfBytesNeeded = (DWORD)minNumberOfBytesNeeded;
-
return TRUE;
}
hEventLog, dwReadFlags, dwRecordOffset, lpBuffer,
nNumberOfBytesToRead, pnBytesRead, pnMinNumberOfBytesNeeded);
- _SEH_TRY
+ if(!pnBytesRead || !pnMinNumberOfBytesNeeded)
+ {
+ SetLastError(ERROR_INVALID_PARAMETER);
+ return FALSE;
+ }
+
+ /* If buffer is NULL set nNumberOfBytesToRead to 0 to prevent rpcrt4 from
+ trying to access a null pointer */
+ if (!lpBuffer)
+ {
+ nNumberOfBytesToRead = 0;
+ }
+
+ RpcTryExcept
{
Status = ElfrReadELW(hEventLog,
dwReadFlags,
&bytesRead,
&minNumberOfBytesNeeded);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
+
+ *pnBytesRead = (DWORD)bytesRead;
+ *pnMinNumberOfBytesNeeded = (DWORD)minNumberOfBytesNeeded;
if (!NT_SUCCESS(Status))
{
return FALSE;
}
- *pnBytesRead = (DWORD)bytesRead;
- *pnMinNumberOfBytesNeeded = (DWORD)minNumberOfBytesNeeded;
-
return TRUE;
}
SourceName.Buffer = (LPWSTR)lpSourceName;
SourceName.Length = SourceName.MaximumLength =
lpSourceName ? wcslen(lpSourceName) * sizeof(WCHAR) : 0;
+ SourceName.MaximumLength += sizeof(WCHAR);
- _SEH_TRY
+ RpcTryExcept
{
Status = ElfrRegisterEventSourceW((LPWSTR)lpUNCServerName,
&SourceName,
&EmptyString,
- 0,
- 0,
+ 1,
+ 1,
&LogHandle);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
if (!NT_SUCCESS(Status))
{
IN LPCWSTR *lpStrings,
IN LPVOID lpRawData)
{
-#if 0
NTSTATUS Status;
UNICODE_STRING *Strings;
+ UNICODE_STRING ComputerName;
WORD i;
TRACE("%p, %u, %u, %lu, %p, %u, %lu, %p, %p\n",
for (i = 0; i < wNumStrings; i++)
RtlInitUnicodeString(&Strings[i], lpStrings[i]);
- _SEH_TRY
+ /*FIXME: ComputerName */
+ RtlInitUnicodeString(&ComputerName, L"");
+
+ RpcTryExcept
{
Status = ElfrReportEventW(hEventLog,
0, /* FIXME: Time */
dwEventID,
wNumStrings,
dwDataSize,
- L"", /* FIXME: ComputerName */
+ (PRPC_UNICODE_STRING) &ComputerName,
lpUserSid,
- (LPWSTR *)lpStrings, /* FIXME: should be Strings */
+ (PRPC_UNICODE_STRING*) &Strings,
lpRawData,
0,
NULL,
NULL);
}
- _SEH_HANDLE
+ RpcExcept(EXCEPTION_EXECUTE_HANDLER)
{
Status = I_RpcMapWin32Status(RpcExceptionCode());
}
- _SEH_END;
+ RpcEndExcept;
HeapFree(GetProcessHeap(), 0, Strings);
}
return TRUE;
-#else
- int i;
-
- /* partial stub */
-
- if (wNumStrings == 0)
- return TRUE;
-
- if (lpStrings == NULL)
- return TRUE;
-
- for (i = 0; i < wNumStrings; i++)
- {
- switch (wType)
- {
- case EVENTLOG_SUCCESS:
- TRACE_(eventlog)("Success: %S\n", lpStrings[i]);
- break;
-
- case EVENTLOG_ERROR_TYPE:
- ERR_(eventlog)("Error: %S\n", lpStrings[i]);
- break;
-
- case EVENTLOG_WARNING_TYPE:
- WARN_(eventlog)("Warning: %S\n", lpStrings[i]);
- break;
-
- case EVENTLOG_INFORMATION_TYPE:
- TRACE_(eventlog)("Info: %S\n", lpStrings[i]);
- break;
-
- default:
- TRACE_(eventlog)("Type %hu: %S\n", wType, lpStrings[i]);
- break;
- }
- }
-
- return TRUE;
-#endif
}