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/wi... ============================================================================== --- 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/wi... ============================================================================== --- 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/driver... ============================================================================== --- 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/driver... ============================================================================== --- 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/driver... ============================================================================== --- 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/includ... ============================================================================== --- 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/dr... ============================================================================== --- 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/dr... ============================================================================== --- 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/dr... ============================================================================== --- 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/dr... ============================================================================== --- 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/subsys... ============================================================================== --- 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;