Есть трабла с записбю логов под висту
пишу такой xml файл
п>ї<instrumentationManifest xmlns="http://schemas.microsoft.com/win/2004/08/events">
<instrumentation xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:win="http://manifests.microsoft.com/win/2004/08/windows/events">
<events xmlns="http://schemas.microsoft.com/win/2004/08/events">
<!--Publisher Info -->
<provider name="MyCompany-MySoft-MyEventLogs"
guid="{EABDA68E-94D4-4fd2-81CD-910A748BC6E4}"
symbol="GUID_PUBLISHER"
resourceFileName="C:\Temp\MyLog.exe"
messageFileName="C:\Temp\MyLog.exe">
<!--Channel to which this Publisher can publish -->
<channels>
<channel chid="MyOpChannel"
name="MyCompany-MySoft-MyEventLogs/Operational"
type="Operational"
symbol="MY_LOG"
isolation="Application" enabled="true"/>
<channel chid="MyDebugChannel"
name="MyCompany-MySoft-MyEventLogs/Debug"
type="Debug"
symbol="MY_LOG_DEBUG"
isolation="Application" enabled="true"/>
</channels>
<!--Event Templates -->
<templates>
<template tid="SimpleEvent" message="$(string.SimpleMessage)">>
<data name="Message" inType="win:UnicodeString"/>
<UserData>
<SimpleEvent xmlns="http://manifests.microsoft.com/win/2004/08/windows/simpleevent">
<ExceptionMessage>%1</ExceptionMessage>
</SimpleEvent>
</UserData>
</template>
</templates>
<events>
<event value="1"
level="win:Informational"
template="SimpleEvent"
opcode="win:Info"
channel="MyOpChannel"
symbol="MY_EVENT"
message="$(string.SimpleMessage)"/>
<event value="2"
level="win:Informational"
template="SimpleEvent"
opcode="win:Info"
channel="MyDebugChannel"
symbol="MY_DEBUG_EVENT"
message="$(string.SimpleMessage)"/>
</events>
</provider>
</events>
</instrumentation>
<localization>
<resources culture="en-US">
<stringTable>
<string id="SimpleMessage" value="%1" stringType="string"/>
</stringTable>
</resources>
</localization>
</instrumentationManifest>
компилю все это mc.exe все чудесно компилится, подключаю полученные файлы к проекту и собираю его
вот код:
#include <windows.h>
namespace VistaWindowsLog
{
typedef struct _EVENT_DESCRIPTOR {
unsigned short Id;
unsigned char Version;
unsigned char Channel;
unsigned char Level;
unsigned char Opcode;
unsigned short Task;
unsigned __int64 Keyword;
} EVENT_DESCRIPTOR, *PEVENT_DESCRIPTOR;
typedef const EVENT_DESCRIPTOR *PCEVENT_DESCRIPTOR;
typedef struct _EVENT_DATA_DESCRIPTOR {
unsigned __int64 Ptr;
unsigned long Size;
unsigned long Reserved;
} EVENT_DATA_DESCRIPTOR, *PEVENT_DATA_DESCRIPTOR;
typedef struct _EVENT_FILTER_DESCRIPTOR {
unsigned __int64 Ptr;
unsigned long Size;
unsigned long Type;
} EVENT_FILTER_DESCRIPTOR, *PEVENT_FILTER_DESCRIPTOR;
typedef void (__stdcall *ENABLECALLBACK)(
const GUID*,
unsigned long,
unsigned char,
unsigned __int64,
unsigned __int64,
PEVENT_FILTER_DESCRIPTOR,
void*
);
typedef ULONGLONG REGHANDLE, *PREGHANDLE;
typedef unsigned long (__stdcall *PFNEventRegister)(const GUID*, ENABLECALLBACK, void*, PREGHANDLE);
typedef unsigned long (__stdcall *PFNEventUnregister)(REGHANDLE);
typedef unsigned long (__stdcall *PFNEventWrite)(REGHANDLE, PCEVENT_DESCRIPTOR, unsigned long, PEVENT_DATA_DESCRIPTOR);
inline void EventDataDescCreate(PEVENT_DATA_DESCRIPTOR EventDataDescriptor,
const void* DataPtr, unsigned long DataSize)
{
EventDataDescriptor->Ptr = reinterpret_cast<unsigned __int64>(DataPtr);
EventDataDescriptor->Size = DataSize;
EventDataDescriptor->Reserved = 0;
}
class VistaWinLog
{
public:
VistaWinLog();
~VistaWinLog();
bool Report(wchar_t* message, const EVENT_DESCRIPTOR* eventDescriptor);
bool Init(const GUID* providerGuid);
private:
VistaWinLog(const VistaWinLog&);
void operator = (const VistaWinLog&);
bool IsInit;
HINSTANCE Advapi32Dll;
PFNEventRegister MyEventRegister;
PFNEventUnregister MyEventUnregister;
PFNEventWrite MyEventWrite;
REGHANDLE RegHandle;
};
}
namespace VistaWindowsLog
{
VistaWinLog::VistaWinLog()
: IsInit(false)
, Advapi32Dll(NULL)
, MyEventRegister(NULL)
, MyEventUnregister(NULL)
, MyEventWrite(NULL)
, RegHandle(NULL)
{
}
VistaWinLog::~VistaWinLog()
{
if (Advapi32Dll)
{
MyEventUnregister(RegHandle);
::FreeLibrary(Advapi32Dll);
}
}
bool VistaWinLog::Init(const GUID* providerGuid)
{
if (IsInit)
return true;
if (!Advapi32Dll && !(Advapi32Dll = ::LoadLibrary(TEXT("Advapi32.dll"))))
return false;
if (!MyEventRegister && !(MyEventRegister = reinterpret_cast<PFNEventRegister>(::GetProcAddress(Advapi32Dll, "EventRegister"))) ||
!MyEventUnregister && !(MyEventUnregister = reinterpret_cast<PFNEventUnregister>(::GetProcAddress(Advapi32Dll, "EventUnregister"))) ||
!MyEventWrite && !(MyEventWrite = reinterpret_cast<PFNEventWrite>(::GetProcAddress(Advapi32Dll, "EventWrite"))) ||
!RegHandle && MyEventRegister(providerGuid, NULL, NULL, &RegHandle) != ERROR_SUCCESS)
{
::FreeLibrary(Advapi32Dll);
Advapi32Dll = NULL;
MyEventRegister = NULL;
MyEventUnregister = NULL;
MyEventWrite = NULL;
RegHandle = NULL;
return false;
}
return (IsInit = true);
}
bool VistaWinLog::Report(wchar_t* message, const EVENT_DESCRIPTOR* eventDescriptor)
{
if (!IsInit)
return false;
EVENT_DATA_DESCRIPTOR EventData;
::ZeroMemory(&EventData, sizeof(EventData));
EventDataDescCreate(&EventData, message, static_cast<unsigned long>(::wcslen(message) + 1) * sizeof(wchar_t));
return MyEventWrite(RegHandle, eventDescriptor, 1, &EventData) == ERROR_SUCCESS;
}
}
namespace VistaEventIDs
{
using VistaWindowsLog::EVENT_DESCRIPTOR;
#include "MyData.h"
}
void main(int argc, _TCHAR* argv[])
{
VistaWindowsLog::VistaWinLog log;
log.Init(&VistaEventIDs::GUID_PUBLISHER);
printf("%s%d", log.Report(L"Oh, My message!!!", &VistaEventIDs::MY_EVENT) ? "Success\n" : "Failed\n", ::GetLastError());
}
полученный xml файл инсталирую wevtutil install-manifest MyData.xml
но ничего не вижу в полученном журнале при работе с EventViewer
В че может быть проблема???