2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: dll/win32/kernel32/client/console/console.c
5 * PURPOSE: Win32 server console functions
6 * PROGRAMMERS: David Welch (welch@cwcom.net) (welch@mcmail.com)
7 * Christoph von Wittich (christoph_vw@reactos.org)
8 * Johannes Anderwald (janderwald@reactos.org)
11 /* INCLUDES *******************************************************************/
18 /* FUNCTIONS ******************************************************************/
25 AddConsoleAliasW(LPCWSTR lpSource
,
29 PCSR_API_MESSAGE Request
;
32 ULONG TargetLength
= 0;
38 DPRINT("AddConsoleAliasW enterd with lpSource %S lpTarget %S lpExeName %S\n", lpSource
, lpTarget
, lpExeName
);
40 ExeLength
= wcslen(lpExeName
) + 1;
41 SourceLength
= wcslen(lpSource
)+ 1;
43 TargetLength
= wcslen(lpTarget
) + 1;
45 Size
= (ExeLength
+ SourceLength
+ TargetLength
) * sizeof(WCHAR
);
46 RequestLength
= sizeof(CSR_API_MESSAGE
) + Size
;
48 Request
= RtlAllocateHeap(GetProcessHeap(), HEAP_ZERO_MEMORY
, RequestLength
);
49 Ptr
= (WCHAR
*)(((ULONG_PTR
)Request
) + sizeof(CSR_API_MESSAGE
));
51 wcscpy(Ptr
, lpSource
);
52 Request
->Data
.AddConsoleAlias
.SourceLength
= SourceLength
;
53 Ptr
= (WCHAR
*)(((ULONG_PTR
)Request
) + sizeof(CSR_API_MESSAGE
) + SourceLength
* sizeof(WCHAR
));
55 wcscpy(Ptr
, lpExeName
);
56 Request
->Data
.AddConsoleAlias
.ExeLength
= ExeLength
;
57 Ptr
= (WCHAR
*)(((ULONG_PTR
)Request
) + sizeof(CSR_API_MESSAGE
) + (ExeLength
+ SourceLength
)* sizeof(WCHAR
));
59 if (lpTarget
) /* target can be optional */
60 wcscpy(Ptr
, lpTarget
);
62 Request
->Data
.AddConsoleAlias
.TargetLength
= TargetLength
;
64 Status
= CsrClientCallServer(Request
,
66 CSR_CREATE_API_NUMBER(CSR_CONSOLE
, ADD_CONSOLE_ALIAS
),
69 if (!NT_SUCCESS(Status
) || !NT_SUCCESS(Status
= Request
->Status
))
71 BaseSetLastNTError(Status
);
72 RtlFreeHeap(GetProcessHeap(), 0, Request
);
76 RtlFreeHeap(GetProcessHeap(), 0, Request
);
86 AddConsoleAliasA(LPCSTR lpSource
,
90 LPWSTR lpSourceW
= NULL
;
91 LPWSTR lpTargetW
= NULL
;
92 LPWSTR lpExeNameW
= NULL
;
96 BasepAnsiStringToHeapUnicodeString(lpSource
, (LPWSTR
*) &lpSourceW
);
98 BasepAnsiStringToHeapUnicodeString(lpTarget
, (LPWSTR
*) &lpTargetW
);
100 BasepAnsiStringToHeapUnicodeString(lpExeName
, (LPWSTR
*) &lpExeNameW
);
102 bRetVal
= AddConsoleAliasW(lpSourceW
, lpTargetW
, lpExeNameW
);
106 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) lpSourceW
);
108 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) lpTargetW
);
110 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) lpExeNameW
);
121 GetConsoleAliasW(LPWSTR lpSource
,
122 LPWSTR lpTargetBuffer
,
123 DWORD TargetBufferLength
,
126 PCSR_API_MESSAGE Request
;
127 PCSR_CAPTURE_BUFFER CaptureBuffer
;
135 DPRINT("GetConsoleAliasW entered lpSource %S lpExeName %S\n", lpSource
, lpExeName
);
137 if (lpTargetBuffer
== NULL
)
139 SetLastError(ERROR_INVALID_PARAMETER
);
143 ExeLength
= wcslen(lpExeName
) + 1;
144 SourceLength
= wcslen(lpSource
) + 1;
146 Size
= (ExeLength
+ SourceLength
) * sizeof(WCHAR
);
148 RequestLength
= Size
+ sizeof(CSR_API_MESSAGE
);
149 Request
= RtlAllocateHeap(GetProcessHeap(), 0, RequestLength
);
152 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
156 CaptureBuffer
= CsrAllocateCaptureBuffer(1, TargetBufferLength
);
159 DPRINT1("CsrAllocateCaptureBuffer failed!\n");
160 RtlFreeHeap(GetProcessHeap(), 0, Request
);
161 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
165 Request
->Data
.GetConsoleAlias
.TargetBuffer
= NULL
;
167 CsrCaptureMessageBuffer(CaptureBuffer
,
170 (PVOID
*)&Request
->Data
.GetConsoleAlias
.TargetBuffer
);
172 Request
->Data
.GetConsoleAlias
.TargetBufferLength
= TargetBufferLength
;
174 Ptr
= (LPWSTR
)((ULONG_PTR
)Request
+ sizeof(CSR_API_MESSAGE
));
175 wcscpy(Ptr
, lpSource
);
177 wcscpy(Ptr
, lpExeName
);
179 Request
->Data
.GetConsoleAlias
.ExeLength
= ExeLength
;
180 Request
->Data
.GetConsoleAlias
.SourceLength
= SourceLength
;
182 Status
= CsrClientCallServer(Request
,
184 CSR_CREATE_API_NUMBER(CSR_CONSOLE
, GET_CONSOLE_ALIAS
),
185 sizeof(CSR_API_MESSAGE
) + Size
);
187 if (!NT_SUCCESS(Status
) || !NT_SUCCESS(Status
= Request
->Status
))
189 RtlFreeHeap(GetProcessHeap(), 0, Request
);
190 CsrFreeCaptureBuffer(CaptureBuffer
);
191 BaseSetLastNTError(Status
);
195 wcscpy(lpTargetBuffer
, Request
->Data
.GetConsoleAlias
.TargetBuffer
);
196 RtlFreeHeap(GetProcessHeap(), 0, Request
);
197 CsrFreeCaptureBuffer(CaptureBuffer
);
199 return Request
->Data
.GetConsoleAlias
.BytesWritten
;
208 GetConsoleAliasA(LPSTR lpSource
,
209 LPSTR lpTargetBuffer
,
210 DWORD TargetBufferLength
,
215 LPWSTR lpwTargetBuffer
;
220 DPRINT("GetConsoleAliasA entered\n");
222 if (lpTargetBuffer
== NULL
)
224 SetLastError(ERROR_INVALID_PARAMETER
);
228 dwSourceSize
= (strlen(lpSource
)+1) * sizeof(WCHAR
);
229 lpwSource
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, dwSourceSize
);
230 if (lpwSource
== NULL
)
232 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
235 MultiByteToWideChar(CP_ACP
, 0, lpSource
, -1, lpwSource
, dwSourceSize
);
237 dwExeNameSize
= (strlen(lpExeName
)+1) * sizeof(WCHAR
);
238 lpwExeName
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, dwExeNameSize
);
239 if (lpwExeName
== NULL
)
241 HeapFree(GetProcessHeap(), 0, lpwSource
);
242 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
245 MultiByteToWideChar(CP_ACP
, 0, lpExeName
, -1, lpwExeName
, dwExeNameSize
);
247 lpwTargetBuffer
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, TargetBufferLength
* sizeof(WCHAR
));
248 if (lpwTargetBuffer
== NULL
)
250 HeapFree(GetProcessHeap(), 0, lpwSource
);
251 HeapFree(GetProcessHeap(), 0, lpwExeName
);
252 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
256 dwResult
= GetConsoleAliasW(lpwSource
, lpwTargetBuffer
, TargetBufferLength
* sizeof(WCHAR
), lpwExeName
);
258 HeapFree(GetProcessHeap(), 0, lpwSource
);
259 HeapFree(GetProcessHeap(), 0, lpwExeName
);
262 dwResult
= WideCharToMultiByte(CP_ACP
, 0, lpwTargetBuffer
, dwResult
/ sizeof(WCHAR
), lpTargetBuffer
, TargetBufferLength
, NULL
, NULL
);
264 HeapFree(GetProcessHeap(), 0, lpwTargetBuffer
);
275 GetConsoleAliasExesW(LPWSTR lpExeNameBuffer
,
276 DWORD ExeNameBufferLength
)
278 CSR_API_MESSAGE Request
;
279 PCSR_CAPTURE_BUFFER CaptureBuffer
;
282 DPRINT("GetConsoleAliasExesW entered\n");
284 CaptureBuffer
= CsrAllocateCaptureBuffer(1, ExeNameBufferLength
);
287 DPRINT1("CsrAllocateCaptureBuffer failed!\n");
288 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
292 CsrAllocateMessagePointer(CaptureBuffer
,
294 (PVOID
*)&Request
.Data
.GetConsoleAliasesExes
.ExeNames
);
295 Request
.Data
.GetConsoleAliasesExes
.Length
= ExeNameBufferLength
;
297 Status
= CsrClientCallServer(&Request
,
299 CSR_CREATE_API_NUMBER(CSR_CONSOLE
, GET_CONSOLE_ALIASES_EXES
),
300 sizeof(CSR_API_MESSAGE
));
302 if (!NT_SUCCESS(Status
) || !NT_SUCCESS(Status
= Request
.Status
))
304 BaseSetLastNTError(Status
);
305 CsrFreeCaptureBuffer(CaptureBuffer
);
309 memcpy(lpExeNameBuffer
,
310 Request
.Data
.GetConsoleAliasesExes
.ExeNames
,
311 Request
.Data
.GetConsoleAliasesExes
.BytesWritten
);
313 CsrFreeCaptureBuffer(CaptureBuffer
);
314 return Request
.Data
.GetConsoleAliasesExes
.BytesWritten
;
323 GetConsoleAliasExesA(LPSTR lpExeNameBuffer
,
324 DWORD ExeNameBufferLength
)
326 LPWSTR lpwExeNameBuffer
;
329 DPRINT("GetConsoleAliasExesA entered\n");
331 lpwExeNameBuffer
= HeapAlloc(GetProcessHeap(), 0, ExeNameBufferLength
* sizeof(WCHAR
));
333 dwResult
= GetConsoleAliasExesW(lpwExeNameBuffer
, ExeNameBufferLength
* sizeof(WCHAR
));
336 dwResult
= WideCharToMultiByte(CP_ACP
, 0, lpwExeNameBuffer
, dwResult
/ sizeof(WCHAR
), lpExeNameBuffer
, ExeNameBufferLength
, NULL
, NULL
);
338 HeapFree(GetProcessHeap(), 0, lpwExeNameBuffer
);
348 GetConsoleAliasExesLengthW(VOID
)
350 CSR_API_MESSAGE Request
;
353 DPRINT("GetConsoleAliasExesLengthW entered\n");
355 Request
.Data
.GetConsoleAliasesExesLength
.Length
= 0;
357 Status
= CsrClientCallServer(&Request
,
359 CSR_CREATE_API_NUMBER(CSR_CONSOLE
, GET_CONSOLE_ALIASES_EXES_LENGTH
),
360 sizeof(CSR_API_MESSAGE
));
362 if (!NT_SUCCESS(Status
) || !NT_SUCCESS(Status
= Request
.Status
))
364 BaseSetLastNTError(Status
);
368 return Request
.Data
.GetConsoleAliasesExesLength
.Length
;
377 GetConsoleAliasExesLengthA(VOID
)
381 DPRINT("GetConsoleAliasExesLengthA entered\n");
383 dwLength
= GetConsoleAliasExesLengthW();
386 dwLength
/= sizeof(WCHAR
);
397 GetConsoleAliasesW(LPWSTR AliasBuffer
,
398 DWORD AliasBufferLength
,
401 CSR_API_MESSAGE Request
;
405 DPRINT("GetConsoleAliasesW entered\n");
407 dwLength
= GetConsoleAliasesLengthW(ExeName
);
408 if (!dwLength
|| dwLength
> AliasBufferLength
)
411 Request
.Data
.GetAllConsoleAlias
.AliasBuffer
= AliasBuffer
;
412 Request
.Data
.GetAllConsoleAlias
.AliasBufferLength
= AliasBufferLength
;
413 Request
.Data
.GetAllConsoleAlias
.lpExeName
= ExeName
;
415 Status
= CsrClientCallServer(&Request
,
417 CSR_CREATE_API_NUMBER(CSR_CONSOLE
, GET_ALL_CONSOLE_ALIASES
),
418 sizeof(CSR_API_MESSAGE
));
420 if (!NT_SUCCESS(Status
) || !NT_SUCCESS(Status
= Request
.Status
))
422 BaseSetLastNTError(Status
);
426 return Request
.Data
.GetAllConsoleAlias
.BytesWritten
/ sizeof(WCHAR
);
435 GetConsoleAliasesA(LPSTR AliasBuffer
,
436 DWORD AliasBufferLength
,
440 LPWSTR lpwExeName
= NULL
;
441 LPWSTR lpwAliasBuffer
;
443 DPRINT("GetConsoleAliasesA entered\n");
446 BasepAnsiStringToHeapUnicodeString(ExeName
, (LPWSTR
*) &lpwExeName
);
448 lpwAliasBuffer
= HeapAlloc(GetProcessHeap(), 0, AliasBufferLength
* sizeof(WCHAR
));
450 dwRetVal
= GetConsoleAliasesW(lpwAliasBuffer
, AliasBufferLength
, lpwExeName
);
453 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) lpwExeName
);
456 dwRetVal
= WideCharToMultiByte(CP_ACP
, 0, lpwAliasBuffer
, dwRetVal
, AliasBuffer
, AliasBufferLength
, NULL
, NULL
);
458 HeapFree(GetProcessHeap(), 0, lpwAliasBuffer
);
468 GetConsoleAliasesLengthW(LPWSTR lpExeName
)
470 CSR_API_MESSAGE Request
;
473 DPRINT("GetConsoleAliasesLengthW entered\n");
475 Request
.Data
.GetAllConsoleAliasesLength
.lpExeName
= lpExeName
;
476 Request
.Data
.GetAllConsoleAliasesLength
.Length
= 0;
478 Status
= CsrClientCallServer(&Request
,
480 CSR_CREATE_API_NUMBER(CSR_CONSOLE
, GET_ALL_CONSOLE_ALIASES_LENGTH
),
481 sizeof(CSR_API_MESSAGE
));
483 if (!NT_SUCCESS(Status
) || !NT_SUCCESS(Status
= Request
.Status
))
485 BaseSetLastNTError(Status
);
489 return Request
.Data
.GetAllConsoleAliasesLength
.Length
;
498 GetConsoleAliasesLengthA(LPSTR lpExeName
)
501 LPWSTR lpExeNameW
= NULL
;
504 BasepAnsiStringToHeapUnicodeString(lpExeName
, (LPWSTR
*) &lpExeNameW
);
506 dwRetVal
= GetConsoleAliasesLengthW(lpExeNameW
);
508 dwRetVal
/= sizeof(WCHAR
);
512 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*) lpExeNameW
);