/* FUNCTIONS *****************************************************************/
+HANDLE FASTCALL
+TranslateStdHandle(HANDLE hHandle)
+{
+ PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters;
+
+ switch ((ULONG_PTR)hHandle)
+ {
+ case STD_INPUT_HANDLE: return Ppb->StandardInput;
+ case STD_OUTPUT_HANDLE: return Ppb->StandardOutput;
+ case STD_ERROR_HANDLE: return Ppb->StandardError;
+ }
+
+ return hHandle;
+}
+
/*
* @implemented
*/
GetHandleInformation (HANDLE hObject,
LPDWORD lpdwFlags)
{
- PRTL_USER_PROCESS_PARAMETERS Ppb;
OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo;
ULONG BytesWritten;
NTSTATUS Status;
DWORD Flags;
- Ppb = NtCurrentPeb()->ProcessParameters;
- switch ((ULONG_PTR)hObject)
- {
- case STD_INPUT_HANDLE:
- hObject = Ppb->StandardInput;
- break;
- case STD_OUTPUT_HANDLE:
- hObject = Ppb->StandardOutput;
- break;
- case STD_ERROR_HANDLE:
- hObject = Ppb->StandardError;
- break;
- }
+ hObject = TranslateStdHandle(hObject);
Status = NtQueryObject (hObject,
ObjectHandleFlagInformation,
DWORD dwMask,
DWORD dwFlags)
{
- PRTL_USER_PROCESS_PARAMETERS Ppb;
OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo;
ULONG BytesWritten;
NTSTATUS Status;
- Ppb = NtCurrentPeb()->ProcessParameters;
- switch ((ULONG)hObject)
- {
- case STD_INPUT_HANDLE:
- hObject = Ppb->StandardInput;
- break;
- case STD_OUTPUT_HANDLE:
- hObject = Ppb->StandardOutput;
- break;
- case STD_ERROR_HANDLE:
- hObject = Ppb->StandardError;
- break;
- }
+ hObject = TranslateStdHandle(hObject);
Status = NtQueryObject (hObject,
ObjectHandleFlagInformation,
* If the function fails, the return value is zero
*/
{
- PRTL_USER_PROCESS_PARAMETERS Ppb;
NTSTATUS Status;
- Ppb = NtCurrentPeb()->ProcessParameters;
- switch ((ULONG)hObject)
- {
- case STD_INPUT_HANDLE:
- hObject = Ppb->StandardInput;
- break;
- case STD_OUTPUT_HANDLE:
- hObject = Ppb->StandardOutput;
- break;
- case STD_ERROR_HANDLE:
- hObject = Ppb->StandardError;
- break;
- }
+ hObject = TranslateStdHandle(hObject);
if (IsConsoleHandle(hObject))
{
BOOL bInheritHandle,
DWORD dwOptions)
{
- PRTL_USER_PROCESS_PARAMETERS Ppb;
DWORD SourceProcessId, TargetProcessId;
NTSTATUS Status;
- Ppb = NtCurrentPeb()->ProcessParameters;
- switch ((ULONG)hSourceHandle)
- {
- case STD_INPUT_HANDLE:
- hSourceHandle = Ppb->StandardInput;
- break;
- case STD_OUTPUT_HANDLE:
- hSourceHandle = Ppb->StandardOutput;
- break;
- case STD_ERROR_HANDLE:
- hSourceHandle = Ppb->StandardError;
- break;
- }
+ hSourceHandle = TranslateStdHandle(hSourceHandle);
if (IsConsoleHandle(hSourceHandle))
{