Author: tkreuzer
Date: Fri Oct 24 12:19:17 2008
New Revision: 36923
URL:
http://svn.reactos.org/svn/reactos?rev=36923&view=rev
Log:
merge trunk changes to r36869
Modified:
branches/ros-amd64-bringup/reactos/dll/win32/gdi32/misc/stubs.c
branches/ros-amd64-bringup/reactos/dll/win32/gdi32/objects/dc.c
branches/ros-amd64-bringup/reactos/drivers/network/ndis/include/miniport.h
branches/ros-amd64-bringup/reactos/drivers/network/ndis/ndis/miniport.c
branches/ros-amd64-bringup/reactos/drivers/network/ndis/ndis/protocol.c
branches/ros-amd64-bringup/reactos/include/reactos/win32k/ntuser.h
branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/neighbor.c
branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/ports.c
branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/router.c
branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/transmit.c
branches/ros-amd64-bringup/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
Modified: branches/ros-amd64-bringup/reactos/dll/win32/gdi32/misc/stubs.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/dll/w…
==============================================================================
--- branches/ros-amd64-bringup/reactos/dll/win32/gdi32/misc/stubs.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/dll/win32/gdi32/misc/stubs.c [iso-8859-1] Fri Oct
24 12:19:17 2008
@@ -2004,20 +2004,6 @@
return FALSE;
}
-
-/*
- * @implemented
- *
- */
-int
-STDCALL
-GetDeviceCaps(HDC hdc,
- int i)
-{
- /* FIXME some part need be done in user mode */
- return NtGdiGetDeviceCaps(hdc,i);
-}
-
/*
* @implemented
*
Modified: branches/ros-amd64-bringup/reactos/dll/win32/gdi32/objects/dc.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/dll/w…
==============================================================================
--- branches/ros-amd64-bringup/reactos/dll/win32/gdi32/objects/dc.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/dll/win32/gdi32/objects/dc.c [iso-8859-1] Fri Oct
24 12:19:17 2008
@@ -465,6 +465,179 @@
return GetDCObject(hdc, uObjectType);
}
+/*
+ * @implemented
+ *
+ */
+int
+STDCALL
+GetDeviceCaps(HDC hDC,
+ int i)
+{
+ PDC_ATTR Dc_Attr;
+ PLDC pLDC;
+ PDEVCAPS pDevCaps = GdiDevCaps; // Primary display device capabilities.
+ DPRINT("Device CAPS1\n");
+
+ if (GDI_HANDLE_GET_TYPE(hDC) != GDI_OBJECT_TYPE_DC)
+ {
+ if (GDI_HANDLE_GET_TYPE(hDC) == GDI_OBJECT_TYPE_METADC)
+ {
+ if ( i == TECHNOLOGY) return DT_METAFILE;
+ return 0;
+ }
+ else
+ {
+ pLDC = GdiGetLDC(hDC);
+ if ( !pLDC )
+ {
+ SetLastError(ERROR_INVALID_HANDLE);
+ return 0;
+ }
+ if (!(pLDC->Flags & LDC_DEVCAPS))
+ {
+ if (!NtGdiGetDeviceCapsAll(hDC, &pLDC->DevCaps))
+ SetLastError(ERROR_INVALID_PARAMETER);
+ pLDC->Flags |= LDC_DEVCAPS;
+ }
+ pDevCaps = &pLDC->DevCaps;
+ }
+ }
+ else
+ {
+ // HAX!!!!
+ // Due to winlogon process/thread mapping issues we have this hax!
+ //
+ return NtGdiGetDeviceCaps(hDC,i);
+
+ if (!GdiGetHandleUserData((HGDIOBJ) hDC, GDI_OBJECT_TYPE_DC, (PVOID) &Dc_Attr))
+ return 0;
+ if (!(Dc_Attr->ulDirty_ & DC_PRIMARY_DISPLAY) )
+ return NtGdiGetDeviceCaps(hDC,i);
+ }
+ DPRINT("Device CAPS2\n");
+
+ switch (i)
+ {
+ case DRIVERVERSION:
+ return pDevCaps->ulVersion;
+
+ case TECHNOLOGY:
+ return pDevCaps->ulTechnology;
+
+ case HORZSIZE:
+ return pDevCaps->ulHorzSize;
+
+ case VERTSIZE:
+ return pDevCaps->ulVertSize;
+
+ case HORZRES:
+ return pDevCaps->ulHorzRes;
+
+ case VERTRES:
+ return pDevCaps->ulVertRes;
+
+ case LOGPIXELSX:
+ return pDevCaps->ulLogPixelsX;
+
+ case LOGPIXELSY:
+ return pDevCaps->ulLogPixelsY;
+
+ case BITSPIXEL:
+ return pDevCaps->ulBitsPixel;
+
+ case PLANES:
+ return pDevCaps->ulPlanes;
+
+ case NUMBRUSHES:
+ return -1;
+
+ case NUMPENS:
+ return pDevCaps->ulNumPens;
+
+ case NUMFONTS:
+ return pDevCaps->ulNumFonts;
+
+ case NUMCOLORS:
+ return pDevCaps->ulNumColors;
+
+ case ASPECTX:
+ return pDevCaps->ulAspectX;
+
+ case ASPECTY:
+ return pDevCaps->ulAspectY;
+
+ case ASPECTXY:
+ return pDevCaps->ulAspectXY;
+
+ case CLIPCAPS:
+ return CP_RECTANGLE;
+
+ case SIZEPALETTE:
+ return pDevCaps->ulSizePalette;
+
+ case NUMRESERVED:
+ return 20;
+
+ case COLORRES:
+ return pDevCaps->ulColorRes;
+
+ case DESKTOPVERTRES:
+ return pDevCaps->ulVertRes;
+
+ case DESKTOPHORZRES:
+ return pDevCaps->ulHorzRes;
+
+ case BLTALIGNMENT:
+ return pDevCaps->ulBltAlignment;
+
+ case SHADEBLENDCAPS:
+ return pDevCaps->ulShadeBlend;
+
+ case COLORMGMTCAPS:
+ return pDevCaps->ulColorMgmtCaps;
+
+ case PHYSICALWIDTH:
+ return pDevCaps->ulPhysicalWidth;
+
+ case PHYSICALHEIGHT:
+ return pDevCaps->ulPhysicalHeight;
+
+ case PHYSICALOFFSETX:
+ return pDevCaps->ulPhysicalOffsetX;
+
+ case PHYSICALOFFSETY:
+ return pDevCaps->ulPhysicalOffsetY;
+
+ case VREFRESH:
+ return pDevCaps->ulVRefresh;
+
+ case RASTERCAPS:
+ return pDevCaps->ulRasterCaps;
+
+ case CURVECAPS:
+ return (CC_CIRCLES | CC_PIE | CC_CHORD | CC_ELLIPSES | CC_WIDE |
+ CC_STYLED | CC_WIDESTYLED | CC_INTERIORS | CC_ROUNDRECT);
+
+ case LINECAPS:
+ return (LC_POLYLINE | LC_MARKER | LC_POLYMARKER | LC_WIDE |
+ LC_STYLED | LC_WIDESTYLED | LC_INTERIORS);
+
+ case POLYGONALCAPS:
+ return (PC_POLYGON | PC_RECTANGLE | PC_WINDPOLYGON | PC_SCANLINE |
+ PC_WIDE | PC_STYLED | PC_WIDESTYLED | PC_INTERIORS);
+
+ case TEXTCAPS:
+ return pDevCaps->ulTextCaps;
+
+ case PDEVICESIZE:
+ case SCALINGFACTORX:
+ case SCALINGFACTORY:
+ default:
+ return 0;
+ }
+ return 0;
+}
/*
* @implemented
Modified: branches/ros-amd64-bringup/reactos/drivers/network/ndis/include/miniport.h
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/ndis/include/miniport.h
[iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/ndis/include/miniport.h
[iso-8859-1] Fri Oct 24 12:19:17 2008
@@ -163,6 +163,12 @@
NTAPI
MiniportWorker(IN PVOID WorkItem);
+VOID NTAPI
+MiniSendComplete(
+ IN NDIS_HANDLE MiniportAdapterHandle,
+ IN PNDIS_PACKET Packet,
+ IN NDIS_STATUS Status);
+
#endif /* __MINIPORT_H */
/* EOF */
Modified: branches/ros-amd64-bringup/reactos/drivers/network/ndis/ndis/miniport.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/ndis/ndis/miniport.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/ndis/ndis/miniport.c [iso-8859-1]
Fri Oct 24 12:19:17 2008
@@ -265,11 +265,29 @@
IN BOOLEAN AddressingReset)
{
PLOGICAL_ADAPTER Adapter = MiniportAdapterHandle;
+ PLIST_ENTRY CurrentEntry;
+ PADAPTER_BINDING AdapterBinding;
KIRQL OldIrql;
- NDIS_DbgPrint(MIN_TRACE, ("FIXME: MiniResetComplete is partially
implemented\n"));
+
NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_END, NULL, 0);
+
KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
+
+ CurrentEntry = Adapter->ProtocolListHead.Flink;
+
+ while (CurrentEntry != &Adapter->ProtocolListHead)
+ {
+ AdapterBinding = CONTAINING_RECORD(CurrentEntry, ADAPTER_BINDING,
AdapterListEntry);
+
+ (*AdapterBinding->ProtocolBinding->Chars.ResetCompleteHandler)(
+ AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
+ Status);
+
+ CurrentEntry = CurrentEntry->Flink;
+ }
+
Adapter->MiniportBusy = FALSE;
+
KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
}
Modified: branches/ros-amd64-bringup/reactos/drivers/network/ndis/ndis/protocol.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/drive…
==============================================================================
--- branches/ros-amd64-bringup/reactos/drivers/network/ndis/ndis/protocol.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/drivers/network/ndis/ndis/protocol.c [iso-8859-1]
Fri Oct 24 12:19:17 2008
@@ -296,7 +296,66 @@
IN PPNDIS_PACKET PacketArray,
IN UINT NumberOfPackets)
{
- UNIMPLEMENTED
+ PADAPTER_BINDING AdapterBinding = NdisBindingHandle;
+ PLOGICAL_ADAPTER Adapter = AdapterBinding->Adapter;
+ KIRQL RaiseOldIrql;
+ NDIS_STATUS NdisStatus;
+ UINT i;
+
+
if(Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)
+ {
+ if(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_DESERIALIZE)
+ {
+
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)(
+ Adapter->NdisMiniportBlock.MiniportAdapterContext, PacketArray,
NumberOfPackets);
+ for (i = 0; i < NumberOfPackets; i++)
+ {
+ NdisStatus = NDIS_GET_PACKET_STATUS(PacketArray[i]);
+ if (NdisStatus != NDIS_STATUS_PENDING)
+ MiniSendComplete(Adapter, PacketArray[i], NdisStatus);
+ }
+ }
+ else
+ {
+ /* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */
+ KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
+
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)(
+ Adapter->NdisMiniportBlock.MiniportAdapterContext, PacketArray,
NumberOfPackets);
+ KeLowerIrql(RaiseOldIrql);
+ for (i = 0; i < NumberOfPackets; i++)
+ {
+ NdisStatus = NDIS_GET_PACKET_STATUS(PacketArray[i]);
+ if (NdisStatus != NDIS_STATUS_PENDING)
+ MiniSendComplete(Adapter, PacketArray[i], NdisStatus);
+ }
+ }
+ }
+ else
+ {
+ if(Adapter->NdisMiniportBlock.Flags & NDIS_ATTRIBUTE_DESERIALIZE)
+ {
+ for (i = 0; i < NumberOfPackets; i++)
+ {
+ NdisStatus =
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)(
+ Adapter->NdisMiniportBlock.MiniportAdapterContext,
PacketArray[i], 0);
+ if (NdisStatus != NDIS_STATUS_PENDING)
+ MiniSendComplete(Adapter, PacketArray[i], NdisStatus);
+ }
+ }
+ else
+ {
+ /* Send is called at DISPATCH_LEVEL for all serialized miniports */
+ KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql);
+ for (i = 0; i < NumberOfPackets; i++)
+ {
+ NdisStatus =
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)(
+ Adapter->NdisMiniportBlock.MiniportAdapterContext,
PacketArray[i], 0);
+ if (NdisStatus != NDIS_STATUS_PENDING)
+ MiniSendComplete(Adapter, PacketArray[i], NdisStatus);
+ }
+ KeLowerIrql(RaiseOldIrql);
+ }
+ }
}
Modified: branches/ros-amd64-bringup/reactos/include/reactos/win32k/ntuser.h
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/inclu…
==============================================================================
--- branches/ros-amd64-bringup/reactos/include/reactos/win32k/ntuser.h [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/include/reactos/win32k/ntuser.h [iso-8859-1] Fri
Oct 24 12:19:17 2008
@@ -413,6 +413,31 @@
PW32THREADINFO GetW32ThreadInfo(VOID);
PW32PROCESSINFO GetW32ProcessInfo(VOID);
+
+typedef struct _WNDMSG
+{
+ DWORD maxMsgs;
+ DWORD abMsgs;
+} WNDMSG, *PWNDMSG;
+
+typedef struct _SHAREDINFO
+{
+ PSERVERINFO psi; // global Server Info
+ PVOID aheList; // Handle Entry List
+ PVOID pDispInfo; // global PDISPLAYINFO pointer
+ ULONG_PTR ulSharedDelta; // Heap delta
+ WNDMSG awmControl[31];
+ WNDMSG DefWindowMsgs;
+ WNDMSG DefWindowSpecMsgs;
+} SHAREDINFO, *PSHAREDINFO;
+
+typedef struct _USERCONNECT
+{
+ DWORD Unknown0;
+ DWORD Unknown1;
+ DWORD Unknown2;
+ SHAREDINFO ShareInfo;
+} USERCONNECT, *PUSERCONNECT;
//
// Non SDK Window Message types.
@@ -1916,12 +1941,12 @@
HDC hdcBlt,
UINT nFlags);
-DWORD
+NTSTATUS
NTAPI
NtUserProcessConnect(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3);
+ IN HANDLE Process,
+ OUT PUSERCONNECT pUserConnect,
+ IN DWORD dwSize); // sizeof(USERCONNECT)
DWORD
NTAPI
Modified: branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/neighbor.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/d…
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/neighbor.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/neighbor.c [iso-8859-1] Fri
Oct 24 12:19:17 2008
@@ -76,7 +76,7 @@
ASSERT_KM_POINTER(Packet->Complete);
Packet->Complete( Packet->Context,
Packet->Packet,
- NDIS_STATUS_REQUEST_ABORTED );
+ ErrorCode );
}
PoolFreeBuffer( Packet );
Modified: branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/ports.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/d…
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/ports.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/ports.c [iso-8859-1] Fri Oct
24 12:19:17 2008
@@ -44,6 +44,7 @@
Port = htons(Port);
ASSERT(Port >= PortSet->StartingPort);
+ ASSERT(Port < PortSet->StartingPort + PortSet->PortsToOversee);
Port -= PortSet->StartingPort;
ExAcquireFastMutex( &PortSet->Mutex );
@@ -67,7 +68,7 @@
Next -= PortSet->StartingPort;
ExAcquireFastMutex( &PortSet->Mutex );
- AllocatedPort = RtlFindClearBits( &PortSet->ProtoBitmap, 1, 0 );
+ AllocatedPort = RtlFindClearBits( &PortSet->ProtoBitmap, 1, Next );
if( AllocatedPort != (ULONG)-1 ) {
RtlSetBit( &PortSet->ProtoBitmap, AllocatedPort );
AllocatedPort += PortSet->StartingPort;
@@ -76,6 +77,9 @@
ExReleaseFastMutex( &PortSet->Mutex );
AllocatedPort = htons(AllocatedPort);
+
+ ASSERT(AllocatedPort >= PortSet->StartingPort);
+ ASSERT(AllocatedPort < PortSet->StartingPort + PortSet->PortsToOversee);
return AllocatedPort;
}
@@ -109,5 +113,8 @@
AllocatedPort = htons(AllocatedPort);
+ ASSERT(AllocatedPort >= PortSet->StartingPort);
+ ASSERT(AllocatedPort < PortSet->StartingPort + PortSet->PortsToOversee);
+
return AllocatedPort;
}
Modified: branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/router.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/d…
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/router.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/router.c [iso-8859-1] Fri
Oct 24 12:19:17 2008
@@ -390,7 +390,7 @@
TI_DbgPrint(DEBUG_ROUTER, ("Leaving\n"));
- return Found ? STATUS_NO_SUCH_FILE : STATUS_SUCCESS;
+ return Found ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL;
}
Modified: branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/transmit.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/lib/d…
==============================================================================
--- branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/transmit.c [iso-8859-1]
(original)
+++ branches/ros-amd64-bringup/reactos/lib/drivers/ip/network/transmit.c [iso-8859-1] Fri
Oct 24 12:19:17 2008
@@ -28,6 +28,7 @@
*/
{
PIPFRAGMENT_CONTEXT IFC = (PIPFRAGMENT_CONTEXT)Context;
+ NTSTATUS Status;
TI_DbgPrint
(MAX_TRACE,
@@ -35,8 +36,14 @@
Context, NdisPacket, NdisStatus));
if (NT_SUCCESS(NdisStatus) && PrepareNextFragment(IFC)) {
- /* A fragment was prepared for transmission, so send it */
- IPSendFragment(IFC->NdisPacket, IFC->NCE, IFC);
+ /* A fragment was prepared for transmission, so send it */
+ Status = IPSendFragment(IFC->NdisPacket, IFC->NCE, IFC);
+ if (!NT_SUCCESS(Status))
+ {
+ FreeNdisPacket(IFC->NdisPacket);
+ IFC->Complete(IFC->Context, IFC->Datagram, Status);
+ exFreePool(IFC);
+ }
} else {
TI_DbgPrint(MAX_TRACE, ("Calling completion handler.\n"));
@@ -87,7 +94,7 @@
TI_DbgPrint(MAX_TRACE, ("Called. IFC (0x%X)\n", IFC));
- if (IFC->BytesLeft != 0) {
+ if (IFC->BytesLeft > 0) {
TI_DbgPrint(MAX_TRACE, ("Preparing 1 fragment.\n"));
@@ -203,7 +210,12 @@
/* Prepare next fragment for transmission and send it */
- PrepareNextFragment(IFC);
+ if (!PrepareNextFragment(IFC)) {
+ FreeNdisPacket(IFC->NdisPacket);
+ ExFreePool(IFC);
+ return NDIS_STATUS_FAILURE;
+ }
+
return IPSendFragment(IFC->NdisPacket, NCE, IFC);
}
Modified: branches/ros-amd64-bringup/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
URL:
http://svn.reactos.org/svn/reactos/branches/ros-amd64-bringup/reactos/subsy…
==============================================================================
--- branches/ros-amd64-bringup/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
[iso-8859-1] (original)
+++ branches/ros-amd64-bringup/reactos/subsystems/win32/win32k/ntuser/ntstubs.c
[iso-8859-1] Fri Oct 24 12:19:17 2008
@@ -850,12 +850,12 @@
return 0;
}
-DWORD
+NTSTATUS
NTAPI
NtUserProcessConnect(
- DWORD dwUnknown1,
- DWORD dwUnknown2,
- DWORD dwUnknown3)
+ HANDLE Process,
+ PUSERCONNECT pUserConnect,
+ DWORD Size)
{
UNIMPLEMENTED;
return 0;