Логи
От: WhiteDev  
Дата: 17.10.06 12:26
Оценка:
Есть трабла с записбю логов под висту
пишу такой 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

В че может быть проблема???
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.