Merge 15268:15329 from trunk
Modified: branches/xmlbuildsystem/reactos/bootdata/livecd.inf
Modified: branches/xmlbuildsystem/reactos/bootdata/packages/reactos.dff
Modified: branches/xmlbuildsystem/reactos/drivers/bus/serenum/detect.c
Modified: branches/xmlbuildsystem/reactos/drivers/dd/serial/create.c
Modified: branches/xmlbuildsystem/reactos/drivers/dd/serial/devctrl.c
Modified: branches/xmlbuildsystem/reactos/drivers/dd/serial/pnp.c
Modified: branches/xmlbuildsystem/reactos/include/ddk/obfuncs.h
Modified: branches/xmlbuildsystem/reactos/include/ddk/psfuncs.h
Modified: branches/xmlbuildsystem/reactos/include/ddk/pstypes.h
Modified: branches/xmlbuildsystem/reactos/lib/crt/stdlib/splitp.c
Modified: branches/xmlbuildsystem/reactos/lib/dinput/keyboard.c
Modified: branches/xmlbuildsystem/reactos/lib/dinput/mouse.c
Modified: branches/xmlbuildsystem/reactos/lib/user32/windows/hook.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/cm/cm.h
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/cm/ntfunc.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/cm/registry.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/cm/regobj.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ex/callback.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ex/event.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ex/evtpair.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ex/mutant.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ex/profile.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ex/sem.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ex/timer.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ex/win32k.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/include/internal/io.h
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/include/internal/ob.h
Modified:
branches/xmlbuildsystem/reactos/ntoskrnl/include/internal/port.h
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/include/internal/ps.h
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/io/driver.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/io/file.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/io/iocomp.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/io/iomgr.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/io/irp.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/io/share.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ke/wait.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ldr/init.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/lpc/close.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/lpc/create.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/lpc/port.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/mm/section.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ob/dirobj.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ob/handle.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ob/namespc.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ob/object.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ob/security.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ob/symlink.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ob/wait.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ps/cid.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ps/job.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ps/psmgr.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ps/security.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/ps/win32.c
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/se/token.c
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/Sv.rc
Added: branches/xmlbuildsystem/reactos/subsys/system/winefile/cs.rc
Deleted: branches/xmlbuildsystem/reactos/subsys/system/winefile/cz.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/de.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/en.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/es.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/fr.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/hu.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/it.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/nl.rc
Added: branches/xmlbuildsystem/reactos/subsys/system/winefile/pl.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/pt.rc
Modified:
branches/xmlbuildsystem/reactos/subsys/system/winefile/resource.h
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/ru.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/si.rc
Modified:
branches/xmlbuildsystem/reactos/subsys/system/winefile/winefile.c
Modified:
branches/xmlbuildsystem/reactos/subsys/system/winefile/winefile.dsp
Modified:
branches/xmlbuildsystem/reactos/subsys/system/winefile/winefile.rc
Modified: branches/xmlbuildsystem/reactos/subsys/system/winefile/zh.rc
Modified:
branches/xmlbuildsystem/reactos/subsys/win32k/include/desktop.h
Modified:
branches/xmlbuildsystem/reactos/subsys/win32k/include/msgqueue.h
Modified: branches/xmlbuildsystem/reactos/subsys/win32k/include/winsta.h
Modified: branches/xmlbuildsystem/reactos/subsys/win32k/main/dllmain.c
Modified:
branches/xmlbuildsystem/reactos/subsys/win32k/ntuser/callback.c
Modified: branches/xmlbuildsystem/reactos/subsys/win32k/ntuser/desktop.c
Modified: branches/xmlbuildsystem/reactos/subsys/win32k/ntuser/hook.c
Modified: branches/xmlbuildsystem/reactos/subsys/win32k/ntuser/input.c
Modified: branches/xmlbuildsystem/reactos/subsys/win32k/ntuser/message.c
Modified:
branches/xmlbuildsystem/reactos/subsys/win32k/ntuser/msgqueue.c
Modified: branches/xmlbuildsystem/reactos/subsys/win32k/ntuser/winsta.c
Modified: branches/xmlbuildsystem/reactos/subsys/win32k/w32k.h
Modified: branches/xmlbuildsystem/reactos/tools/cdmake/cdmake.c
Modified: branches/xmlbuildsystem/reactos/w32api/include/ddk/winddk.h
Modified: branches/xmlbuildsystem/reactos/w32api/include/winuser.h
_____
Modified: branches/xmlbuildsystem/reactos/bootdata/livecd.inf
--- branches/xmlbuildsystem/reactos/bootdata/livecd.inf 2005-05-16
12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/bootdata/livecd.inf 2005-05-16
12:32:10 UTC (rev 15339)
@@ -19,6 +19,9 @@
; Shell
HKLM,"SYSTEM\Setup","CmdLine",0x00020000,"%SystemRoot%\explorer.exe"
+; Serial mouse driver
+HKLM,"SYSTEM\CurrentControlSet\Services\Sermouse","Start",0x00010001,0x
00000001
+
; User Profile List
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\ProfileList",,0x00000012
HKLM,"SOFTWARE\Microsoft\Windows
NT\CurrentVersion\ProfileList","ProfilesDirectory",0x00020000,"%SystemDr
ive%\Profiles"
_____
Modified: branches/xmlbuildsystem/reactos/bootdata/packages/reactos.dff
--- branches/xmlbuildsystem/reactos/bootdata/packages/reactos.dff
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/bootdata/packages/reactos.dff
2005-05-16 12:32:10 UTC (rev 15339)
@@ -169,6 +169,7 @@
subsys\system\winlogon\winlogon.exe 1
subsys\system\winefile\winefile.exe 1
subsys\system\dhcp\dhcp.exe 1
+subsys\system\sm\sm.exe 1
services\eventlog\eventlog.exe 1
services\rpcss\rpcss.exe 1
services\umpnpmgr\umpnpmgr.exe 1
_____
Modified: branches/xmlbuildsystem/reactos/drivers/bus/serenum/detect.c
--- branches/xmlbuildsystem/reactos/drivers/bus/serenum/detect.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/drivers/bus/serenum/detect.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -62,6 +62,44 @@
}
static NTSTATUS
+SerenumSendIrp(
+ IN PDEVICE_OBJECT DeviceObject,
+ IN ULONG MajorFunction)
+{
+ KEVENT Event;
+ PIRP Irp;
+ IO_STATUS_BLOCK IoStatus;
+ NTSTATUS Status;
+
+ KeInitializeEvent(&Event, NotificationEvent, FALSE);
+
+ Irp = IoBuildSynchronousFsdRequest(
+ MajorFunction,
+ DeviceObject,
+ NULL,
+ 0,
+ NULL,
+ &Event,
+ &IoStatus);
+ if (Irp == NULL)
+ {
+ DPRINT("Serenum: IoBuildSynchronousFsdRequest()
failed\n");
+ return STATUS_INSUFFICIENT_RESOURCES;
+ }
+
+ Status = IoCallDriver(DeviceObject, Irp);
+
+ if (Status == STATUS_PENDING)
+ {
+ DPRINT("Serenum: Operation pending\n");
+ KeWaitForSingleObject(&Event, Suspended, KernelMode,
FALSE, NULL);
+ Status = IoStatus.Status;
+ }
+
+ return Status;
+}
+
+static NTSTATUS
ReadBytes(
IN PDEVICE_OBJECT LowerDevice,
OUT PUCHAR Buffer,
@@ -224,91 +262,95 @@
SERIAL_TIMEOUTS Timeouts;
SERIALPERF_STATS PerfStats;
NTSTATUS Status;
+
+ /* Open port */
+ Status = SerenumSendIrp(LowerDevice, IRP_MJ_CREATE);
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* 1. COM port initialization, check for device enumerate */
CHECKPOINT;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
SerenumWait(200);
Size = sizeof(Msr);
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_GET_MODEMSTATUS,
NULL, 0, &Msr, &Size);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
if ((Msr & SR_MSR_DSR) == 0) goto SerenumDisconnectIdle;
/* 2. COM port setup, 1st phase */
CHECKPOINT;
- BaudRate = SERIAL_BAUD_1200;
+ BaudRate = 1200;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_BAUD_RATE,
&BaudRate, sizeof(BaudRate), NULL, 0);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Lcr.WordLength = 7;
Lcr.Parity = NO_PARITY;
Lcr.StopBits = STOP_BIT_1;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_LINE_CONTROL,
&Lcr, sizeof(Lcr), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
SerenumWait(200);
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
SerenumWait(200);
/* 3. Wait for response, 1st phase */
CHECKPOINT;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Timeouts.ReadIntervalTimeout = 0;
Timeouts.ReadTotalTimeoutMultiplier = 0;
Timeouts.ReadTotalTimeoutConstant = 200;
Timeouts.WriteTotalTimeoutMultiplier =
Timeouts.WriteTotalTimeoutConstant = 0;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_TIMEOUTS,
&Timeouts, sizeof(Timeouts), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = ReadBytes(LowerDevice, Buffer, sizeof(Buffer), &Size);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
if (Size != 0) goto SerenumCollectPnpComDeviceId;
/* 4. COM port setup, 2nd phase */
CHECKPOINT;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Purge = SERIAL_PURGE_RXABORT | SERIAL_PURGE_RXCLEAR;
Status = SerenumDeviceIoControl(LowerDevice, IOCTL_SERIAL_PURGE,
&Purge, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
SerenumWait(200);
/* 5. Wait for response, 2nd phase */
CHECKPOINT;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = ReadBytes(LowerDevice, Buffer, 1, &TotalBytesReceived);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
if (TotalBytesReceived != 0) goto SerenumCollectPnpComDeviceId;
Size = sizeof(Msr);
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_GET_MODEMSTATUS,
NULL, 0, &Msr, &Size);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
if ((Msr & SR_MSR_DSR) == 0) goto SerenumVerifyDisconnect; else
goto SerenumConnectIdle;
/* 6. Collect PnP COM device ID */
@@ -319,14 +361,14 @@
Timeouts.ReadTotalTimeoutConstant = 2200;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_TIMEOUTS,
&Timeouts, sizeof(Timeouts), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = ReadBytes(LowerDevice, &Buffer[TotalBytesReceived],
sizeof(Buffer) - TotalBytesReceived, &Size);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
TotalBytesReceived += Size;
Size = sizeof(PerfStats);
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_GET_STATS,
NULL, 0, &PerfStats, &Size);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
if (PerfStats.FrameErrorCount + PerfStats.ParityErrorCount != 0)
goto SerenumConnectIdle;
for (i = 0; i < TotalBytesReceived; i++)
{
@@ -336,7 +378,10 @@
if (TotalBytesReceived == 1 || BufferContainsEndId)
{
if (SerenumIsValidPnpIdString(Buffer,
TotalBytesReceived))
- return ReportDetectedPnpDevice(Buffer,
TotalBytesReceived);
+ {
+ Status = ReportDetectedPnpDevice(Buffer,
TotalBytesReceived);
+ goto ByeBye;
+ }
goto SerenumConnectIdle;
}
if (!BufferContainsBeginId) goto SerenumConnectIdle;
@@ -344,7 +389,7 @@
Size = sizeof(Msr);
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_GET_MODEMSTATUS,
NULL, 0, &Msr, &Size);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
if ((Msr & SR_MSR_DSR) == 0) goto SerenumVerifyDisconnect;
/* 7. Verify disconnect */
@@ -352,10 +397,10 @@
CHECKPOINT;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
SerenumWait(5000);
goto SerenumDisconnectIdle;
@@ -364,24 +409,25 @@
CHECKPOINT;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
- BaudRate = SERIAL_BAUD_300;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
+ BaudRate = 300;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_BAUD_RATE,
&BaudRate, sizeof(BaudRate), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Lcr.WordLength = 7;
Lcr.Parity = NO_PARITY;
Lcr.StopBits = STOP_BIT_1;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_LINE_CONTROL,
&Lcr, sizeof(Lcr), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
if (TotalBytesReceived == 0)
- return STATUS_DEVICE_NOT_CONNECTED;
+ Status = STATUS_DEVICE_NOT_CONNECTED;
else
- return STATUS_SUCCESS;
+ Status = STATUS_SUCCESS;
+ goto ByeBye;
/* 9. Disconnect idle */
SerenumDisconnectIdle:
@@ -389,21 +435,27 @@
/* FIXME: report to OS device removal, if it was present */
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_CLR_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
- BaudRate = SERIAL_BAUD_300;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
+ BaudRate = 300;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_BAUD_RATE,
&BaudRate, sizeof(BaudRate), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Lcr.WordLength = 7;
Lcr.Parity = NO_PARITY;
Lcr.StopBits = STOP_BIT_1;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_LINE_CONTROL,
&Lcr, sizeof(Lcr), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
- return STATUS_DEVICE_NOT_CONNECTED;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
+ Status = STATUS_DEVICE_NOT_CONNECTED;
+
+ByeBye:
+ /* Close port */
+ SerenumSendIrp(LowerDevice, IRP_MJ_CLOSE);
+ SerenumSendIrp(LowerDevice, IRP_MJ_CLEANUP);
+ return Status;
}
NTSTATUS
@@ -429,13 +481,17 @@
LowerDevice);
RtlZeroMemory(Buffer, sizeof(Buffer));
+
+ /* Open port */
+ Status = SerenumSendIrp(LowerDevice, IRP_MJ_CREATE);
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* Reset UART */
CHECKPOINT;
Mcr = 0; /* MCR: DTR/RTS/OUT2 off */
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_MODEM_CONTROL,
&Mcr, sizeof(Mcr), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* Set communications parameters */
CHECKPOINT;
@@ -443,26 +499,26 @@
Fcr = 0;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_FIFO_CONTROL,
&Fcr, sizeof(Fcr), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* Set serial port speed */
- BaudRate = SERIAL_BAUD_1200;
+ BaudRate = 1200;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_BAUD_RATE,
&BaudRate, sizeof(BaudRate), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* Set LCR */
LCR.WordLength = 7;
LCR.Parity = NO_PARITY;
LCR.StopBits = STOP_BITS_2;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_LINE_CONTROL,
&LCR, sizeof(LCR), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* Flush receive buffer */
CHECKPOINT;
Command = SERIAL_PURGE_RXCLEAR;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_MODEM_CONTROL,
&Command, sizeof(Command), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* Wait 100 ms */
SerenumWait(100);
@@ -470,10 +526,10 @@
CHECKPOINT;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_DTR,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_RTS,
NULL, 0, NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* Set timeout to 500 microseconds */
CHECKPOINT;
@@ -483,12 +539,12 @@
Timeouts.WriteTotalTimeoutMultiplier =
Timeouts.WriteTotalTimeoutConstant = 0;
Status = SerenumDeviceIoControl(LowerDevice,
IOCTL_SERIAL_SET_TIMEOUTS,
&Timeouts, sizeof(Timeouts), NULL, NULL);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
/* Fill the read buffer */
CHECKPOINT;
Status = ReadBytes(LowerDevice, Buffer,
sizeof(Buffer)/sizeof(Buffer[0]), &Count);
- if (!NT_SUCCESS(Status)) return Status;
+ if (!NT_SUCCESS(Status)) goto ByeBye;
for (i = 0; i < Count; i++)
{
@@ -506,7 +562,7 @@
&DeviceDescription, &DeviceId,
&HardwareIds, &CompatibleIds);
RtlFreeUnicodeString(&HardwareIds);
RtlFreeUnicodeString(&CompatibleIds);
- return Status;
+ goto ByeBye;
}
else if (Buffer[i] == 'M')
{
@@ -514,7 +570,8 @@
if (i == sizeof(Buffer) - 1)
{
/* Overflow Error */
- return STATUS_DEVICE_NOT_CONNECTED;
+ Status = STATUS_DEVICE_NOT_CONNECTED;
+ goto ByeBye;
}
switch (Buffer[i + 1])
{
@@ -539,9 +596,15 @@
&DeviceDescription, &DeviceId,
&HardwareIds, &CompatibleIds);
RtlFreeUnicodeString(&HardwareIds);
RtlFreeUnicodeString(&CompatibleIds);
- return Status;
+ goto ByeBye;
}
}
- return STATUS_DEVICE_NOT_CONNECTED;
+ Status = STATUS_DEVICE_NOT_CONNECTED;
+
+ByeBye:
+ /* Close port */
+ SerenumSendIrp(LowerDevice, IRP_MJ_CLOSE);
+ SerenumSendIrp(LowerDevice, IRP_MJ_CLEANUP);
+ return Status;
}
_____
Modified: branches/xmlbuildsystem/reactos/drivers/dd/serial/create.c
--- branches/xmlbuildsystem/reactos/drivers/dd/serial/create.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/drivers/dd/serial/create.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -17,17 +17,13 @@
IN PIRP Irp)
{
PIO_STACK_LOCATION Stack;
- PFILE_OBJECT FileObject;
PSERIAL_DEVICE_EXTENSION DeviceExtension;
NTSTATUS Status;
DPRINT("Serial: IRP_MJ_CREATE\n");
Stack = IoGetCurrentIrpStackLocation(Irp);
- FileObject = Stack->FileObject;
DeviceExtension =
(PSERIAL_DEVICE_EXTENSION)DeviceObject->DeviceExtension;
- ASSERT(FileObject);
-
if (Stack->Parameters.Create.Options & FILE_DIRECTORY_FILE)
{
CHECKPOINT;
@@ -35,14 +31,6 @@
goto ByeBye;
}
- if (FileObject->FileName.Length != 0 ||
- FileObject->RelatedFileObject != NULL)
- {
- CHECKPOINT;
- Status = STATUS_ACCESS_DENIED;
- goto ByeBye;
- }
-
if(DeviceExtension->IsOpened)
{
DPRINT("Serial: COM%lu is already opened\n",
DeviceExtension->ComPort);
_____
Modified: branches/xmlbuildsystem/reactos/drivers/dd/serial/devctrl.c
--- branches/xmlbuildsystem/reactos/drivers/dd/serial/devctrl.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/drivers/dd/serial/devctrl.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -51,60 +51,29 @@
IN PSERIAL_DEVICE_EXTENSION DeviceExtension,
IN ULONG NewBaudRate)
{
+ ULONG BaudRate;
USHORT divisor;
PUCHAR ComPortBase = (PUCHAR)DeviceExtension->BaseAddress;
- ULONG BaudRate;
NTSTATUS Status = STATUS_SUCCESS;
- if (NewBaudRate & SERIAL_BAUD_USER)
- {
- BaudRate = NewBaudRate & ~SERIAL_BAUD_USER;
- divisor = (USHORT)(BAUD_CLOCK / (CLOCKS_PER_BIT *
BaudRate));
- }
- else
- {
- switch (NewBaudRate)
- {
- case SERIAL_BAUD_075: divisor = 0x600;
BaudRate = 75; break;
- case SERIAL_BAUD_110: divisor = 0x400;
BaudRate = 110; break;
- case SERIAL_BAUD_134_5: divisor = 0x360;
BaudRate = 134; break;
- case SERIAL_BAUD_150: divisor = 0x300;
BaudRate = 150; break;
- case SERIAL_BAUD_300: divisor = 0x180;
BaudRate = 300; break;
- case SERIAL_BAUD_600: divisor = 0xc0;
BaudRate = 600; break;
- case SERIAL_BAUD_1200: divisor = 0x60;
BaudRate = 1200; break;
- case SERIAL_BAUD_1800: divisor = 0x40;
BaudRate = 1800; break;
- case SERIAL_BAUD_2400: divisor = 0x30;
BaudRate = 2400; break;
- case SERIAL_BAUD_4800: divisor = 0x18;
BaudRate = 4800; break;
- case SERIAL_BAUD_7200: divisor = 0x10;
BaudRate = 7200; break;
- case SERIAL_BAUD_9600: divisor = 0xc;
BaudRate = 9600; break;
- case SERIAL_BAUD_14400: divisor = 0x8;
BaudRate = 14400; break;
- case SERIAL_BAUD_38400: divisor = 0x3;
BaudRate = 38400; break;
- case SERIAL_BAUD_57600: divisor = 0x2;
BaudRate = 57600; break;
- case SERIAL_BAUD_115200: divisor = 0x1;
BaudRate = 115200; break;
- case SERIAL_BAUD_56K: divisor = 0x2;
BaudRate = 57600; break;
- case SERIAL_BAUD_128K: divisor = 0x1;
BaudRate = 115200; break;
- default: Status = STATUS_INVALID_PARAMETER;
- }
- }
+ divisor = (USHORT)(BAUD_CLOCK / (CLOCKS_PER_BIT * NewBaudRate));
+ BaudRate = BAUD_CLOCK / (CLOCKS_PER_BIT * divisor);
+ Status = IoAcquireRemoveLock(&DeviceExtension->RemoveLock,
(PVOID)DeviceExtension->ComPort);
if (NT_SUCCESS(Status))
{
- Status =
IoAcquireRemoveLock(&DeviceExtension->RemoveLock,
(PVOID)DeviceExtension->ComPort);
- if (NT_SUCCESS(Status))
- {
- UCHAR Lcr;
- DPRINT("Serial: SerialSetBaudRate(COM%lu, %lu
Bauds)\n", DeviceExtension->ComPort, BaudRate);
- /* Set Bit 7 of LCR to expose baud registers */
- Lcr = READ_PORT_UCHAR(SER_LCR(ComPortBase));
- WRITE_PORT_UCHAR(SER_LCR(ComPortBase), Lcr |
SR_LCR_DLAB);
- /* Write the baud rate */
- WRITE_PORT_UCHAR(SER_DLL(ComPortBase), divisor &
0xff);
- WRITE_PORT_UCHAR(SER_DLM(ComPortBase), divisor
> 8);
- /* Switch back to normal registers
*/
- WRITE_PORT_UCHAR(SER_LCR(ComPortBase), Lcr);
+ UCHAR Lcr;
+ DPRINT("Serial: SerialSetBaudRate(COM%lu, %lu Bauds)\n",
DeviceExtension->ComPort, BaudRate);
+ /* Set Bit 7 of LCR to expose baud registers */
+ Lcr = READ_PORT_UCHAR(SER_LCR(ComPortBase));
+ WRITE_PORT_UCHAR(SER_LCR(ComPortBase), Lcr |
SR_LCR_DLAB);
+ /* Write the baud rate */
+ WRITE_PORT_UCHAR(SER_DLL(ComPortBase), divisor & 0xff);
+ WRITE_PORT_UCHAR(SER_DLM(ComPortBase), divisor
> 8);
+ /* Switch back to normal registers */
+ WRITE_PORT_UCHAR(SER_LCR(ComPortBase), Lcr);
-
IoReleaseRemoveLock(&DeviceExtension->RemoveLock,
(PVOID)DeviceExtension->ComPort);
- }
+ IoReleaseRemoveLock(&DeviceExtension->RemoveLock,
(PVOID)DeviceExtension->ComPort);
}
if (NT_SUCCESS(Status))
@@ -244,16 +213,14 @@
| SERIAL_BAUD_150 | SERIAL_BAUD_300 | SERIAL_BAUD_600 |
SERIAL_BAUD_1200
| SERIAL_BAUD_1800 | SERIAL_BAUD_2400 | SERIAL_BAUD_4800
| SERIAL_BAUD_7200
| SERIAL_BAUD_9600 | SERIAL_BAUD_USER;
- pCommProp->MaxBaud = SERIAL_BAUD_9600;
+ pCommProp->MaxBaud = SERIAL_BAUD_USER;
if (DeviceExtension->UartType >= Uart16450)
{
pCommProp->SettableBaud |= SERIAL_BAUD_14400 |
SERIAL_BAUD_19200 | SERIAL_BAUD_38400;
- pCommProp->MaxBaud = SERIAL_BAUD_38400;
}
if (DeviceExtension->UartType >= Uart16550)
{
pCommProp->SettableBaud |= SERIAL_BAUD_56K |
SERIAL_BAUD_57600 | SERIAL_BAUD_115200 | SERIAL_BAUD_128K;
- pCommProp->MaxBaud = SERIAL_BAUD_115200;
}
pCommProp->SettableData = SERIAL_DATABITS_5 | SERIAL_DATABITS_6
| SERIAL_DATABITS_7 | SERIAL_DATABITS_8;
_____
Modified: branches/xmlbuildsystem/reactos/drivers/dd/serial/pnp.c
--- branches/xmlbuildsystem/reactos/drivers/dd/serial/pnp.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/drivers/dd/serial/pnp.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -154,7 +154,7 @@
ASSERT(DeviceExtension);
ASSERT(DeviceExtension->PnpState == dsStopped);
- DeviceExtension->BaudRate = 19200 | SERIAL_BAUD_USER;
+ DeviceExtension->BaudRate = 19200;
DeviceExtension->BaseAddress = 0;
Dirql = 0;
for (i = 0; i < ResourceList->Count; i++)
@@ -308,8 +308,33 @@
switch (MinorFunction)
{
- case IRP_MN_START_DEVICE:
+ /* FIXME: do all these minor functions
+ IRP_MN_QUERY_REMOVE_DEVICE 0x1
+ IRP_MN_REMOVE_DEVICE 0x2
{
+ DPRINT("Serial: IRP_MJ_PNP /
IRP_MN_REMOVE_DEVICE\n");
+ IoAcquireRemoveLock
+ IoReleaseRemoveLockAndWait
+ pass request to DeviceExtension-LowerDriver
+ disable interface
+ IoDeleteDevice(Fdo) and/or IoDetachDevice
+ break;
+ }
+ IRP_MN_CANCEL_REMOVE_DEVICE 0x3
+ IRP_MN_STOP_DEVICE 0x4
+ IRP_MN_QUERY_STOP_DEVICE 0x5
+ IRP_MN_CANCEL_STOP_DEVICE 0x6
+ IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations (optional)
0x7
+ IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations
(optional) 0x7
+ IRP_MN_QUERY_INTERFACE (optional) 0x8
+ IRP_MN_QUERY_CAPABILITIES (optional) 0x9
+ IRP_MN_FILTER_RESOURCE_REQUIREMENTS (optional) 0xd
+ IRP_MN_QUERY_PNP_DEVICE_STATE (optional) 0x14
+ IRP_MN_DEVICE_USAGE_NOTIFICATION (required or optional)
0x16
+ IRP_MN_SURPRISE_REMOVAL 0x17
+ */
+ case IRP_MN_START_DEVICE: /* 0x0 */
+ {
BOOLEAN ConflictDetected;
DPRINT("Serial: IRP_MJ_PNP /
IRP_MN_START_DEVICE\n");
@@ -355,29 +380,27 @@
Stack->Parameters.StartDevice.AllocatedResources);
break;
}
- /* IRP_MN_QUERY_STOP_DEVICE (FIXME: required) */
- /* IRP_MN_STOP_DEVICE (FIXME: required) */
- /* IRP_MN_CANCEL_STOP_DEVICE (FIXME: required) */
- /* IRP_MN_QUERY_REMOVE_DEVICE (FIXME: required) */
- /* case IRP_MN_REMOVE_DEVICE (FIXME: required) */
- /*{
- DPRINT("Serial: IRP_MJ_PNP /
IRP_MN_REMOVE_DEVICE\n");
- IoAcquireRemoveLock
- IoReleaseRemoveLockAndWait
- pass request to DeviceExtension-LowerDriver
- disable interface
- IoDeleteDevice(Fdo) and/or IoDetachDevice
+ case IRP_MN_QUERY_DEVICE_RELATIONS: /* (optional) 0x7 */
+ {
+ switch
(Stack->Parameters.QueryDeviceRelations.Type)
+ {
+ case BusRelations:
+ {
+ DPRINT("Serial: IRP_MJ_PNP /
IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations\n");
+ return
ForwardIrpAndForget(DeviceObject, Irp);
+ }
+ case RemovalRelations:
+ {
+ DPRINT("Serial: IRP_MJ_PNP /
IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations\n");
+ return
ForwardIrpAndForget(DeviceObject, Irp);
+ }
+ default:
+ DPRINT1("Serial: IRP_MJ_PNP /
IRP_MN_QUERY_DEVICE_RELATIONS / Unknown type 0x%lx\n",
+
Stack->Parameters.QueryDeviceRelations.Type);
+ return
ForwardIrpAndForget(DeviceObject, Irp);
+ }
break;
- }*/
- /* IRP_MN_CANCEL_REMOVE_DEVICE (FIXME: required) */
- /* IRP_MN_SURPRISE_REMOVAL (FIXME: required) */
- /* IRP_MN_QUERY_CAPABILITIES (optional) */
- /* IRP_MN_QUERY_PNP_DEVICE_STATE (optional) */
- /* IRP_MN_FILTER_RESOURCE_REQUIREMENTS (optional) */
- /* IRP_MN_DEVICE_USAGE_NOTIFICATION (FIXME: required or
optional ???) */
- /* IRP_MN_QUERY_DEVICE_RELATIONS / BusRelations
(optional) */
- /* IRP_MN_QUERY_DEVICE_RELATIONS / RemovalRelations
(optional) */
- /* IRP_MN_QUERY_INTERFACE (optional) */
+ }
default:
{
DPRINT1("Serial: unknown minor function 0x%x\n",
MinorFunction);
_____
Modified: branches/xmlbuildsystem/reactos/include/ddk/obfuncs.h
--- branches/xmlbuildsystem/reactos/include/ddk/obfuncs.h
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/include/ddk/obfuncs.h
2005-05-16 12:32:10 UTC (rev 15339)
@@ -2,6 +2,121 @@
#define _INCLUDE_DDK_OBFUNCS_H
/* OBJECT MANAGER
************************************************************/
+typedef enum _OB_OPEN_REASON
+{
+ ObCreateHandle,
+ ObOpenHandle,
+ ObDuplicateHandle,
+ ObInheritHandle,
+ ObMaxOpenReason
+} OB_OPEN_REASON;
+
+/* TEMPORARY HACK */
+typedef NTSTATUS STDCALL_FUNC
+(*OB_CREATE_METHOD)(PVOID ObjectBody,
+ PVOID Parent,
+ PWSTR RemainingPath,
+ struct _OBJECT_ATTRIBUTES* ObjectAttributes);
+
+/* Object Callbacks */
+typedef NTSTATUS STDCALL_FUNC
+(*OB_OPEN_METHOD)(OB_OPEN_REASON Reason,
+ PVOID ObjectBody,
+ PEPROCESS Process,
+ ULONG HandleCount,
+ ACCESS_MASK GrantedAccess);
+
+typedef NTSTATUS STDCALL_FUNC
+(*OB_PARSE_METHOD)(PVOID Object,
+ PVOID *NextObject,
+ PUNICODE_STRING FullPath,
+ PWSTR *Path,
+ ULONG Attributes);
+
+typedef VOID STDCALL_FUNC
+(*OB_DELETE_METHOD)(PVOID DeletedObject);
+
+typedef VOID STDCALL_FUNC
+(*OB_CLOSE_METHOD)(PVOID ClosedObject, ULONG HandleCount);
+
+typedef VOID STDCALL_FUNC
+(*OB_DUMP_METHOD)(VOID);
+
+typedef NTSTATUS STDCALL_FUNC
+(*OB_OKAYTOCLOSE_METHOD)(VOID);
+
+typedef NTSTATUS STDCALL_FUNC
+(*OB_QUERYNAME_METHOD)(PVOID ObjectBody,
+ POBJECT_NAME_INFORMATION ObjectNameInfo,
+ ULONG Length,
+ PULONG ReturnLength);
+
+typedef PVOID STDCALL_FUNC
+(*OB_FIND_METHOD)(PVOID WinStaObject,
+ PWSTR Name,
+ ULONG Attributes);
+
+typedef NTSTATUS STDCALL_FUNC
+(*OB_SECURITY_METHOD)(PVOID ObjectBody,
+ SECURITY_OPERATION_CODE OperationCode,
+ SECURITY_INFORMATION SecurityInformation,
+ PSECURITY_DESCRIPTOR SecurityDescriptor,
+ PULONG BufferLength);
+
+typedef struct _OBJECT_CREATE_INFORMATION
+{
+ ULONG Attributes;
+ HANDLE RootDirectory;
+ PVOID ParseContext;
+ KPROCESSOR_MODE ProbeMode;
+ ULONG PagedPoolCharge;
+ ULONG NonPagedPoolCharge;
+ ULONG SecurityDescriptorCharge;
+ PSECURITY_DESCRIPTOR SecurityDescriptor;
+ PSECURITY_QUALITY_OF_SERVICE SecurityQos;
+ SECURITY_QUALITY_OF_SERVICE SecurityQualityOfService;
+} OBJECT_CREATE_INFORMATION, *POBJECT_CREATE_INFORMATION;
+
+typedef struct _OBJECT_TYPE_INITIALIZER
+{
+ WORD Length;
+ UCHAR UseDefaultObject;
+ UCHAR CaseInsensitive;
+ ULONG InvalidAttributes;
+ GENERIC_MAPPING GenericMapping;
+ ULONG ValidAccessMask;
+ UCHAR SecurityRequired;
+ UCHAR MaintainHandleCount;
+ UCHAR MaintainTypeList;
+ POOL_TYPE PoolType;
+ ULONG DefaultPagedPoolCharge;
+ ULONG DefaultNonPagedPoolCharge;
+ OB_DUMP_METHOD DumpProcedure;
+ OB_OPEN_METHOD OpenProcedure;
+ OB_CLOSE_METHOD CloseProcedure;
+ OB_DELETE_METHOD DeleteProcedure;
+ OB_PARSE_METHOD ParseProcedure;
+ OB_SECURITY_METHOD SecurityProcedure;
+ OB_QUERYNAME_METHOD QueryNameProcedure;
+ OB_OKAYTOCLOSE_METHOD OkayToCloseProcedure;
+} OBJECT_TYPE_INITIALIZER, *POBJECT_TYPE_INITIALIZER;
+
+typedef struct _OBJECT_TYPE
+{
+ ERESOURCE Mutex; /* Used to lock the Object Type
*/
+ LIST_ENTRY TypeList; /* Links all the Types Together
for Debugging */
+ UNICODE_STRING Name; /* Name of the Type */
+ PVOID DefaultObject; /* What Object to use during a
Wait (ie, FileObjects wait on FileObject->Event) */
+ ULONG Index; /* Index of this Type in the
Object Directory */
+ ULONG TotalNumberOfObjects; /* Total number of objects of
this type */
+ ULONG TotalNumberOfHandles; /* Total number of handles of
this type */
+ ULONG HighWaterNumberOfObjects; /* Peak number of objects of
this type */
+ ULONG HighWaterNumberOfHandles; /* Peak number of handles of
this type */
+ OBJECT_TYPE_INITIALIZER TypeInfo; /* Information captured during
type creation */
+ ULONG Key; /* Key to use when allocating
objects of this type */
+ ERESOURCE ObjectLocks[4]; /* Locks for locking the
Objects */
+} OBJECT_TYPE;
+
NTSTATUS STDCALL
ObAssignSecurity(IN PACCESS_STATE AccessState,
IN PSECURITY_DESCRIPTOR SecurityDescriptor,
_____
Modified: branches/xmlbuildsystem/reactos/include/ddk/psfuncs.h
--- branches/xmlbuildsystem/reactos/include/ddk/psfuncs.h
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/include/ddk/psfuncs.h
2005-05-16 12:32:10 UTC (rev 15339)
@@ -356,11 +356,12 @@
PVOID Win32Thread
);
+struct _W32_OBJECT_CALLBACK;
VOID STDCALL
STDCALL PsEstablishWin32Callouts (PW32_PROCESS_CALLBACK
W32ProcessCallback,
PW32_THREAD_CALLBACK W32ThreadCallback,
- PW32_OBJECT_CALLBACK W32ObjectCallback,
+ struct _W32_OBJECT_CALLBACK
*W32ObjectCallback,
PVOID Param4,
ULONG W32ThreadSize,
ULONG W32ProcessSize);
_____
Modified: branches/xmlbuildsystem/reactos/include/ddk/pstypes.h
--- branches/xmlbuildsystem/reactos/include/ddk/pstypes.h
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/include/ddk/pstypes.h
2005-05-16 12:32:10 UTC (rev 15339)
@@ -66,41 +66,7 @@
typedef NTSTATUS STDCALL_FUNC
(*PW32_THREAD_CALLBACK)(struct _ETHREAD *Thread,
BOOLEAN Create);
-
-/*
- * Callbacks used for Win32 objects... this define won't be needed
after the Object Manager
- * rewrite -- Alex
- */
-typedef NTSTATUS STDCALL_FUNC
-(*OBJECT_CREATE_ROUTINE)(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- struct _OBJECT_ATTRIBUTES* ObjectAttributes);
-
-typedef NTSTATUS STDCALL_FUNC
-(*OBJECT_PARSE_ROUTINE)(PVOID Object,
- PVOID *NextObject,
- PUNICODE_STRING FullPath,
- PWSTR *Path,
- ULONG Attributes);
-typedef VOID STDCALL_FUNC
-(*OBJECT_DELETE_ROUTINE)(PVOID DeletedObject);
-
-typedef PVOID STDCALL_FUNC
-(*OBJECT_FIND_ROUTINE)(PVOID WinStaObject,
- PWSTR Name,
- ULONG Attributes);
-
-typedef struct _W32_OBJECT_CALLBACK {
- OBJECT_CREATE_ROUTINE WinStaCreate;
- OBJECT_PARSE_ROUTINE WinStaParse;
- OBJECT_DELETE_ROUTINE WinStaDelete;
- OBJECT_FIND_ROUTINE WinStaFind;
- OBJECT_CREATE_ROUTINE DesktopCreate;
- OBJECT_DELETE_ROUTINE DesktopDelete;
-} W32_OBJECT_CALLBACK, *PW32_OBJECT_CALLBACK;
-
typedef struct _STACK_INFORMATION
{
PVOID BaseAddress;
_____
Modified: branches/xmlbuildsystem/reactos/lib/crt/stdlib/splitp.c
--- branches/xmlbuildsystem/reactos/lib/crt/stdlib/splitp.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/lib/crt/stdlib/splitp.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -8,9 +8,9 @@
*/
void _tsplitpath(const _TCHAR* path, _TCHAR* drive, _TCHAR* dir,
_TCHAR* fname, _TCHAR* ext)
{
- _TCHAR* tmp_drive;
- _TCHAR* tmp_dir;
- _TCHAR* tmp_ext;
+ _TCHAR* tmp_drive = NULL;
+ _TCHAR* tmp_dir = NULL;
+ _TCHAR* tmp_ext = NULL;
tmp_drive = (_TCHAR*)_tcschr(path,':');
if (drive)
@@ -44,8 +44,9 @@
}
}
- tmp_ext = (_TCHAR*)_tcsrchr(path,'.');
- if (!tmp_ext)
+ /* If the dot is before the last dir separator, it's part
+ * of a directory name, not the start of the extension */
+ if (!tmp_ext || tmp_ext < tmp_dir)
{
tmp_ext = (_TCHAR*)path+_tcslen(path);
}
_____
Modified: branches/xmlbuildsystem/reactos/lib/dinput/keyboard.c
--- branches/xmlbuildsystem/reactos/lib/dinput/keyboard.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/lib/dinput/keyboard.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -38,14 +38,6 @@
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
-//fast fix misning from mingw headers
-#ifdef __REACTOS__
-#define LLKHF_EXTENDED (KF_EXTENDED >> 8)
-#define LLKHF_INJECTED 0x00000010
-//#define LLKHF_ALTDOWN (KF_ALTDOWN >> 8)
-#define LLKHF_UP (KF_UP >> 8)
-#endif
-
#define WINE_DINPUT_KEYBOARD_MAX_KEYS 256
static IDirectInputDevice8AVtbl SysKeyboardAvt;
_____
Modified: branches/xmlbuildsystem/reactos/lib/dinput/mouse.c
--- branches/xmlbuildsystem/reactos/lib/dinput/mouse.c 2005-05-16
12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/lib/dinput/mouse.c 2005-05-16
12:32:10 UTC (rev 15339)
@@ -40,13 +40,6 @@
#define MOUSE_HACK
WINE_DEFAULT_DEBUG_CHANNEL(dinput);
-typedef struct {
- POINT pt;
- DWORD mouseData;
- DWORD flags;
- DWORD time;
- ULONG_PTR dwExtraInfo;
-} MSLLHOOKSTRUCT, *PMSLLHOOKSTRUCT;
/* Wine mouse driver object instances */
#define WINE_MOUSE_X_AXIS_INSTANCE 0
_____
Modified: branches/xmlbuildsystem/reactos/lib/user32/windows/hook.c
--- branches/xmlbuildsystem/reactos/lib/user32/windows/hook.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/lib/user32/windows/hook.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -281,6 +281,8 @@
PHOOKPROC_CBT_CREATEWND_EXTRA_ARGUMENTS CbtCreatewndExtra;
WPARAM wParam;
LPARAM lParam;
+ PKBDLLHOOKSTRUCT KeyboardLlData;
+ PMSLLHOOKSTRUCT MouseLlData;
Common = (PHOOKPROC_CALLBACK_ARGUMENTS) Arguments;
@@ -353,6 +355,14 @@
break;
}
break;
+ case WH_KEYBOARD_LL:
+ KeyboardLlData = (PKBDLLHOOKSTRUCT)((PCHAR) Common +
Common->lParam);
+ Result = Common->Proc(Common->Code, Common->wParam, (LPARAM)
KeyboardLlData);
+ break;
+ case WH_MOUSE_LL:
+ MouseLlData = (PMSLLHOOKSTRUCT)((PCHAR) Common + Common->lParam);
+ Result = Common->Proc(Common->Code, Common->wParam, (LPARAM)
MouseLlData);
+ break;
default:
return ZwCallbackReturn(NULL, 0, STATUS_NOT_SUPPORTED);
}
_____
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/cm/cm.h
--- branches/xmlbuildsystem/reactos/ntoskrnl/cm/cm.h 2005-05-16
12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/ntoskrnl/cm/cm.h 2005-05-16
12:32:10 UTC (rev 15339)
@@ -489,12 +489,6 @@
IN OUT PWSTR *Path,
IN ULONG Attribute);
-NTSTATUS STDCALL
-CmiObjectCreate(PVOID ObjectBody,
- PVOID Parent,
- PWSTR RemainingPath,
- POBJECT_ATTRIBUTES ObjectAttributes);
-
VOID STDCALL
CmiObjectDelete(PVOID DeletedObject);
_____
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/cm/ntfunc.c
--- branches/xmlbuildsystem/reactos/ntoskrnl/cm/ntfunc.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/ntoskrnl/cm/ntfunc.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -225,13 +225,13 @@
if (Disposition)
*Disposition = REG_OPENED_EXISTING_KEY;
- Status = ObCreateHandle(PsGetCurrentProcess(),
+ Status = ObpCreateHandle(PsGetCurrentProcess(),
Object,
DesiredAccess,
TRUE,
KeyHandle);
- DPRINT("ObCreateHandle failed Status 0x%x\n", Status);
+ DPRINT("ObpCreateHandle failed Status 0x%x\n", Status);
ObDereferenceObject(Object);
RtlFreeUnicodeString(&RemainingPath);
return Status;
@@ -1182,7 +1182,7 @@
goto openkey_cleanup;
}
- Status = ObCreateHandle(PsGetCurrentProcess(),
+ Status = ObpCreateHandle(PsGetCurrentProcess(),
Object,
DesiredAccess,
TRUE,
_____
Modified: branches/xmlbuildsystem/reactos/ntoskrnl/cm/registry.c
--- branches/xmlbuildsystem/reactos/ntoskrnl/cm/registry.c
2005-05-16 12:18:02 UTC (rev 15338)
+++ branches/xmlbuildsystem/reactos/ntoskrnl/cm/registry.c
2005-05-16 12:32:10 UTC (rev 15339)
@@ -331,7 +331,8 @@
if (SetupBoot == FALSE) CmInit2((PCHAR)KeLoaderBlock.CommandLine);
}
-VOID INIT_FUNCTION
+VOID
+INIT_FUNCTION
CmInitializeRegistry(VOID)
[truncated at 1000 lines; 5729 more skipped]