-/* $Id: handle.c,v 1.20 2004/11/06 10:10:02 weiden Exp $
+/* $Id$
*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS system libraries
ULONG BytesWritten;
NTSTATUS Status;
DWORD Flags;
-
+
Ppb = NtCurrentPeb()->ProcessParameters;
switch ((ULONG)hObject)
{
case STD_INPUT_HANDLE:
- hObject = Ppb->hStdInput;
+ hObject = Ppb->StandardInput;
break;
case STD_OUTPUT_HANDLE:
- hObject = Ppb->hStdOutput;
+ hObject = Ppb->StandardOutput;
break;
case STD_ERROR_HANDLE:
- hObject = Ppb->hStdError;
+ hObject = Ppb->StandardError;
break;
}
switch ((ULONG)hObject)
{
case STD_INPUT_HANDLE:
- hObject = Ppb->hStdInput;
+ hObject = Ppb->StandardInput;
break;
case STD_OUTPUT_HANDLE:
- hObject = Ppb->hStdOutput;
+ hObject = Ppb->StandardOutput;
break;
case STD_ERROR_HANDLE:
- hObject = Ppb->hStdError;
+ hObject = Ppb->StandardError;
break;
}
&BytesWritten);
if (NT_SUCCESS(Status))
{
- HandleInfo.Inherit = (dwFlags & HANDLE_FLAG_INHERIT) != 0;
- HandleInfo.ProtectFromClose = (dwFlags & HANDLE_FLAG_PROTECT_FROM_CLOSE) != 0;
+ if (dwMask & HANDLE_FLAG_INHERIT)
+ HandleInfo.Inherit = (dwFlags & HANDLE_FLAG_INHERIT) != 0;
+ if (dwMask & HANDLE_FLAG_PROTECT_FROM_CLOSE)
+ HandleInfo.ProtectFromClose = (dwFlags & HANDLE_FLAG_PROTECT_FROM_CLOSE) != 0;
+
Status = NtSetInformationObject (hObject,
ObjectHandleInformation,
&HandleInfo,
SetLastErrorByStatus (Status);
return FALSE;
}
-
+
return TRUE;
}
else
{
PRTL_USER_PROCESS_PARAMETERS Ppb;
NTSTATUS Status;
-
+
Ppb = NtCurrentPeb()->ProcessParameters;
switch ((ULONG)hObject)
{
case STD_INPUT_HANDLE:
- hObject = Ppb->hStdInput;
+ hObject = Ppb->StandardInput;
break;
case STD_OUTPUT_HANDLE:
- hObject = Ppb->hStdOutput;
+ hObject = Ppb->StandardOutput;
break;
case STD_ERROR_HANDLE:
- hObject = Ppb->hStdError;
+ hObject = Ppb->StandardError;
break;
}
-
+
if (IsConsoleHandle(hObject))
{
return(CloseConsoleHandle(hObject));
}
-
+
Status = NtClose(hObject);
if (!NT_SUCCESS(Status))
- {
+ {
SetLastErrorByStatus (Status);
return FALSE;
}
-
+
return TRUE;
}
PRTL_USER_PROCESS_PARAMETERS Ppb;
DWORD SourceProcessId, TargetProcessId;
NTSTATUS Status;
-
+
Ppb = NtCurrentPeb()->ProcessParameters;
switch ((ULONG)hSourceHandle)
{
case STD_INPUT_HANDLE:
- hSourceHandle = Ppb->hStdInput;
+ hSourceHandle = Ppb->StandardInput;
break;
case STD_OUTPUT_HANDLE:
- hSourceHandle = Ppb->hStdOutput;
+ hSourceHandle = Ppb->StandardOutput;
break;
case STD_ERROR_HANDLE:
- hSourceHandle = Ppb->hStdError;
+ hSourceHandle = Ppb->StandardError;
break;
}
-
+
if (IsConsoleHandle(hSourceHandle))
{
SourceProcessId = GetProcessId(hSourceProcessHandle);
*lpTargetHandle = DuplicateConsoleHandle(hSourceHandle, dwDesiredAccess, bInheritHandle, dwOptions);
return *lpTargetHandle != INVALID_HANDLE_VALUE;
}
-
+
Status = NtDuplicateObject(hSourceProcessHandle,
hSourceHandle,
hTargetProcessHandle,
lpTargetHandle,
dwDesiredAccess,
- (BOOLEAN)bInheritHandle,
+ bInheritHandle ? OBJ_INHERIT : 0,
dwOptions);
if (!NT_SUCCESS(Status))
{
SetLastErrorByStatus (Status);
return FALSE;
}
-
+
return TRUE;
}