I’m just trying to send a write request to a remote I/O target (another test driver in this setup). The target driver completes the write and completes it, but in my completion routine I get a BSOD:
I’m sure I’ve done something dumb… please enlighten me =)
VOID
RS232COM_EvtWriteCompletionRoutine(
In
WDFREQUEST Request,
In
WDFIOTARGET Target,
In
PWDF_REQUEST_COMPLETION_PARAMS Params,
In
WDFCONTEXT Context
)
{
UNREFERENCED_PARAMETER(Target);
UNREFERENCED_PARAMETER(Params);
TRACE_FUNCTION();
WDFREQUEST OldRequest;
ULONG_PTR information;
NTSTATUS status;
OldRequest = (WDFREQUEST)Context;
status = WdfRequestGetStatus(Request);
information=WdfRequestGetInformation(Request);
WdfObjectDelete(Request);
WdfRequestCompleteWithInformation(OldRequest, status, information);
}
void RS232COM_EvtWrite(
WDFQUEUE Queue,
WDFREQUEST Request,
size_t Length)
{
TRACE_FUNCTION();
UNREFERENCED_PARAMETER(Length);
WDFMEMORY memory;
WDFREQUEST newWriteAsync;
NTSTATUS status;
WDFDEVICE device = WdfIoQueueGetDevice(Queue);
RS232COM_Context *prs232com_context = DeviceGetRS232COM_Context(device);
INFO_MSG(“Write: 0x%X\n”, Length);
status = WdfRequestRetrieveInputMemory(Request, &memory);
if (!NT_SUCCESS(status))
{
ERROR_STATUS(“WdfRequestRetrieveInputMemory”, status);
return;
}
status = WdfRequestCreate(NULL, prs232com_context->USBTarget, &newWriteAsync);
if (!NT_SUCCESS(status))
{
ERROR_STATUS(“WdfRequestCreate”, status);
return;
}
status = WdfIoTargetFormatRequestForWrite(prs232com_context->USBTarget, newWriteAsync, memory, NULL, NULL);
if (!NT_SUCCESS(status))
{
ERROR_STATUS(“WdfIoTargetFormatRequestForWrite”, status);
return;
}
WdfRequestSetCompletionRoutine(newWriteAsync, RS232COM_EvtWriteCompletionRoutine, (WDFCONTEXT)Request);
if (!WdfRequestSend(newWriteAsync, prs232com_context->USBTarget, NULL))
{
status = WdfRequestGetStatus(newWriteAsync);
ERROR_STATUS(“WdfRequestSend”, status);
WdfRequestCompleteWithInformation(Request, status, 0);
}
}
Debug Dumps:
KDTARGET: Refreshing KD connection
USBCOM [TRACE] :Driver.c : DriverEntry
USBCOM [TRACE] :Driver.c : USBCOM_DeviceAdd
RS232COM [TRACE] :Driver.c : DriverEntry
RS232COM [TRACE] :Driver.c : RS232COM_DeviceAdd
RS232COM [ERROR] :WdfIoTargetOpen Failed with Status = 0xC000000E
RS232COM [TRACE] :Device.c : RS232COM_Device_Cleanup
RS232COM [TRACE] :Device.c : RS232COM_Device_Destroy
USBCOM [TRACE] :Device.c : USBCOM_EvtDevicePrepareHardware
USBCOM [TRACE] :Device.c : USBCOM_EvtD0Entry
+++++>WskKnrInit.
RS232COM [TRACE] :Driver.c : DriverEntry
RS232COM [TRACE] :Driver.c : RS232COM_DeviceAdd
RS232COM [TRACE] :Device.c : RS232COM_EvtDevicePrepareHardware
RS232COM [TRACE] :Device.c : RS232COM_EvtD0Entry
RS232COM [TRACE] :Queue.c : RS232COM_EvtWrite
RS232COM [INFOR] :Write: 0x6
USBCOM [TRACE] :Queue.c : USBCOM_EvtWrite
USBCOM [INFOR] :Write: 0x6
USBCOM [INFOR] :pUSBCOM_context->Size: 0x6
USBCOM [INFOR] :pUSBCOM_context->Buffer: "Hello
RS232COM [TRACE] :Queue.c : RS232COM_EvtWriteCompletionRoutine
KDTARGET: Refreshing KD connection
!analyze -v
*******************************************************************************
* *
* Bugcheck Analysis *
* *
*******************************************************************************
WDF_VIOLATION (10d)
The Kernel-Mode Driver Framework was notified that Windows detected an error
in a framework-based driver. In general, the dump file will yield additional
information about the driver that caused this bug check.
Arguments:
Arg1: 0000000000000003, Windows Driver Framework Verifier has encountered a fatal error.
In particular, an I/O request has been completed, but a framework
request object cannot be deleted because there are outstanding
references to the input buffer or the output buffer, or both. The
driver’s IFR will include details on the outstanding references.
Arg2: 00001fffaed68408, WDFREQUEST handle
Arg3: 0000000000000001, The number of outstanding references remaining on both buffers.
Arg4: ffffe0005103c660, Reserved.
Debugging Details:
“KERNEL32.DLL” was not found in the image list.
Debugger will attempt to load “KERNEL32.DLL” at given base 00000000`00000000.
Please provide the full image name, including the extension (i.e. kernel32.dll)
for more reliable results.Base address and size overrides can be given as
.reload <image.ext>=,.
Unable to add module at 0000000000000000<br><br>BUGCHECK_STR: 0x10D_3<br><br>DEFAULT_BUCKET_ID: WIN8_DRIVER_FAULT<br><br>PROCESS_NAME: DeviceExerciso<br><br>CURRENT_IRQL: 0<br><br>ANALYSIS_VERSION: 6.3.9600.17237 (debuggers(dbg).140716-0327) amd64fre<br><br>LAST_CONTROL_TRANSFER: from fffff8027f3e1a46 to fffff8027f35eb90<br><br>STACK_TEXT: <br>ffffd001
d72a4358 fffff8027f3e1a46 : 00000000
00000000 0000000000000000 ffffd001
d72a44c0 fffff8027f24e8cc : nt!DbgBreakPointWithStatus<br>ffffd001
d72a4360 fffff8027f3e1357 : 00000000
00000003 0000000000000003 fffff802
7f365f80 000000000000010d : nt!KiBugCheckDebugBreak+0x12<br>ffffd001
d72a43c0 fffff8027f3580a4 : 00001fff
aed68408 ffffd001d72a4bc0 ffff2610
7d980014 ffffd001d72a4b78 : nt!KeBugCheck2+0x8ab<br>ffffd001
d72a4ad0 fffff801d86c7caa : 00000000
0000010d 0000000000000003 00001fff
aed68408 0000000000000001 : nt!KeBugCheckEx+0x104<br>ffffd001
d72a4b10 fffff801d868f4b7 : ffffe000
51297bf0 0000000000000000 00000000
00000004 ffffe0005103c660 : Wdf01000!FxVerifierBugCheck+0x1e<br>ffffd001
d72a4b50 fffff801d865900d : ffffe000
5103c660 fffff80100000000 00001fff
00000001 0000000000000000 : Wdf01000!FxRequest::CompleteInternal+0x3bdf7<br>ffffd001
d72a4c10 fffff801da7a0549 : ffffe000
4f4bf910 ffffe00051297bf0 00000000
00000000 ffffe0004f4ff020 : Wdf01000!imp_WdfRequestCompleteWithInformation+0x9d<br>ffffd001
d72a4c70 fffff801da7a0356 : 00001fff
aed68408 fffff80100000000 00000000
00000006 00001fffaed68408 : COMTester!WdfRequestCompleteWithInformation+0x49 [c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.9\wdfrequest.h @ 1038]<br>ffffd001
d72a4cb0 fffff801d86594d9 : 00001fff
b0b406e8 00001fffb0b00fd8 ffffe000
51413c48 00001fffaed68408 : COMTester!RS232COM_EvtWriteCompletionRoutine+0x76 [c:\users\admin\desktop\com_tester\comtester\queue.c @ 101]<br>ffffd001
d72a4d00 fffff801d8659c51 : ffffd001
d72a5c50 ffffd001d72a5c48 0000e000
4f76cad0 00001f80012addfb : Wdf01000!FxRequestBase::CompleteSubmitted+0x496<br>ffffd001
d72a4df0 fffff8027f304efd : ffffe000
510544b0 0000000000000000 00000000
00000000 0000000000000000 : Wdf01000!FxIoTarget::_RequestCompletionRoutine+0x162<br>ffffd001
d72a4e70 fffff8027f2a3378 : ffffe000
4fff0330 ffffd001d72a4f49 00000000
00000000 ffffe0004fff044b : nt!IopUnloadSafeCompletion+0x49<br>ffffd001
d72a4ea0 fffff801d86538fc : 5f4d4f43
42535570 0000000000000000 00000000
00000004 ffffe0005054e420 : nt!IopfCompleteRequest+0x588<br>ffffd001
d72a4fb0 fffff801d865900d : 00001fff
afaa87c8 fffff80200000000 ffffe000
00000001 ffffe0004f433500 : Wdf01000!FxRequest::CompleteInternal+0x23c<br>ffffd001
d72a5070 fffff801d9dea1e9 : ffffe000
505579f0 ffffe00050f54020 00001fff
afaa87c8 ffffe0004f4335d6 : Wdf01000!imp_WdfRequestCompleteWithInformation+0x9d<br>ffffd001
d72a50d0 fffff801d9dea157 : 00001fff
af0abfd8 ffffe00000000000 00000000
00000006 0000000000000003 : USBTester!WdfRequestCompleteWithInformation+0x49 [c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.9\wdfrequest.h @ 1038]<br>ffffd001
d72a5110 fffff801d86e19a2 : 00001fff
afaa87c8 00001fffaf0abfd8 00000000
00000006 ffffe0004feaf500 : USBTester!USBCOM_EvtWrite+0x167 [c:\users\admin\desktop\usbtester\usbtester\queue.c @ 97]<br>ffffd001
d72a5170 fffff801d869a002 : 00000000
00000000 ffffe00050f54020 ffffe000
50557830 00001fffaf0abfd8 : Wdf01000!FxIoQueueIoRead::Invoke+0x4a<br>ffffd001
d72a51a0 fffff801d8654123 : ffffe000
50557830 ffffd001d72a52c9 ffffe000
5054e420 0000000000000001 : Wdf01000!FxIoQueue::DispatchRequestToDriver+0x457f2<br>ffffd001
d72a5270 fffff801d8660279 : ffffe000
50557830 ffffe00050f54000 00000000
00000000 0000000000000001 : Wdf01000!FxIoQueue::DispatchEvents+0x363<br>ffffd001
d72a5330 fffff801d8658d93 : 00001fff
00000600 ffffe00050f54020 ffffe000
4fff0330 ffffe0004fff0330 : Wdf01000!FxIoQueue::QueueRequest+0x8d<br>ffffd001
d72a53a0 fffff801d865a056 : 00001fff
b0b026d8 0000000000000000 ffffe000
505507c0 00001fffaed68408 : Wdf01000!FxDevice::DispatchWithLock+0xb51<br>ffffd001
d72a5480 fffff801da7a070a : ffffe000
5103c800 ffffe0004f4bf910 ffffe000
4f4ff020 0000000000000000 : Wdf01000!imp_WdfRequestSend+0x156<br>ffffd001
d72a54e0 fffff801da7a02a0 : 00001fff
b0b406e8 00001fffb0b00fd8 00000000
00000000 0000000000000000 : COMTester!WdfRequestSend+0x4a [c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.9\wdfrequest.h @ 661]<br>ffffd001
d72a5520 fffff801d86e19a2 : 00001fff
b0b026d8 00001fffaed68408 00000000
00000006 ffffe0004f4fa900 : COMTester!RS232COM_EvtWrite+0x130 [c:\users\admin\desktop\com_tester\comtester\queue.c @ 149]<br>ffffd001
d72a5590 fffff801d869a002 : 00000000
00000000 ffffe00051297bf0 ffffe000
4f4fd920 00001fffaed68408 : Wdf01000!FxIoQueueIoRead::Invoke+0x4a<br>ffffd001
d72a55c0 fffff801d8654123 : ffffe000
4f4fd920 ffffd001d72a56e9 ffffe000
5103c660 0000000000000001 : Wdf01000!FxIoQueue::DispatchRequestToDriver+0x457f2<br>ffffd001
d72a5690 fffff801d8660279 : ffffe000
4f4fd920 ffffe00051297b00 00000000
00000000 fffff6fb7dbf0048 : Wdf01000!FxIoQueue::DispatchEvents+0x363<br>ffffd001
d72a5750 fffff801d8658d93 : 00000000
00000700 ffffe00051297bf0 ffffe000
4f4a05c0 ffffe0004f4a05c0 : Wdf01000!FxIoQueue::QueueRequest+0x8d<br>ffffd001
d72a57c0 fffff8027f6098ec : 00000000
00000000 ffffd001d72a5900 ffffe000
5124f950 ffffe0004f4fa900 : Wdf01000!FxDevice::DispatchWithLock+0xb51<br>ffffd001
d72a58a0 fffff8027f609298 : ffffe000
51031705 ffffd001d72a5b80 00000000
00000000 ffffe000510317e0 : nt!IopSynchronousServiceTail+0x16c<br>ffffd001
d72a5970 fffff8027f3637b3 : ffffe000
4f4fad01 0000000000000000 00000000
00000000 0000000000000000 : nt!NtWriteFile+0x750<br>ffffd001
d72a5a90 0000000076e22772 : 00000000
76e2241f 0000002376edd1dc 00000000
00000023 0000000000000000 : nt!KiSystemServiceCopyEnd+0x13<br>00000000
00c0ec48 0000000076e2241f : 00000023
76edd1dc 0000000000000023 00000000
00000000 0000000000d0ff18 : wow64cpu!CpupSyscallStub+0x2<br>00000000
00c0ec50 0000000076de323a : 00000000
00000000 0000000076e21503 00000000
00000000 0000000076de3420 : wow64cpu!ReadWriteFileFault+0x31<br>00000000
00c0ed00 0000000076de317e : 00000000
00000000 0000000000000000 00000000
00c0fd30 0000000000c0f670 : wow64!RunCpuSimulation+0xa<br>00000000
00c0ed50 00007fff3f02f15b : 00000000
008400f8 0000000000000000 00000000
00000010 000000007ee1c000 : wow64!Wow64LdrpInitialize+0x172<br>00000000
00c0f290 00007fff3f01a188 : 00007fff
3ef60000 0000000000000000 00000000
00000000 000000007ee1c000 : ntdll!LdrpInitializeProcess+0x157b<br>00000000
00c0f5b0 00007fff3efb6a5a : 00000000
00c0f670 0000000000000000 00000000
00000000 000000007ee1c000 : ntdll!_LdrpInitialize+0x636dc<br>00000000
00c0f620 0000000000000000 : 00000000
00000000 0000000000000000 00000000
00000000 0000000000000000 : ntdll!LdrInitializeThunk+0xe<br><br>STACK_COMMAND: kb<br><br>FOLLOWUP_IP: <br>COMTester!WdfRequestCompleteWithInformation+49 [c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.9\wdfrequest.h @ 1038]<br>fffff801
da7a0549 4883c438 add rsp,38h
FAULTING_SOURCE_LINE: c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.9\wdfrequest.h
FAULTING_SOURCE_FILE: c:\program files (x86)\windows kits\8.1\include\wdf\kmdf\1.9\wdfrequest.h
FAULTING_SOURCE_LINE_NUMBER: 1038
FAULTING_SOURCE_CODE:
1034: ULONG_PTR Information
1035: )
1036: {
1037: ((PFN_WDFREQUESTCOMPLETEWITHINFORMATION) WdfFunctions[WdfRequestCompleteWithInformationTableIndex])(WdfDriverGlobals, Request, Status, Information);
> 1038: }
1039:
1040: //
1041: // WDF Function: WdfRequestGetParameters
1042: //
1043: typedef
SYMBOL_STACK_INDEX: 7
SYMBOL_NAME: COMTester!WdfRequestCompleteWithInformation+49
FOLLOWUP_NAME: MachineOwner
MODULE_NAME: COMTester
IMAGE_NAME: COMTester.sys
DEBUG_FLR_IMAGE_TIMESTAMP: 54248b9b
BUCKET_ID_FUNC_OFFSET: 49
FAILURE_BUCKET_ID: 0x10D_3_COMTester!WdfRequestCompleteWithInformation
BUCKET_ID: 0x10D_3_COMTester!WdfRequestCompleteWithInformation
ANALYSIS_SOURCE: KM
FAILURE_ID_HASH_STRING: km:0x10d_3_comtester!wdfrequestcompletewithinformation
FAILURE_ID_HASH: {452dcbe5-72c3-1c99-1bfb-96f9b8c0d6f0}
Followup: MachineOwner
---------
kd> !wdfkd.wdflogdump COMTester
Trace searchpath is:
Trace format prefix is: %7!u!: %!FUNC! -
Trying to extract TMF information from - C:\ProgramData\dbg\sym\Wdf01000.pdb\910864B4254D480C94ABAE23F3EBE0662\Wdf01000.pdb
Log at 0xffffe000510f8000
Gather log: Please wait, this may take a moment (reading 4024 bytes).
% read so far … 10, 20, 30, 100
There are 30 log entries
— start of log —
1: FxIFRStart - FxIFR logging started
2: FxPkgPnp::PnpEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering PnP State WdfDevStatePnpInit from WdfDevStatePnpObjectCreated
3: FxIoTargetRemote::OpenTargetHandle - ZwCreateFile for WDFIOTARGET 00001FFFB0B00FD8 returned status STATUS_SUCCESS, info 0x0
4: FxPkgPnp::Dispatch - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0, IRP_MJ_PNP, 0x00000000(IRP_MN_START_DEVICE) IRP 0xFFFFE000510454E0
5: FxPkgPnp::PnpEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering PnP State WdfDevStatePnpInitStarting from WdfDevStatePnpInit
6: FxPkgPnp::PnpEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering PnP State WdfDevStatePnpHardwareAvailable from WdfDevStatePnpInitStarting
7: FxPkgPnp::PowerPolicyEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power policy state WdfDevStatePwrPolStarting from WdfDevStatePwrPolObjectCreated
8: FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power idle state FxIdleStarted from FxIdleStopped
9: FxPkgPnp::PowerEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering Power State WdfDevStatePowerStartingCheckDeviceType from WdfDevStatePowerObjectCreated
10: FxPkgPnp::PowerEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering Power State WdfDevStatePowerD0Starting from WdfDevStatePowerStartingCheckDeviceType
11: FxPkgPnp::PowerEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering Power State WdfDevStatePowerD0StartingConnectInterrupt from WdfDevStatePowerD0Starting
12: FxPkgPnp::PowerEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering Power State WdfDevStatePowerD0StartingDmaEnable from WdfDevStatePowerD0StartingConnectInterrupt
13: FxPkgPnp::PowerEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering Power State WdfDevStatePowerD0StartingStartSelfManagedIo from WdfDevStatePowerD0StartingDmaEnable
14: FxPkgIo::ResumeProcessingForPower - Power resume all queues of WDFDEVICE 0x00001FFFAEDB06A8
15: FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power idle state FxIdleStartedPowerUp from FxIdleStarted
16: FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power idle state FxIdleDisabled from FxIdleStartedPowerUp
17: FxPkgPnp::PowerEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering Power State WdfDevStatePowerDecideD0State from WdfDevStatePowerD0StartingStartSelfManagedIo
18: FxPkgPnp::PowerEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering Power State WdfDevStatePowerD0 from WdfDevStatePowerDecideD0State
19: FxPkgPnp::PowerPolicyEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power policy state WdfDevStatePwrPolStartingPoweredUp from WdfDevStatePwrPolStarting
20: FxPkgPnp::PowerPolicyEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power policy state WdfDevStatePwrPolStartingSucceeded from WdfDevStatePwrPolStartingPoweredUp
21: FxPkgPnp::PowerPolicyEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power policy state WdfDevStatePwrPolStartingDecideS0Wake from WdfDevStatePwrPolStartingSucceeded
22: FxPkgPnp::PowerPolicyEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power policy state WdfDevStatePwrPolStarted from WdfDevStatePwrPolStartingDecideS0Wake
23: FxPowerIdleMachine::ProcessEventLocked - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering power idle state FxIdleDisabled from FxIdleDisabled
24: FxPkgPnp::PnpEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering PnP State WdfDevStatePnpEnableInterfaces from WdfDevStatePnpHardwareAvailable
25: FxPkgPnp::PnpEnterNewState - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 entering PnP State WdfDevStatePnpStarted from WdfDevStatePnpEnableInterfaces
26: FxPkgPnp::Dispatch - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0, IRP_MJ_PNP, 0x00000014(IRP_MN_QUERY_PNP_DEVICE_STATE) IRP 0xFFFFE0005126FC60
27: FxPkgFdo::HandleQueryPnpDeviceStateCompletion - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0 returning PNP_DEVICE_STATE 0x0 IRP 0xFFFFE0005126FC60
28: FxPkgPnp::Dispatch - WDFDEVICE 0x00001FFFAEDB06A8 !devobj 0xFFFFE000510544B0, IRP_MJ_PNP, 0x00000007(IRP_MN_QUERY_DEVICE_RELATIONS) type BusRelations IRP 0xFFFFE0005126FC60
29: FxRequest::CompleteInternal - WDFREQUEST 0x00001FFFAED68408, PIRP 0xFFFFE0004F4A05C0, Major Function 0x4, completed with outstanding references on WDFMEMORY 0x00001FFFAED68331 or 0x0000000000000000 retrieved from this request
30: FxRequest::CompleteInternal - WDFMEMORY 0x00001FFFAED68331, buffer FFFFE0004F4CE040, PMDL 0000000000000000, length 6 bytes
---- end of log ----</image.ext>