ReactOS.org
Sign In
Sign Up
Sign In
Sign Up
Manage this list
×
Keyboard Shortcuts
Thread View
j
: Next unread message
k
: Previous unread message
j a
: Jump to all threads
j l
: Jump to MailingList overview
2024
December
November
October
September
August
July
June
May
April
March
February
January
2023
December
November
October
September
August
July
June
May
April
March
February
January
2022
December
November
October
September
August
July
June
May
April
March
February
January
2021
December
November
October
September
August
July
June
May
April
March
February
January
2020
December
November
October
September
August
July
June
May
April
March
February
January
2019
December
November
October
September
August
July
June
May
April
March
February
January
2018
December
November
October
September
August
July
June
May
April
March
February
January
2017
December
November
October
September
August
July
June
May
April
March
February
January
2016
December
November
October
September
August
July
June
May
April
March
February
January
2015
December
November
October
September
August
July
June
May
April
March
February
January
2014
December
November
October
September
August
July
June
May
April
March
February
January
2013
December
November
October
September
August
July
June
May
April
March
February
January
2012
December
November
October
September
August
July
June
May
April
March
February
January
2011
December
November
October
September
August
July
June
May
April
March
February
January
2010
December
November
October
September
August
July
June
May
April
March
February
January
2009
December
November
October
September
August
July
June
May
April
March
February
January
2008
December
November
October
September
August
July
June
May
April
March
February
January
2007
December
November
October
September
August
July
June
May
April
March
February
January
2006
December
November
October
September
August
July
June
May
April
March
February
January
2005
December
November
October
September
August
July
June
May
April
March
February
January
2004
December
November
October
September
August
July
June
May
April
March
February
List overview
Download
Ros-diffs
July 2013
----- 2024 -----
December 2024
November 2024
October 2024
September 2024
August 2024
July 2024
June 2024
May 2024
April 2024
March 2024
February 2024
January 2024
----- 2023 -----
December 2023
November 2023
October 2023
September 2023
August 2023
July 2023
June 2023
May 2023
April 2023
March 2023
February 2023
January 2023
----- 2022 -----
December 2022
November 2022
October 2022
September 2022
August 2022
July 2022
June 2022
May 2022
April 2022
March 2022
February 2022
January 2022
----- 2021 -----
December 2021
November 2021
October 2021
September 2021
August 2021
July 2021
June 2021
May 2021
April 2021
March 2021
February 2021
January 2021
----- 2020 -----
December 2020
November 2020
October 2020
September 2020
August 2020
July 2020
June 2020
May 2020
April 2020
March 2020
February 2020
January 2020
----- 2019 -----
December 2019
November 2019
October 2019
September 2019
August 2019
July 2019
June 2019
May 2019
April 2019
March 2019
February 2019
January 2019
----- 2018 -----
December 2018
November 2018
October 2018
September 2018
August 2018
July 2018
June 2018
May 2018
April 2018
March 2018
February 2018
January 2018
----- 2017 -----
December 2017
November 2017
October 2017
September 2017
August 2017
July 2017
June 2017
May 2017
April 2017
March 2017
February 2017
January 2017
----- 2016 -----
December 2016
November 2016
October 2016
September 2016
August 2016
July 2016
June 2016
May 2016
April 2016
March 2016
February 2016
January 2016
----- 2015 -----
December 2015
November 2015
October 2015
September 2015
August 2015
July 2015
June 2015
May 2015
April 2015
March 2015
February 2015
January 2015
----- 2014 -----
December 2014
November 2014
October 2014
September 2014
August 2014
July 2014
June 2014
May 2014
April 2014
March 2014
February 2014
January 2014
----- 2013 -----
December 2013
November 2013
October 2013
September 2013
August 2013
July 2013
June 2013
May 2013
April 2013
March 2013
February 2013
January 2013
----- 2012 -----
December 2012
November 2012
October 2012
September 2012
August 2012
July 2012
June 2012
May 2012
April 2012
March 2012
February 2012
January 2012
----- 2011 -----
December 2011
November 2011
October 2011
September 2011
August 2011
July 2011
June 2011
May 2011
April 2011
March 2011
February 2011
January 2011
----- 2010 -----
December 2010
November 2010
October 2010
September 2010
August 2010
July 2010
June 2010
May 2010
April 2010
March 2010
February 2010
January 2010
----- 2009 -----
December 2009
November 2009
October 2009
September 2009
August 2009
July 2009
June 2009
May 2009
April 2009
March 2009
February 2009
January 2009
----- 2008 -----
December 2008
November 2008
October 2008
September 2008
August 2008
July 2008
June 2008
May 2008
April 2008
March 2008
February 2008
January 2008
----- 2007 -----
December 2007
November 2007
October 2007
September 2007
August 2007
July 2007
June 2007
May 2007
April 2007
March 2007
February 2007
January 2007
----- 2006 -----
December 2006
November 2006
October 2006
September 2006
August 2006
July 2006
June 2006
May 2006
April 2006
March 2006
February 2006
January 2006
----- 2005 -----
December 2005
November 2005
October 2005
September 2005
August 2005
July 2005
June 2005
May 2005
April 2005
March 2005
February 2005
January 2005
----- 2004 -----
December 2004
November 2004
October 2004
September 2004
August 2004
July 2004
June 2004
May 2004
April 2004
March 2004
February 2004
ros-diffs@reactos.org
13 participants
199 discussions
Start a n
N
ew thread
[ekohl] 59453: [SAMSRV] SamrChangePasswordUser: Use SampSetUserPassword to set the password hashes and update the password history.
by ekohl@svn.reactos.org
Author: ekohl Date: Tue Jul 9 21:47:55 2013 New Revision: 59453 URL:
http://svn.reactos.org/svn/reactos?rev=59453&view=rev
Log: [SAMSRV] SamrChangePasswordUser: Use SampSetUserPassword to set the password hashes and update the password history. Modified: trunk/reactos/dll/win32/samsrv/samrpc.c Modified: trunk/reactos/dll/win32/samsrv/samrpc.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/samsrv/samrpc.c?…
============================================================================== --- trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] Tue Jul 9 21:47:55 2013 @@ -7577,41 +7577,16 @@ } } - /* Store the new LM password */ + /* Store the new password hashes */ if (NT_SUCCESS(Status)) { - if (LmPresent) - { - Length = sizeof(ENCRYPTED_LM_OWF_PASSWORD); - Status = SampSetObjectAttribute(UserObject, - L"LMPwd", - REG_BINARY, - NewLmPassword, - Length); - if (!NT_SUCCESS(Status)) - { - goto done; - } - } - - /* Store the new NT password */ - if (NtPresent) - { - Length = sizeof(ENCRYPTED_NT_OWF_PASSWORD); - Status = SampSetObjectAttribute(UserObject, - L"NTPwd", - REG_BINARY, - NewNtPassword, - Length); - if (!NT_SUCCESS(Status)) - { - goto done; - } - } - } - - -done: + Status = SampSetUserPassword(UserObject, + NewNtPassword, + NtPresent, + NewLmPassword, + LmPresent); + } + return Status; }
11 years, 5 months
1
0
0
0
[aandrejevic] 59452: [NTVDM] Fix bugs in the VDM DOS executable loader.
by aandrejevic@svn.reactos.org
Author: aandrejevic Date: Tue Jul 9 17:28:16 2013 New Revision: 59452 URL:
http://svn.reactos.org/svn/reactos?rev=59452&view=rev
Log: [NTVDM] Fix bugs in the VDM DOS executable loader. Modified: branches/ntvdm/subsystems/ntvdm/dos.c Modified: branches/ntvdm/subsystems/ntvdm/dos.c URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/dos.c?re…
============================================================================== --- branches/ntvdm/subsystems/ntvdm/dos.c [iso-8859-1] (original) +++ branches/ntvdm/subsystems/ntvdm/dos.c [iso-8859-1] Tue Jul 9 17:28:16 2013 @@ -637,6 +637,7 @@ CHAR CommandLineCopy[128]; INT ParamCount = 0; DWORD Segment = 0; + WORD MaxAllocSize; DWORD i, FileSize, ExeSize; PIMAGE_DOS_HEADER Header; PDWORD RelocationTable; @@ -701,8 +702,6 @@ /* Get the MZ header */ Header = (PIMAGE_DOS_HEADER)Address; - // TODO: Verify checksum and executable! - /* Get the base size of the file, in paragraphs (rounded up) */ ExeSize = (((Header->e_cp - 1) * 512) + Header->e_cblp + 0x0F) >> 4; @@ -740,7 +739,8 @@ RtlCopyMemory((PVOID)((ULONG_PTR)BaseAddress + TO_LINEAR(Segment, 0x100)), Address + (Header->e_cparhdr << 4), - FileSize - (Header->e_cparhdr << 4)); + min(FileSize - (Header->e_cparhdr << 4), + (ExeSize << 4) - sizeof(DOS_PSP))); /* Get the relocation table */ RelocationTable = (PDWORD)(Address + Header->e_lfarlc); @@ -777,9 +777,19 @@ { /* COM file */ - /* Allocate memory for the whole program and the PSP */ - Segment = DosAllocateMemory((FileSize + sizeof(DOS_PSP)) >> 4, NULL); + /* Find the maximum amount of memory that can be allocated */ + DosAllocateMemory(0xFFFF, &MaxAllocSize); + + /* Make sure it's enough for the whole program and the PSP */ + if ((MaxAllocSize << 4) < (FileSize + sizeof(DOS_PSP))) goto Cleanup; + + /* Allocate all of it */ + Segment = DosAllocateMemory(MaxAllocSize, NULL); if (Segment == 0) goto Cleanup; + + /* The process owns its own memory */ + DosChangeMemoryOwner(Segment, Segment); + DosChangeMemoryOwner(EnvBlock, Segment); /* Copy the program to Segment:0100 */ RtlCopyMemory((PVOID)((ULONG_PTR)BaseAddress
11 years, 5 months
1
0
0
0
[ekohl] 59451: [NPFS] NpfsCreateNamedPipe: Check for invalid disposition values. Fixes 3 winetest failures.
by ekohl@svn.reactos.org
Author: ekohl Date: Sun Jul 7 22:18:50 2013 New Revision: 59451 URL:
http://svn.reactos.org/svn/reactos?rev=59451&view=rev
Log: [NPFS] NpfsCreateNamedPipe: Check for invalid disposition values. Fixes 3 winetest failures. Modified: trunk/reactos/drivers/filesystems/npfs/create.c Modified: trunk/reactos/drivers/filesystems/npfs/create.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/filesystems/npfs/c…
============================================================================== --- trunk/reactos/drivers/filesystems/npfs/create.c [iso-8859-1] (original) +++ trunk/reactos/drivers/filesystems/npfs/create.c [iso-8859-1] Sun Jul 7 22:18:50 2013 @@ -519,7 +519,9 @@ PNPFS_VCB Vcb; PNPFS_FCB Fcb; PNPFS_CCB Ccb; - PNAMED_PIPE_CREATE_PARAMETERS Buffer; + ULONG Disposition; + ULONG ShareAccess; + PNAMED_PIPE_CREATE_PARAMETERS Parameters; DPRINT("NpfsCreateNamedPipe(DeviceObject %p Irp %p)\n", DeviceObject, Irp); @@ -529,12 +531,16 @@ DPRINT("FileObject %p\n", FileObject); DPRINT("Pipe name %wZ\n", &FileObject->FileName); - Buffer = IoStack->Parameters.CreatePipe.Parameters; + Disposition = (IoStack->Parameters.CreatePipe.Options >> 24) & 0xFF; + ShareAccess = IoStack->Parameters.CreatePipe.ShareAccess; + Parameters = IoStack->Parameters.CreatePipe.Parameters; Irp->IoStatus.Information = 0; - if (!(IoStack->Parameters.CreatePipe.ShareAccess & (FILE_SHARE_READ|FILE_SHARE_WRITE)) || - (IoStack->Parameters.CreatePipe.ShareAccess & ~(FILE_SHARE_READ|FILE_SHARE_WRITE))) + if ((Disposition == FILE_OVERWRITE) || + (Disposition == FILE_OVERWRITE_IF) || + !(ShareAccess & (FILE_SHARE_READ|FILE_SHARE_WRITE)) || + (ShareAccess & ~(FILE_SHARE_READ|FILE_SHARE_WRITE))) { Irp->IoStatus.Status = STATUS_INVALID_PARAMETER; IoCompleteRequest(Irp, IO_NO_INCREMENT); @@ -564,9 +570,10 @@ return STATUS_INSTANCE_NOT_AVAILABLE; } - if (Fcb->MaximumInstances != Buffer->MaximumInstances || - Fcb->TimeOut.QuadPart != Buffer->DefaultTimeout.QuadPart || - Fcb->PipeType != Buffer->NamedPipeType) + if (Disposition == FILE_CREATE || + Fcb->MaximumInstances != Parameters->MaximumInstances || + Fcb->TimeOut.QuadPart != Parameters->DefaultTimeout.QuadPart || + Fcb->PipeType != Parameters->NamedPipeType) { DPRINT("Asked for invalid pipe mode.\n"); NpfsDereferenceFcb(Fcb); @@ -612,13 +619,13 @@ InitializeListHead(&Fcb->WaiterListHead); KeInitializeMutex(&Fcb->CcbListLock, 0); - Fcb->PipeType = Buffer->NamedPipeType; - Fcb->ServerReadMode = Buffer->ReadMode; + Fcb->PipeType = Parameters->NamedPipeType; + Fcb->ServerReadMode = Parameters->ReadMode; /* MSDN documentation reads that clients always start off in byte mode */ Fcb->ClientReadMode = FILE_PIPE_BYTE_STREAM_MODE; - Fcb->CompletionMode = Buffer->CompletionMode; - switch (IoStack->Parameters.CreatePipe.ShareAccess & (FILE_SHARE_READ|FILE_SHARE_WRITE)) + Fcb->CompletionMode = Parameters->CompletionMode; + switch (ShareAccess & (FILE_SHARE_READ|FILE_SHARE_WRITE)) { case FILE_SHARE_READ: Fcb->PipeConfiguration = FILE_PIPE_OUTBOUND; @@ -630,19 +637,19 @@ Fcb->PipeConfiguration = FILE_PIPE_FULL_DUPLEX; break; } - Fcb->MaximumInstances = Buffer->MaximumInstances; + Fcb->MaximumInstances = Parameters->MaximumInstances; Fcb->CurrentInstances = 0; - Fcb->TimeOut = Buffer->DefaultTimeout; + Fcb->TimeOut = Parameters->DefaultTimeout; if (!(Fcb->PipeConfiguration & FILE_PIPE_OUTBOUND) || Fcb->PipeConfiguration & FILE_PIPE_FULL_DUPLEX) { - if (Buffer->InboundQuota == 0) + if (Parameters->InboundQuota == 0) { Fcb->InboundQuota = Vcb->DefaultQuota; } else { - Fcb->InboundQuota = PAGE_ROUND_UP(Buffer->InboundQuota); + Fcb->InboundQuota = PAGE_ROUND_UP(Parameters->InboundQuota); if (Fcb->InboundQuota < Vcb->MinQuota) { Fcb->InboundQuota = Vcb->MinQuota; @@ -660,13 +667,13 @@ if (Fcb->PipeConfiguration & (FILE_PIPE_FULL_DUPLEX|FILE_PIPE_OUTBOUND)) { - if (Buffer->OutboundQuota == 0) + if (Parameters->OutboundQuota == 0) { Fcb->OutboundQuota = Vcb->DefaultQuota; } else { - Fcb->OutboundQuota = PAGE_ROUND_UP(Buffer->OutboundQuota); + Fcb->OutboundQuota = PAGE_ROUND_UP(Parameters->OutboundQuota); if (Fcb->OutboundQuota < Vcb->MinQuota) { Fcb->OutboundQuota = Vcb->MinQuota;
11 years, 5 months
1
0
0
0
[aandrejevic] 59450: [SOFTX86] Fix jump conditions. [NTVDM] Implement BIOS teletype output command. Start implementation of a new CPU emulator to replace softx86.
by aandrejevic@svn.reactos.org
Author: aandrejevic Date: Sun Jul 7 20:53:23 2013 New Revision: 59450 URL:
http://svn.reactos.org/svn/reactos?rev=59450&view=rev
Log: [SOFTX86] Fix jump conditions. [NTVDM] Implement BIOS teletype output command. Start implementation of a new CPU emulator to replace softx86. Modified: branches/ntvdm/lib/3rdparty/softx86/softx86/jumpy.c branches/ntvdm/subsystems/ntvdm/bios.c branches/ntvdm/subsystems/ntvdm/emulator.c branches/ntvdm/subsystems/ntvdm/emulator.h Modified: branches/ntvdm/lib/3rdparty/softx86/softx86/jumpy.c URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/lib/3rdparty/softx86/soft…
============================================================================== --- branches/ntvdm/lib/3rdparty/softx86/softx86/jumpy.c [iso-8859-1] (original) +++ branches/ntvdm/lib/3rdparty/softx86/softx86/jumpy.c [iso-8859-1] Sun Jul 7 20:53:23 2013 @@ -86,22 +86,22 @@ tf = !(ctx->state->reg_flags.val & SX86_CPUFLAG_PARITY); /* JL */ else if (opcode == 0x7C) - tf = (ctx->state->reg_flags.val & SX86_CPUFLAG_SIGN) != - (ctx->state->reg_flags.val & SX86_CPUFLAG_OVERFLOW); + tf = (((ctx->state->reg_flags.val & SX86_CPUFLAG_SIGN) ? 1 : 0) != + ((ctx->state->reg_flags.val & SX86_CPUFLAG_OVERFLOW) ? 1 : 0)); /* JGE */ else if (opcode == 0x7D) - tf = (ctx->state->reg_flags.val & SX86_CPUFLAG_SIGN) == - (ctx->state->reg_flags.val & SX86_CPUFLAG_OVERFLOW); + tf = ((ctx->state->reg_flags.val & SX86_CPUFLAG_SIGN) ? 1 : 0) == + ((ctx->state->reg_flags.val & SX86_CPUFLAG_OVERFLOW) ? 1 : 0); /* JLE */ else if (opcode == 0x7E) - tf = ((ctx->state->reg_flags.val & SX86_CPUFLAG_SIGN) != - (ctx->state->reg_flags.val & SX86_CPUFLAG_OVERFLOW)) || - (ctx->state->reg_flags.val & SX86_CPUFLAG_ZERO); + tf = (((ctx->state->reg_flags.val & SX86_CPUFLAG_SIGN) ? 1 : 0) != + ((ctx->state->reg_flags.val & SX86_CPUFLAG_OVERFLOW) ? 1 : 0) || + (ctx->state->reg_flags.val & SX86_CPUFLAG_ZERO)); /* JG */ else if (opcode == 0x7F) - tf = ((ctx->state->reg_flags.val & SX86_CPUFLAG_SIGN) == - (ctx->state->reg_flags.val & SX86_CPUFLAG_OVERFLOW)) && - (!(ctx->state->reg_flags.val & SX86_CPUFLAG_ZERO)); + tf = (((ctx->state->reg_flags.val & SX86_CPUFLAG_SIGN) ? 1 : 0) == + ((ctx->state->reg_flags.val & SX86_CPUFLAG_OVERFLOW) ? 1 : 0) && + (!(ctx->state->reg_flags.val & SX86_CPUFLAG_ZERO))); /* should NOT be here !*/ else return 0; Modified: branches/ntvdm/subsystems/ntvdm/bios.c URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/bios.c?r…
============================================================================== --- branches/ntvdm/subsystems/ntvdm/bios.c [iso-8859-1] (original) +++ branches/ntvdm/subsystems/ntvdm/bios.c [iso-8859-1] Sun Jul 7 20:53:23 2013 @@ -738,6 +738,28 @@ break; } + /* Teletype Output */ + case 0x0E: + { + CHAR Character = LOBYTE(Eax); + DWORD NumWritten; + + /* Make sure the page exists */ + if (HIBYTE(Ebx) >= VideoModes[CurrentVideoMode].Pages) break; + + /* Set the attribute */ + SetConsoleTextAttribute(ConsoleBuffers[HIBYTE(Ebx)], LOBYTE(Ebx)); + + /* Write the character */ + WriteConsoleA(ConsoleBuffers[HIBYTE(Ebx)], + &Character, + sizeof(CHAR), + &NumWritten, + NULL); + + break; + } + /* Get Current Video Mode */ case 0x0F: { Modified: branches/ntvdm/subsystems/ntvdm/emulator.c URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/emulator…
============================================================================== --- branches/ntvdm/subsystems/ntvdm/emulator.c [iso-8859-1] (original) +++ branches/ntvdm/subsystems/ntvdm/emulator.c [iso-8859-1] Sun Jul 7 20:53:23 2013 @@ -17,11 +17,18 @@ /* PRIVATE VARIABLES **********************************************************/ -static softx86_ctx EmulatorContext; -static softx87_ctx FpuEmulatorContext; +#ifndef NEW_EMULATOR +softx86_ctx EmulatorContext; +softx87_ctx FpuEmulatorContext; +#else +EMULATOR_CONTEXT EmulatorContext; +#endif + static BOOLEAN A20Line = FALSE; /* PRIVATE FUNCTIONS **********************************************************/ + +#ifndef NEW_EMULATOR static VOID EmulatorReadMemory(PVOID Context, UINT Address, LPBYTE Buffer, INT Size) { @@ -165,8 +172,13 @@ if (Number == SPECIAL_INT_NUM) { /* Get the SS:SP */ +#ifndef NEW_EMULATOR StackSegment = EmulatorContext.state->segment_reg[SX86_SREG_SS].val; StackPointer = EmulatorContext.state->general_reg[SX86_REG_SP].val; +#else + StackSegment = EmulatorContext.Registers[EMULATOR_REG_SS].LowWord; + StackPointer = EmulatorContext.Registers[EMULATOR_REG_SP].LowWord; +#endif /* Get the interrupt number */ IntNum = *(LPBYTE)((ULONG_PTR)BaseAddress + TO_LINEAR(StackSegment, StackPointer)); @@ -274,6 +286,8 @@ /* Do nothing */ } +#endif + /* PUBLIC FUNCTIONS ***********************************************************/ BOOLEAN EmulatorInitialize() @@ -282,6 +296,7 @@ BaseAddress = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, MAX_ADDRESS); if (BaseAddress == NULL) return FALSE; +#ifndef NEW_EMULATOR /* Initialize the softx86 CPU emulator */ if (!softx86_init(&EmulatorContext, SX86_CPULEVEL_80286)) { @@ -312,6 +327,9 @@ /* Connect the emulated FPU to the emulated CPU */ softx87_connect_to_CPU(&EmulatorContext, &FpuEmulatorContext); +#else + // TODO: NOT IMPLEMENTED +#endif /* Enable interrupts */ EmulatorSetFlag(EMULATOR_FLAG_IF); @@ -321,14 +339,22 @@ VOID EmulatorSetStack(WORD Segment, WORD Offset) { +#ifndef NEW_EMULATOR /* Call the softx86 API */ softx86_set_stack_ptr(&EmulatorContext, Segment, Offset); +#else + // TODO: NOT IMPLEMENTED +#endif } VOID EmulatorExecute(WORD Segment, WORD Offset) { +#ifndef NEW_EMULATOR /* Call the softx86 API */ softx86_set_instruction_ptr(&EmulatorContext, Segment, Offset); +#else + // TODO: NOT IMPLEMENTED +#endif } VOID EmulatorInterrupt(BYTE Number) @@ -340,18 +366,27 @@ Segment = HIWORD(IntVecTable[Number]); Offset = LOWORD(IntVecTable[Number]); +#ifndef NEW_EMULATOR /* Call the softx86 API */ softx86_make_simple_interrupt_call(&EmulatorContext, &Segment, &Offset); +#else + UNREFERENCED_PARAMETER(Segment); + UNREFERENCED_PARAMETER(Offset); + // TODO: NOT IMPLEMENTED +#endif } VOID EmulatorExternalInterrupt(BYTE Number) { +#ifndef NEW_EMULATOR /* Call the softx86 API */ softx86_ext_hw_signal(&EmulatorContext, Number); +#endif } ULONG EmulatorGetRegister(ULONG Register) { +#ifndef NEW_EMULATOR if (Register < EMULATOR_REG_ES) { return EmulatorContext.state->general_reg[Register].val; @@ -360,10 +395,14 @@ { return EmulatorContext.state->segment_reg[Register - EMULATOR_REG_ES].val; } +#else + return EmulatorContext.Registers[Register].Long; +#endif } VOID EmulatorSetRegister(ULONG Register, ULONG Value) { +#ifndef NEW_EMULATOR if (Register < EMULATOR_REG_CS) { EmulatorContext.state->general_reg[Register].val = Value; @@ -372,25 +411,41 @@ { EmulatorContext.state->segment_reg[Register - EMULATOR_REG_ES].val = Value; } +#else + // TODO: NOT IMPLEMENTED +#endif } BOOLEAN EmulatorGetFlag(ULONG Flag) { - return (EmulatorContext.state->reg_flags.val & Flag); +#ifndef NEW_EMULATOR + return (EmulatorContext.state->reg_flags.val & Flag) ? TRUE : FALSE; +#else + return (EmulatorContext.Flags.Long & Flag) ? TRUE : FALSE; +#endif } VOID EmulatorSetFlag(ULONG Flag) { +#ifndef NEW_EMULATOR EmulatorContext.state->reg_flags.val |= Flag; +#else + EmulatorContext.Flags.Long |= Flag; +#endif } VOID EmulatorClearFlag(ULONG Flag) { +#ifndef NEW_EMULATOR EmulatorContext.state->reg_flags.val &= ~Flag; +#else + EmulatorContext.Flags.Long &= ~Flag; +#endif } VOID EmulatorStep() { +#ifndef NEW_EMULATOR /* Print the current position - useful for debugging */ DPRINT("Executing at CS:IP = %04X:%04X\n", EmulatorGetRegister(EMULATOR_REG_CS), @@ -402,6 +457,9 @@ /* Invalid opcode */ EmulatorInterrupt(EMULATOR_EXCEPTION_INVALID_OPCODE); } +#else + // TODO: NOT IMPLEMENTED +#endif } VOID EmulatorCleanup() @@ -409,9 +467,11 @@ /* Free the memory allocated for the 16-bit address space */ if (BaseAddress != NULL) HeapFree(GetProcessHeap(), 0, BaseAddress); +#ifndef NEW_EMULATOR /* Free the softx86 CPU and FPU emulator */ softx86_free(&EmulatorContext); softx87_free(&FpuEmulatorContext); +#endif } VOID EmulatorSetA20(BOOLEAN Enabled) Modified: branches/ntvdm/subsystems/ntvdm/emulator.h URL:
http://svn.reactos.org/svn/reactos/branches/ntvdm/subsystems/ntvdm/emulator…
============================================================================== --- branches/ntvdm/subsystems/ntvdm/emulator.h [iso-8859-1] (original) +++ branches/ntvdm/subsystems/ntvdm/emulator.h [iso-8859-1] Sun Jul 7 20:53:23 2013 @@ -12,11 +12,15 @@ /* INCLUDES *******************************************************************/ #include "ntvdm.h" + +#ifndef NEW_EMULATOR #include <softx86/softx86.h> #include <softx86/softx87.h> +#endif /* DEFINES ********************************************************************/ +/* FLAGS */ #define EMULATOR_FLAG_CF (1 << 0) #define EMULATOR_FLAG_PF (1 << 2) #define EMULATOR_FLAG_AF (1 << 4) @@ -33,6 +37,39 @@ #define EMULATOR_FLAG_VIF (1 << 19) #define EMULATOR_FLAG_VIP (1 << 20) #define EMULATOR_FLAG_ID (1 << 21) + +/* CR0 */ +#define EMULATOR_CR0_PE (1 << 0) +#define EMULATOR_CR0_MP (1 << 1) +#define EMULATOR_CR0_EM (1 << 2) +#define EMULATOR_CR0_TS (1 << 3) +#define EMULATOR_CR0_ET (1 << 4) +#define EMULATOR_CR0_NE (1 << 5) +#define EMULATOR_CR0_WP (1 << 16) +#define EMULATOR_CR0_AM (1 << 18) +#define EMULATOR_CR0_NW (1 << 29) +#define EMULATOR_CR0_CD (1 << 30) +#define EMULATOR_CR0_PG (1 << 31) + +/* GDT Access byte */ +#define GDT_SEG_ACCESSED (1 << 0) +#define GDT_DATA_WRITEABLE (1 << 1) +#define GDT_CODE_READABLE (1 << 1) +#define GDT_CONFORMING (1 << 2) +#define GDT_DIRECTION (1 << 2) +#define GDT_CODE_SEGMENT (1 << 3) +#define GDT_PRESENT (1 << 7) + +/* GDT flags */ +#define GDT_32BIT_SEGMENT (1 << 2) +#define GDT_PAGE_GRANULARITY (1 << 3) + +/* Common definitions */ +#define EMULATOR_NUM_GENERAL_REGS 8 +#define EMULATOR_NUM_SEGMENT_REGS 6 +#define EMULATOR_NUM_CONTROL_REGS 8 +#define EMULATOR_NUM_DEBUG_REGS 8 +#define MAX_GDT_ENTRIES 8192 #define SPECIAL_INT_NUM 0xFF enum @@ -44,7 +81,14 @@ EMULATOR_EXCEPTION_OVERFLOW, EMULATOR_EXCEPTION_BOUND, EMULATOR_EXCEPTION_INVALID_OPCODE, - EMULATOR_EXCEPTION_NO_FPU + EMULATOR_EXCEPTION_NO_FPU, + EMULATOR_EXCEPTION_DOUBLE_FAULT, + EMULATOR_EXCEPTION_FPU_SEGMENT, + EMULATOR_EXCEPTION_INVALID_TSS, + EMULATOR_EXCEPTION_NO_SEGMENT, + EMULATOR_EXCEPTION_STACK_SEGMENT, + EMULATOR_EXCEPTION_GPF, + EMULATOR_EXCEPTION_PAGE_FAULT }; enum @@ -61,7 +105,63 @@ EMULATOR_REG_CS, EMULATOR_REG_SS, EMULATOR_REG_DS, + EMULATOR_REG_FS, + EMULATOR_REG_GS }; + +typedef union +{ + struct + { + BYTE LowByte; + BYTE HighByte; + }; + WORD LowWord; + DWORD Long; +} EMULATOR_REGISTER, *PEMULATOR_REGISTER; + +typedef struct +{ + ULONG Limit : 16; + ULONG Base : 24; + ULONG AccessByte : 8; + ULONG LimitHigh : 4; + ULONG Flags : 4; + ULONG BaseHigh : 8; +} EMULATOR_GDT_ENTRY; + +typedef struct +{ + ULONG Offset : 16; + ULONG Selector : 16; + ULONG Zero : 8; + ULONG TypeAndAttributes : 8; + ULONG OffsetHigh : 16; +} EMULATOR_IDT_ENTRY; + +typedef struct +{ + WORD Size; + DWORD Address; +} EMULATOR_TABLE_REGISTER; + +typedef struct +{ + EMULATOR_REGISTER Registers[EMULATOR_NUM_GENERAL_REGS + + EMULATOR_NUM_SEGMENT_REGS]; + EMULATOR_REGISTER Flags; + EMULATOR_REGISTER InstructionPointer; + EMULATOR_REGISTER ControlRegisters[EMULATOR_NUM_CONTROL_REGS]; + EMULATOR_REGISTER DebugRegisters[EMULATOR_NUM_DEBUG_REGS]; + ULONGLONG TimeStampCounter; + BOOLEAN OperandSizeOverload; + BOOLEAN AddressSizeOverload; + EMULATOR_TABLE_REGISTER Gdtr, Idtr; + EMULATOR_GDT_ENTRY CachedDescriptors[EMULATOR_NUM_SEGMENT_REGS]; + UINT ExceptionCount; +} EMULATOR_CONTEXT, *PEMULATOR_CONTEXT; + +typedef VOID (*EMULATOR_OPCODE_HANDLER)(PEMULATOR_CONTEXT Context, BYTE Opcode); /* FUNCTIONS ******************************************************************/
11 years, 5 months
1
0
0
0
[ekohl] 59449: [SAMSRV] SamrChangePasswordUser: Check the old password before storing the new one.
by ekohl@svn.reactos.org
Author: ekohl Date: Sun Jul 7 20:27:38 2013 New Revision: 59449 URL:
http://svn.reactos.org/svn/reactos?rev=59449&view=rev
Log: [SAMSRV] SamrChangePasswordUser: Check the old password before storing the new one. Modified: trunk/reactos/dll/win32/samsrv/samrpc.c Modified: trunk/reactos/dll/win32/samsrv/samrpc.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/samsrv/samrpc.c?…
============================================================================== --- trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] Sun Jul 7 20:27:38 2013 @@ -7471,12 +7471,18 @@ { ENCRYPTED_LM_OWF_PASSWORD StoredLmPassword; ENCRYPTED_NT_OWF_PASSWORD StoredNtPassword; + PENCRYPTED_LM_OWF_PASSWORD OldLmPassword; + PENCRYPTED_LM_OWF_PASSWORD NewLmPassword; + PENCRYPTED_NT_OWF_PASSWORD OldNtPassword; + PENCRYPTED_NT_OWF_PASSWORD NewNtPassword; PSAM_DB_OBJECT UserObject; ULONG Length; NTSTATUS Status; - TRACE("(%p %u %u)\n", - UserHandle, LmPresent, NtPresent); + TRACE("(%p %u %p %p %u %p %p %u %p %u %p)\n", + UserHandle, LmPresent, OldLmEncryptedWithNewLm, NewLmEncryptedWithOldLm, + NtPresent, OldNtEncryptedWithNewNt, NewNtEncryptedWithOldNt, NtCrossEncryptionPresent, + NewNtEncryptedWithNewLm, LmCrossEncryptionPresent, NewLmEncryptedWithNewNt); /* Validate the user handle */ Status = SampValidateDbObject(UserHandle, @@ -7513,36 +7519,94 @@ } - /* FIXME: Check if the old passwords match the stored ones */ - + /* FIXME: Decrypt passwords */ + OldLmPassword = OldLmEncryptedWithNewLm; + NewLmPassword = NewLmEncryptedWithOldLm; + OldNtPassword = OldNtEncryptedWithNewNt; + NewNtPassword = NewNtEncryptedWithOldNt; + + /* Check if the old passwords match the stored ones */ + if (NtPresent) + { + if (LmPresent) + { + if (!RtlEqualMemory(&StoredLmPassword, + OldLmPassword, + sizeof(ENCRYPTED_LM_OWF_PASSWORD))) + { + TRACE("Old LM Password does not match!\n"); + Status = STATUS_WRONG_PASSWORD; + } + else + { + if (!RtlEqualMemory(&StoredNtPassword, + OldNtPassword, + sizeof(ENCRYPTED_LM_OWF_PASSWORD))) + { + TRACE("Old NT Password does not match!\n"); + Status = STATUS_WRONG_PASSWORD; + } + } + } + else + { + if (!RtlEqualMemory(&StoredNtPassword, + OldNtPassword, + sizeof(ENCRYPTED_LM_OWF_PASSWORD))) + { + TRACE("Old NT Password does not match!\n"); + Status = STATUS_WRONG_PASSWORD; + } + } + } + else + { + if (LmPresent) + { + if (!RtlEqualMemory(&StoredLmPassword, + OldLmPassword, + sizeof(ENCRYPTED_LM_OWF_PASSWORD))) + { + TRACE("Old LM Password does not match!\n"); + Status = STATUS_WRONG_PASSWORD; + } + } + else + { + Status = STATUS_INVALID_PARAMETER; + } + } /* Store the new LM password */ - if (LmPresent) - { - Length = sizeof(ENCRYPTED_LM_OWF_PASSWORD); - Status = SampSetObjectAttribute(UserObject, - L"LMPwd", - REG_BINARY, - NewLmEncryptedWithOldLm, - Length); - if (!NT_SUCCESS(Status)) - { - goto done; - } - } - - /* Store the new NT password */ - if (NtPresent) - { - Length = sizeof(ENCRYPTED_NT_OWF_PASSWORD); - Status = SampSetObjectAttribute(UserObject, - L"NTPwd", - REG_BINARY, - NewNtEncryptedWithOldNt, - Length); - if (!NT_SUCCESS(Status)) - { - goto done; + if (NT_SUCCESS(Status)) + { + if (LmPresent) + { + Length = sizeof(ENCRYPTED_LM_OWF_PASSWORD); + Status = SampSetObjectAttribute(UserObject, + L"LMPwd", + REG_BINARY, + NewLmPassword, + Length); + if (!NT_SUCCESS(Status)) + { + goto done; + } + } + + /* Store the new NT password */ + if (NtPresent) + { + Length = sizeof(ENCRYPTED_NT_OWF_PASSWORD); + Status = SampSetObjectAttribute(UserObject, + L"NTPwd", + REG_BINARY, + NewNtPassword, + Length); + if (!NT_SUCCESS(Status)) + { + goto done; + } } }
11 years, 5 months
1
0
0
0
[hbelusca] 59448: [CONDRV] - Hey Arch! You're displaying Major function codes, not IOCTL codes. Also, remove unnecessary casts (coming from some old code), and a use-after free. - Add some memory h...
by hbelusca@svn.reactos.org
Author: hbelusca Date: Sun Jul 7 15:57:48 2013 New Revision: 59448 URL:
http://svn.reactos.org/svn/reactos?rev=59448&view=rev
Log: [CONDRV] - Hey Arch! You're displaying Major function codes, not IOCTL codes. Also, remove unnecessary casts (coming from some old code), and a use-after free. - Add some memory helpers. Added: trunk/reactos/drivers/base/condrv/heap.h - copied, changed from r59436, trunk/reactos/win32ss/user/consrv/heap.h Modified: trunk/reactos/drivers/base/condrv/condrv.c trunk/reactos/drivers/base/condrv/condrv.h trunk/reactos/drivers/base/condrv/control.c Modified: trunk/reactos/drivers/base/condrv/condrv.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/condrv…
============================================================================== --- trunk/reactos/drivers/base/condrv/condrv.c [iso-8859-1] (original) +++ trunk/reactos/drivers/base/condrv/condrv.c [iso-8859-1] Sun Jul 7 15:57:48 2013 @@ -40,16 +40,16 @@ Irp->IoStatus.Information = Information; IoCompleteRequest(Irp, IO_NO_INCREMENT); - return Irp->IoStatus.Status; + return Status; } NTSTATUS NTAPI ConDrvDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { -#define HANDLE_CTRL_CODE(CtrlCode) \ - case CtrlCode : \ - { \ - DPRINT1("ConDrv: " #CtrlCode ", stack->FileObject = 0x%p\n", stack->FileObject); \ +#define HANDLE_CTRL_CODE(Code) \ + case Code : \ + { \ + DPRINT1("ConDrv: " #Code ", stack->FileObject = 0x%p\n", stack->FileObject); \ if (stack->FileObject) \ { \ DPRINT1("stack->FileObject->FileName = %wZ\n", &stack->FileObject->FileName); \ @@ -58,10 +58,11 @@ } PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); - ULONG ctrlCode = stack->Parameters.DeviceIoControl.IoControlCode; + // ULONG ctrlCode = stack->Parameters.DeviceIoControl.IoControlCode; + ULONG MajorFunction = stack->MajorFunction; /* Just display all the IRP codes for now... */ - switch (ctrlCode) + switch (MajorFunction) { HANDLE_CTRL_CODE(IRP_MJ_CREATE); HANDLE_CTRL_CODE(IRP_MJ_CREATE_NAMED_PIPE); @@ -96,7 +97,7 @@ default: { - DPRINT1("Unknown code %lu\n", ctrlCode); + DPRINT1("Unknown Major %lu\n", MajorFunction); break; } } Modified: trunk/reactos/drivers/base/condrv/condrv.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/condrv…
============================================================================== --- trunk/reactos/drivers/base/condrv/condrv.h [iso-8859-1] (original) +++ trunk/reactos/drivers/base/condrv/condrv.h [iso-8859-1] Sun Jul 7 15:57:48 2013 @@ -10,7 +10,10 @@ #define __CONDRV_H__ /* This is needed for VisualDDK testing */ +// #define __USE_VISUALDDK_AT_HOME__ + #ifdef __USE_VISUALDDK_AT_HOME__ + #pragma message("Disable __USE_VISUALDDK_AT_HOME__ before committing!!") #include "VisualDDKHelpers.h" #endif Modified: trunk/reactos/drivers/base/condrv/control.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/contro…
============================================================================== --- trunk/reactos/drivers/base/condrv/control.c [iso-8859-1] (original) +++ trunk/reactos/drivers/base/condrv/control.c [iso-8859-1] Sun Jul 7 15:57:48 2013 @@ -44,8 +44,7 @@ &Controller); if (!NT_SUCCESS(Status)) goto Done; - Status = IoCreateSymbolicLink((PUNICODE_STRING)&SymlinkName, - (PUNICODE_STRING)&DeviceName); + Status = IoCreateSymbolicLink(&SymlinkName, &DeviceName); if (!NT_SUCCESS(Status)) { IoDeleteDevice(Controller); Copied: trunk/reactos/drivers/base/condrv/heap.h (from r59436, trunk/reactos/win32ss/user/consrv/heap.h) URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/heap.h…
============================================================================== --- trunk/reactos/win32ss/user/consrv/heap.h [iso-8859-1] (original) +++ trunk/reactos/drivers/base/condrv/heap.h [iso-8859-1] Sun Jul 7 15:57:48 2013 @@ -1,17 +1,22 @@ /* * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Console Server DLL - * FILE: win32ss/user/consrv/heap.h + * PROJECT: ReactOS Console Driver + * FILE: drivers/base/condrv/heap.h * PURPOSE: Heap Helpers * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca(a)sfr.fr) */ #pragma once -/* See init.c */ -extern HANDLE ConSrvHeap; +#define ConDrvAllocPoolNonPageable(Flags, Size, Tag) \ + __pragma(message("WARNING - Flags parameter ignored. You may encounter problems!")) \ + ExAllocatePoolWithTag(NonPagedPool, Size, Tag) -#define ConsoleAllocHeap(Flags, Size) RtlAllocateHeap(ConSrvHeap, Flags, Size) -#define ConsoleFreeHeap(HeapBase) RtlFreeHeap(ConSrvHeap, 0, HeapBase) +#define ConDrvAllocPoolPageable(Flags, Size, Tag) \ + __pragma(message("WARNING - Flags parameter ignored. You may encounter problems!")) \ + ExAllocatePoolWithTag(PagedPool, Size, Tag) + +#define ConDrvFreePool(PoolBase, Tag) \ + ExFreePoolWithTag(PoolBase, Tag) /* EOF */
11 years, 5 months
1
0
0
0
[hbelusca] 59447: [CONDRV] Initial commit of the ReactOS Console Driver. For the moment, it's just able to load/unload, creating a "controller" device and being able to DPRINT1 lots of messages whe...
by hbelusca@svn.reactos.org
Author: hbelusca Date: Sun Jul 7 15:15:10 2013 New Revision: 59447 URL:
http://svn.reactos.org/svn/reactos?rev=59447&view=rev
Log: [CONDRV] Initial commit of the ReactOS Console Driver. For the moment, it's just able to load/unload, creating a "controller" device and being able to DPRINT1 lots of messages when you try to access to it. Added: trunk/reactos/drivers/base/condrv/ (with props) trunk/reactos/drivers/base/condrv/CMakeLists.txt (with props) trunk/reactos/drivers/base/condrv/condrv.c (with props) trunk/reactos/drivers/base/condrv/condrv.h (with props) trunk/reactos/drivers/base/condrv/condrv.rc (with props) trunk/reactos/drivers/base/condrv/control.c (with props) trunk/reactos/include/reactos/drivers/condrv/ (with props) trunk/reactos/include/reactos/drivers/condrv/ntddcon.h (with props) Modified: trunk/reactos/drivers/base/CMakeLists.txt Modified: trunk/reactos/drivers/base/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/CMakeLists.tx…
============================================================================== --- trunk/reactos/drivers/base/CMakeLists.txt [iso-8859-1] (original) +++ trunk/reactos/drivers/base/CMakeLists.txt [iso-8859-1] Sun Jul 7 15:15:10 2013 @@ -1,6 +1,7 @@ add_subdirectory(beep) add_subdirectory(bootvid) +add_subdirectory(condrv) if(_WINKD_) add_subdirectory(kdcom) Propchange: trunk/reactos/drivers/base/condrv/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Sun Jul 7 15:15:10 2013 @@ -0,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+) Propchange: trunk/reactos/drivers/base/condrv/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details. Propchange: trunk/reactos/drivers/base/condrv/ ------------------------------------------------------------------------------ bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/drivers/base/condrv/ ------------------------------------------------------------------------------ tsvn:logminsize = 10 Added: trunk/reactos/drivers/base/condrv/CMakeLists.txt URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/CMakeL…
============================================================================== --- trunk/reactos/drivers/base/condrv/CMakeLists.txt (added) +++ trunk/reactos/drivers/base/condrv/CMakeLists.txt [iso-8859-1] Sun Jul 7 15:15:10 2013 @@ -0,0 +1,18 @@ + +include_directories(${REACTOS_SOURCE_DIR}/include/reactos/drivers) + +## spec2def(condrv.sys condrv.spec ADD_IMPORTLIB) + +add_library(condrv SHARED + condrv.c + control.c + condrv.rc) + # ${CMAKE_CURRENT_BINARY_DIR}/condrv.def) + +add_pch(condrv condrv.h) + +set_module_type(condrv kernelmodedriver) +target_link_libraries(condrv ${PSEH_LIB}) +add_importlibs(condrv ntoskrnl hal) + +add_cd_file(TARGET condrv DESTINATION reactos/system32/drivers NO_CAB FOR all) Propchange: trunk/reactos/drivers/base/condrv/CMakeLists.txt ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/reactos/drivers/base/condrv/condrv.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/condrv…
============================================================================== --- trunk/reactos/drivers/base/condrv/condrv.c (added) +++ trunk/reactos/drivers/base/condrv/condrv.c [iso-8859-1] Sun Jul 7 15:15:10 2013 @@ -0,0 +1,172 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Console Driver + * FILE: drivers/base/condrv/condrv.c + * PURPOSE: Console Driver Management Functions + * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca(a)sfr.fr) + */ + +/* INCLUDES *******************************************************************/ + +#include "condrv.h" + +#define NDEBUG +#include <debug.h> + + +/* FUNCTIONS ******************************************************************/ + +/* + * Callback functions prototypes + */ +DRIVER_INITIALIZE DriverEntry; +DRIVER_UNLOAD ConDrvUnload; +/* +DRIVER_DISPATCH ConDrvIoControl; +DRIVER_DISPATCH ConDrvCreate; +DRIVER_DISPATCH ConDrvClose; +DRIVER_DISPATCH ConDrvRead; +DRIVER_DISPATCH ConDrvWrite; +DRIVER_DISPATCH ConDrvCleanup; +*/ +DRIVER_DISPATCH ConDrvDispatch; + +NTSTATUS NTAPI +CompleteRequest(IN PIRP Irp, + IN NTSTATUS Status, + IN ULONG_PTR Information) +{ + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = Information; + IoCompleteRequest(Irp, IO_NO_INCREMENT); + + return Irp->IoStatus.Status; +} + +NTSTATUS NTAPI +ConDrvDispatch(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) +{ +#define HANDLE_CTRL_CODE(CtrlCode) \ + case CtrlCode : \ + { \ + DPRINT1("ConDrv: " #CtrlCode ", stack->FileObject = 0x%p\n", stack->FileObject); \ + if (stack->FileObject) \ + { \ + DPRINT1("stack->FileObject->FileName = %wZ\n", &stack->FileObject->FileName); \ + } \ + break; \ + } + + PIO_STACK_LOCATION stack = IoGetCurrentIrpStackLocation(Irp); + ULONG ctrlCode = stack->Parameters.DeviceIoControl.IoControlCode; + + /* Just display all the IRP codes for now... */ + switch (ctrlCode) + { + HANDLE_CTRL_CODE(IRP_MJ_CREATE); + HANDLE_CTRL_CODE(IRP_MJ_CREATE_NAMED_PIPE); + HANDLE_CTRL_CODE(IRP_MJ_CLOSE); + HANDLE_CTRL_CODE(IRP_MJ_READ); + HANDLE_CTRL_CODE(IRP_MJ_WRITE); + HANDLE_CTRL_CODE(IRP_MJ_QUERY_INFORMATION); + HANDLE_CTRL_CODE(IRP_MJ_SET_INFORMATION); + HANDLE_CTRL_CODE(IRP_MJ_QUERY_EA); + HANDLE_CTRL_CODE(IRP_MJ_SET_EA); + HANDLE_CTRL_CODE(IRP_MJ_FLUSH_BUFFERS); + HANDLE_CTRL_CODE(IRP_MJ_QUERY_VOLUME_INFORMATION); + HANDLE_CTRL_CODE(IRP_MJ_SET_VOLUME_INFORMATION); + HANDLE_CTRL_CODE(IRP_MJ_DIRECTORY_CONTROL); + HANDLE_CTRL_CODE(IRP_MJ_FILE_SYSTEM_CONTROL); + HANDLE_CTRL_CODE(IRP_MJ_DEVICE_CONTROL); + HANDLE_CTRL_CODE(IRP_MJ_INTERNAL_DEVICE_CONTROL); + HANDLE_CTRL_CODE(IRP_MJ_SHUTDOWN); + HANDLE_CTRL_CODE(IRP_MJ_LOCK_CONTROL); + HANDLE_CTRL_CODE(IRP_MJ_CLEANUP); + HANDLE_CTRL_CODE(IRP_MJ_CREATE_MAILSLOT); + HANDLE_CTRL_CODE(IRP_MJ_QUERY_SECURITY); + HANDLE_CTRL_CODE(IRP_MJ_SET_SECURITY); + HANDLE_CTRL_CODE(IRP_MJ_POWER); + HANDLE_CTRL_CODE(IRP_MJ_SYSTEM_CONTROL); + HANDLE_CTRL_CODE(IRP_MJ_DEVICE_CHANGE); + HANDLE_CTRL_CODE(IRP_MJ_QUERY_QUOTA); + HANDLE_CTRL_CODE(IRP_MJ_SET_QUOTA); + HANDLE_CTRL_CODE(IRP_MJ_PNP); + // case IRP_MJ_PNP_POWER: + // case IRP_MJ_MAXIMUM_FUNCTION: + + default: + { + DPRINT1("Unknown code %lu\n", ctrlCode); + break; + } + } + + return CompleteRequest(Irp, STATUS_SUCCESS, 0); +} + +NTSTATUS NTAPI +DriverEntry(IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath) +{ + NTSTATUS Status; + USHORT i; + PCONDRV_DRIVER DriverExtension = NULL; + + DPRINT1("Loading ReactOS Console Driver v0.0.1...\n"); + + DriverObject->DriverUnload = ConDrvUnload; + + /* Initialize the different callback function pointers */ + for (i = 0 ; i <= IRP_MJ_MAXIMUM_FUNCTION ; ++i) + DriverObject->MajorFunction[i] = ConDrvDispatch; + +#if 0 + DriverObject->MajorFunction[IRP_MJ_CREATE] = ConDrvCreate; + DriverObject->MajorFunction[IRP_MJ_CLOSE] = ConDrvClose; + + /* temporary deactivated... + DriverObject->MajorFunction[IRP_MJ_CLEANUP] = ConDrvCleanup; + */ + DriverObject->MajorFunction[IRP_MJ_READ] = ConDrvRead; + DriverObject->MajorFunction[IRP_MJ_WRITE] = ConDrvWrite; + + DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = ConDrvIoControl; +#endif + + Status = IoAllocateDriverObjectExtension(DriverObject, + DriverObject, // Unique ID for the driver object extension ==> gives it its address ! + sizeof(CONDRV_DRIVER), + (PVOID*)&DriverExtension); + if (!NT_SUCCESS(Status)) + { + DPRINT1("IoAllocateDriverObjectExtension() failed with status 0x%08lx\n", Status); + return Status; + } + RtlZeroMemory(DriverExtension, sizeof(CONDRV_DRIVER)); + + Status = ConDrvCreateController(DriverObject, RegistryPath); + + DPRINT1("Done, Status = 0x%08lx\n", Status); + return Status; +} + +VOID NTAPI +ConDrvUnload(IN PDRIVER_OBJECT DriverObject) +{ + DPRINT1("Unloading ReactOS Console Driver v0.0.1...\n"); + + /* + * Delete the Controller device. This has as effect + * to delete also all the terminals. + */ + ConDrvDeleteController(DriverObject); + + /* Sanity check: No devices must exist at this point */ + ASSERT(DriverObject->DeviceObject == NULL); + + DPRINT1("Done\n"); + return; +} + + +/* EOF */ Propchange: trunk/reactos/drivers/base/condrv/condrv.c ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/reactos/drivers/base/condrv/condrv.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/condrv…
============================================================================== --- trunk/reactos/drivers/base/condrv/condrv.h (added) +++ trunk/reactos/drivers/base/condrv/condrv.h [iso-8859-1] Sun Jul 7 15:15:10 2013 @@ -0,0 +1,47 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Console Driver + * FILE: drivers/base/condrv/condrv.h + * PURPOSE: Console Driver Management Functions + * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca(a)sfr.fr) + */ + +#ifndef __CONDRV_H__ +#define __CONDRV_H__ + +/* This is needed for VisualDDK testing */ +#ifdef __USE_VISUALDDK_AT_HOME__ + #include "VisualDDKHelpers.h" +#endif + + +#include <ntddk.h> +#include <condrv/ntddcon.h> + + +#define CONDRV_TAG ' noC' +#define DD_CONDRV_TAG '1noC' +#define CONDRV_CONS_TAG '2noC' + + +// +// Console Driver object extension +// +typedef struct _CONDRV_DRIVER +{ + UNICODE_STRING RegistryPath; + PDEVICE_OBJECT Controller; // The unique Controller device for the driver. +} CONDRV_DRIVER, *PCONDRV_DRIVER; + + + +NTSTATUS NTAPI +ConDrvCreateController(IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath); +NTSTATUS NTAPI +ConDrvDeleteController(IN PDRIVER_OBJECT DriverObject); + + +#endif // __CONDRV_H__ + +/* EOF */ Propchange: trunk/reactos/drivers/base/condrv/condrv.h ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/reactos/drivers/base/condrv/condrv.rc URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/condrv…
============================================================================== --- trunk/reactos/drivers/base/condrv/condrv.rc (added) +++ trunk/reactos/drivers/base/condrv/condrv.rc [iso-8859-1] Sun Jul 7 15:15:10 2013 @@ -0,0 +1,6 @@ + +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Console Device Driver" +#define REACTOS_STR_INTERNAL_NAME "condrv" +#define REACTOS_STR_ORIGINAL_FILENAME "condrv.sys" +#include <reactos/version.rc> Propchange: trunk/reactos/drivers/base/condrv/condrv.rc ------------------------------------------------------------------------------ svn:eol-style = native Added: trunk/reactos/drivers/base/condrv/control.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/base/condrv/contro…
============================================================================== --- trunk/reactos/drivers/base/condrv/control.c (added) +++ trunk/reactos/drivers/base/condrv/control.c [iso-8859-1] Sun Jul 7 15:15:10 2013 @@ -0,0 +1,88 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Console Driver + * FILE: drivers/base/condrv/control.c + * PURPOSE: Console Driver - Controller Device + * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca(a)sfr.fr) + */ + +/* INCLUDES *******************************************************************/ + +#include "condrv.h" + +#define NDEBUG +#include <debug.h> + + +/* FUNCTIONS ******************************************************************/ + +NTSTATUS NTAPI +ConDrvCreateController(IN PDRIVER_OBJECT DriverObject, + IN PUNICODE_STRING RegistryPath) +{ + NTSTATUS Status = STATUS_SUCCESS; + UNICODE_STRING DeviceName, SymlinkName; + PCONDRV_DRIVER DriverExtension; + PDEVICE_OBJECT Controller = NULL; + + DPRINT1("Create the Controller device...\n"); + + RtlInitUnicodeString(&DeviceName , DD_CONDRV_CTRL_DEVICE_NAME_U); + RtlInitUnicodeString(&SymlinkName, DD_CONDRV_CTRL_SYMLNK_NAME_U); + + /* Get the driver extension */ + DriverExtension = (PCONDRV_DRIVER)IoGetDriverObjectExtension(DriverObject, + DriverObject); + + /* Create the Controller device, if it doesn't exist */ + Status = IoCreateDevice(DriverObject, + 0, + (PUNICODE_STRING)&DeviceName, + FILE_DEVICE_UNKNOWN, + FILE_DEVICE_SECURE_OPEN, + FALSE, + &Controller); + if (!NT_SUCCESS(Status)) goto Done; + + Status = IoCreateSymbolicLink((PUNICODE_STRING)&SymlinkName, + (PUNICODE_STRING)&DeviceName); + if (!NT_SUCCESS(Status)) + { + IoDeleteDevice(Controller); + goto Done; + } + + Controller->Flags &= ~DO_DEVICE_INITIALIZING; + + /* Save the Controller device */ + DriverExtension->Controller = Controller; + +Done: + DPRINT1("Done, Status = 0x%08lx\n", Status); + return Status; +} + +NTSTATUS NTAPI +ConDrvDeleteController(IN PDRIVER_OBJECT DriverObject) +{ + NTSTATUS Status = STATUS_SUCCESS; + PDEVICE_OBJECT Controller; + UNICODE_STRING SymlinkName; + + DPRINT1("Delete the Controller device...\n"); + + /* Retrieve the Controller device */ + Controller = ((PCONDRV_DRIVER)IoGetDriverObjectExtension(DriverObject, DriverObject))->Controller; + if (!Controller) return STATUS_OBJECT_TYPE_MISMATCH; + + RtlInitUnicodeString(&SymlinkName, DD_CONDRV_CTRL_SYMLNK_NAME_U); + IoDeleteSymbolicLink(&SymlinkName); + + /* Delete the controller device itself */ + IoDeleteDevice(Controller); + + DPRINT1("Done, Status = 0x%08lx\n", Status); + return Status; +} + +/* EOF */ Propchange: trunk/reactos/drivers/base/condrv/control.c ------------------------------------------------------------------------------ svn:eol-style = native Propchange: trunk/reactos/include/reactos/drivers/condrv/ ------------------------------------------------------------------------------ --- bugtraq:logregex (added) +++ bugtraq:logregex Sun Jul 7 15:15:10 2013 @@ -0,0 +1,2 @@ +([Ii]ssue|[Bb]ug)s? #?(\d+)(,? ?#?(\d+))*(,? ?(and |or )?#?(\d+))? +(\d+) Propchange: trunk/reactos/include/reactos/drivers/condrv/ ------------------------------------------------------------------------------ bugtraq:message = See issue #%BUGID% for more details. Propchange: trunk/reactos/include/reactos/drivers/condrv/ ------------------------------------------------------------------------------ bugtraq:url =
http://www.reactos.org/bugzilla/show_bug.cgi?id=%BUGID%
Propchange: trunk/reactos/include/reactos/drivers/condrv/ ------------------------------------------------------------------------------ tsvn:logminsize = 10 Added: trunk/reactos/include/reactos/drivers/condrv/ntddcon.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/include/reactos/drivers/co…
============================================================================== --- trunk/reactos/include/reactos/drivers/condrv/ntddcon.h (added) +++ trunk/reactos/include/reactos/drivers/condrv/ntddcon.h [iso-8859-1] Sun Jul 7 15:15:10 2013 @@ -0,0 +1,145 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Console Driver + * FILE: include/reactos/drivers/condrv/ntddcon.h + * PURPOSE: Console Driver IOCTL Interface + * PROGRAMMERS: Hermes Belusca-Maito (hermes.belusca(a)sfr.fr) + */ + +#if (_MSC_VER >= 1020) +#pragma once +#endif + +#ifndef _NTDDCON_H_ +#define _NTDDCON_H_ + +#ifdef __cplusplus +extern "C" { +#endif + +// FIXME: Redo all the drawing since this one is quite old... + +/************************************************************************************************ + * Architecture of the Generic Terminal Driver + ************************************************************************************************ + +IN = CONIN$ = stdin +OUT = CONOUT$ = stdout +ERR = stderr + + +------------------------------+ + +-------------+ | +-----------------+ | + | |----- ERR ---->| |------+ | + | Console App |----- OUT ---->| Virtual Console |----+ | | + | 1 |<---- IN -----| 1-1 |--+ | | | + +-------------+ | +-----------------+ | | | | + | | | \ | + +-------------+ | +-----------------+ | | >--X----- ERR ----> + | |----- ERR ---->| |--|-|-/ | + | Console App |----- OUT ---->| Virtual Console |--|-+-----X----- OUT ----> + | 2 |<---- IN -----| 1-2 |--+---\ | + +-------------+ ^ | +-----------------+ \--X<---- IN ----- + | | | ^ + --+ | | . . . | | +\Console +-- \CurrentIn | | | | | + +-- \CurrentOut +----+ | | | + \CurrentErr | | Terminal 1 | | + --+ | | | + +------------------------------+ | + | + +----+----+ + . . . | \Input | + \Output + \Error + +*/ + +/* + * Remarks on the symbolic links : + * + * - \DosDevices\ is an alias to \??\ + * + * - Using "\DosDevices\Global\<name>" allows the driver to ALWAYS + * create the symbolic link in the global object namespace. Indeed, + * under Windows NT-2000, the \DosDevices\ directory was always + * global, but starting with Windows XP, it became local to a session. + * One would then use \GLOBAL??\ to access to the global directory. + * However, this name doesn't exist under Windows NT-2000. + * Therefore, we use the trick to use the 'Global' symbolic link + * defined both under Windows NT-2000 and Windows XP and later, + * which exists in \DosDevices\, to access to \??\ (global) under + * Windows NT-2000, and to \GLOBAL??\ under Windows XP and later. + */ + +// +// Controller device +// +#define DD_CONDRV_CTRL_DEVICE_NAME "\\Device\\ConDrv" +#define DD_CONDRV_CTRL_DEVICE_NAME_U L"\\Device\\ConDrv" +#define DD_CONDRV_CTRL_SYMLNK_NAME "\\DosDevices\\Global\\ConDrv" +#define DD_CONDRV_CTRL_SYMLNK_NAME_U L"\\DosDevices\\Global\\ConDrv" + + +// +// Console +// +#define DD_CONDRV_CONSOLE_DEVICE_NAME "\\Device\\Console" +#define DD_CONDRV_CONSOLE_DEVICE_NAME_U L"\\Device\\Console" +#define DD_CONDRV_CONSOLE_SYMLNK_NAME "\\DosDevices\\Global\\Console" +#define DD_CONDRV_CONSOLE_SYMLNK_NAME_U L"\\DosDevices\\Global\\Console" + + +#ifdef TELETYPE +// +// Virtual files associated with a given console +// +#define CONDRV_CONSOLE_FILE_CURRIN "\\CurrentIn" +#define CONDRV_CONSOLE_FILE_CURRIN_U L"\\CurrentIn" + +#define CONDRV_CONSOLE_FILE_CURROUT "\\CurrentOut" +#define CONDRV_CONSOLE_FILE_CURROUT_U L"\\CurrentOut" + +//#define CONDRV_CONSOLE_FILE_CURRERR "\\CurrentErr" +//#define CONDRV_CONSOLE_FILE_CURRERR_U L"\\CurrentErr" + +#define CONDRV_VC_FILE_SCRBUF "\\ScreenBuffer" +#define CONDRV_VC_FILE_SCRBUF_U L"\\ScreenBuffer" + +/*** Original names from Windows-8 condrv.sys *** + +L"\Connect" +L"\Reference" +L"\Server" +L"\Broker" + +L"\Console" +L"\Display" + +L"\Input" +L"\Output" +L"\CurrentIn" +L"\CurrentOut" +L"\ScreenBuffer" + +***/ + +#endif + + +// +// IO codes +// +#ifndef CTL_CODE + #error "CTL_CODE undefined. Include winioctl.h or wdm.h" +#endif + +#define IOCTL_CONDRV_CREATE_CONSOLE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x801, METHOD_BUFFERED, FILE_ALL_ACCESS) +#define IOCTL_CONDRV_DELETE_CONSOLE CTL_CODE(FILE_DEVICE_UNKNOWN, 0x802, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#ifdef __cplusplus +} +#endif + +#endif // _NTDDCON_H_ + +/* EOF */ Propchange: trunk/reactos/include/reactos/drivers/condrv/ntddcon.h ------------------------------------------------------------------------------ svn:eol-style = native
11 years, 5 months
1
0
0
0
[tfaber] 59446: [ATL] - Arch, don't forget to initialize your pointer
by tfaber@svn.reactos.org
Author: tfaber Date: Sun Jul 7 13:41:18 2013 New Revision: 59446 URL:
http://svn.reactos.org/svn/reactos?rev=59446&view=rev
Log: [ATL] - Arch, don't forget to initialize your pointer Modified: trunk/reactos/lib/atl/atlbase.h Modified: trunk/reactos/lib/atl/atlbase.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/atl/atlbase.h?rev=5944…
============================================================================== --- trunk/reactos/lib/atl/atlbase.h [iso-8859-1] (original) +++ trunk/reactos/lib/atl/atlbase.h [iso-8859-1] Sun Jul 7 13:41:18 2013 @@ -595,6 +595,7 @@ ATLASSERT(ppv != NULL); if (ppv == NULL) return E_POINTER; + *ppv = NULL; hResult = S_OK; if (m_pObjMap != NULL) {
11 years, 5 months
1
0
0
0
[ekohl] 59445: [SAMSRV] Start work on SamrChangePasswordUser. The new passwords can be stored but the required checks are still missing.
by ekohl@svn.reactos.org
Author: ekohl Date: Sun Jul 7 12:45:03 2013 New Revision: 59445 URL:
http://svn.reactos.org/svn/reactos?rev=59445&view=rev
Log: [SAMSRV] Start work on SamrChangePasswordUser. The new passwords can be stored but the required checks are still missing. Modified: trunk/reactos/dll/win32/samsrv/samrpc.c Modified: trunk/reactos/dll/win32/samsrv/samrpc.c URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/samsrv/samrpc.c?…
============================================================================== --- trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] (original) +++ trunk/reactos/dll/win32/samsrv/samrpc.c [iso-8859-1] Sun Jul 7 12:45:03 2013 @@ -7469,8 +7469,86 @@ IN unsigned char LmCrossEncryptionPresent, IN PENCRYPTED_LM_OWF_PASSWORD NewLmEncryptedWithNewNt) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + ENCRYPTED_LM_OWF_PASSWORD StoredLmPassword; + ENCRYPTED_NT_OWF_PASSWORD StoredNtPassword; + PSAM_DB_OBJECT UserObject; + ULONG Length; + NTSTATUS Status; + + TRACE("(%p %u %u)\n", + UserHandle, LmPresent, NtPresent); + + /* Validate the user handle */ + Status = SampValidateDbObject(UserHandle, + SamDbUserObject, + USER_CHANGE_PASSWORD, + &UserObject); + if (!NT_SUCCESS(Status)) + { + TRACE("SampValidateDbObject failed with status 0x%08lx\n", Status); + return Status; + } + + /* Retrieve the LM password */ + Length = sizeof(ENCRYPTED_LM_OWF_PASSWORD); + Status = SampGetObjectAttribute(UserObject, + L"LMPwd", + NULL, + &StoredLmPassword, + &Length); + if (!NT_SUCCESS(Status)) + { + + } + + /* Retrieve the NT password */ + Length = sizeof(ENCRYPTED_NT_OWF_PASSWORD); + Status = SampGetObjectAttribute(UserObject, + L"NTPwd", + NULL, + &StoredNtPassword, + &Length); + if (!NT_SUCCESS(Status)) + { + + } + + /* FIXME: Check if the old passwords match the stored ones */ + + + /* Store the new LM password */ + if (LmPresent) + { + Length = sizeof(ENCRYPTED_LM_OWF_PASSWORD); + Status = SampSetObjectAttribute(UserObject, + L"LMPwd", + REG_BINARY, + NewLmEncryptedWithOldLm, + Length); + if (!NT_SUCCESS(Status)) + { + goto done; + } + } + + /* Store the new NT password */ + if (NtPresent) + { + Length = sizeof(ENCRYPTED_NT_OWF_PASSWORD); + Status = SampSetObjectAttribute(UserObject, + L"NTPwd", + REG_BINARY, + NewNtEncryptedWithOldNt, + Length); + if (!NT_SUCCESS(Status)) + { + goto done; + } + } + + +done: + return Status; }
11 years, 5 months
1
0
0
0
[tfaber] 59444: [ATL] - Don't pretend success if we actually failed in CComModule::GetClassObject
by tfaber@svn.reactos.org
Author: tfaber Date: Sun Jul 7 10:20:49 2013 New Revision: 59444 URL:
http://svn.reactos.org/svn/reactos?rev=59444&view=rev
Log: [ATL] - Don't pretend success if we actually failed in CComModule::GetClassObject Modified: trunk/reactos/lib/atl/atlbase.h Modified: trunk/reactos/lib/atl/atlbase.h URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/lib/atl/atlbase.h?rev=5944…
============================================================================== --- trunk/reactos/lib/atl/atlbase.h [iso-8859-1] (original) +++ trunk/reactos/lib/atl/atlbase.h [iso-8859-1] Sun Jul 7 10:20:49 2013 @@ -617,6 +617,11 @@ objectMapEntry++; } } + if (hResult == S_OK && *ppv == NULL) + { + // FIXME: call AtlComModuleGetClassObject + hResult = CLASS_E_CLASSNOTAVAILABLE; + } return hResult; }
11 years, 5 months
1
0
0
0
← Newer
1
...
13
14
15
16
17
18
19
20
Older →
Jump to page:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Results per page:
10
25
50
100
200