2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * FILE: dll/win32/kernel32/client/console/alias.c
5 * PURPOSE: Win32 Console Client Alias support functions
6 * PROGRAMMERS: David Welch (welch@cwcom.net) (welch@mcmail.com)
7 * Christoph von Wittich (christoph_vw@reactos.org)
8 * Johannes Anderwald (johannes.anderwald@reactos.org)
11 /* INCLUDES *******************************************************************/
19 /* FUNCTIONS ******************************************************************/
26 AddConsoleAliasW(LPCWSTR lpSource
,
31 CONSOLE_API_MESSAGE ApiMessage
;
32 PCONSOLE_ADDGETALIAS ConsoleAliasRequest
= &ApiMessage
.Data
.ConsoleAliasRequest
;
33 PCSR_CAPTURE_BUFFER CaptureBuffer
;
34 ULONG CapturedStrings
;
36 DPRINT("AddConsoleAliasW enterd with lpSource %S lpTarget %S lpExeName %S\n", lpSource
, lpTarget
, lpExeName
);
38 /* Determine the needed sizes */
39 ConsoleAliasRequest
->SourceLength
= (wcslen(lpSource
) + 1) * sizeof(WCHAR
);
40 ConsoleAliasRequest
->ExeLength
= (wcslen(lpExeName
) + 1) * sizeof(WCHAR
);
43 if (lpTarget
) /* The target can be optional */
45 ConsoleAliasRequest
->TargetLength
= (wcslen(lpTarget
) + 1) * sizeof(WCHAR
);
50 ConsoleAliasRequest
->TargetLength
= 0;
53 /* Allocate a Capture Buffer */
54 CaptureBuffer
= CsrAllocateCaptureBuffer(CapturedStrings
,
55 ConsoleAliasRequest
->SourceLength
+
56 ConsoleAliasRequest
->ExeLength
+
57 ConsoleAliasRequest
->TargetLength
);
58 if (CaptureBuffer
== NULL
)
60 DPRINT1("CsrAllocateCaptureBuffer failed!\n");
61 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
65 /* Capture the strings */
66 CsrCaptureMessageBuffer(CaptureBuffer
,
68 ConsoleAliasRequest
->SourceLength
,
69 (PVOID
*)&ConsoleAliasRequest
->Source
);
71 CsrCaptureMessageBuffer(CaptureBuffer
,
73 ConsoleAliasRequest
->ExeLength
,
74 (PVOID
*)&ConsoleAliasRequest
->Exe
);
76 if (lpTarget
) /* The target can be optional */
78 CsrCaptureMessageBuffer(CaptureBuffer
,
80 ConsoleAliasRequest
->TargetLength
,
81 (PVOID
*)&ConsoleAliasRequest
->Target
);
85 ConsoleAliasRequest
->Target
= NULL
;
88 Status
= CsrClientCallServer((PCSR_API_MESSAGE
)&ApiMessage
,
90 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX
, ConsolepAddAlias
),
91 sizeof(CONSOLE_ADDGETALIAS
));
93 CsrFreeCaptureBuffer(CaptureBuffer
);
95 if (!NT_SUCCESS(Status
))
97 BaseSetLastNTError(Status
);
110 AddConsoleAliasA(LPCSTR lpSource
,
114 LPWSTR lpSourceW
= NULL
;
115 LPWSTR lpTargetW
= NULL
;
116 LPWSTR lpExeNameW
= NULL
;
120 BasepAnsiStringToHeapUnicodeString(lpSource
, (LPWSTR
*)&lpSourceW
);
122 BasepAnsiStringToHeapUnicodeString(lpTarget
, (LPWSTR
*)&lpTargetW
);
124 BasepAnsiStringToHeapUnicodeString(lpExeName
, (LPWSTR
*)&lpExeNameW
);
126 bRetVal
= AddConsoleAliasW(lpSourceW
, lpTargetW
, lpExeNameW
);
130 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*)lpSourceW
);
132 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*)lpTargetW
);
134 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*)lpExeNameW
);
145 GetConsoleAliasW(LPWSTR lpSource
,
146 LPWSTR lpTargetBuffer
,
147 DWORD TargetBufferLength
,
151 CONSOLE_API_MESSAGE ApiMessage
;
152 PCONSOLE_ADDGETALIAS ConsoleAliasRequest
= &ApiMessage
.Data
.ConsoleAliasRequest
;
153 PCSR_CAPTURE_BUFFER CaptureBuffer
;
155 DPRINT("GetConsoleAliasW entered with lpSource %S lpExeName %S\n", lpSource
, lpExeName
);
157 if (lpTargetBuffer
== NULL
)
159 SetLastError(ERROR_INVALID_PARAMETER
);
163 /* Determine the needed sizes */
164 ConsoleAliasRequest
->SourceLength
= (wcslen(lpSource
) + 1) * sizeof(WCHAR
);
165 ConsoleAliasRequest
->ExeLength
= (wcslen(lpExeName
) + 1) * sizeof(WCHAR
);
167 ConsoleAliasRequest
->Target
= NULL
;
168 ConsoleAliasRequest
->TargetLength
= TargetBufferLength
;
170 /* Allocate a Capture Buffer */
171 CaptureBuffer
= CsrAllocateCaptureBuffer(3, ConsoleAliasRequest
->SourceLength
+
172 ConsoleAliasRequest
->ExeLength
+
173 ConsoleAliasRequest
->TargetLength
);
176 DPRINT1("CsrAllocateCaptureBuffer failed!\n");
177 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
181 /* Capture the strings */
182 CsrCaptureMessageBuffer(CaptureBuffer
,
184 ConsoleAliasRequest
->SourceLength
,
185 (PVOID
*)&ConsoleAliasRequest
->Source
);
187 CsrCaptureMessageBuffer(CaptureBuffer
,
189 ConsoleAliasRequest
->ExeLength
,
190 (PVOID
*)&ConsoleAliasRequest
->Exe
);
192 /* Allocate space for the target buffer */
193 CsrAllocateMessagePointer(CaptureBuffer
,
194 ConsoleAliasRequest
->TargetLength
,
195 (PVOID
*)&ConsoleAliasRequest
->Target
);
197 Status
= CsrClientCallServer((PCSR_API_MESSAGE
)&ApiMessage
,
199 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX
, ConsolepGetAlias
),
200 sizeof(CONSOLE_ADDGETALIAS
));
201 if (!NT_SUCCESS(Status
))
203 CsrFreeCaptureBuffer(CaptureBuffer
);
204 BaseSetLastNTError(Status
);
208 /* Copy the returned target string into the user buffer */
209 // wcscpy(lpTargetBuffer, ConsoleAliasRequest->Target);
210 memcpy(lpTargetBuffer
,
211 ConsoleAliasRequest
->Target
,
212 ConsoleAliasRequest
->TargetLength
);
214 /* Release the capture buffer and exit */
215 CsrFreeCaptureBuffer(CaptureBuffer
);
217 return ConsoleAliasRequest
->TargetLength
;
226 GetConsoleAliasA(LPSTR lpSource
,
227 LPSTR lpTargetBuffer
,
228 DWORD TargetBufferLength
,
233 LPWSTR lpwTargetBuffer
;
238 DPRINT("GetConsoleAliasA entered\n");
240 if (lpTargetBuffer
== NULL
)
242 SetLastError(ERROR_INVALID_PARAMETER
);
246 dwSourceSize
= (strlen(lpSource
)+1) * sizeof(WCHAR
);
247 lpwSource
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, dwSourceSize
);
248 if (lpwSource
== NULL
)
250 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
253 MultiByteToWideChar(CP_ACP
, 0, lpSource
, -1, lpwSource
, dwSourceSize
);
255 dwExeNameSize
= (strlen(lpExeName
)+1) * sizeof(WCHAR
);
256 lpwExeName
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, dwExeNameSize
);
257 if (lpwExeName
== NULL
)
259 HeapFree(GetProcessHeap(), 0, lpwSource
);
260 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
263 MultiByteToWideChar(CP_ACP
, 0, lpExeName
, -1, lpwExeName
, dwExeNameSize
);
265 lpwTargetBuffer
= HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY
, TargetBufferLength
* sizeof(WCHAR
));
266 if (lpwTargetBuffer
== NULL
)
268 HeapFree(GetProcessHeap(), 0, lpwSource
);
269 HeapFree(GetProcessHeap(), 0, lpwExeName
);
270 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
274 dwResult
= GetConsoleAliasW(lpwSource
, lpwTargetBuffer
, TargetBufferLength
* sizeof(WCHAR
), lpwExeName
);
276 HeapFree(GetProcessHeap(), 0, lpwSource
);
277 HeapFree(GetProcessHeap(), 0, lpwExeName
);
280 dwResult
= WideCharToMultiByte(CP_ACP
, 0, lpwTargetBuffer
, dwResult
/ sizeof(WCHAR
), lpTargetBuffer
, TargetBufferLength
, NULL
, NULL
);
282 HeapFree(GetProcessHeap(), 0, lpwTargetBuffer
);
293 GetConsoleAliasesW(LPWSTR AliasBuffer
,
294 DWORD AliasBufferLength
,
298 CONSOLE_API_MESSAGE ApiMessage
;
299 PCONSOLE_GETALLALIASES GetAllAliasesRequest
= &ApiMessage
.Data
.GetAllAliasesRequest
;
300 PCSR_CAPTURE_BUFFER CaptureBuffer
;
302 DPRINT("GetConsoleAliasesW entered\n");
304 /* Determine the needed sizes */
305 GetAllAliasesRequest
->ExeLength
= GetConsoleAliasesLengthW(ExeName
);
306 if (GetAllAliasesRequest
->ExeLength
== 0 ||
307 GetAllAliasesRequest
->ExeLength
> AliasBufferLength
)
312 GetAllAliasesRequest
->AliasesBufferLength
= AliasBufferLength
;
314 /* Allocate a Capture Buffer */
315 CaptureBuffer
= CsrAllocateCaptureBuffer(2, GetAllAliasesRequest
->ExeLength
+
316 GetAllAliasesRequest
->AliasesBufferLength
);
319 DPRINT1("CsrAllocateCaptureBuffer failed!\n");
320 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
324 /* Capture the exe name and allocate space for the aliases buffer */
325 CsrCaptureMessageBuffer(CaptureBuffer
,
327 GetAllAliasesRequest
->ExeLength
,
328 (PVOID
*)&GetAllAliasesRequest
->ExeName
);
330 CsrAllocateMessagePointer(CaptureBuffer
,
331 GetAllAliasesRequest
->AliasesBufferLength
,
332 (PVOID
*)&GetAllAliasesRequest
->AliasesBuffer
);
334 Status
= CsrClientCallServer((PCSR_API_MESSAGE
)&ApiMessage
,
336 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX
, ConsolepGetAliases
),
337 sizeof(CONSOLE_GETALLALIASES
));
338 if (!NT_SUCCESS(Status
))
340 BaseSetLastNTError(Status
);
344 /* Copy the returned aliases string into the user buffer */
345 // wcscpy(AliasBuffer, GetAllAliasesRequest->AliasesBuffer);
347 GetAllAliasesRequest
->AliasesBuffer
,
348 GetAllAliasesRequest
->AliasesBufferLength
);
350 /* Release the capture buffer and exit */
351 CsrFreeCaptureBuffer(CaptureBuffer
);
353 return GetAllAliasesRequest
->AliasesBufferLength
; // / sizeof(WCHAR); (original code)
362 GetConsoleAliasesA(LPSTR AliasBuffer
,
363 DWORD AliasBufferLength
,
367 LPWSTR lpwExeName
= NULL
;
368 LPWSTR lpwAliasBuffer
;
370 DPRINT("GetConsoleAliasesA entered\n");
373 BasepAnsiStringToHeapUnicodeString(ExeName
, (LPWSTR
*)&lpwExeName
);
375 lpwAliasBuffer
= HeapAlloc(GetProcessHeap(), 0, AliasBufferLength
* sizeof(WCHAR
));
377 dwRetVal
= GetConsoleAliasesW(lpwAliasBuffer
, AliasBufferLength
* sizeof(WCHAR
), lpwExeName
);
380 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*)lpwExeName
);
383 dwRetVal
= WideCharToMultiByte(CP_ACP
, 0, lpwAliasBuffer
, dwRetVal
/**/ / sizeof(WCHAR
) /**/, AliasBuffer
, AliasBufferLength
, NULL
, NULL
);
385 HeapFree(GetProcessHeap(), 0, lpwAliasBuffer
);
395 GetConsoleAliasesLengthW(LPWSTR lpExeName
)
398 CONSOLE_API_MESSAGE ApiMessage
;
399 PCONSOLE_GETALLALIASESLENGTH GetAllAliasesLengthRequest
= &ApiMessage
.Data
.GetAllAliasesLengthRequest
;
400 PCSR_CAPTURE_BUFFER CaptureBuffer
;
402 DPRINT("GetConsoleAliasesLengthW entered\n");
404 if (lpExeName
== NULL
)
406 SetLastError(ERROR_INVALID_PARAMETER
);
410 GetAllAliasesLengthRequest
->ExeLength
= (wcslen(lpExeName
) + 1) * sizeof(WCHAR
);
411 GetAllAliasesLengthRequest
->Length
= 0;
413 /* Allocate a Capture Buffer */
414 CaptureBuffer
= CsrAllocateCaptureBuffer(1, GetAllAliasesLengthRequest
->ExeLength
);
417 DPRINT1("CsrAllocateCaptureBuffer failed!\n");
418 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
422 /* Capture the exe name */
423 CsrCaptureMessageBuffer(CaptureBuffer
,
425 GetAllAliasesLengthRequest
->ExeLength
,
426 (PVOID
)&GetAllAliasesLengthRequest
->ExeName
);
428 Status
= CsrClientCallServer((PCSR_API_MESSAGE
)&ApiMessage
,
430 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX
, ConsolepGetAliasesLength
),
431 sizeof(CONSOLE_GETALLALIASESLENGTH
));
433 CsrFreeCaptureBuffer(CaptureBuffer
);
435 if (!NT_SUCCESS(Status
))
437 BaseSetLastNTError(Status
);
441 return GetAllAliasesLengthRequest
->Length
;
450 GetConsoleAliasesLengthA(LPSTR lpExeName
)
453 LPWSTR lpExeNameW
= NULL
;
456 BasepAnsiStringToHeapUnicodeString(lpExeName
, (LPWSTR
*)&lpExeNameW
);
458 dwRetVal
= GetConsoleAliasesLengthW(lpExeNameW
);
460 dwRetVal
/= sizeof(WCHAR
);
464 RtlFreeHeap(GetProcessHeap(), 0, (LPWSTR
*)lpExeNameW
);
475 GetConsoleAliasExesW(LPWSTR lpExeNameBuffer
,
476 DWORD ExeNameBufferLength
)
479 CONSOLE_API_MESSAGE ApiMessage
;
480 PCONSOLE_GETALIASESEXES GetAliasesExesRequest
= &ApiMessage
.Data
.GetAliasesExesRequest
;
481 PCSR_CAPTURE_BUFFER CaptureBuffer
;
483 DPRINT("GetConsoleAliasExesW entered\n");
485 /* Allocate a Capture Buffer */
486 CaptureBuffer
= CsrAllocateCaptureBuffer(1, ExeNameBufferLength
);
489 DPRINT1("CsrAllocateCaptureBuffer failed!\n");
490 SetLastError(ERROR_NOT_ENOUGH_MEMORY
);
494 GetAliasesExesRequest
->Length
= ExeNameBufferLength
;
496 /* Allocate space for the exe name buffer */
497 CsrAllocateMessagePointer(CaptureBuffer
,
499 (PVOID
*)&GetAliasesExesRequest
->ExeNames
);
501 Status
= CsrClientCallServer((PCSR_API_MESSAGE
)&ApiMessage
,
503 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX
, ConsolepGetAliasExes
),
504 sizeof(CONSOLE_GETALIASESEXES
));
505 if (!NT_SUCCESS(Status
))
507 CsrFreeCaptureBuffer(CaptureBuffer
);
508 BaseSetLastNTError(Status
);
512 /* Copy the returned target string into the user buffer */
513 memcpy(lpExeNameBuffer
,
514 GetAliasesExesRequest
->ExeNames
,
515 GetAliasesExesRequest
->Length
);
517 /* Release the capture buffer and exit */
518 CsrFreeCaptureBuffer(CaptureBuffer
);
520 return GetAliasesExesRequest
->Length
;
529 GetConsoleAliasExesA(LPSTR lpExeNameBuffer
,
530 DWORD ExeNameBufferLength
)
532 LPWSTR lpwExeNameBuffer
;
535 DPRINT("GetConsoleAliasExesA entered\n");
537 lpwExeNameBuffer
= HeapAlloc(GetProcessHeap(), 0, ExeNameBufferLength
* sizeof(WCHAR
));
539 dwResult
= GetConsoleAliasExesW(lpwExeNameBuffer
, ExeNameBufferLength
* sizeof(WCHAR
));
542 dwResult
= WideCharToMultiByte(CP_ACP
, 0, lpwExeNameBuffer
, dwResult
/ sizeof(WCHAR
), lpExeNameBuffer
, ExeNameBufferLength
, NULL
, NULL
);
544 HeapFree(GetProcessHeap(), 0, lpwExeNameBuffer
);
554 GetConsoleAliasExesLengthW(VOID
)
557 CONSOLE_API_MESSAGE ApiMessage
;
558 PCONSOLE_GETALIASESEXESLENGTH GetAliasesExesLengthRequest
= &ApiMessage
.Data
.GetAliasesExesLengthRequest
;
560 DPRINT("GetConsoleAliasExesLengthW entered\n");
562 GetAliasesExesLengthRequest
->Length
= 0;
564 Status
= CsrClientCallServer((PCSR_API_MESSAGE
)&ApiMessage
,
566 CSR_CREATE_API_NUMBER(CONSRV_SERVERDLL_INDEX
, ConsolepGetAliasExesLength
),
567 sizeof(CONSOLE_GETALIASESEXESLENGTH
));
569 if (!NT_SUCCESS(Status
))
571 BaseSetLastNTError(Status
);
575 return GetAliasesExesLengthRequest
->Length
;
584 GetConsoleAliasExesLengthA(VOID
)
588 DPRINT("GetConsoleAliasExesLengthA entered\n");
590 dwLength
= GetConsoleAliasExesLengthW();
593 dwLength
/= sizeof(WCHAR
);