[pso] [Tema1][Win] IoWriteErrorLogEntry

Octavian Voicu octavian.voicu at gmail.com
Sun Mar 28 20:24:55 EEST 2010


2010/3/28 Marius Poke <mariusp55 at yahoo.com>:
> Salut,
>
> Ma chinui de vreo zi cu partea de logare a mesajelor pe windows. Nu inteleg
> din ce cauza nu merge. Tinand cont ca nu cred ca logarea este partea
> importanta din aceasta tema poate sa puna cineva un model de folosire a
> functiilor IoAllocateErrorLogEntry, IoWriteErrorLogEntry, cat si cum se
> construieste structura log_packe?

Functiona IoAllocateErrorLogEntry [1] primeste doi parametrii: un
pointer la structura ce descrie driverul tau si dimensiunea pachetului
pe care vrei sa-l loghezi (adica dimensiunea structurii
IO_ERROR_LOG_PACKET la care aduni dimensiunea payloadului). Astfel,
payload-ul urmeaza imediat dupa header-ul pachetului.

Vei primi un pointer la o structura  IO_ERROR_LOG_PACKET [2]. In
aceasta ai de setat doua campuri: DumpDataSize (dimensiunea
payload-ului) si DumpData.

Payload-ul tau consta din structura log_packet, dar trebui sa ai grija
sa pui si parametrii apelului de sistem. Ei sunt declarati in
structura asa:

>> int syscall_arg[0]

Asta inseamna ca daca faci sizeof(struct log_packet), dimensiunea
returnata include 0 bytes pentru vectorul de parametrii, deci
payload-ul tau e de fapt de dimensiunea sizeof(struct log_packet) +
cati bytes au parametrii tai (vezi SPT din system call descriptor).

Pasii ar fi:

1. Aloci pachetul cu IoAllocateErrorLogEntry de dimensiune
sizeof(IO_ERROR_LOG_PACKET) + dimensiune payload
2. Setezi dimensiunea payload-ului in packet->DumpDataSize
3. Completezi payload-ul adica packet->DumpData. Privesti acest
pointer ca un struct log_packet* si completezi fiecare camp din
structura log_packet. In final copiezi parametrii syscall-ului in
syscall_arg.
4. Apelezi IoWriteErrorLogEntry

Tu ai de logat dimensiunea structurii log_packet la care aduni
dimensiunea parametrilor (pentru ca in structura log_packet
syscall_arg e declarat ca `int syscall_arg[0]", deci daca faci
sizeof(struct log_packet)

Octavian

[1] http://msdn.microsoft.com/en-us/library/ms801569.aspx
[2] http://msdn.microsoft.com/en-us/library/dd852042.aspx


More information about the pso mailing list