* PURPOSE: CSRSS alias support functions
* COPYRIGHT: Christoph Wittich
* Johannes Anderwald
- *
+ *
*/
typedef struct tagALIAS_ENTRY
{
- LPCWSTR lpSource;
- LPCWSTR lpTarget;
- struct tagALIAS_ENTRY * Next;
-}ALIAS_ENTRY, *PALIAS_ENTRY;
+ LPCWSTR lpSource;
+ LPCWSTR lpTarget;
+ struct tagALIAS_ENTRY * Next;
+} ALIAS_ENTRY, *PALIAS_ENTRY;
typedef struct tagALIAS_HEADER
PALIAS_ENTRY Data;
struct tagALIAS_HEADER * Next;
-}ALIAS_HEADER, *PALIAS_HEADER;
+} ALIAS_HEADER, *PALIAS_HEADER;
/* Ensure that a buffer is contained within the process's shared memory section. */
static BOOL
{
ULONG Offset = (BYTE *)Buffer - (BYTE *)ProcessData->CsrSectionViewBase;
if (Offset >= ProcessData->CsrSectionViewSize
- || Size > (ProcessData->CsrSectionViewSize - Offset))
+ || Size > (ProcessData->CsrSectionViewSize - Offset))
{
DPRINT1("Invalid buffer %p %d; not within %p %d\n",
- Buffer, Size, ProcessData->CsrSectionViewBase, ProcessData->CsrSectionViewSize);
+ Buffer, Size, ProcessData->CsrSectionViewBase, ProcessData->CsrSectionViewSize);
return FALSE;
}
return TRUE;
PALIAS_HEADER
IntCreateAliasHeader(LPCWSTR lpExeName)
{
- PALIAS_HEADER Entry;
- UINT dwLength = wcslen(lpExeName) + 1;
-
- Entry = RtlAllocateHeap(Win32CsrApiHeap, 0, sizeof(ALIAS_HEADER) + sizeof(WCHAR) * dwLength);
- if (!Entry)
- return Entry;
-
- Entry->lpExeName = (LPCWSTR)(Entry + 1);
- wcscpy((WCHAR*)Entry->lpExeName, lpExeName);
- Entry->Data = NULL;
- Entry->Next = NULL;
- return Entry;
+ PALIAS_HEADER Entry;
+ UINT dwLength = wcslen(lpExeName) + 1;
+
+ Entry = RtlAllocateHeap(Win32CsrApiHeap, 0, sizeof(ALIAS_HEADER) + sizeof(WCHAR) * dwLength);
+ if (!Entry)
+ return Entry;
+
+ Entry->lpExeName = (LPCWSTR)(Entry + 1);
+ wcscpy((WCHAR*)Entry->lpExeName, lpExeName);
+ Entry->Data = NULL;
+ Entry->Next = NULL;
+ return Entry;
}
VOID
IntInsertAliasHeader(PALIAS_HEADER * RootHeader, PALIAS_HEADER NewHeader)
{
- PALIAS_HEADER CurrentHeader;
- PALIAS_HEADER *LastLink = RootHeader;
-
- while ((CurrentHeader = *LastLink) != NULL)
- {
- INT Diff = _wcsicmp(NewHeader->lpExeName, CurrentHeader->lpExeName);
- if (Diff < 0)
- {
- break;
- }
- LastLink = &CurrentHeader->Next;
- }
-
- *LastLink = NewHeader;
- NewHeader->Next = CurrentHeader;
+ PALIAS_HEADER CurrentHeader;
+ PALIAS_HEADER *LastLink = RootHeader;
+
+ while ((CurrentHeader = *LastLink) != NULL)
+ {
+ INT Diff = _wcsicmp(NewHeader->lpExeName, CurrentHeader->lpExeName);
+ if (Diff < 0)
+ {
+ break;
+ }
+ LastLink = &CurrentHeader->Next;
+ }
+
+ *LastLink = NewHeader;
+ NewHeader->Next = CurrentHeader;
}
PALIAS_ENTRY
VOID
IntInsertAliasEntry(PALIAS_HEADER Header, PALIAS_ENTRY NewEntry)
{
- PALIAS_ENTRY CurrentEntry;
- PALIAS_ENTRY *LastLink = &Header->Data;
+ PALIAS_ENTRY CurrentEntry;
+ PALIAS_ENTRY *LastLink = &Header->Data;
- while ((CurrentEntry = *LastLink) != NULL)
- {
- INT Diff = _wcsicmp(NewEntry->lpSource, CurrentEntry->lpSource);
- if (Diff < 0)
+ while ((CurrentEntry = *LastLink) != NULL)
{
- break;
+ INT Diff = _wcsicmp(NewEntry->lpSource, CurrentEntry->lpSource);
+ if (Diff < 0)
+ {
+ break;
+ }
+ LastLink = &CurrentEntry->Next;
}
- LastLink = &CurrentEntry->Next;
- }
- *LastLink = NewEntry;
- NewEntry->Next = CurrentEntry;
+ *LastLink = NewEntry;
+ NewEntry->Next = CurrentEntry;
}
PALIAS_ENTRY
IntCreateAliasEntry(LPCWSTR lpSource, LPCWSTR lpTarget)
{
- UINT dwSource;
- UINT dwTarget;
- PALIAS_ENTRY Entry;
+ UINT dwSource;
+ UINT dwTarget;
+ PALIAS_ENTRY Entry;
- dwSource = wcslen(lpSource) + 1;
- dwTarget = wcslen(lpTarget) + 1;
+ dwSource = wcslen(lpSource) + 1;
+ dwTarget = wcslen(lpTarget) + 1;
- Entry = RtlAllocateHeap(Win32CsrApiHeap, 0, sizeof(ALIAS_ENTRY) + sizeof(WCHAR) * (dwSource + dwTarget));
- if (!Entry)
- return Entry;
+ Entry = RtlAllocateHeap(Win32CsrApiHeap, 0, sizeof(ALIAS_ENTRY) + sizeof(WCHAR) * (dwSource + dwTarget));
+ if (!Entry)
+ return Entry;
- Entry->lpSource = (LPCWSTR)(Entry + 1);
- wcscpy((LPWSTR)Entry->lpSource, lpSource);
- Entry->lpTarget = Entry->lpSource + dwSource;
- wcscpy((LPWSTR)Entry->lpTarget, lpTarget);
- Entry->Next = NULL;
+ Entry->lpSource = (LPCWSTR)(Entry + 1);
+ wcscpy((LPWSTR)Entry->lpSource, lpSource);
+ Entry->lpTarget = Entry->lpSource + dwSource;
+ wcscpy((LPWSTR)Entry->lpTarget, lpTarget);
+ Entry->Next = NULL;
- return Entry;
+ return Entry;
}
UINT
IntGetConsoleAliasesExesLength(PALIAS_HEADER RootHeader)
{
- UINT length = 0;
+ UINT length = 0;
- while(RootHeader)
- {
- length += (wcslen(RootHeader->lpExeName) + 1) * sizeof(WCHAR);
- RootHeader = RootHeader->Next;
- }
- if (length)
- length += sizeof(WCHAR); // last entry entry is terminated with 2 zero bytes
+ while(RootHeader)
+ {
+ length += (wcslen(RootHeader->lpExeName) + 1) * sizeof(WCHAR);
+ RootHeader = RootHeader->Next;
+ }
+ if (length)
+ length += sizeof(WCHAR); // last entry entry is terminated with 2 zero bytes
- return length;
+ return length;
}
UINT
UINT
IntGetAllConsoleAliasesLength(PALIAS_HEADER Header)
{
- UINT Length = 0;
- PALIAS_ENTRY CurEntry = Header->Data;
-
- while(CurEntry)
- {
- Length += wcslen(CurEntry->lpSource);
- Length += wcslen(CurEntry->lpTarget);
- Length += 2; // zero byte and '='
- CurEntry = CurEntry->Next;
- }
-
- if (Length)
- {
- return (Length+1) * sizeof(WCHAR);
- }
- return 0;
+ UINT Length = 0;
+ PALIAS_ENTRY CurEntry = Header->Data;
+
+ while(CurEntry)
+ {
+ Length += wcslen(CurEntry->lpSource);
+ Length += wcslen(CurEntry->lpTarget);
+ Length += 2; // zero byte and '='
+ CurEntry = CurEntry->Next;
+ }
+
+ if (Length)
+ {
+ return (Length+1) * sizeof(WCHAR);
+ }
+ return 0;
}
UINT
IntGetAllConsoleAliases(PALIAS_HEADER Header, LPWSTR TargetBuffer, UINT TargetBufferLength)
{
return STATUS_INVALID_PARAMETER;
}
-
+
Request->Status = ConioConsoleFromProcessData(ProcessData, &Console);
if (!NT_SUCCESS(Request->Status))
{
lpTarget = Request->Data.GetConsoleAlias.TargetBuffer;
- DPRINT("CsrGetConsoleAlias entered lpExeName %p lpSource %p TargetBuffer %p TargetBufferLength %u\n",
- lpExeName, lpSource, lpTarget, Request->Data.GetConsoleAlias.TargetBufferLength);
-
- if (Request->Data.GetConsoleAlias.ExeLength == 0 || lpTarget == NULL ||
- Request->Data.GetConsoleAlias.TargetBufferLength == 0 || Request->Data.GetConsoleAlias.SourceLength == 0)
+ DPRINT("CsrGetConsoleAlias entered lpExeName %p lpSource %p TargetBuffer %p TargetBufferLength %u\n",
+ lpExeName, lpSource, lpTarget, Request->Data.GetConsoleAlias.TargetBufferLength);
+
+ if (Request->Data.GetConsoleAlias.ExeLength == 0 || lpTarget == NULL ||
+ Request->Data.GetConsoleAlias.TargetBufferLength == 0 || Request->Data.GetConsoleAlias.SourceLength == 0)
{
return STATUS_INVALID_PARAMETER;
}
return STATUS_ACCESS_VIOLATION;
}
- BytesWritten = IntGetAllConsoleAliases(Header,
+ BytesWritten = IntGetAllConsoleAliases(Header,
Request->Data.GetAllConsoleAlias.AliasBuffer,
Request->Data.GetAllConsoleAlias.AliasBufferLength);
PCSRSS_CONSOLE Console;
UINT BytesWritten;
UINT ExesLength;
-
+
DPRINT("CsrGetConsoleAliasesExes entered\n");
Request->Status = ConioConsoleFromProcessData(ProcessData, &Console);
}
ExesLength = IntGetConsoleAliasesExesLength(Console->Aliases);
-
+
if (ExesLength > Request->Data.GetConsoleAliasesExes.Length)
{
ConioUnlockConsole(Console);
ConioUnlockConsole(Console);
return STATUS_INVALID_PARAMETER;
}
-
+
if (!ValidateBuffer(ProcessData,
Request->Data.GetConsoleAliasesExes.ExeNames,
Request->Data.GetConsoleAliasesExes.Length))
return STATUS_ACCESS_VIOLATION;
}
- BytesWritten = IntGetConsoleAliasesExes(Console->Aliases,
+ BytesWritten = IntGetConsoleAliasesExes(Console->Aliases,
Request->Data.GetConsoleAliasesExes.ExeNames,
Request->Data.GetConsoleAliasesExes.Length);