- Fix a bug in CSR Capture APIs - Fix bugs in kernel32 console APIs. - These changes fix vim and fix bug 796 as I promised. Modified: trunk/reactos/lib/kernel32/misc/console.c Modified: trunk/reactos/lib/ntdll/csr/capture.c Modified: trunk/reactos/lib/ntdll/csr/connect.c _____
Modified: trunk/reactos/lib/kernel32/misc/console.c --- trunk/reactos/lib/kernel32/misc/console.c 2005-09-26 05:41:35 UTC (rev 18081) +++ trunk/reactos/lib/kernel32/misc/console.c 2005-09-26 07:43:55 UTC (rev 18082) @@ -1548,7 +1548,6 @@
CSR_API_MESSAGE Request; ULONG CsrRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; NTSTATUS Status; - PVOID BufferTargetBase; ULONG Size;
if(lpBuffer == NULL) @@ -1560,38 +1559,38 @@ Size = nLength * sizeof(INPUT_RECORD);
/* Allocate a Capture Buffer */ - DPRINT1("IntPeekConsoleInput: %lx %p\n", Size, lpNumberOfEventsRead); + DPRINT("IntPeekConsoleInput: %lx %p\n", Size, lpNumberOfEventsRead); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size);
/* Allocate space in the Buffer */ - CsrCaptureMessageBuffer(CaptureBuffer, NULL, Size, &BufferTargetBase); - DPRINT1("Allocated message buffer: %p %p\n", CaptureBuffer, BufferTargetBase); + CsrCaptureMessageBuffer(CaptureBuffer, + NULL, + Size, + (PVOID*)&Request.Data.PeekConsoleInputRequest.InputRecord);
/* Set up the data to send to the Console Server */ CsrRequest = MAKE_CSR_API(PEEK_CONSOLE_INPUT, CSR_CONSOLE); Request.Data.PeekConsoleInputRequest.ConsoleHandle = hConsoleInput; Request.Data.PeekConsoleInputRequest.Unicode = bUnicode; Request.Data.PeekConsoleInputRequest.Length = nLength; - Request.Data.PeekConsoleInputRequest.InputRecord = (INPUT_RECORD*)BufferTargetBase;
/* Call the server */ - DPRINT1("Calling Server\n"); Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); - DPRINT1("Server returned: %x\n", Request.Status); + DPRINT("Server returned: %x\n", Request.Status);
/* Check for success*/ if (NT_SUCCESS(Request.Status)) { /* Return the number of events read */ - DPRINT1("Events read: %lx\n", Request.Data.PeekConsoleInputRequest.Length); + DPRINT("Events read: %lx\n", Request.Data.PeekConsoleInputRequest.Length); *lpNumberOfEventsRead = Request.Data.PeekConsoleInputRequest.Length;
/* Copy into the buffer */ - DPRINT1("Copying to buffer\n"); - RtlCopyMemory(lpBuffer, + DPRINT("Copying to buffer\n"); + RtlCopyMemory(lpBuffer, Request.Data.PeekConsoleInputRequest.InputRecord, sizeof(INPUT_RECORD) * *lpNumberOfEventsRead); } @@ -1603,7 +1602,6 @@ }
/* Release the capture buffer */ - DPRINT1("Release buffer and return\n"); CsrFreeCaptureBuffer(CaptureBuffer);
/* Return TRUE or FALSE */ @@ -1767,7 +1765,6 @@ { CSR_API_MESSAGE Request; ULONG CsrRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; - PVOID BufferTargetBase; NTSTATUS Status; DWORD Size;
@@ -1780,37 +1777,37 @@ Size = nLength * sizeof(INPUT_RECORD);
/* Allocate a Capture Buffer */ - DPRINT1("IntWriteConsoleInput: %lx %p\n", Size, lpNumberOfEventsWritten); + DPRINT("IntWriteConsoleInput: %lx %p\n", Size, lpNumberOfEventsWritten); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size);
/* Allocate space in the Buffer */ - CsrCaptureMessageBuffer(CaptureBuffer, NULL, Size, &BufferTargetBase); - DPRINT1("Allocated message buffer: %p %p\n", CaptureBuffer, BufferTargetBase); + CsrCaptureMessageBuffer(CaptureBuffer, + NULL, + Size, + (PVOID*)&Request.Data.WriteConsoleInputRequest.InputRecord);
/* Set up the data to send to the Console Server */ CsrRequest = MAKE_CSR_API(WRITE_CONSOLE_INPUT, CSR_CONSOLE); Request.Data.WriteConsoleInputRequest.ConsoleHandle = hConsoleInput; Request.Data.WriteConsoleInputRequest.Unicode = bUnicode; Request.Data.WriteConsoleInputRequest.Length = nLength; - Request.Data.WriteConsoleInputRequest.InputRecord = (PINPUT_RECORD)BufferTargetBase;
/* Call the server */ - DPRINT1("Calling Server\n"); Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); - DPRINT1("Server returned: %x\n", Request.Status); + DPRINT("Server returned: %x\n", Request.Status);
/* Check for success*/ if (NT_SUCCESS(Request.Status)) { /* Return the number of events read */ - DPRINT1("Events read: %lx\n", Request.Data.WriteConsoleInputRequest.Length); + DPRINT("Events read: %lx\n", Request.Data.WriteConsoleInputRequest.Length); *lpNumberOfEventsWritten = Request.Data.WriteConsoleInputRequest.Length;
/* Copy into the buffer */ - DPRINT1("Copying to buffer\n"); + DPRINT("Copying to buffer\n"); RtlCopyMemory(lpBuffer, Request.Data.WriteConsoleInputRequest.InputRecord, sizeof(INPUT_RECORD) * *lpNumberOfEventsWritten); @@ -1823,7 +1820,6 @@ }
/* Release the capture buffer */ - DPRINT1("Release buffer and return\n"); CsrFreeCaptureBuffer(CaptureBuffer);
/* Return TRUE or FALSE */ @@ -1885,7 +1881,6 @@ { CSR_API_MESSAGE Request; ULONG CsrRequest; PCSR_CAPTURE_BUFFER CaptureBuffer; - PVOID BufferTargetBase; NTSTATUS Status; DWORD Size, SizeX, SizeY;
@@ -1898,12 +1893,14 @@ Size = dwBufferSize.X * dwBufferSize.Y * sizeof(CHAR_INFO);
/* Allocate a Capture Buffer */ - DPRINT1("IntReadConsoleOutput: %lx %p\n", Size, lpReadRegion); + DPRINT("IntReadConsoleOutput: %lx %p\n", Size, lpReadRegion); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size);
/* Allocate space in the Buffer */ - CsrCaptureMessageBuffer(CaptureBuffer, NULL, Size, &BufferTargetBase); - DPRINT1("Allocated message buffer: %p %p\n", CaptureBuffer, BufferTargetBase); + CsrCaptureMessageBuffer(CaptureBuffer, + NULL, + Size, + (PVOID*)&Request.Data.ReadConsoleOutputRequest.CharInfo);
/* Set up the data to send to the Console Server */ CsrRequest = MAKE_CSR_API(READ_CONSOLE_OUTPUT, CSR_CONSOLE); @@ -1912,21 +1909,19 @@ Request.Data.ReadConsoleOutputRequest.BufferSize = dwBufferSize; Request.Data.ReadConsoleOutputRequest.BufferCoord = dwBufferCoord; Request.Data.ReadConsoleOutputRequest.ReadRegion = *lpReadRegion; - Request.Data.ReadConsoleOutputRequest.CharInfo = (PCHAR_INFO)BufferTargetBase;
/* Call the server */ - DPRINT1("Calling Server\n"); Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); - DPRINT1("Server returned: %x\n", Request.Status); + DPRINT("Server returned: %x\n", Request.Status);
/* Check for success*/ if (NT_SUCCESS(Request.Status)) { /* Copy into the buffer */ - DPRINT1("Copying to buffer\n"); + DPRINT("Copying to buffer\n"); SizeX = Request.Data.ReadConsoleOutputRequest.ReadRegion.Right - Request.Data.ReadConsoleOutputRequest.ReadRegion.Left + 1; SizeY = Request.Data.ReadConsoleOutputRequest.ReadRegion.Bottom - @@ -1942,11 +1937,10 @@ }
/* Return the read region */ - DPRINT1("read region: %lx\n", Request.Data.ReadConsoleOutputRequest.ReadRegion); + DPRINT("read region: %lx\n", Request.Data.ReadConsoleOutputRequest.ReadRegion); *lpReadRegion = Request.Data.ReadConsoleOutputRequest.ReadRegion;
/* Release the capture buffer */ - DPRINT1("Release buffer and return\n"); CsrFreeCaptureBuffer(CaptureBuffer);
/* Return TRUE or FALSE */ @@ -2010,15 +2004,16 @@ Size = dwBufferSize.Y * dwBufferSize.X * sizeof(CHAR_INFO);
/* Allocate a Capture Buffer */ - DPRINT1("IntWriteConsoleOutput: %lx %p\n", Size, lpWriteRegion); + DPRINT("IntWriteConsoleOutput: %lx %p\n", Size, lpWriteRegion); CaptureBuffer = CsrAllocateCaptureBuffer(1, Size);
/* Allocate space in the Buffer */ - CsrCaptureMessageBuffer(CaptureBuffer, NULL, Size, &BufferTargetBase); - DPRINT1("Allocated message buffer: %p %p\n", CaptureBuffer, BufferTargetBase); + CsrCaptureMessageBuffer(CaptureBuffer, + NULL, + Size, + (PVOID*)&Request.Data.WriteConsoleOutputRequest.CharInfo);
/* Copy from the buffer */ - DPRINT1("Copying into buffer\n"); RtlCopyMemory(BufferTargetBase, lpBuffer, Size);
/* Set up the data to send to the Console Server */ @@ -2028,15 +2023,13 @@ Request.Data.WriteConsoleOutputRequest.BufferSize = dwBufferSize; Request.Data.WriteConsoleOutputRequest.BufferCoord = dwBufferCoord; Request.Data.WriteConsoleOutputRequest.WriteRegion = *lpWriteRegion; - Request.Data.WriteConsoleOutputRequest.CharInfo = (CHAR_INFO*)BufferTargetBase;
/* Call the server */ - DPRINT1("Calling Server\n"); Status = CsrClientCallServer(&Request, CaptureBuffer, CsrRequest, sizeof(CSR_API_MESSAGE)); - DPRINT1("Server returned: %x\n", Request.Status); + DPRINT("Server returned: %x\n", Request.Status);
/* Check for success*/ if (!NT_SUCCESS(Request.Status)) @@ -2046,11 +2039,10 @@ }
/* Return the read region */ - DPRINT1("read region: %lx\n", Request.Data.WriteConsoleOutputRequest.WriteRegion); + DPRINT("read region: %lx\n", Request.Data.WriteConsoleOutputRequest.WriteRegion); *lpWriteRegion = Request.Data.WriteConsoleOutputRequest.WriteRegion;
/* Release the capture buffer */ - DPRINT1("Release buffer and return\n"); CsrFreeCaptureBuffer(CaptureBuffer);
/* Return TRUE or FALSE */ _____
Modified: trunk/reactos/lib/ntdll/csr/capture.c --- trunk/reactos/lib/ntdll/csr/capture.c 2005-09-26 05:41:35 UTC (rev 18081) +++ trunk/reactos/lib/ntdll/csr/capture.c 2005-09-26 07:43:55 UTC (rev 18082) @@ -142,12 +142,12 @@
CaptureBuffer->BufferEnd += MessageLength; }
+ /* Write down this pointer in the array */ + CaptureBuffer->PointerArray[CaptureBuffer->PointerCount] = (ULONG_PTR)CaptureData; + /* Increase the pointer count */ CaptureBuffer->PointerCount++;
- /* Write down this pointer in the array */ - CaptureBuffer->PointerArray[CaptureBuffer->PointerCount] = (ULONG_PTR)CaptureData; - /* Return the aligned length */ return MessageLength; } _____
Modified: trunk/reactos/lib/ntdll/csr/connect.c --- trunk/reactos/lib/ntdll/csr/connect.c 2005-09-26 05:41:35 UTC (rev 18081) +++ trunk/reactos/lib/ntdll/csr/connect.c 2005-09-26 07:43:55 UTC (rev 18082) @@ -57,7 +57,7 @@
PULONG_PTR Pointers; ULONG_PTR CurrentPointer; DPRINT("CsrClientCallServer\n"); - + /* Fill out the Port Message Header */ ApiMessage->Header.u1.s1.DataLength = RequestLength - sizeof(PORT_MESSAGE); ApiMessage->Header.u1.s1.TotalLength = RequestLength; @@ -79,7 +79,6 @@ if (CaptureBuffer) { /* We have to convert from our local view to the remote view */ - DPRINT1("Converting CaptureBuffer\n"); ApiMessage->CsrCaptureData = (PVOID)((ULONG_PTR)CaptureBuffer + CsrPortMemoryDelta);
@@ -91,14 +90,19 @@ Pointers = CaptureBuffer->PointerArray;
/* Loop through every pointer and convert it */ + DPRINT("PointerCount: %lx\n", PointerCount); while (PointerCount--) { /* Get this pointer and check if it's valid */ + DPRINT("Array Address: %p. This pointer: %p. Data: %p\n", + &Pointers, Pointers, *Pointers); if ((CurrentPointer = *Pointers++)) { /* Update it */ + DPRINT("CurrentPointer: %p.\n", *(PULONG_PTR)CurrentPointer); *(PULONG_PTR)CurrentPointer += CsrPortMemoryDelta; Pointers[-1] = CurrentPointer - (ULONG_PTR)ApiMessage; + DPRINT("CurrentPointer: %p.\n", *(PULONG_PTR)CurrentPointer); } } } @@ -112,7 +116,7 @@ if (CaptureBuffer) { /* We have to convert from the remote view to our remote view */ - DPRINT1("Reconverting CaptureBuffer\n"); + DPRINT("Reconverting CaptureBuffer\n"); ApiMessage->CsrCaptureData = (PVOID)((ULONG_PTR)
ApiMessage->CsrCaptureData - CsrPortMemoryDelta);