+WriteConsoleOutputCharactersW(LPCWSTR lpCharacter,
+ ULONG nLength,
+ COORD dwWriteCoord)
+{
+ IO_STATUS_BLOCK IoStatusBlock;
+ PCHAR Buffer;
+ COORD *pCoord;
+ PCHAR pText;
+ NTSTATUS Status;
+ ULONG i;
+
+ Buffer = RtlAllocateHeap(ProcessHeap,
+ 0,
+ nLength + sizeof(COORD));
+ pCoord = (COORD *)Buffer;
+ pText = (PCHAR)(pCoord + 1);
+
+ *pCoord = dwWriteCoord;
+
+ /* FIXME: use real unicode->oem conversion */
+ for (i = 0; i < nLength; i++)
+ pText[i] = (CHAR)lpCharacter[i];
+ pText[i] = 0;
+
+ Status = NtDeviceIoControlFile(StdOutput,
+ NULL,
+ NULL,
+ NULL,
+ &IoStatusBlock,
+ IOCTL_CONSOLE_WRITE_OUTPUT_CHARACTER,
+ NULL,
+ 0,
+ Buffer,
+ nLength + sizeof(COORD));
+ if (Status == STATUS_PENDING)
+ {
+ NtWaitForSingleObject(StdOutput,
+ FALSE,
+ NULL);
+ Status = IoStatusBlock.Status;
+ }
+
+ RtlFreeHeap(ProcessHeap,
+ 0,
+ Buffer);
+
+ return(Status);
+}
+
+
+NTSTATUS