From 83f07a8e37eb85d5073f222e589ff338d5ecc3a4 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Mon, 28 Jul 2008 16:48:04 +0000 Subject: [PATCH 001/304] - GuiConsoleInitScrollbar: Hide vertical scrollbar when not needed; use SB_VERT (not SB_HORZ) to set its information when it is; set sInfo.nPage according to window size in characters; calculate window pixel size, taking scrollbar width/height into account. - GuiConsoleHandleNcCreate: Remove window sizing (now done in GuiConsoleInitScrollbar) - GuiApplyUserSettings: Swap transposed min/max in cursor size calculation; don't assume that the physical top of the buffer is the same as the logical top; fix broken code where HAVE_WMEMSET isn't defined (wrong loop counts, Offset wasn't incremented); fix typo in calculating height difference. If either buffer or window size has changed, call GuiConsoleInitScrollbar. svn path=/trunk/; revision=34911 --- .../win32/csrss/win32csr/guiconsole.c | 109 +++++++++--------- 1 file changed, 52 insertions(+), 57 deletions(-) diff --git a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c index 1103ed3caa9..2fa1f220989 100644 --- a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c +++ b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c @@ -641,35 +641,50 @@ FASTCALL GuiConsoleInitScrollbar(PCSRSS_CONSOLE Console, HWND hwnd) { SCROLLINFO sInfo; + PGUI_CONSOLE_DATA GuiData = Console->PrivateData; + + DWORD Width = Console->Size.X * GuiData->CharWidth + 2 * GetSystemMetrics(SM_CXFIXEDFRAME); + DWORD Height = Console->Size.Y * GuiData->CharHeight + 2 * GetSystemMetrics(SM_CYFIXEDFRAME) + GetSystemMetrics(SM_CYCAPTION); /* set scrollbar sizes */ sInfo.cbSize = sizeof(SCROLLINFO); - sInfo.fMask = SIF_RANGE | SIF_POS; + sInfo.fMask = SIF_RANGE | SIF_PAGE | SIF_POS; sInfo.nMin = 0; - sInfo.nMax = Console->ActiveBuffer->MaxY; - sInfo.nPos = 0; - SetScrollInfo(hwnd, SB_HORZ, &sInfo, TRUE); - ShowScrollBar(hwnd, SB_VERT, TRUE); - - if (Console->ActiveBuffer->MaxX > Console->Size.X) + if (Console->ActiveBuffer->MaxY > Console->Size.Y) { - sInfo.cbSize = sizeof(SCROLLINFO); - sInfo.fMask = SIF_RANGE | SIF_POS; - sInfo.nMin = 0; - sInfo.nPos = 0; - sInfo.nMax = Console->ActiveBuffer->MaxX; - SetScrollInfo(hwnd, SB_HORZ, &sInfo, TRUE); + sInfo.nMax = Console->ActiveBuffer->MaxY - 1; + sInfo.nPage = Console->Size.Y; + sInfo.nPos = Console->ActiveBuffer->ShowY; + SetScrollInfo(hwnd, SB_VERT, &sInfo, TRUE); + Width += GetSystemMetrics(SM_CXVSCROLL); + ShowScrollBar(hwnd, SB_VERT, TRUE); } else { - ShowScrollBar(hwnd, SB_HORZ, FALSE); + ShowScrollBar(hwnd, SB_VERT, FALSE); } + + if (Console->ActiveBuffer->MaxX > Console->Size.X) + { + sInfo.nMax = Console->ActiveBuffer->MaxX - 1; + sInfo.nPage = Console->Size.X; + sInfo.nPos = Console->ActiveBuffer->ShowX; + SetScrollInfo(hwnd, SB_HORZ, &sInfo, TRUE); + Height += GetSystemMetrics(SM_CYHSCROLL); + ShowScrollBar(hwnd, SB_HORZ, TRUE); + } + else + { + ShowScrollBar(hwnd, SB_HORZ, FALSE); + } + + SetWindowPos(hwnd, NULL, 0, 0, Width, Height, + SWP_NOZORDER | SWP_NOMOVE | SWP_NOACTIVATE); } static BOOL FASTCALL GuiConsoleHandleNcCreate(HWND hWnd, CREATESTRUCTW *Create) { - RECT Rect; PCSRSS_CONSOLE Console = (PCSRSS_CONSOLE) Create->lpCreateParams; PGUI_CONSOLE_DATA GuiData = (PGUI_CONSOLE_DATA)Console->PrivateData; HDC Dc; @@ -763,14 +778,6 @@ GuiConsoleHandleNcCreate(HWND hWnd, CREATESTRUCTW *Create) Console->PrivateData = GuiData; SetWindowLongPtrW(hWnd, GWL_USERDATA, (DWORD_PTR) Console); - GetWindowRect(hWnd, &Rect); - Rect.right = Rect.left + Console->Size.X * GuiData->CharWidth + - 2 * GetSystemMetrics(SM_CXFIXEDFRAME); - Rect.bottom = Rect.top + Console->Size.Y * GuiData->CharHeight + - 2 * GetSystemMetrics(SM_CYFIXEDFRAME) + GetSystemMetrics(SM_CYCAPTION); - MoveWindow(hWnd, Rect.left, Rect.top, Rect.right - Rect.left, - Rect.bottom - Rect.top, FALSE); - SetTimer(hWnd, 1, CURSOR_BLINK_TIME, NULL); GuiConsoleCreateSysMenu(Console); GuiConsoleInitScrollbar(Console, hWnd); @@ -1551,8 +1558,8 @@ static VOID FASTCALL GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsoleInfo pConInfo) { DWORD windx, windy; - RECT rect; PCSRSS_SCREEN_BUFFER ActiveBuffer = Console->ActiveBuffer; + BOOL SizeChanged = FALSE; EnterCriticalSection(&ActiveBuffer->Header.Lock); @@ -1561,7 +1568,7 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole GuiData->ScreenBackground = pConInfo->ScreenBackground; /* apply cursor size */ - ActiveBuffer->CursorInfo.dwSize = max(min(pConInfo->CursorSize, 1), 100); + ActiveBuffer->CursorInfo.dwSize = min(max(pConInfo->CursorSize, 1), 100); windx = LOWORD(pConInfo->ScreenBuffer); windy = HIWORD(pConInfo->ScreenBuffer); @@ -1573,7 +1580,7 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole if (Buffer) { DWORD Offset = 0; - DWORD BufferOffset = 0; + BYTE * OldPtr; USHORT CurrentY; BYTE * OldBuffer; USHORT value; @@ -1587,17 +1594,17 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole for (CurrentY = 0; CurrentY < min(ActiveBuffer->MaxY, windy); CurrentY++) { + OldPtr = ConioCoordToPointer(ActiveBuffer, 0, CurrentY); if (windx <= ActiveBuffer->MaxX) { /* reduce size */ - RtlCopyMemory(&Buffer[Offset], &OldBuffer[BufferOffset], windx * 2); + RtlCopyMemory(&Buffer[Offset], OldPtr, windx * 2); Offset += (windx * 2); - BufferOffset += (ActiveBuffer->MaxX * 2); } else { /* enlarge size */ - RtlCopyMemory(&Buffer[Offset], &OldBuffer[BufferOffset], ActiveBuffer->MaxX * 2); + RtlCopyMemory(&Buffer[Offset], OldPtr, ActiveBuffer->MaxX * 2); Offset += (ActiveBuffer->MaxX * 2); diff = windx - ActiveBuffer->MaxX; @@ -1605,27 +1612,25 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole #if HAVE_WMEMSET wmemset((WCHAR*)&Buffer[Offset], value, diff); #else - for (i = 0; i < diff * 2; i++) + for (i = 0; i < diff; i++) { - Buffer[Offset * 2] = ' '; - Buffer[Offset * 2 + 1] = ActiveBuffer->DefaultAttrib; + Buffer[Offset++] = ' '; + Buffer[Offset++] = ActiveBuffer->DefaultAttrib; } #endif - Offset += (diff * 2); - BufferOffset += (ActiveBuffer->MaxX * 2); } } if (windy > ActiveBuffer->MaxY) { - diff = windy - ActiveBuffer->MaxX; + diff = windy - ActiveBuffer->MaxY; #if HAVE_WMEMSET wmemset((WCHAR*)&Buffer[Offset], value, diff * windx); #else - for (i = 0; i < diff * 2; i++) + for (i = 0; i < diff * windx; i++) { - Buffer[Offset * 2] = ' '; - Buffer[Offset * 2 + 1] = ActiveBuffer->DefaultAttrib; + Buffer[Offset++] = ' '; + Buffer[Offset++] = ActiveBuffer->DefaultAttrib; } #endif } @@ -1634,7 +1639,8 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole HeapFree(Win32CsrApiHeap, 0, OldBuffer); ActiveBuffer->MaxX = windx; ActiveBuffer->MaxY = windy; - InvalidateRect(pConInfo->hConsoleWindow, NULL, TRUE); + ActiveBuffer->VirtualY = 0; + SizeChanged = TRUE; } else { @@ -1667,25 +1673,14 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole /* resize window */ Console->Size.X = windx; Console->Size.Y = windy; - - GetWindowRect(pConInfo->hConsoleWindow, &rect); - - rect.right = rect.left + Console->Size.X * GuiData->CharWidth + 2 * GetSystemMetrics(SM_CXFIXEDFRAME); - rect.bottom = rect.top + Console->Size.Y * GuiData->CharHeight + 2 * GetSystemMetrics(SM_CYFIXEDFRAME) + GetSystemMetrics(SM_CYCAPTION); - - MoveWindow(pConInfo->hConsoleWindow, rect.left, rect.top, rect.right - rect.left, rect.bottom - rect.top, FALSE); - - if (Console->Size.X < ActiveBuffer->MaxX) - { - /* show scrollbar when window becomes smaller than active screen buffer */ - ShowScrollBar(pConInfo->hConsoleWindow, SB_CTL, TRUE); - } - else - { - /* hide scrollbar */ - ShowScrollBar(pConInfo->hConsoleWindow, SB_CTL, FALSE); - } + SizeChanged = TRUE; } + + if (SizeChanged) + { + GuiConsoleInitScrollbar(Console, pConInfo->hConsoleWindow); + } + LeaveCriticalSection(&ActiveBuffer->Header.Lock); InvalidateRect(pConInfo->hConsoleWindow, NULL, TRUE); } From e98217024c85917cd185e24426aabdb14098ad71 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Mon, 28 Jul 2008 18:21:35 +0000 Subject: [PATCH 002/304] Should fix the release build (sorry). svn path=/trunk/; revision=34912 --- reactos/ntoskrnl/ntoskrnl-generic.rbuild | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index 2696ae5e2de..6856489d44e 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -272,13 +272,11 @@ pnproot.c - - - - kdmemsup.c - + + + kdmemsup.c - + From 81e31939b1c217e50363161c182de6598e361442 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 28 Jul 2008 18:23:42 +0000 Subject: [PATCH 003/304] - reenable drive properties dialog svn path=/trunk/; revision=34913 --- reactos/dll/win32/shell32/shv_item_cmenu.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/reactos/dll/win32/shell32/shv_item_cmenu.c b/reactos/dll/win32/shell32/shv_item_cmenu.c index ecabf764aae..a03f0340532 100644 --- a/reactos/dll/win32/shell32/shv_item_cmenu.c +++ b/reactos/dll/win32/shell32/shv_item_cmenu.c @@ -857,7 +857,6 @@ static void DoProperties( ShellExecuteA(hwnd, "open", "rundll32.exe shell32.dll,Control_RunDLL desk.cpl", NULL, NULL, SW_SHOWNORMAL); return; } -#if 0 else if (_ILIsDrive(This->apidl[0])) { WCHAR buffer[111]; @@ -865,7 +864,6 @@ static void DoProperties( SH_ShowDriveProperties(buffer); return; } -#endif else if (_ILIsBitBucket(This->apidl[0])) { ///FIXME From 9655f89744748ad20853f5ca6bdd278cfbbbe55f Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 28 Jul 2008 18:38:11 +0000 Subject: [PATCH 004/304] - Don't strictly check NTDDI_VERSION to WINXP or WS03, since in case of e.g. NTDDI_WS03SP1 the define would work incorrectly (skipping a structure member). svn path=/trunk/; revision=34914 --- reactos/include/ndk/pstypes.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/ndk/pstypes.h b/reactos/include/ndk/pstypes.h index ad7e9dd196c..77498367863 100644 --- a/reactos/include/ndk/pstypes.h +++ b/reactos/include/ndk/pstypes.h @@ -1426,9 +1426,9 @@ typedef struct _EJOB ULONG PeakProcessMemoryUsed; ULONG PeakJobMemoryUsed; ULONG CurrentJobMemoryUsed; -#if (NTDDI_VERSION == NTDDI_WINXP) +#if (NTDDI_VERSION >= NTDDI_WINXP) && (NTDDI_VERSION < NTDDI_WS03) FAST_MUTEX MemoryLimitsLock; -#elif (NTDDI_VERSION == NTDDI_WS03) +#elif (NTDDI_VERSION >= NTDDI_WS03) && (NTDDI_VERSION < NTDDI_LONGHORN) KGUARDED_MUTEX MemoryLimitsLock; #elif (NTDDI_VERSION >= NTDDI_LONGHORN) EX_PUSH_LOCK MemoryLimitsLock; From 67821bff32df78e6fc73b6d98aec7da5bf7adaaa Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 28 Jul 2008 19:47:19 +0000 Subject: [PATCH 005/304] - display volume label for disk drives. If there is no label, load default label svn path=/trunk/; revision=34915 --- reactos/dll/win32/shell32/shfldr_mycomp.c | 53 +++++++++++++++++++---- 1 file changed, 44 insertions(+), 9 deletions(-) diff --git a/reactos/dll/win32/shell32/shfldr_mycomp.c b/reactos/dll/win32/shell32/shfldr_mycomp.c index 2d7d9dc56f3..4dae135b238 100644 --- a/reactos/dll/win32/shell32/shfldr_mycomp.c +++ b/reactos/dll/win32/shell32/shfldr_mycomp.c @@ -684,24 +684,59 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, } else if (_ILIsDrive(pidl)) { - _ILSimpleGetTextW (pidl, pszPath, MAX_PATH); /* append my own path */ + _ILSimpleGetTextW (pidl, pszPath, MAX_PATH); /* append my own path */ /* long view "lw_name (C:)" */ if (!(dwFlags & SHGDN_FORPARSING)) { - DWORD dwVolumeSerialNumber, dwMaximumComponetLength, dwFileSystemFlags; WCHAR wszDrive[18] = {0}; + DWORD dwVolumeSerialNumber, dwMaximumComponentLength, dwFileSystemFlags; static const WCHAR wszOpenBracket[] = {' ','(',0}; static const WCHAR wszCloseBracket[] = {')',0}; - GetVolumeInformationW (pszPath, wszDrive, - sizeof(wszDrive)/sizeof(wszDrive[0]) - 6, + lstrcpynW(wszDrive, pszPath, 4); + GetVolumeInformationW (wszDrive, pszPath, + MAX_PATH - 7, &dwVolumeSerialNumber, - &dwMaximumComponetLength, &dwFileSystemFlags, NULL, 0); - strcatW (wszDrive, wszOpenBracket); - lstrcpynW (wszDrive + strlenW(wszDrive), pszPath, 3); - strcatW (wszDrive, wszCloseBracket); - strcpyW (pszPath, wszDrive); + &dwMaximumComponentLength, &dwFileSystemFlags, NULL, 0); + pszPath[MAX_PATH-1] = L'\0'; + pszPath[0] = L'\0'; + + if (!wcslen(pszPath)) + { + UINT DriveType, ResourceId; + DriveType = GetDriveTypeW(wszDrive); + switch(DriveType) + { + case DRIVE_FIXED: + ResourceId = IDS_DRIVE_FIXED; + break; + case DRIVE_REMOTE: + ResourceId = IDS_DRIVE_NETWORK; + break; + case DRIVE_CDROM: + ResourceId = IDS_DRIVE_CDROM; + break; + default: + ResourceId = 0; + } + if (ResourceId) + { + dwFileSystemFlags = LoadStringW(shell32_hInstance, ResourceId, pszPath, MAX_PATH); + if (dwFileSystemFlags > MAX_PATH - 7) + pszPath[MAX_PATH-7] = L'\0'; + else if (dwFileSystemFlags == 0) + pszPath[0] = L'\0'; + } + else + { + pszPath[0] = L'\0'; + } + } + strcatW (pszPath, wszOpenBracket); + wszDrive[2] = L'\0'; + strcatW (pszPath, wszDrive); + strcatW (pszPath, wszCloseBracket); } } else From 298e26754bc48ed4d8f08dd6e24a9e6b9be61e24 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Mon, 28 Jul 2008 22:05:56 +0000 Subject: [PATCH 006/304] - Reverse my previous (in retrospect) hack - Make MmProbeAndLockPages smart enough to work at DISPATCH_LEVEL - At Alex' request, remove the stand alone spinlock for the page list, and use the queued spinlock in the prcb. svn path=/trunk/; revision=34920 --- reactos/drivers/storage/scsiport/scsiport.c | 3 +- reactos/ntoskrnl/include/internal/mm.h | 16 +++ reactos/ntoskrnl/io/iomgr/irp.c | 35 ++--- reactos/ntoskrnl/mm/freelist.c | 144 ++++++++++---------- reactos/ntoskrnl/mm/mdlsup.c | 26 ++-- 5 files changed, 120 insertions(+), 104 deletions(-) diff --git a/reactos/drivers/storage/scsiport/scsiport.c b/reactos/drivers/storage/scsiport/scsiport.c index 2f63cb5ee16..ca829e96f2f 100644 --- a/reactos/drivers/storage/scsiport/scsiport.c +++ b/reactos/drivers/storage/scsiport/scsiport.c @@ -4405,8 +4405,7 @@ SpiCompletionRoutine(PDEVICE_OBJECT DeviceObject, if (Irp->MdlAddress != NULL) { - /* We don't need to unlock this MDL because the request could - * only have come from dispatch level */ + MmUnlockPages(Irp->MdlAddress); IoFreeMdl(Irp->MdlAddress); Irp->MdlAddress = NULL; } diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 6e252b2670f..36b7fec1b72 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1009,6 +1009,22 @@ ULONG NTAPI MmGetLockCountPage(PFN_TYPE Page); +FORCEINLINE +VOID +NTAPI +MmAcquirePageListLock() +{ + KeAcquireQueuedSpinLock(LockQueuePfnLock); +} + +FORCEINLINE +VOID +NTAPI +MmReleasePageListLock(KIRQL oldIrql) +{ + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); +} + VOID NTAPI MmInitializePageList( diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/reactos/ntoskrnl/io/iomgr/irp.c index f4f7ea4a3de..76914551205 100644 --- a/reactos/ntoskrnl/io/iomgr/irp.c +++ b/reactos/ntoskrnl/io/iomgr/irp.c @@ -682,31 +682,24 @@ IoBuildAsynchronousFsdRequest(IN ULONG MajorFunction, return NULL; } - if (KeGetCurrentIrql() >= DISPATCH_LEVEL) + /* Probe and Lock */ + _SEH_TRY { - MmBuildMdlForNonPagedPool(Irp->MdlAddress); + /* Do the probe */ + MmProbeAndLockPages(Irp->MdlAddress, + KernelMode, + MajorFunction == IRP_MJ_READ ? + IoWriteAccess : IoReadAccess); } - else + _SEH_HANDLE { - /* Probe and Lock */ - _SEH_TRY - { - /* Do the probe */ - MmProbeAndLockPages(Irp->MdlAddress, - KernelMode, - MajorFunction == IRP_MJ_READ ? - IoWriteAccess : IoReadAccess); - } - _SEH_HANDLE - { - /* Free the IRP and its MDL */ - IoFreeMdl(Irp->MdlAddress); - IoFreeIrp(Irp); - Irp = NULL; - } - _SEH_END; + /* Free the IRP and its MDL */ + IoFreeMdl(Irp->MdlAddress); + IoFreeIrp(Irp); + Irp = NULL; } - + _SEH_END; + /* This is how we know if we failed during the probe */ if (!Irp) return NULL; } diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index ad84db26df1..7916c91bb1e 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -30,7 +30,6 @@ PPHYSICAL_PAGE MmPageArray; ULONG MmPageArraySize; -static KSPIN_LOCK PageListLock; /* List of pages allocated to the MC_USER Consumer */ static LIST_ENTRY UserPageListHead; /* List of pages zeroed by the ZPW (MmZeroPageThreadMain) */ @@ -52,18 +51,18 @@ MmGetLRUFirstUserPage(VOID) { PLIST_ENTRY NextListEntry; PHYSICAL_PAGE* PageDescriptor; - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); NextListEntry = UserPageListHead.Flink; if (NextListEntry == &UserPageListHead) { - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return 0; } PageDescriptor = CONTAINING_RECORD(NextListEntry, PHYSICAL_PAGE, ListEntry); ASSERT_PFN(PageDescriptor); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return PageDescriptor - MmPageArray; } @@ -71,15 +70,15 @@ VOID NTAPI MmInsertLRULastUserPage(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PPHYSICAL_PAGE Page; - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); ASSERT(Page->Flags.Type == MM_PHYSICAL_PAGE_USED); ASSERT(Page->Flags.Consumer == MC_USER); InsertTailList(&UserPageListHead, &Page->ListEntry); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } PFN_TYPE @@ -88,21 +87,21 @@ MmGetLRUNextUserPage(PFN_TYPE PreviousPfn) { PLIST_ENTRY NextListEntry; PHYSICAL_PAGE* PageDescriptor; - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PPHYSICAL_PAGE Page; - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(PreviousPfn); ASSERT(Page->Flags.Type == MM_PHYSICAL_PAGE_USED); ASSERT(Page->Flags.Consumer == MC_USER); NextListEntry = Page->ListEntry.Flink; if (NextListEntry == &UserPageListHead) { - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return 0; } PageDescriptor = CONTAINING_RECORD(NextListEntry, PHYSICAL_PAGE, ListEntry); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return PageDescriptor - MmPageArray; } @@ -126,11 +125,11 @@ MmGetContinuousPages(ULONG NumberOfBytes, ULONG last; ULONG length; ULONG boundary; - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); NrPages = PAGE_ROUND_UP(NumberOfBytes) / PAGE_SIZE; - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); last = min(HighestAcceptableAddress.LowPart / PAGE_SIZE, MmPageArraySize - 1); boundary = BoundaryAddressMultiple.LowPart / PAGE_SIZE; @@ -197,7 +196,7 @@ MmGetContinuousPages(ULONG NumberOfBytes, Page->MapCount = 0; Page->SavedSwapEntry = 0; } - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); for (i = start; i < (start + length); i++) { if (MiGetPfnEntry(i)->Flags.Zero == 0) @@ -212,7 +211,7 @@ MmGetContinuousPages(ULONG NumberOfBytes, return start; } } - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return 0; } @@ -243,7 +242,6 @@ MmInitializePageList(VOID) PMEMORY_ALLOCATION_DESCRIPTOR Md; /* Initialize the page lists */ - KeInitializeSpinLock(&PageListLock); InitializeListHead(&UserPageListHead); InitializeListHead(&FreeUnzeroedPageListHead); InitializeListHead(&FreeZeroedPageListHead); @@ -372,34 +370,34 @@ VOID NTAPI MmSetFlagsPage(PFN_TYPE Pfn, ULONG Flags) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->AllFlags = Flags; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } VOID NTAPI MmSetRmapListHeadPage(PFN_TYPE Pfn, struct _MM_RMAP_ENTRY* ListHead) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->RmapListHead = ListHead; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } struct _MM_RMAP_ENTRY* NTAPI MmGetRmapListHeadPage(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); struct _MM_RMAP_ENTRY* ListHead; - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); ListHead = MiGetPfnEntry(Pfn)->RmapListHead; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(ListHead); } @@ -408,12 +406,12 @@ VOID NTAPI MmMarkPageMapped(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PPHYSICAL_PAGE Page; if (Pfn <= MmPageArraySize) { - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type == MM_PHYSICAL_PAGE_FREE) { @@ -422,7 +420,7 @@ MmMarkPageMapped(PFN_TYPE Pfn) } Page->MapCount++; Page->ReferenceCount++; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } } @@ -430,12 +428,12 @@ VOID NTAPI MmMarkPageUnmapped(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PPHYSICAL_PAGE Page; if (Pfn <= MmPageArraySize) { - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type == MM_PHYSICAL_PAGE_FREE) { @@ -449,7 +447,7 @@ MmMarkPageUnmapped(PFN_TYPE Pfn) } Page->MapCount--; Page->ReferenceCount--; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } } @@ -457,12 +455,12 @@ ULONG NTAPI MmGetFlagsPage(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); ULONG Flags; - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Flags = MiGetPfnEntry(Pfn)->AllFlags; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(Flags); } @@ -472,11 +470,11 @@ VOID NTAPI MmSetSavedSwapEntryPage(PFN_TYPE Pfn, SWAPENTRY SavedSwapEntry) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->SavedSwapEntry = SavedSwapEntry; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } SWAPENTRY @@ -484,11 +482,11 @@ NTAPI MmGetSavedSwapEntryPage(PFN_TYPE Pfn) { SWAPENTRY SavedSwapEntry; - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); SavedSwapEntry = MiGetPfnEntry(Pfn)->SavedSwapEntry; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(SavedSwapEntry); } @@ -497,7 +495,7 @@ VOID NTAPI MmReferencePageUnsafe(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PPHYSICAL_PAGE Page; DPRINT("MmReferencePageUnsafe(PysicalAddress %x)\n", Pfn << PAGE_SHIFT); @@ -507,7 +505,7 @@ MmReferencePageUnsafe(PFN_TYPE Pfn) return; } - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -517,7 +515,7 @@ MmReferencePageUnsafe(PFN_TYPE Pfn) } Page->ReferenceCount++; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } VOID @@ -533,13 +531,13 @@ ULONG NTAPI MmGetReferenceCountPage(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); ULONG RCount; PPHYSICAL_PAGE Page; DPRINT("MmGetReferenceCountPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) { @@ -549,7 +547,7 @@ MmGetReferenceCountPage(PFN_TYPE Pfn) RCount = Page->ReferenceCount; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(RCount); } @@ -567,12 +565,12 @@ VOID NTAPI MmDereferencePage(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PPHYSICAL_PAGE Page; DPRINT("MmDereferencePage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); @@ -630,20 +628,20 @@ MmDereferencePage(PFN_TYPE Pfn) KeSetEvent(&ZeroPageThreadEvent, IO_NO_INCREMENT, FALSE); } } - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } ULONG NTAPI MmGetLockCountPage(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); ULONG LockCount; PPHYSICAL_PAGE Page; DPRINT("MmGetLockCountPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -653,7 +651,7 @@ MmGetLockCountPage(PFN_TYPE Pfn) } LockCount = Page->LockCount; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return(LockCount); } @@ -662,12 +660,12 @@ VOID NTAPI MmLockPageUnsafe(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PPHYSICAL_PAGE Page; DPRINT("MmLockPageUnsafe(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -677,7 +675,7 @@ MmLockPageUnsafe(PFN_TYPE Pfn) } Page->LockCount++; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } VOID @@ -693,12 +691,12 @@ VOID NTAPI MmUnlockPage(PFN_TYPE Pfn) { - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PPHYSICAL_PAGE Page; DPRINT("MmUnlockPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -708,7 +706,7 @@ MmUnlockPage(PFN_TYPE Pfn) } Page->LockCount--; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } PFN_TYPE @@ -718,12 +716,12 @@ MmAllocPage(ULONG Consumer, SWAPENTRY SavedSwapEntry) PFN_TYPE PfnOffset; PLIST_ENTRY ListEntry; PPHYSICAL_PAGE PageDescriptor; - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); BOOLEAN NeedClear = FALSE; DPRINT("MmAllocPage()\n"); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); if (IsListEmpty(&FreeZeroedPageListHead)) { if (IsListEmpty(&FreeUnzeroedPageListHead)) @@ -732,14 +730,14 @@ MmAllocPage(ULONG Consumer, SWAPENTRY SavedSwapEntry) if (MmStats.NrTotalPages == 0) { /* Allocate an early page -- we'll account for it later */ - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); PfnOffset = MmAllocEarlyPage(); MiZeroPage(PfnOffset); return PfnOffset; } DPRINT1("MmAllocPage(): Out of memory\n"); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); return 0; } ListEntry = RemoveTailList(&FreeUnzeroedPageListHead); @@ -781,7 +779,7 @@ MmAllocPage(ULONG Consumer, SWAPENTRY SavedSwapEntry) MmStats.NrSystemPages++; MmStats.NrFreePages--; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); PfnOffset = PageDescriptor - MmPageArray; if (NeedClear) @@ -805,7 +803,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, PPFN_TYPE Pages) { PPHYSICAL_PAGE PageDescriptor; - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PFN_TYPE LowestPage, HighestPage; PFN_TYPE pfn; ULONG NumberOfPagesFound = 0; @@ -835,7 +833,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, if (HighestPage > MmPageArraySize) HighestPage = MmPageArraySize; - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); if (LowestPage == 0 && HighestPage == MmPageArraySize) { PLIST_ENTRY ListEntry; @@ -854,7 +852,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, { if (NumberOfPagesFound == 0) { - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); DPRINT1("MmAllocPagesSpecifyRange(): Out of memory\n"); return -1; } @@ -925,7 +923,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, break; } } - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); /* Zero unzero-ed pages */ for (i = 0; i < NumberOfPagesFound; i++) @@ -949,7 +947,7 @@ NTAPI MmZeroPageThreadMain(PVOID Ignored) { NTSTATUS Status; - KIRQL oldIrql; + KIRQL oldIrql = KeGetCurrentIrql(); PLIST_ENTRY ListEntry; PPHYSICAL_PAGE PageDescriptor; PFN_TYPE Pfn; @@ -981,7 +979,7 @@ MmZeroPageThreadMain(PVOID Ignored) return STATUS_SUCCESS; } Count = 0; - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); while (!IsListEmpty(&FreeUnzeroedPageListHead)) { ListEntry = RemoveTailList(&FreeUnzeroedPageListHead); @@ -989,11 +987,11 @@ MmZeroPageThreadMain(PVOID Ignored) PageDescriptor = CONTAINING_RECORD(ListEntry, PHYSICAL_PAGE, ListEntry); /* We set the page to used, because MmCreateVirtualMapping failed with unused pages */ PageDescriptor->Flags.Type = MM_PHYSICAL_PAGE_USED; - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); Pfn = PageDescriptor - MmPageArray; Status = MiZeroPage(Pfn); - KeAcquireSpinLock(&PageListLock, &oldIrql); + KeAcquireQueuedSpinLock(LockQueuePfnLock); if (PageDescriptor->MapCount != 0) { DPRINT1("Mapped page on freelist.\n"); @@ -1015,7 +1013,7 @@ MmZeroPageThreadMain(PVOID Ignored) } DPRINT("Zeroed %d pages.\n", Count); KeResetEvent(&ZeroPageThreadEvent); - KeReleaseSpinLock(&PageListLock, oldIrql); + KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } return STATUS_SUCCESS; diff --git a/reactos/ntoskrnl/mm/mdlsup.c b/reactos/ntoskrnl/mm/mdlsup.c index f806031f9ec..307dbd5efe7 100644 --- a/reactos/ntoskrnl/mm/mdlsup.c +++ b/reactos/ntoskrnl/mm/mdlsup.c @@ -391,11 +391,12 @@ MmProbeAndLockPages(IN PMDL Mdl, PVOID Base, Address; ULONG i, j; ULONG NrPages; - NTSTATUS Status; + NTSTATUS Status = STATUS_SUCCESS; PFN_TYPE Page; PEPROCESS CurrentProcess; PETHREAD Thread; PMM_AVL_TABLE AddressSpace; + KIRQL OldIrql = KeGetCurrentIrql(); DPRINT("Probing MDL: %p\n", Mdl); /* Sanity checks */ @@ -486,7 +487,10 @@ MmProbeAndLockPages(IN PMDL Mdl, /* * Lock the pages */ - MmLockAddressSpace(AddressSpace); + if (OldIrql < DISPATCH_LEVEL) + MmLockAddressSpace(AddressSpace); + else + MmAcquirePageListLock(&OldIrql); for (i = 0; i < NrPages; i++) { @@ -500,8 +504,7 @@ MmProbeAndLockPages(IN PMDL Mdl, Status = MmAccessFault(FALSE, Address, AccessMode, NULL); if (!NT_SUCCESS(Status)) { - MmUnlockAddressSpace(AddressSpace); - ExRaiseStatus(STATUS_ACCESS_VIOLATION); + goto cleanup; } } else @@ -524,8 +527,7 @@ MmProbeAndLockPages(IN PMDL Mdl, MmDereferencePage(Page); } } - MmUnlockAddressSpace(AddressSpace); - ExRaiseStatus(STATUS_ACCESS_VIOLATION); + goto cleanup; } } Page = MmGetPfnForProcess(NULL, Address); @@ -539,9 +541,17 @@ MmProbeAndLockPages(IN PMDL Mdl, MmReferencePage(Page); } } - - MmUnlockAddressSpace(AddressSpace); + +cleanup: + if (OldIrql < DISPATCH_LEVEL) + MmUnlockAddressSpace(AddressSpace); + else + MmReleasePageListLock(OldIrql); + + if (!NT_SUCCESS(Status)) + ExRaiseStatus(STATUS_ACCESS_VIOLATION); Mdl->MdlFlags |= MDL_PAGES_LOCKED; + return; } /* From 2bd04995009eaf22ac727fc9430cb96649ddf481 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Mon, 28 Jul 2008 22:33:11 +0000 Subject: [PATCH 007/304] Fix my error not noticing that queued spinlock functions return KIRQL through the actual function return, not through a parameter. svn path=/trunk/; revision=34921 --- reactos/ntoskrnl/include/internal/mm.h | 4 +- reactos/ntoskrnl/mm/freelist.c | 86 +++++++++++++------------- 2 files changed, 45 insertions(+), 45 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 36b7fec1b72..fb3ef149bf2 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1010,11 +1010,11 @@ NTAPI MmGetLockCountPage(PFN_TYPE Page); FORCEINLINE -VOID +KIRQL NTAPI MmAcquirePageListLock() { - KeAcquireQueuedSpinLock(LockQueuePfnLock); + return KeAcquireQueuedSpinLock(LockQueuePfnLock); } FORCEINLINE diff --git a/reactos/ntoskrnl/mm/freelist.c b/reactos/ntoskrnl/mm/freelist.c index 7916c91bb1e..0327faf8f99 100644 --- a/reactos/ntoskrnl/mm/freelist.c +++ b/reactos/ntoskrnl/mm/freelist.c @@ -51,9 +51,9 @@ MmGetLRUFirstUserPage(VOID) { PLIST_ENTRY NextListEntry; PHYSICAL_PAGE* PageDescriptor; - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); NextListEntry = UserPageListHead.Flink; if (NextListEntry == &UserPageListHead) { @@ -70,10 +70,10 @@ VOID NTAPI MmInsertLRULastUserPage(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PPHYSICAL_PAGE Page; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); ASSERT(Page->Flags.Type == MM_PHYSICAL_PAGE_USED); ASSERT(Page->Flags.Consumer == MC_USER); @@ -87,10 +87,10 @@ MmGetLRUNextUserPage(PFN_TYPE PreviousPfn) { PLIST_ENTRY NextListEntry; PHYSICAL_PAGE* PageDescriptor; - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PPHYSICAL_PAGE Page; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(PreviousPfn); ASSERT(Page->Flags.Type == MM_PHYSICAL_PAGE_USED); ASSERT(Page->Flags.Consumer == MC_USER); @@ -125,11 +125,11 @@ MmGetContinuousPages(ULONG NumberOfBytes, ULONG last; ULONG length; ULONG boundary; - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; NrPages = PAGE_ROUND_UP(NumberOfBytes) / PAGE_SIZE; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); last = min(HighestAcceptableAddress.LowPart / PAGE_SIZE, MmPageArraySize - 1); boundary = BoundaryAddressMultiple.LowPart / PAGE_SIZE; @@ -370,9 +370,9 @@ VOID NTAPI MmSetFlagsPage(PFN_TYPE Pfn, ULONG Flags) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->AllFlags = Flags; KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } @@ -381,9 +381,9 @@ VOID NTAPI MmSetRmapListHeadPage(PFN_TYPE Pfn, struct _MM_RMAP_ENTRY* ListHead) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->RmapListHead = ListHead; KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } @@ -392,10 +392,10 @@ struct _MM_RMAP_ENTRY* NTAPI MmGetRmapListHeadPage(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; struct _MM_RMAP_ENTRY* ListHead; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); ListHead = MiGetPfnEntry(Pfn)->RmapListHead; KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); @@ -406,12 +406,12 @@ VOID NTAPI MmMarkPageMapped(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PPHYSICAL_PAGE Page; if (Pfn <= MmPageArraySize) { - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type == MM_PHYSICAL_PAGE_FREE) { @@ -428,12 +428,12 @@ VOID NTAPI MmMarkPageUnmapped(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PPHYSICAL_PAGE Page; if (Pfn <= MmPageArraySize) { - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type == MM_PHYSICAL_PAGE_FREE) { @@ -455,10 +455,10 @@ ULONG NTAPI MmGetFlagsPage(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; ULONG Flags; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Flags = MiGetPfnEntry(Pfn)->AllFlags; KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); @@ -470,9 +470,9 @@ VOID NTAPI MmSetSavedSwapEntryPage(PFN_TYPE Pfn, SWAPENTRY SavedSwapEntry) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); MiGetPfnEntry(Pfn)->SavedSwapEntry = SavedSwapEntry; KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); } @@ -482,9 +482,9 @@ NTAPI MmGetSavedSwapEntryPage(PFN_TYPE Pfn) { SWAPENTRY SavedSwapEntry; - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); SavedSwapEntry = MiGetPfnEntry(Pfn)->SavedSwapEntry; KeReleaseQueuedSpinLock(LockQueuePfnLock, oldIrql); @@ -495,7 +495,7 @@ VOID NTAPI MmReferencePageUnsafe(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PPHYSICAL_PAGE Page; DPRINT("MmReferencePageUnsafe(PysicalAddress %x)\n", Pfn << PAGE_SHIFT); @@ -505,7 +505,7 @@ MmReferencePageUnsafe(PFN_TYPE Pfn) return; } - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -531,13 +531,13 @@ ULONG NTAPI MmGetReferenceCountPage(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; ULONG RCount; PPHYSICAL_PAGE Page; DPRINT("MmGetReferenceCountPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) { @@ -565,12 +565,12 @@ VOID NTAPI MmDereferencePage(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PPHYSICAL_PAGE Page; DPRINT("MmDereferencePage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); @@ -635,13 +635,13 @@ ULONG NTAPI MmGetLockCountPage(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; ULONG LockCount; PPHYSICAL_PAGE Page; DPRINT("MmGetLockCountPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -660,12 +660,12 @@ VOID NTAPI MmLockPageUnsafe(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PPHYSICAL_PAGE Page; DPRINT("MmLockPageUnsafe(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -691,12 +691,12 @@ VOID NTAPI MmUnlockPage(PFN_TYPE Pfn) { - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PPHYSICAL_PAGE Page; DPRINT("MmUnlockPage(PhysicalAddress %x)\n", Pfn << PAGE_SHIFT); - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); Page = MiGetPfnEntry(Pfn); if (Page->Flags.Type != MM_PHYSICAL_PAGE_USED) @@ -716,12 +716,12 @@ MmAllocPage(ULONG Consumer, SWAPENTRY SavedSwapEntry) PFN_TYPE PfnOffset; PLIST_ENTRY ListEntry; PPHYSICAL_PAGE PageDescriptor; - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; BOOLEAN NeedClear = FALSE; DPRINT("MmAllocPage()\n"); - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); if (IsListEmpty(&FreeZeroedPageListHead)) { if (IsListEmpty(&FreeUnzeroedPageListHead)) @@ -803,7 +803,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, PPFN_TYPE Pages) { PPHYSICAL_PAGE PageDescriptor; - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PFN_TYPE LowestPage, HighestPage; PFN_TYPE pfn; ULONG NumberOfPagesFound = 0; @@ -833,7 +833,7 @@ MmAllocPagesSpecifyRange(ULONG Consumer, if (HighestPage > MmPageArraySize) HighestPage = MmPageArraySize; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); if (LowestPage == 0 && HighestPage == MmPageArraySize) { PLIST_ENTRY ListEntry; @@ -947,7 +947,7 @@ NTAPI MmZeroPageThreadMain(PVOID Ignored) { NTSTATUS Status; - KIRQL oldIrql = KeGetCurrentIrql(); + KIRQL oldIrql; PLIST_ENTRY ListEntry; PPHYSICAL_PAGE PageDescriptor; PFN_TYPE Pfn; @@ -979,7 +979,7 @@ MmZeroPageThreadMain(PVOID Ignored) return STATUS_SUCCESS; } Count = 0; - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); while (!IsListEmpty(&FreeUnzeroedPageListHead)) { ListEntry = RemoveTailList(&FreeUnzeroedPageListHead); @@ -991,7 +991,7 @@ MmZeroPageThreadMain(PVOID Ignored) Pfn = PageDescriptor - MmPageArray; Status = MiZeroPage(Pfn); - KeAcquireQueuedSpinLock(LockQueuePfnLock); + oldIrql = KeAcquireQueuedSpinLock(LockQueuePfnLock); if (PageDescriptor->MapCount != 0) { DPRINT1("Mapped page on freelist.\n"); From 274bd6b2ab5f72cf978ad67740badc5c1e6257ab Mon Sep 17 00:00:00 2001 From: James Tabor Date: Tue, 29 Jul 2008 00:35:05 +0000 Subject: [PATCH 008/304] - Added more hook points, WH_FOREGROUNDIDLE and WH_KEYBOARD. - Fixed WH_CALLWNDPROC/RET, now the posted test program works as it should. - Tested with Opera 9.51, FF, Seamonkey, Abiword, Miranda, Mirc and the rest of our applications. svn path=/trunk/; revision=34922 --- reactos/dll/win32/user32/windows/hook.c | 2 + .../subsystems/win32/win32k/ntuser/callback.c | 8 +- reactos/subsystems/win32/win32k/ntuser/hook.c | 51 +++++++---- .../subsystems/win32/win32k/ntuser/message.c | 91 +++++++++++-------- 4 files changed, 93 insertions(+), 59 deletions(-) diff --git a/reactos/dll/win32/user32/windows/hook.c b/reactos/dll/win32/user32/windows/hook.c index 1bba40d9161..7e4d39b1569 100644 --- a/reactos/dll/win32/user32/windows/hook.c +++ b/reactos/dll/win32/user32/windows/hook.c @@ -524,7 +524,9 @@ User32CallHookProcFromKernel(PVOID Arguments, ULONG ArgumentLength) // FIXME("UHOOK Memory: %x: %x\n",Common, Msg); Result = Common->Proc(Common->Code, Common->wParam, (LPARAM) Msg); break; + case WH_FOREGROUNDIDLE: case WH_KEYBOARD: + case WH_SHELL: Result = Common->Proc(Common->Code, Common->wParam, Common->lParam); break; default: diff --git a/reactos/subsystems/win32/win32k/ntuser/callback.c b/reactos/subsystems/win32/win32k/ntuser/callback.c index d0513dbe419..6fdad2e714f 100644 --- a/reactos/subsystems/win32/win32k/ntuser/callback.c +++ b/reactos/subsystems/win32/win32k/ntuser/callback.c @@ -393,8 +393,9 @@ co_IntCallHookProc(INT HookId, case WH_GETMESSAGE: ArgumentLength += sizeof(MSG); break; + case WH_FOREGROUNDIDLE: case WH_KEYBOARD: -// case WH_SHELL: + case WH_SHELL: break; default: DPRINT1("Trying to call unsupported window hook %d\n", HookId); @@ -473,10 +474,9 @@ co_IntCallHookProc(INT HookId, Common->lParam = (LPARAM) (Extra - (PCHAR) Common); // DPRINT1("KHOOK Memory: %x\n",Common); break; + case WH_FOREGROUNDIDLE: case WH_KEYBOARD: - break; -// case WH_SHELL: -// Extra = lParam; + case WH_SHELL: break; } diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index c14c2b5d036..5b508fff483 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -267,15 +267,22 @@ IntReleaseHookChain(PHOOKTABLE Table, int HookId, PWINSTATION_OBJECT WinStaObj) } static LRESULT FASTCALL -IntCallLowLevelHook(INT HookId, INT Code, WPARAM wParam, LPARAM lParam, PHOOK Hook) +IntCallLowLevelHook(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam) { NTSTATUS Status; ULONG_PTR uResult; /* FIXME should get timeout from * HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout */ - Status = co_MsqSendMessage(((PW32THREAD)Hook->Thread->Tcb.Win32Thread)->MessageQueue, (HWND) Code, HookId, - wParam, lParam, 5000, TRUE, TRUE, &uResult); + Status = co_MsqSendMessage(((PW32THREAD)Hook->Thread->Tcb.Win32Thread)->MessageQueue, + (HWND) Code, + Hook->HookId, + wParam, + lParam, + 5000, + TRUE, + TRUE, + &uResult); return NT_SUCCESS(Status) ? uResult : 0; } @@ -317,17 +324,10 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam) } } - if (Hook->Thread != PsGetCurrentThread() - && (WH_KEYBOARD_LL == HookId || WH_MOUSE_LL == HookId)) - { - DPRINT("Calling hook in owning thread\n"); - return IntCallLowLevelHook(HookId, Code, wParam, lParam, Hook); - } - if ((Hook->Thread != PsGetCurrentThread()) && (Hook->Thread != NULL)) { - DPRINT1("Calling hooks in other threads not implemented yet"); - return 0; + // Post it in message queue. + return IntCallLowLevelHook(Hook, Code, wParam, lParam); } Table->Counts[HOOKID_TO_INDEX(HookId)]++; @@ -340,8 +340,13 @@ co_HOOK_CallHooks(INT HookId, INT Code, WPARAM wParam, LPARAM lParam) SaveHook = ClientInfo->phkCurrent; ClientInfo->phkCurrent = Hook; // Load the call. - Result = co_IntCallHookProc(HookId, Code, wParam, lParam, Hook->Proc, - Hook->Ansi, &Hook->ModuleName); + Result = co_IntCallHookProc( HookId, + Code, + wParam, + lParam, + Hook->Proc, + Hook->Ansi, + &Hook->ModuleName); ClientInfo->phkCurrent = SaveHook; @@ -413,9 +418,19 @@ static LRESULT FASTCALL co_HOOK_CallHookNext(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam) { + if ((Hook->Thread != PsGetCurrentThread()) && (Hook->Thread != NULL)) + { + DPRINT1("CALLING HOOK from another Thread. %d\n",Hook->HookId); + return IntCallLowLevelHook(Hook, Code, wParam, lParam); + } DPRINT("CALLING HOOK %d\n",Hook->HookId); - return co_IntCallHookProc(Hook->HookId, Code, wParam, lParam, Hook->Proc, - Hook->Ansi, &Hook->ModuleName); + return co_IntCallHookProc(Hook->HookId, + Code, + wParam, + lParam, + Hook->Proc, + Hook->Ansi, + &Hook->ModuleName); } @@ -1030,9 +1045,7 @@ NtUserSetWindowsHookEx( if (Global || WH_DEBUG == HookId || WH_JOURNALPLAYBACK == HookId || - WH_JOURNALRECORD == HookId || - WH_FOREGROUNDIDLE == HookId || - WH_SHELL == HookId) + WH_JOURNALRECORD == HookId) { #if 0 /* Removed to get winEmbed working again */ UNIMPLEMENTED diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index 70ae5fd93f4..ac1a77cca50 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -295,6 +295,53 @@ UnpackParam(LPARAM lParamPacked, UINT Msg, WPARAM wParam, LPARAM lParam) return STATUS_INVALID_PARAMETER; } +static +VOID +FASTCALL +IntCallWndProc +( PWINDOW_OBJECT Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam) +{ + BOOL SameThread = FALSE; + + if (Window->ti == PsGetCurrentThreadWin32Thread()->ThreadInfo) + SameThread = TRUE; + + if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) || + (SameThread && ISITHOOKED(WH_CALLWNDPROC)) ) + { + CWPSTRUCT CWP; + CWP.hwnd = hWnd; + CWP.message = Msg; + CWP.wParam = wParam; + CWP.lParam = lParam; + co_HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, SameThread, (LPARAM)&CWP ); + } +} +static +VOID +FASTCALL +IntCallWndProcRet +( PWINDOW_OBJECT Window, HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam, LRESULT *uResult) +{ + BOOL SameThread = FALSE; + + if (Window->ti == PsGetCurrentThreadWin32Thread()->ThreadInfo) + SameThread = TRUE; + + if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) || + (SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) ) + { + CWPRETSTRUCT CWPR; + CWPR.hwnd = hWnd; + CWPR.message = Msg; + CWPR.wParam = wParam; + CWPR.lParam = lParam; + CWPR.lResult = *uResult; + co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR ); + } +} + + BOOL STDCALL NtUserCallMsgFilter( @@ -1429,7 +1476,6 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, PW32THREAD Win32Thread; DECLARE_RETURN(LRESULT); USER_REFERENCE_ENTRY Ref; - BOOL SameThread = FALSE; if (!(Window = UserGetWindowObject(hWnd))) { @@ -1440,20 +1486,8 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, Win32Thread = PsGetCurrentThreadWin32Thread(); - if (Window->ti == Win32Thread->ThreadInfo) - SameThread = TRUE; + IntCallWndProc( Window, hWnd, Msg, wParam, lParam); - if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROC))) || - (SameThread && ISITHOOKED(WH_CALLWNDPROC)) ) - { - CWPSTRUCT CWP; - CWP.hwnd = hWnd; - CWP.message = Msg; - CWP.wParam = wParam; - CWP.lParam = lParam; - co_HOOK_CallHooks( WH_CALLWNDPROC, HC_ACTION, SameThread, (LPARAM)&CWP ); - } - if (NULL != Win32Thread && Window->MessageQueue == Win32Thread->MessageQueue) { @@ -1488,17 +1522,7 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, *uResult = Result; } - if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) || - (SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) ) - { - CWPRETSTRUCT CWPR; - CWPR.hwnd = hWnd; - CWPR.message = Msg; - CWPR.wParam = wParam; - CWPR.lParam = lParam; - CWPR.lResult = Result; - co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR ); - } + IntCallWndProcRet( Window, hWnd, Msg, wParam, lParam, (LRESULT *)uResult); if (! NT_SUCCESS(UnpackParam(lParamPacked, Msg, wParam, lParam))) { @@ -1538,17 +1562,7 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, (uFlags & SMTO_NOTIMEOUTIFNOTHUNG) && !MsqIsHung(Window->MessageQueue)); - if ((!SameThread && (Window->ti->Hooks & HOOKID_TO_FLAG(WH_CALLWNDPROCRET))) || - (SameThread && ISITHOOKED(WH_CALLWNDPROCRET)) ) - { - CWPRETSTRUCT CWPR; - CWPR.hwnd = hWnd; - CWPR.message = Msg; - CWPR.wParam = wParam; - CWPR.lParam = lParam; - CWPR.lResult = *uResult; - co_HOOK_CallHooks( WH_CALLWNDPROCRET, HC_ACTION, SameThread, (LPARAM)&CWPR ); - } + IntCallWndProcRet( Window, hWnd, Msg, wParam, lParam, (LRESULT *)uResult); if (STATUS_TIMEOUT == Status) { @@ -1703,6 +1717,8 @@ co_IntDoSendMessage(HWND hWnd, Info.Ansi = ! Window->Wnd->Unicode; } + IntCallWndProc( Window, hWnd, Msg, wParam, lParam); + if (Window->Wnd->IsSystem) { Info.Proc = (!Info.Ansi ? Window->Wnd->WndProc : Window->Wnd->WndProcExtra); @@ -1712,6 +1728,9 @@ co_IntDoSendMessage(HWND hWnd, Info.Ansi = !Window->Wnd->Unicode; Info.Proc = Window->Wnd->WndProc; } + + IntCallWndProcRet( Window, hWnd, Msg, wParam, lParam, &Result); + } else { From af7891739c5e9769761cac00dacf25872f362686 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Tue, 29 Jul 2008 02:08:56 +0000 Subject: [PATCH 009/304] NtUserBeginPaint: Taking the bounding box of the update region first and clipping it to the client area afterwards was making rcPaint contain the entire client area when scrolling. It should be done the other way around: clip to the client area first, then box. Since there is already a clipped update region in the DC, this is easy; just use GdiGetClipBox. svn path=/trunk/; revision=34923 --- .../subsystems/win32/win32k/ntuser/painting.c | 19 +------------------ 1 file changed, 1 insertion(+), 18 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/painting.c b/reactos/subsystems/win32/win32k/ntuser/painting.c index cd9b474d1cc..b6f970b762e 100644 --- a/reactos/subsystems/win32/win32k/ntuser/painting.c +++ b/reactos/subsystems/win32/win32k/ntuser/painting.c @@ -770,7 +770,6 @@ NtUserBeginPaint(HWND hWnd, PAINTSTRUCT* UnsafePs) { PWINDOW_OBJECT Window = NULL; PAINTSTRUCT Ps; - PROSRGNDATA Rgn; NTSTATUS Status; DECLARE_RETURN(HDC); USER_REFERENCE_ENTRY Ref; @@ -816,23 +815,7 @@ NtUserBeginPaint(HWND hWnd, PAINTSTRUCT* UnsafePs) if (Window->UpdateRegion != NULL) { MsqDecPaintCountQueue(Window->MessageQueue); - Rgn = REGION_LockRgn(Window->UpdateRegion); - if (NULL != Rgn) - { - REGION_GetRgnBox(Rgn, &Ps.rcPaint); - REGION_UnlockRgn(Rgn); - IntGdiIntersectRect(&Ps.rcPaint, &Ps.rcPaint, &Window->Wnd->ClientRect); - if (! IntGdiIsEmptyRect(&Ps.rcPaint)) - { - IntGdiOffsetRect(&Ps.rcPaint, - -Window->Wnd->ClientRect.left, - -Window->Wnd->ClientRect.top); - } - } - else - { - IntGetClientRect(Window, &Ps.rcPaint); - } + GdiGetClipBox(Ps.hdc, &Ps.rcPaint); GDIOBJ_SetOwnership(Window->UpdateRegion, PsGetCurrentProcess()); /* The region is part of the dc now and belongs to the process! */ Window->UpdateRegion = NULL; From 72cd091bffc8fa4a47f7994d3bbb29564d4c38e3 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Tue, 29 Jul 2008 07:30:49 +0000 Subject: [PATCH 010/304] Odbccp32 dll doesn't have a DllMain function reported by hto See issue #3603 for more details. svn path=/trunk/; revision=34924 --- reactos/dll/win32/odbccp32/odbccp32.rbuild | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/odbccp32/odbccp32.rbuild b/reactos/dll/win32/odbccp32/odbccp32.rbuild index 774eb44ecfb..f8d461c36a8 100644 --- a/reactos/dll/win32/odbccp32/odbccp32.rbuild +++ b/reactos/dll/win32/odbccp32/odbccp32.rbuild @@ -1,7 +1,7 @@ - + . include/reactos/wine From 9db67069ced03d0b807ae78dbd6668eede53f13a Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Tue, 29 Jul 2008 16:10:38 +0000 Subject: [PATCH 011/304] - Remove unused hVScrollBar and hHScrollBar members in GUI_CONSOLE_DATA. - Remove ScreenBufferSize member from GUI_CONSOLE_DATA; when building the structure for console.dll, send the actual screen buffer size instead. - GuiConsolePaint, GuiIntDrawRegion: Adjust coordinates based on buffer's scroll position. - GuiConsolePaint: Use ConioCoordToPointer when finding attribute at top-left. - GuiConsoleHandlePaint: Don't leak the DC when the paint rectangle is empty. - GuiConsoleHandleScroll: Actually update the buffer's scroll position, not just the scrollbar's. Allow scrolling either horizontally or vertically. Fix typo in SB_THUMBTRACK case. Don't rely on GetScrollInfo for bound checking - any thread can sabotage the scrollbar ranges. - CsrGetScreenBufferInfo: Return the visible area in srWindow. svn path=/trunk/; revision=34928 --- .../subsystems/win32/csrss/win32csr/conio.c | 16 ++- .../win32/csrss/win32csr/guiconsole.c | 123 +++++++++--------- 2 files changed, 76 insertions(+), 63 deletions(-) diff --git a/reactos/subsystems/win32/csrss/win32csr/conio.c b/reactos/subsystems/win32/csrss/win32csr/conio.c index a3552543889..ff65c58e37a 100644 --- a/reactos/subsystems/win32/csrss/win32csr/conio.c +++ b/reactos/subsystems/win32/csrss/win32csr/conio.c @@ -1292,6 +1292,7 @@ ConioProcessKey(MSG *msg, PCSRSS_CONSOLE Console, BOOL TextMode) CSR_API(CsrGetScreenBufferInfo) { NTSTATUS Status; + PCSRSS_CONSOLE Console; PCSRSS_SCREEN_BUFFER Buff; PCONSOLE_SCREEN_BUFFER_INFO pInfo; @@ -1300,9 +1301,15 @@ CSR_API(CsrGetScreenBufferInfo) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); + Status = ConioConsoleFromProcessData(ProcessData, &Console); + if (! NT_SUCCESS(Status)) + { + return Request->Status = Status; + } Status = ConioLockScreenBuffer(ProcessData, Request->Data.ScreenBufferInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { + ConioUnlockConsole(Console); return Request->Status = Status; } pInfo = &Request->Data.ScreenBufferInfoRequest.Info; @@ -1311,13 +1318,14 @@ CSR_API(CsrGetScreenBufferInfo) pInfo->dwCursorPosition.X = Buff->CurrentX; pInfo->dwCursorPosition.Y = Buff->CurrentY; pInfo->wAttributes = Buff->DefaultAttrib; - pInfo->srWindow.Left = 0; - pInfo->srWindow.Right = Buff->MaxX - 1; - pInfo->srWindow.Top = 0; - pInfo->srWindow.Bottom = Buff->MaxY - 1; + pInfo->srWindow.Left = Buff->ShowX; + pInfo->srWindow.Right = Buff->ShowX + Console->Size.X - 1; + pInfo->srWindow.Top = Buff->ShowY; + pInfo->srWindow.Bottom = Buff->ShowY + Console->Size.Y - 1; pInfo->dwMaximumWindowSize.X = Buff->MaxX; pInfo->dwMaximumWindowSize.Y = Buff->MaxY; ConioUnlockScreenBuffer(Buff); + ConioUnlockConsole(Console); Request->Status = STATUS_SUCCESS; diff --git a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c index 2fa1f220989..b189b14211b 100644 --- a/reactos/subsystems/win32/csrss/win32csr/guiconsole.c +++ b/reactos/subsystems/win32/csrss/win32csr/guiconsole.c @@ -32,8 +32,6 @@ typedef struct GUI_CONSOLE_DATA_TAG BOOL MouseDown; HMODULE ConsoleLibrary; HANDLE hGuiInitEvent; - HWND hVScrollBar; - HWND hHScrollBar; WCHAR FontName[LF_FACESIZE]; DWORD FontSize; DWORD FontWeight; @@ -44,7 +42,6 @@ typedef struct GUI_CONSOLE_DATA_TAG DWORD NumberOfHistoryBuffers; DWORD HistoryBufferSize; DWORD WindowPosition; - DWORD ScreenBufferSize; DWORD UseRasterFonts; COLORREF ScreenText; COLORREF ScreenBackground; @@ -620,7 +617,6 @@ GuiConsoleUseDefaults(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PCSRSS_ GuiData->PopupText = RGB(128, 0, 128); GuiData->PopupBackground = RGB(255, 255, 255); GuiData->WindowPosition = UINT_MAX; - GuiData->ScreenBufferSize = MAKELONG(80, 300); //FIXME GuiData->UseRasterFonts = TRUE; memcpy(GuiData->Colors, s_Colors, sizeof(s_Colors)); @@ -868,17 +864,17 @@ GuiConsolePaint(PCSRSS_CONSOLE Console, Buff = Console->ActiveBuffer; - TopLine = rc->top / GuiData->CharHeight; - BottomLine = (rc->bottom + (GuiData->CharHeight - 1)) / GuiData->CharHeight - 1; - LeftChar = rc->left / GuiData->CharWidth; - RightChar = (rc->right + (GuiData->CharWidth - 1)) / GuiData->CharWidth - 1; - LastAttribute = Buff->Buffer[(TopLine * Buff->MaxX + LeftChar) * 2 + 1]; + EnterCriticalSection(&Buff->Header.Lock); + + TopLine = rc->top / GuiData->CharHeight + Buff->ShowY; + BottomLine = (rc->bottom + (GuiData->CharHeight - 1)) / GuiData->CharHeight - 1 + Buff->ShowY; + LeftChar = rc->left / GuiData->CharWidth + Buff->ShowX; + RightChar = (rc->right + (GuiData->CharWidth - 1)) / GuiData->CharWidth - 1 + Buff->ShowX; + LastAttribute = ConioCoordToPointer(Buff, LeftChar, TopLine)[1]; SetTextColor(hDC, GuiConsoleRGBFromAttribute(GuiData, LastAttribute)); SetBkColor(hDC, GuiConsoleRGBFromAttribute(GuiData, LastAttribute >> 4)); - EnterCriticalSection(&Buff->Header.Lock); - if (BottomLine >= Buff->MaxY) BottomLine = Buff->MaxY - 1; if (RightChar >= Buff->MaxX) RightChar = Buff->MaxX - 1; @@ -896,8 +892,8 @@ GuiConsolePaint(PCSRSS_CONSOLE Console, if (*(From + 1) != LastAttribute) { TextOutW(hDC, - Start * GuiData->CharWidth, - Line * GuiData->CharHeight, + (Start - Buff->ShowX) * GuiData->CharWidth, + (Line - Buff->ShowY) * GuiData->CharHeight, GuiData->LineBuffer, Char - Start); Start = Char; @@ -922,8 +918,8 @@ GuiConsolePaint(PCSRSS_CONSOLE Console, } TextOutW(hDC, - Start * GuiData->CharWidth, - Line * GuiData->CharHeight, + (Start - Buff->ShowX) * GuiData->CharWidth, + (Line - Buff->ShowY) * GuiData->CharHeight, GuiData->LineBuffer, RightChar - Start + 1); } @@ -955,8 +951,8 @@ GuiConsolePaint(PCSRSS_CONSOLE Console, OldBrush = SelectObject(hDC, CursorBrush); PatBlt(hDC, - CursorX * GuiData->CharWidth, - CursorY * GuiData->CharHeight + (GuiData->CharHeight - CursorHeight), + (CursorX - Buff->ShowX) * GuiData->CharWidth, + (CursorY - Buff->ShowY) * GuiData->CharHeight + (GuiData->CharHeight - CursorHeight), GuiData->CharWidth, CursorHeight, PATCOPY); @@ -1027,8 +1023,8 @@ GuiConsoleHandlePaint(HWND hWnd, HDC hDCPaint) } } - EndPaint(hWnd, &ps); } + EndPaint(hWnd, &ps); } static VOID FASTCALL @@ -1054,14 +1050,14 @@ GuiConsoleHandleKey(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) } static VOID FASTCALL -GuiIntDrawRegion(PGUI_CONSOLE_DATA GuiData, HWND Wnd, RECT *Region) +GuiIntDrawRegion(PCSRSS_SCREEN_BUFFER Buff, PGUI_CONSOLE_DATA GuiData, HWND Wnd, RECT *Region) { RECT RegionRect; - RegionRect.left = Region->left * GuiData->CharWidth; - RegionRect.top = Region->top * GuiData->CharHeight; - RegionRect.right = (Region->right + 1) * GuiData->CharWidth; - RegionRect.bottom = (Region->bottom + 1) * GuiData->CharHeight; + RegionRect.left = (Region->left - Buff->ShowX) * GuiData->CharWidth; + RegionRect.top = (Region->top - Buff->ShowY) * GuiData->CharHeight; + RegionRect.right = (Region->right + 1 - Buff->ShowX) * GuiData->CharWidth; + RegionRect.bottom = (Region->bottom + 1 - Buff->ShowY) * GuiData->CharHeight; InvalidateRect(Wnd, &RegionRect, FALSE); } @@ -1073,12 +1069,12 @@ GuiDrawRegion(PCSRSS_CONSOLE Console, RECT *Region) if (NULL != Console->hWindow && NULL != GuiData) { - GuiIntDrawRegion(GuiData, Console->hWindow, Region); + GuiIntDrawRegion(Console->ActiveBuffer, GuiData, Console->hWindow, Region); } } static VOID FASTCALL -GuiInvalidateCell(PGUI_CONSOLE_DATA GuiData, HWND Wnd, UINT x, UINT y) +GuiInvalidateCell(PCSRSS_SCREEN_BUFFER Buff, PGUI_CONSOLE_DATA GuiData, HWND Wnd, UINT x, UINT y) { RECT CellRect; @@ -1087,7 +1083,7 @@ GuiInvalidateCell(PGUI_CONSOLE_DATA GuiData, HWND Wnd, UINT x, UINT y) CellRect.right = x; CellRect.bottom = y; - GuiIntDrawRegion(GuiData, Wnd, &CellRect); + GuiIntDrawRegion(Buff, GuiData, Wnd, &CellRect); } static VOID STDCALL @@ -1140,12 +1136,12 @@ GuiWriteStream(PCSRSS_CONSOLE Console, RECT *Region, LONG CursorStartX, LONG Cur SW_INVALIDATE); } - GuiIntDrawRegion(GuiData, Console->hWindow, Region); + GuiIntDrawRegion(Buff, GuiData, Console->hWindow, Region); if (CursorStartX < Region->left || Region->right < CursorStartX || CursorStartY < Region->top || Region->bottom < CursorStartY) { - GuiInvalidateCell(GuiData, Console->hWindow, CursorStartX, CursorStartY); + GuiInvalidateCell(Buff, GuiData, Console->hWindow, CursorStartX, CursorStartY); } CursorEndX = Buff->CurrentX; @@ -1154,7 +1150,7 @@ GuiWriteStream(PCSRSS_CONSOLE Console, RECT *Region, LONG CursorStartX, LONG Cur || CursorEndY < Region->top || Region->bottom < CursorEndY) && (CursorEndX != CursorStartX || CursorEndY != CursorStartY)) { - GuiInvalidateCell(GuiData, Console->hWindow, CursorEndX, CursorEndY); + GuiInvalidateCell(Buff, GuiData, Console->hWindow, CursorEndX, CursorEndY); } } @@ -1463,7 +1459,7 @@ GuiConsoleShowConsoleProperties(HWND hWnd, BOOL Defaults, PGUI_CONSOLE_DATA GuiD SharedInfo.PopupBackground = GuiData->PopupBackground; SharedInfo.WindowSize = (DWORD)MAKELONG(Console->Size.X, Console->Size.Y); SharedInfo.WindowPosition = GuiData->WindowPosition; - SharedInfo.ScreenBuffer = GuiData->ScreenBufferSize; + SharedInfo.ScreenBuffer = (DWORD)MAKELONG(Console->ActiveBuffer->MaxX, Console->ActiveBuffer->MaxY); SharedInfo.UseRasterFonts = GuiData->UseRasterFonts; SharedInfo.FontSize = (DWORD)GuiData->FontSize; SharedInfo.FontWeight = GuiData->FontWeight; @@ -1687,18 +1683,39 @@ GuiApplyUserSettings(PCSRSS_CONSOLE Console, PGUI_CONSOLE_DATA GuiData, PConsole static LRESULT -GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam, PGUI_CONSOLE_DATA GuiData) +GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam) { + PCSRSS_CONSOLE Console; + PCSRSS_SCREEN_BUFFER Buff; + PGUI_CONSOLE_DATA GuiData; SCROLLINFO sInfo; - int old_pos; + int fnBar; + int old_pos, Maximum; + PUSHORT pShowXY; + + GuiConsoleGetDataPointers(hwnd, &Console, &GuiData); + if (Console == NULL || GuiData == NULL) + return FALSE; + Buff = Console->ActiveBuffer; + + if (uMsg == WM_HSCROLL) + { + fnBar = SB_HORZ; + Maximum = Buff->MaxX - Console->Size.X; + pShowXY = &Buff->ShowX; + } + else + { + fnBar = SB_VERT; + Maximum = Buff->MaxY - Console->Size.Y; + pShowXY = &Buff->ShowY; + } /* set scrollbar sizes */ sInfo.cbSize = sizeof(SCROLLINFO); sInfo.fMask = SIF_RANGE | SIF_POS | SIF_PAGE | SIF_TRACKPOS; - if (!GetScrollInfo(hwnd, - (uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT), - &sInfo)) + if (!GetScrollInfo(hwnd, fnBar, &sInfo)) { return FALSE; } @@ -1724,7 +1741,7 @@ GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam, PGUI_CONSOLE_DATA Gu break; case SB_THUMBTRACK: - sInfo.nPage = sInfo.nTrackPos; + sInfo.nPos = sInfo.nTrackPos; break; case SB_TOP: @@ -1739,39 +1756,27 @@ GuiConsoleHandleScroll(HWND hwnd, UINT uMsg, WPARAM wParam, PGUI_CONSOLE_DATA Gu break; } - sInfo.fMask = SIF_POS; - sInfo.cbSize = sizeof(SCROLLINFO); - - SetScrollInfo(hwnd, - (uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT), - &sInfo, - TRUE); - - sInfo.cbSize = sizeof(SCROLLINFO); - sInfo.fMask = SIF_POS; - - if (!GetScrollInfo(hwnd, - (uMsg == WM_HSCROLL ? SB_HORZ : SB_VERT), - &sInfo)) - { - return 0; - } + sInfo.nPos = max(sInfo.nPos, 0); + sInfo.nPos = min(sInfo.nPos, Maximum); if (old_pos != sInfo.nPos) { - /// - /// fixme scroll window - /// + USHORT OldX = Buff->ShowX; + USHORT OldY = Buff->ShowY; + *pShowXY = sInfo.nPos; ScrollWindowEx(hwnd, - 0, - GuiData->CharHeight * (old_pos - sInfo.nPos), + (OldX - Buff->ShowX) * GuiData->CharWidth, + (OldY - Buff->ShowY) * GuiData->CharHeight, NULL, NULL, NULL, NULL, SW_INVALIDATE); + sInfo.fMask = SIF_POS; + SetScrollInfo(hwnd, fnBar, &sInfo, TRUE); + UpdateWindow(hwnd); } return 0; @@ -1827,7 +1832,7 @@ GuiConsoleWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) break; case WM_HSCROLL: case WM_VSCROLL: - Result = GuiConsoleHandleScroll(hWnd, msg, wParam, GuiData); + Result = GuiConsoleHandleScroll(hWnd, msg, wParam); break; case WM_SIZE: GuiConsoleResize(hWnd, wParam, lParam); From 60db6af48b298f045634dac1af998062ec73a5e7 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 29 Jul 2008 16:52:39 +0000 Subject: [PATCH 012/304] - implement folder property dialog - sync chinese resource files svn path=/trunk/; revision=34929 --- reactos/dll/win32/shell32/folder_options.c | 279 +++++++++++++++++++++ reactos/dll/win32/shell32/fprop.c | 3 +- reactos/dll/win32/shell32/lang/bg-BG.rc | 22 ++ reactos/dll/win32/shell32/lang/ca-ES.rc | 23 ++ reactos/dll/win32/shell32/lang/cs-CZ.rc | 23 ++ reactos/dll/win32/shell32/lang/da-DK.rc | 23 ++ reactos/dll/win32/shell32/lang/de-DE.rc | 24 ++ reactos/dll/win32/shell32/lang/el-GR.rc | 23 ++ reactos/dll/win32/shell32/lang/en-GB.rc | 23 ++ reactos/dll/win32/shell32/lang/en-US.rc | 24 ++ reactos/dll/win32/shell32/lang/es-ES.rc | 23 ++ reactos/dll/win32/shell32/lang/fi-FI.rc | 23 ++ reactos/dll/win32/shell32/lang/fr-FR.rc | 23 ++ reactos/dll/win32/shell32/lang/hu-HU.rc | 23 ++ reactos/dll/win32/shell32/lang/it-IT.rc | 23 ++ reactos/dll/win32/shell32/lang/ja-JP.rc | 23 ++ reactos/dll/win32/shell32/lang/ko-KR.rc | 23 ++ reactos/dll/win32/shell32/lang/nb-NO.rc | 23 ++ reactos/dll/win32/shell32/lang/nl-NL.rc | 23 ++ reactos/dll/win32/shell32/lang/pl-PL.rc | 23 ++ reactos/dll/win32/shell32/lang/pt-BR.rc | 23 ++ reactos/dll/win32/shell32/lang/pt-PT.rc | 23 ++ reactos/dll/win32/shell32/lang/ru-RU.rc | 23 ++ reactos/dll/win32/shell32/lang/sk-SK.rc | 23 ++ reactos/dll/win32/shell32/lang/sl-SI.rc | 23 ++ reactos/dll/win32/shell32/lang/sv-SE.rc | 23 ++ reactos/dll/win32/shell32/lang/tr-TR.rc | 23 ++ reactos/dll/win32/shell32/lang/uk-UA.rc | 23 ++ reactos/dll/win32/shell32/lang/zh-CN.rc | 31 +++ reactos/dll/win32/shell32/lang/zh-TW.rc | 23 ++ reactos/dll/win32/shell32/shell32_main.h | 1 + reactos/dll/win32/shell32/shresdef.h | 2 +- 32 files changed, 935 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/shell32/folder_options.c b/reactos/dll/win32/shell32/folder_options.c index e17cc3b840f..f7fb6c239e0 100644 --- a/reactos/dll/win32/shell32/folder_options.c +++ b/reactos/dll/win32/shell32/folder_options.c @@ -41,6 +41,7 @@ #include "shlwapi.h" WINE_DEFAULT_DEBUG_CHANNEL (fprop); +#define MAX_PROPERTY_SHEET_PAGE (32) /// Folder Options: /// CLASSKEY = HKEY_CLASSES_ROOT\CLSID\{6DFD7C5C-2451-11d3-A299-00C04F8EF6AF} @@ -50,6 +51,16 @@ WINE_DEFAULT_DEBUG_CHANNEL (fprop); /// ShellFolder Attributes: 0x0 +typedef struct +{ + DWORD cFiles; + DWORD cFolder; + LARGE_INTEGER bSize; + HWND hwndDlg; + WCHAR szFolderPath[MAX_PATH]; +}FOLDER_PROPERTIES_CONTEXT, *PFOLDER_PROPERTIES_CONTEXT; + + INT_PTR CALLBACK FolderOptionsGeneralDlg( @@ -276,5 +287,273 @@ VOID WINAPI Options_RunDLLW(HWND hWnd, HINSTANCE hInst, LPCWSTR cmd, DWORD nCmdS Options_RunDLLCommon(hWnd, hInst, StrToIntW(cmd), nCmdShow); } +static +DWORD WINAPI +CountFolderAndFiles(LPVOID lParam) +{ + WIN32_FIND_DATAW FindData; + HANDLE hFile; + UINT Length; + LPWSTR pOffset; + BOOL ret; + PFOLDER_PROPERTIES_CONTEXT pContext = (PFOLDER_PROPERTIES_CONTEXT) lParam; + + pOffset = PathAddBackslashW(pContext->szFolderPath); + if (!pOffset) + return 0; + + Length = pOffset - pContext->szFolderPath; + + wcscpy(pOffset, L"*.*"); + hFile = FindFirstFileW(pContext->szFolderPath, &FindData); + if (hFile == INVALID_HANDLE_VALUE) + return 0; + + do + { + ret = FindNextFileW(hFile, &FindData); + if (ret) + { + if (FindData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) + { + if (FindData.cFileName[0] == L'.' && FindData.cFileName[1] == L'.' && + FindData.cFileName[2] == L'\0') + continue; + + pContext->cFolder++; + wcscpy(pOffset, FindData.cFileName); + CountFolderAndFiles((LPVOID)pContext); + pOffset[0] = L'\0'; + } + else + { + pContext->cFiles++; + pContext->bSize.u.LowPart += FindData.nFileSizeLow; + pContext->bSize.u.HighPart += FindData.nFileSizeHigh; + } + } + else if (GetLastError() == ERROR_NO_MORE_FILES) + { + break; + } + }while(1); + + FindClose(hFile); + return 1; +} + +static +VOID +InitializeFolderGeneralDlg(PFOLDER_PROPERTIES_CONTEXT pContext) +{ + LPWSTR pFolderName; + WIN32_FILE_ATTRIBUTE_DATA FolderAttribute; + FILETIME ft; + SYSTEMTIME dt; + WCHAR szBuffer[MAX_PATH+5]; + WCHAR szFormat[30] = {0}; + + static const WCHAR wFormat[] = {'%','0','2','d','/','%','0','2','d','/','%','0','4','d',' ',' ','%','0','2','d',':','%','0','2','u',0}; + + pFolderName = wcsrchr(pContext->szFolderPath, L'\\'); + if (!pFolderName) + return; + + /* set folder name */ + SendDlgItemMessageW(pContext->hwndDlg, 14001, WM_SETTEXT, 0, (LPARAM) (pFolderName + 1)); + /* set folder location */ + pFolderName[0] = L'\0'; + if (wcslen(pContext->szFolderPath) == 2) + { + /* folder is located at root */ + WCHAR szDrive[4] = {L'C',L':',L'\\',L'\0'}; + szDrive[0] = pContext->szFolderPath[0]; + SendDlgItemMessageW(pContext->hwndDlg, 14007, WM_SETTEXT, 0, (LPARAM) szDrive); + } + else + { + SendDlgItemMessageW(pContext->hwndDlg, 14007, WM_SETTEXT, 0, (LPARAM) pContext->szFolderPath); + } + pFolderName[0] = L'\\'; + /* get folder properties */ + if (GetFileAttributesExW(pContext->szFolderPath, GetFileExInfoStandard, (LPVOID)&FolderAttribute)) + { + if (FolderAttribute.dwFileAttributes & FILE_ATTRIBUTE_READONLY) + { + /* check readonly button */ + SendDlgItemMessage(pContext->hwndDlg, 14021, BM_SETCHECK, BST_CHECKED, 0); + } + + if (FolderAttribute.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) + { + /* check hidden button */ + SendDlgItemMessage(pContext->hwndDlg, 14022, BM_SETCHECK, BST_CHECKED, 0); + } + + if (FileTimeToLocalFileTime(&FolderAttribute.ftCreationTime, &ft)) + { + FileTimeToSystemTime(&ft, &dt); + sprintfW (szBuffer, wFormat, dt.wDay, dt.wMonth, dt.wYear, dt.wHour, dt.wMinute); + SendDlgItemMessageW(pContext->hwndDlg, 14015, WM_SETTEXT, 0, (LPARAM) szBuffer); + } + } + /* now enumerate enumerate contents */ + wcscpy(szBuffer, pContext->szFolderPath); + CountFolderAndFiles((LPVOID)pContext); + wcscpy(pContext->szFolderPath, szBuffer); + /* set folder details */ + LoadStringW(shell32_hInstance, IDS_FILE_FOLDER, szFormat, sizeof(szFormat)/sizeof(WCHAR)); + szFormat[(sizeof(szFormat)/sizeof(WCHAR))-1] = L'\0'; + sprintfW(szBuffer, szFormat, pContext->cFiles, pContext->cFolder); + SendDlgItemMessageW(pContext->hwndDlg, 14011, WM_SETTEXT, 0, (LPARAM) szBuffer); + + if (StrFormatByteSizeW(pContext->bSize.QuadPart, szBuffer, sizeof(szBuffer)/sizeof(WCHAR))) + { + /* store folder size */ + SendDlgItemMessageW(pContext->hwndDlg, 14009, WM_SETTEXT, 0, (LPARAM) szBuffer); + } +} + + +INT_PTR +CALLBACK +FolderPropertiesGeneralDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + LPPROPSHEETPAGEW ppsp; + PFOLDER_PROPERTIES_CONTEXT pContext; + HICON hIcon; + WIN32_FILE_ATTRIBUTE_DATA FolderAttribute; + LONG res; + LPPSHNOTIFY lppsn; + DWORD Attribute; + + switch(uMsg) + { + case WM_INITDIALOG: + ppsp = (LPPROPSHEETPAGEW)lParam; + if (ppsp == NULL) + break; + hIcon = LoadIconW(shell32_hInstance, MAKEINTRESOURCEW(IDI_SHELL_FOLDER_OPEN)); + if (hIcon) + SendDlgItemMessageW(hwndDlg, 14000, STM_SETICON, (WPARAM)hIcon, 0); + + pContext = SHAlloc(sizeof(FOLDER_PROPERTIES_CONTEXT)); + if (pContext) + { + ZeroMemory(pContext, sizeof(FOLDER_PROPERTIES_CONTEXT)); + pContext->hwndDlg = hwndDlg; + wcscpy(pContext->szFolderPath, (LPWSTR)ppsp->lParam); + SetWindowLongPtr(hwndDlg, DWL_USER, (LONG_PTR)pContext); + InitializeFolderGeneralDlg(pContext); + } + return TRUE; + case WM_COMMAND: + if (HIWORD(wParam) == BN_CLICKED) + { + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + } + break; + case WM_DESTROY: + pContext = (PFOLDER_PROPERTIES_CONTEXT)GetWindowLong(hwndDlg, DWL_USER); + SHFree((LPVOID)pContext); + break; + case WM_NOTIFY: + pContext = (PFOLDER_PROPERTIES_CONTEXT)GetWindowLong(hwndDlg, DWL_USER); + lppsn = (LPPSHNOTIFY) lParam; + if (lppsn->hdr.code == PSN_APPLY) + { + if (GetFileAttributesExW(pContext->szFolderPath, GetFileExInfoStandard, (LPVOID)&FolderAttribute)) + { + res = SendDlgItemMessageW(hwndDlg, 14021, BM_GETCHECK, 0, 0); + if (res == BST_CHECKED) + FolderAttribute.dwFileAttributes |= FILE_ATTRIBUTE_READONLY; + else + FolderAttribute.dwFileAttributes &= (~FILE_ATTRIBUTE_READONLY); + + res = SendDlgItemMessageW(hwndDlg, 14022, BM_GETCHECK, 0, 0); + if (res == BST_CHECKED) + FolderAttribute.dwFileAttributes |= FILE_ATTRIBUTE_HIDDEN; + else + FolderAttribute.dwFileAttributes &= (~FILE_ATTRIBUTE_HIDDEN); + + Attribute = FolderAttribute.dwFileAttributes & +(FILE_ATTRIBUTE_ARCHIVE|FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_NORMAL|FILE_ATTRIBUTE_READONLY|FILE_ATTRIBUTE_SYSTEM|FILE_ATTRIBUTE_TEMPORARY); + + SetFileAttributesW(pContext->szFolderPath, Attribute); + } + SetWindowLong( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + break; + } + return FALSE; +} + +static +BOOL +CALLBACK +FolderAddPropSheetPageProc(HPROPSHEETPAGE hpage, LPARAM lParam) +{ + PROPSHEETHEADERW *ppsh = (PROPSHEETHEADERW *)lParam; + if (ppsh != NULL && ppsh->nPages < MAX_PROPERTY_SHEET_PAGE) + { + ppsh->u3.phpage[ppsh->nPages++] = hpage; + return TRUE; + } + return FALSE; +} + +BOOL +SH_ShowFolderProperties(LPWSTR pwszFolder) +{ + HPROPSHEETPAGE hppages[MAX_PROPERTY_SHEET_PAGE]; + HPROPSHEETPAGE hpage; + PROPSHEETHEADERW psh; + BOOL ret; + WCHAR szName[MAX_PATH] = {0}; + HPSXA hpsx; + LPWSTR pFolderName; + + if (!PathIsDirectoryW(pwszFolder)) + return FALSE; + + pFolderName = wcsrchr(pwszFolder, L'\\'); + if (!pFolderName) + return FALSE; + + wcscpy(szName, pFolderName + 1); + + hpage = SH_CreatePropertySheetPage("SHELL_FOLDER_GENERAL_DLG", FolderPropertiesGeneralDlg, (LPARAM)pwszFolder, NULL); + if (!hpage) + return FALSE; + + ZeroMemory(&psh, sizeof(PROPSHEETHEADERW)); + hppages[psh.nPages] = hpage; + psh.nPages++; + psh.dwSize = sizeof(PROPSHEETHEADERW); + psh.dwFlags = PSH_PROPTITLE; + psh.hwndParent = NULL; + psh.u3.phpage = hppages; + psh.pszCaption = szName; + + hpsx = SHCreatePropSheetExtArray(HKEY_CLASSES_ROOT, + L"Folder", + MAX_PROPERTY_SHEET_PAGE-1); + + SHAddFromPropSheetExtArray(hpsx, + (LPFNADDPROPSHEETPAGE)FolderAddPropSheetPageProc, + (LPARAM)&psh); + + ret = PropertySheetW(&psh); + if (ret < 0) + return FALSE; + else + return TRUE; +} diff --git a/reactos/dll/win32/shell32/fprop.c b/reactos/dll/win32/shell32/fprop.c index 329aa9fbd5a..6cb44310181 100644 --- a/reactos/dll/win32/shell32/fprop.c +++ b/reactos/dll/win32/shell32/fprop.c @@ -778,8 +778,7 @@ SH_ShowPropertiesDialog(PCWSTR lpf) if (PathIsDirectoryW(wFileName)) { - FIXME("directory resources are missing\n"); - return FALSE; + return SH_ShowFolderProperties(wFileName); } if (wcslen(wFileName) == 3) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 802961b4c5a..8bd03e90c0d 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "" @@ -691,6 +712,7 @@ BEGIN IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 8b1d40eff38..159b336fe8e 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index f6387bbae00..987f5c856b3 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -201,6 +201,27 @@ BEGIN PUSHBUTTON "Storno", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Obecn" @@ -688,4 +709,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index fbd8eb86422..a70bbc68e71 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index cd9127950b3..f632c26d6b3 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -201,6 +201,28 @@ BEGIN PUSHBUTTON "Abbrechen", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Typ:", 14004, 8, 35, 50, 10 + LTEXT "Dateiordner", 14005, 68, 35, 160, 10 + LTEXT "Ort:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Gre:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Inhalt:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Erstellt:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Schreibgeschtzt", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Versteckt", 14022, 126, 150, 50, 10 +END + + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Allgemein" @@ -687,4 +709,6 @@ BEGIN IDS_PRINT_VERB "Drucken" IDS_PLAY_VERB "Abspielen" IDS_PREVIEW_VERB "Vorschau" + + IDS_FILE_FOLDER "%u Dateien, %u Ordner" END diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 4e6c802930c..86b975a2ebe 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 130 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index a86741214f6..2364d380b87 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index ea9191a5c6c..a34b4f0adf9 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -199,6 +199,28 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +709,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index 0462112840b..44429bac298 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -201,6 +201,27 @@ BEGIN PUSHBUTTON "Cancelar", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -689,4 +710,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 38e5938ea1f..cc7f9edb776 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 9a7d66b75d6..0c0fb62c4da 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -203,6 +203,27 @@ BEGIN PUSHBUTTON "Annuler", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Gnral" @@ -691,4 +712,6 @@ BEGIN IDS_PRINT_VERB "Imprimer" IDS_PLAY_VERB "Lire" IDS_PREVIEW_VERB "Apercevoir" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 6e7cd052a5b..8a9488183e7 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -202,6 +202,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -690,4 +711,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 627035bbbe4..2ce5630e29b 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -200,6 +200,27 @@ BEGIN PUSHBUTTON "Annulla", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Generale" @@ -688,4 +709,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index b935b01b875..133d0a99a55 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index b93febc0c8c..2873c2e23c4 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/nb-NO.rc b/reactos/dll/win32/shell32/lang/nb-NO.rc index db5e1bf31fb..63323e36323 100644 --- a/reactos/dll/win32/shell32/lang/nb-NO.rc +++ b/reactos/dll/win32/shell32/lang/nb-NO.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 1c2db4b8595..32f13b0609a 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index d28d74843c2..a037411a9f1 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -205,6 +205,27 @@ BEGIN PUSHBUTTON "Przerwij", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Oglne" @@ -693,4 +714,6 @@ BEGIN IDS_PRINT_VERB "Drukuj" IDS_PLAY_VERB "Odtwrz" IDS_PREVIEW_VERB "Podgld" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index dcf0c3cdea4..12729230562 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -201,6 +201,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -689,4 +710,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index fbfad2a7ddc..4739fdfe2d0 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -201,6 +201,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -689,4 +710,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 8e414908e47..694fd4dfb65 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -200,6 +200,27 @@ BEGIN PUSHBUTTON "", IDCANCEL, 120, 123, 50, 14, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "" @@ -685,4 +706,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 15143b58cc7..05f2f556456 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -205,6 +205,27 @@ BEGIN PUSHBUTTON "Prerui", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Veobecn" @@ -693,4 +714,6 @@ BEGIN IDS_PRINT_VERB "Tlai" IDS_PLAY_VERB "Prehra" IDS_PREVIEW_VERB "Preview" //Nhad, Ukka, Prezrie ??? + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index 5ae50fa8b27..e6492c196f5 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 20a778f8f1c..c98c9b5499c 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index a1d1e38fc26..59d9addae6c 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -199,6 +199,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -687,4 +708,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 7fc6a01b726..c399f46bb33 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -200,6 +200,27 @@ BEGIN PUSHBUTTON "", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "" @@ -688,4 +709,6 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 2df6b1d923f..3eccf7864cd 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -188,6 +188,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -667,5 +688,15 @@ BEGIN IDS_INI_FILE "Configuration Settings" IDS_LNK_FILE "Shortcut" IDS_SYS_FILE "System file" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index 3099bf47f4b..cd97a9fc11a 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -200,6 +200,27 @@ BEGIN PUSHBUTTON "Abort", 2, 120, 124, 50, 15, WS_VISIBLE END +SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Allgemein" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE + EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY + LTEXT "Type of file:", 14004, 8, 35, 50, 10 + LTEXT "Folder", 14005, 68, 35, 160, 10 + LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "", 14007, 68, 53, 315, 10 + LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "", 14009, 68, 72, 315, 10 + LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "", 14011, 68, 93, 160, 10 + LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "", 14015, 68, 118, 160, 10 + AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 +END + SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "General" @@ -688,6 +709,8 @@ BEGIN IDS_PRINT_VERB "Print" IDS_PLAY_VERB "Play" IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" END #pragma code_page(default) diff --git a/reactos/dll/win32/shell32/shell32_main.h b/reactos/dll/win32/shell32/shell32_main.h index f7aa72d8658..285a5738b3d 100644 --- a/reactos/dll/win32/shell32/shell32_main.h +++ b/reactos/dll/win32/shell32/shell32_main.h @@ -247,4 +247,5 @@ HPROPSHEETPAGE SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM BOOL SH_ShowDriveProperties(WCHAR * drive); BOOL SH_ShowRecycleBinProperties(WCHAR sDrive); BOOL SH_ShowPropertiesDialog(PCWSTR lpf); +BOOL SH_ShowFolderProperties(LPWSTR pwszFolder); #endif diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index 45a52307666..aaa96e51853 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -140,7 +140,7 @@ #define IDS_PRINT_VERB 304 #define IDS_PLAY_VERB 305 #define IDS_PREVIEW_VERB 306 - +#define IDS_FILE_FOLDER 307 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 From ff15b21470f02b917ec40264bf566f6f8f6223c1 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 29 Jul 2008 17:19:16 +0000 Subject: [PATCH 013/304] - fix titles in folder property dialog - translate title to native language when available svn path=/trunk/; revision=34930 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 2 +- reactos/dll/win32/shell32/lang/ca-ES.rc | 2 +- reactos/dll/win32/shell32/lang/cs-CZ.rc | 2 +- reactos/dll/win32/shell32/lang/da-DK.rc | 2 +- reactos/dll/win32/shell32/lang/el-GR.rc | 2 +- reactos/dll/win32/shell32/lang/en-GB.rc | 2 +- reactos/dll/win32/shell32/lang/en-US.rc | 2 +- reactos/dll/win32/shell32/lang/es-ES.rc | 2 +- reactos/dll/win32/shell32/lang/fi-FI.rc | 2 +- reactos/dll/win32/shell32/lang/fr-FR.rc | 2 +- reactos/dll/win32/shell32/lang/hu-HU.rc | 2 +- reactos/dll/win32/shell32/lang/it-IT.rc | 2 +- reactos/dll/win32/shell32/lang/ja-JP.rc | 2 +- reactos/dll/win32/shell32/lang/ko-KR.rc | 2 +- reactos/dll/win32/shell32/lang/nb-NO.rc | 2 +- reactos/dll/win32/shell32/lang/nl-NL.rc | 2 +- reactos/dll/win32/shell32/lang/pl-PL.rc | 2 +- reactos/dll/win32/shell32/lang/pt-BR.rc | 2 +- reactos/dll/win32/shell32/lang/pt-PT.rc | 2 +- reactos/dll/win32/shell32/lang/ru-RU.rc | 2 +- reactos/dll/win32/shell32/lang/sk-SK.rc | 2 +- reactos/dll/win32/shell32/lang/sl-SI.rc | 2 +- reactos/dll/win32/shell32/lang/sv-SE.rc | 2 +- reactos/dll/win32/shell32/lang/tr-TR.rc | 2 +- reactos/dll/win32/shell32/lang/uk-UA.rc | 2 +- reactos/dll/win32/shell32/lang/zh-CN.rc | 2 +- reactos/dll/win32/shell32/lang/zh-TW.rc | 2 +- 27 files changed, 27 insertions(+), 27 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 8bd03e90c0d..3b57fa6eac5 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 159b336fe8e..fe88c5fb5f5 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 987f5c856b3..6fb71a9c049 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -203,7 +203,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "Obecn" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index a70bbc68e71..fbcbefc351b 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 86b975a2ebe..7ba9d76efb4 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 2364d380b87..969a7ebf1b9 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index a34b4f0adf9..edc3c0ee685 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index 44429bac298..ef989d6204d 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -203,7 +203,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index cc7f9edb776..40497b06191 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 0c0fb62c4da..f997136458d 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -205,7 +205,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "Gnral" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 8a9488183e7..585efe9e5ed 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -204,7 +204,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 2ce5630e29b..f98e06696fc 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -202,7 +202,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "Generale" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index 133d0a99a55..a3355332a30 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index 2873c2e23c4..c62952cc37b 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/nb-NO.rc b/reactos/dll/win32/shell32/lang/nb-NO.rc index 63323e36323..af8e2d3fb46 100644 --- a/reactos/dll/win32/shell32/lang/nb-NO.rc +++ b/reactos/dll/win32/shell32/lang/nb-NO.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 32f13b0609a..1a1b051658e 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index a037411a9f1..8349ba2182f 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -207,7 +207,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "Oglne" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index 12729230562..d8d97b405ed 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -203,7 +203,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 4739fdfe2d0..30ba78f5171 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -203,7 +203,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 694fd4dfb65..44ca07c9892 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -202,7 +202,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 05f2f556456..bcfffec811a 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -207,7 +207,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "Veobecn" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index e6492c196f5..5c056ed4f76 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index c98c9b5499c..1e3c461ece5 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index 59d9addae6c..ba81db6e160 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -201,7 +201,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index c399f46bb33..3ad14b59912 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -202,7 +202,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 3eccf7864cd..8b71835dfb6 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -190,7 +190,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index cd97a9fc11a..5de2f94924c 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -202,7 +202,7 @@ END SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Allgemein" +CAPTION "General" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE From dcdadb236cd77006123d30b3eb3f0c6a0fa5967c Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 29 Jul 2008 17:42:35 +0000 Subject: [PATCH 014/304] - register shellink property sheet handler - should make shellink property page visible again svn path=/trunk/; revision=34931 --- reactos/boot/bootdata/hivecls_arm.inf | 1 + reactos/boot/bootdata/hivecls_i386.inf | 1 + 2 files changed, 2 insertions(+) diff --git a/reactos/boot/bootdata/hivecls_arm.inf b/reactos/boot/bootdata/hivecls_arm.inf index b15f6def132..8167b2d011f 100644 --- a/reactos/boot/bootdata/hivecls_arm.inf +++ b/reactos/boot/bootdata/hivecls_arm.inf @@ -185,6 +185,7 @@ HKCR,"lnkfile","IsShortcut",0x00000000,"yes" HKCR,"lnkfile\CLSID","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\IconHandler","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}","",0x00000000,"" +HKCR,"lnkfile\shellex\PropertySheetHandlers\Shellink Property Page", "", 0x00000000, "{00021401-0000-0000-C000-000000000046}" ; Text Documents HKCR,".log","",0x00000000,"txtfile" diff --git a/reactos/boot/bootdata/hivecls_i386.inf b/reactos/boot/bootdata/hivecls_i386.inf index b15f6def132..8167b2d011f 100644 --- a/reactos/boot/bootdata/hivecls_i386.inf +++ b/reactos/boot/bootdata/hivecls_i386.inf @@ -185,6 +185,7 @@ HKCR,"lnkfile","IsShortcut",0x00000000,"yes" HKCR,"lnkfile\CLSID","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\IconHandler","",0x00000000,"{00021401-0000-0000-C000-000000000046}" HKCR,"lnkfile\shellex\ContextMenuHandlers\{00021401-0000-0000-C000-000000000046}","",0x00000000,"" +HKCR,"lnkfile\shellex\PropertySheetHandlers\Shellink Property Page", "", 0x00000000, "{00021401-0000-0000-C000-000000000046}" ; Text Documents HKCR,".log","",0x00000000,"txtfile" From fc0eaa9b9222bd62de62cefa7c19c485b7a7099b Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 29 Jul 2008 17:49:32 +0000 Subject: [PATCH 015/304] - update polish translation by Olaf Siejka (Caemyr) svn path=/trunk/; revision=34932 --- reactos/dll/win32/shell32/lang/pl-PL.rc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index 8349ba2182f..f477fc58442 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -212,18 +212,18 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type of file:", 14004, 8, 35, 50, 10 - LTEXT "Folder", 14005, 68, 35, 160, 10 - LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "Rozszerzenie:", 14004, 8, 35, 50, 10 + LTEXT "Katalog", 14005, 68, 35, 160, 10 + LTEXT "Lokalizacja:", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 315, 10 - LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "Rozmiar:", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "Zawiera:", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "Utworzony:", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 - AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 + AUTOCHECKBOX "&Tylko-do-odczytu", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Ukryty", 14022, 126, 150, 50, 10 END SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 From 4c985ce93a0505fdaa6740f1a24c25ae22bb5eeb Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 29 Jul 2008 18:03:23 +0000 Subject: [PATCH 016/304] - register network neighbourhood as a desktop namespace extension svn path=/trunk/; revision=34933 --- reactos/dll/win32/shell32/regsvr.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reactos/dll/win32/shell32/regsvr.c b/reactos/dll/win32/shell32/regsvr.c index 1af1893301f..14c665e28b4 100644 --- a/reactos/dll/win32/shell32/regsvr.c +++ b/reactos/dll/win32/shell32/regsvr.c @@ -730,6 +730,7 @@ static const WCHAR wszRecycleBin[] = { 'T','r','a','s','h', 0 }; static const WCHAR wszMyComputer[] = { 'M','y','C','o','m','p','u','t','e','r',0 }; static const WCHAR wszControlPanel[] = { 'C','o','n','t','r','o','l','P','a','n','e','l',0 }; static const WCHAR wszFolderOptions[] = { 'F','o','l','d','e','r',' ','O','p','t','i','o','n','s',0 }; +static const WCHAR wszNethoodFolder[] = { 'N','e','t','h','o','o','d',' ','f','o','l','d','e','r',0}; const GUID CLSID_FolderOptions = { 0x6DFD7C5C, 0x2451, 0x11d3, {0xa2,0x99,0x00,0xC0,0x4F,0x8e,0xf6,0xaf} }; @@ -746,6 +747,11 @@ static struct regsvr_namespace const namespace_extensions_list[] = { wszDesktop, wszMyDocuments }, + { + &CLSID_NetworkPlaces, + wszDesktop, + wszNethoodFolder + }, { &CLSID_RecycleBin, wszDesktop, From a9cd7fec762d7dcc50565add19dcb97f406af49c Mon Sep 17 00:00:00 2001 From: James Tabor Date: Tue, 29 Jul 2008 18:11:18 +0000 Subject: [PATCH 017/304] - Patch by Jeffrey Morlan: Fix bounds checking and change NtGdiDoPalette to use a temporary kmode buffer. See Bug 3383. svn path=/trunk/; revision=34934 --- .../subsystems/win32/win32k/objects/color.c | 123 ++++++++++-------- 1 file changed, 70 insertions(+), 53 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/color.c b/reactos/subsystems/win32/win32k/objects/color.c index 3703a7ab3c7..680047985b2 100644 --- a/reactos/subsystems/win32/win32k/objects/color.c +++ b/reactos/subsystems/win32/win32k/objects/color.c @@ -436,18 +436,16 @@ IntGetSystemPaletteEntries(HDC hDC, { if (pe != NULL) { - UINT CopyEntries; - - if (StartIndex + Entries < palGDI->NumColors) - CopyEntries = StartIndex + Entries; - else - CopyEntries = palGDI->NumColors - StartIndex; + if (StartIndex >= palGDI->NumColors) + Entries = 0; + else if (Entries > palGDI->NumColors - StartIndex) + Entries = palGDI->NumColors - StartIndex; memcpy(pe, palGDI->IndexedColors + StartIndex, - CopyEntries * sizeof(pe[0])); + Entries * sizeof(pe[0])); - Ret = CopyEntries; + Ret = Entries; } else { @@ -837,6 +835,7 @@ NtGdiDoPalette( IN BOOL bInbound) { LONG ret; + LPVOID pEntries = NULL; /* FIXME: Handle bInbound correctly */ @@ -846,58 +845,76 @@ NtGdiDoPalette( return 0; } - _SEH_TRY + if (pUnsafeEntries) { - switch(iFunc) + pEntries = ExAllocatePool(PagedPool, cEntries * sizeof(PALETTEENTRY)); + if (!pEntries) + return 0; + if (bInbound) { - case GdiPalAnimate: + _SEH_TRY + { ProbeForRead(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - ret = IntAnimatePalette((HPALETTE)hObj, iStart, cEntries, pUnsafeEntries); - break; - - case GdiPalSetEntries: - ProbeForRead(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - ret = IntSetPaletteEntries((HPALETTE)hObj, iStart, cEntries, pUnsafeEntries); - break; - - case GdiPalGetEntries: - if (pUnsafeEntries) - { - ProbeForWrite(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - } - ret = IntGetPaletteEntries((HPALETTE)hObj, iStart, cEntries, pUnsafeEntries); - break; - - case GdiPalGetSystemEntries: - if (pUnsafeEntries) - { - ProbeForWrite(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - } - ret = IntGetSystemPaletteEntries((HDC)hObj, iStart, cEntries, pUnsafeEntries); - break; - - case GdiPalSetColorTable: - ProbeForRead(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - ret = IntSetDIBColorTable((HDC)hObj, iStart, cEntries, (RGBQUAD*)pUnsafeEntries); - break; - - case GdiPalGetColorTable: - if (pUnsafeEntries) - { - ProbeForWrite(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); - } - ret = IntGetDIBColorTable((HDC)hObj, iStart, cEntries, (RGBQUAD*)pUnsafeEntries); - break; - - default: - ret = 0; + memcpy(pEntries, pUnsafeEntries, cEntries * sizeof(PALETTEENTRY)); + } + _SEH_HANDLE + { + ExFreePool(pEntries); + _SEH_YIELD(return 0); + } + _SEH_END } } - _SEH_HANDLE + + ret = 0; + switch(iFunc) { - ret = 0; + case GdiPalAnimate: + if (pEntries) + ret = IntAnimatePalette((HPALETTE)hObj, iStart, cEntries, pEntries); + break; + + case GdiPalSetEntries: + if (pEntries) + ret = IntSetPaletteEntries((HPALETTE)hObj, iStart, cEntries, pEntries); + break; + + case GdiPalGetEntries: + ret = IntGetPaletteEntries((HPALETTE)hObj, iStart, cEntries, pEntries); + break; + + case GdiPalGetSystemEntries: + ret = IntGetSystemPaletteEntries((HDC)hObj, iStart, cEntries, pEntries); + break; + + case GdiPalSetColorTable: + if (pEntries) + ret = IntSetDIBColorTable((HDC)hObj, iStart, cEntries, (RGBQUAD*)pEntries); + break; + + case GdiPalGetColorTable: + if (pEntries) + ret = IntGetDIBColorTable((HDC)hObj, iStart, cEntries, (RGBQUAD*)pEntries); + break; + } + + if (pEntries) + { + if (!bInbound) + { + _SEH_TRY + { + ProbeForWrite(pUnsafeEntries, cEntries * sizeof(PALETTEENTRY), 1); + memcpy(pUnsafeEntries, pEntries, cEntries * sizeof(PALETTEENTRY)); + } + _SEH_HANDLE + { + ret = 0; + } + _SEH_END + } + ExFreePool(pEntries); } - _SEH_END return ret; } From 6d82180d7a0586775296a144c19df269ed4c78d2 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Tue, 29 Jul 2008 18:53:46 +0000 Subject: [PATCH 018/304] - Add Event handle type. svn path=/trunk/; revision=34935 --- reactos/dll/win32/user32/include/user32p.h | 1 + reactos/dll/win32/user32/misc/misc.c | 11 +++++++---- reactos/subsystems/win32/win32k/include/object.h | 3 ++- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/user32/include/user32p.h b/reactos/dll/win32/user32/include/user32p.h index 760d1991c9b..24a9c9f4d82 100644 --- a/reactos/dll/win32/user32/include/user32p.h +++ b/reactos/dll/win32/user32/include/user32p.h @@ -186,6 +186,7 @@ extern int SPY_Init(void); #define VALIDATE_TYPE_CALLPROC 7 #define VALIDATE_TYPE_ACCEL 8 #define VALIDATE_TYPE_MONITOR 12 +#define VALIDATE_TYPE_EVENT 15 #define FIRST_USER_HANDLE 0x0020 /* first possible value for low word of user handle */ #define LAST_USER_HANDLE 0xffef /* last possible value for low word of user handle */ diff --git a/reactos/dll/win32/user32/misc/misc.c b/reactos/dll/win32/user32/misc/misc.c index bbe7322e44c..84bb9613a61 100644 --- a/reactos/dll/win32/user32/misc/misc.c +++ b/reactos/dll/win32/user32/misc/misc.c @@ -336,7 +336,7 @@ GetUser32Handle(HANDLE handle) /* * Decide whether an object is located on the desktop or shared heap */ -static const BOOL g_ObjectHeapTypeShared[VALIDATE_TYPE_MONITOR + 1] = +static const BOOL g_ObjectHeapTypeShared[VALIDATE_TYPE_EVENT + 1] = { FALSE, /* VALIDATE_TYPE_FREE (not used) */ TRUE, /* VALIDATE_TYPE_WIN */ /* FIXME: FALSE once WINDOW_OBJECT is deleted! */ @@ -350,7 +350,10 @@ static const BOOL g_ObjectHeapTypeShared[VALIDATE_TYPE_MONITOR + 1] = FALSE, /* (not used) */ FALSE, /* (not used) */ FALSE, /* (not used) */ - TRUE /* VALIDATE_TYPE_MONITOR */ + TRUE, /* VALIDATE_TYPE_MONITOR */ + FALSE, /* (not used) */ + FALSE, /* (not used) */ + TRUE /* VALIDATE_TYPE_EVENT */ }; // @@ -363,7 +366,7 @@ ValidateHandle(HANDLE handle, UINT uType) PVOID ret; PUSER_HANDLE_ENTRY pEntry; - ASSERT(uType <= VALIDATE_TYPE_MONITOR); + ASSERT(uType <= VALIDATE_TYPE_EVENT); pEntry = GetUser32Handle(handle); @@ -418,7 +421,7 @@ ValidateHandleNoErr(HANDLE handle, UINT uType) PVOID ret; PUSER_HANDLE_ENTRY pEntry; - ASSERT(uType <= VALIDATE_TYPE_MONITOR); + ASSERT(uType <= VALIDATE_TYPE_EVENT); pEntry = GetUser32Handle(handle); diff --git a/reactos/subsystems/win32/win32k/include/object.h b/reactos/subsystems/win32/win32k/include/object.h index 33ed973368c..32c32fb2e31 100644 --- a/reactos/subsystems/win32/win32k/include/object.h +++ b/reactos/subsystems/win32/win32k/include/object.h @@ -50,7 +50,8 @@ typedef enum _USER_OBJECT_TYPE otHook = 5, otCallProc = 7, otAccel, - otMonitor = 12 + otMonitor = 12, + otEvent = 15 } USER_OBJECT_TYPE; From 1fa91ed6582ea17b90192891c5a3878599f3d789 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Tue, 29 Jul 2008 18:54:28 +0000 Subject: [PATCH 019/304] - fix an obvious bug (introduced by me) See issue #3064 for more details. svn path=/trunk/; revision=34936 --- reactos/dll/win32/shell32/shfldr_mycomp.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/reactos/dll/win32/shell32/shfldr_mycomp.c b/reactos/dll/win32/shell32/shfldr_mycomp.c index 4dae135b238..9acab06fc31 100644 --- a/reactos/dll/win32/shell32/shfldr_mycomp.c +++ b/reactos/dll/win32/shell32/shfldr_mycomp.c @@ -700,8 +700,6 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, &dwVolumeSerialNumber, &dwMaximumComponentLength, &dwFileSystemFlags, NULL, 0); pszPath[MAX_PATH-1] = L'\0'; - pszPath[0] = L'\0'; - if (!wcslen(pszPath)) { UINT DriveType, ResourceId; From d006ec695ef530dd29b0f13f72a05a2c64c383a3 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Tue, 29 Jul 2008 21:52:09 +0000 Subject: [PATCH 020/304] Patch by Cameron Gutman (aicommander (at) gmail (dot) com) - Remove a hack from DispTdiSendDatagram - Fix a couple of bugs that resulted in clearing the wrong request svn path=/trunk/; revision=34938 --- reactos/drivers/network/afd/afd/write.c | 4 ++-- reactos/drivers/network/tcpip/tcpip/dispatch.c | 3 --- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/reactos/drivers/network/afd/afd/write.c b/reactos/drivers/network/afd/afd/write.c index 19407d85169..5236a8c551b 100644 --- a/reactos/drivers/network/afd/afd/write.c +++ b/reactos/drivers/network/afd/afd/write.c @@ -41,7 +41,7 @@ static NTSTATUS NTAPI SendComplete ASSERT_IRQL(APC_LEVEL); if (Irp->Cancel) { - FCB->ReceiveIrp.InFlightRequest = NULL; + FCB->SendIrp.InFlightRequest = NULL; return STATUS_SUCCESS; } @@ -175,7 +175,7 @@ static NTSTATUS NTAPI PacketSocketSendComplete Irp->IoStatus.Information)); if (Irp->Cancel) { - FCB->ReceiveIrp.InFlightRequest = NULL; + FCB->SendIrp.InFlightRequest = NULL; return STATUS_SUCCESS; } diff --git a/reactos/drivers/network/tcpip/tcpip/dispatch.c b/reactos/drivers/network/tcpip/tcpip/dispatch.c index bee2e63c181..9c7cbeca6b5 100644 --- a/reactos/drivers/network/tcpip/tcpip/dispatch.c +++ b/reactos/drivers/network/tcpip/tcpip/dispatch.c @@ -1018,9 +1018,6 @@ NTSTATUS DispTdiSendDatagram( if (Status != STATUS_PENDING) { DispDataRequestComplete(Irp, Status, Irp->IoStatus.Information); - /* Return STATUS_PENDING because DispPrepareIrpForCancel - marks Irp as pending */ - Status = STATUS_PENDING; } else IoMarkIrpPending( Irp ); } From 4b9274519b0e44bfb8c1c01aa87dbc70ea20ec30 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Wed, 30 Jul 2008 06:05:20 +0000 Subject: [PATCH 021/304] Patch by Cameron Gutman (aicommander (at) gmail (dot) com) - Remove a hack related to cancellation - Make sure not to pass on a bad IRP on failure (in tdi) - Remember connect irp * Note: commit notes are arty's in this case svn path=/trunk/; revision=34943 --- reactos/drivers/network/afd/afd/main.c | 12 ++++---- reactos/drivers/network/afd/afd/tdi.c | 40 ++++++++++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/reactos/drivers/network/afd/afd/main.c b/reactos/drivers/network/afd/afd/main.c index ade36494317..ab57ab6e409 100644 --- a/reactos/drivers/network/afd/afd/main.c +++ b/reactos/drivers/network/afd/afd/main.c @@ -165,16 +165,19 @@ VOID DestroySocket( PAFD_FCB FCB ) { InFlightRequest[0] = &FCB->ListenIrp; InFlightRequest[1] = &FCB->ReceiveIrp; InFlightRequest[2] = &FCB->SendIrp; + InFlightRequest[3] = &FCB->ConnectIrp; /* Return early here because we might be called in the mean time. */ if( FCB->Critical || FCB->ListenIrp.InFlightRequest || FCB->ReceiveIrp.InFlightRequest || - FCB->SendIrp.InFlightRequest ) { - AFD_DbgPrint(MIN_TRACE,("Leaving socket alive (%x %x %x)\n", + FCB->SendIrp.InFlightRequest || + FCB->ConnectIrp.InFlightRequest ) { + AFD_DbgPrint(MIN_TRACE,("Leaving socket alive (%x %x %x %x)\n", FCB->ListenIrp.InFlightRequest, FCB->ReceiveIrp.InFlightRequest, - FCB->SendIrp.InFlightRequest)); + FCB->SendIrp.InFlightRequest, + FCB->ConnectIrp.InFlightRequest)); ReturnEarly = TRUE; } @@ -183,11 +186,10 @@ VOID DestroySocket( PAFD_FCB FCB ) { /* Cancel our pending requests */ for( i = 0; i < IN_FLIGHT_REQUESTS; i++ ) { - NTSTATUS Status = STATUS_NO_SUCH_FILE; if( InFlightRequest[i]->InFlightRequest ) { AFD_DbgPrint(MID_TRACE,("Cancelling in flight irp %d (%x)\n", i, InFlightRequest[i]->InFlightRequest)); - InFlightRequest[i]->InFlightRequest->IoStatus.Status = Status; + InFlightRequest[i]->InFlightRequest->IoStatus.Status = STATUS_CANCELLED; InFlightRequest[i]->InFlightRequest->IoStatus.Information = 0; IoCancelIrp( InFlightRequest[i]->InFlightRequest ); } diff --git a/reactos/drivers/network/afd/afd/tdi.c b/reactos/drivers/network/afd/afd/tdi.c index d998fabd0db..4b1a5e7fd99 100644 --- a/reactos/drivers/network/afd/afd/tdi.c +++ b/reactos/drivers/network/afd/afd/tdi.c @@ -294,6 +294,11 @@ NTSTATUS TdiConnect( assert(ConnectionObject); DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } *Irp = TdiBuildInternalDeviceControlIrp(TDI_CONNECT, /* Sub function */ DeviceObject, /* Device object */ @@ -343,6 +348,10 @@ NTSTATUS TdiAssociateAddressFile( assert(ConnectionObject); DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + return STATUS_INVALID_PARAMETER; + } KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -391,6 +400,11 @@ NTSTATUS TdiListen AFD_DbgPrint(MAX_TRACE, ("Called\n")); DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } Status = TdiBuildNullConnectionInfo(RequestConnectionInfo, TDI_ADDRESS_TYPE_IP); @@ -452,6 +466,10 @@ NTSTATUS TdiSetEventHandler( assert(FileObject); DeviceObject = IoGetRelatedDeviceObject(FileObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + return STATUS_INVALID_PARAMETER; + } KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -508,6 +526,10 @@ NTSTATUS TdiQueryDeviceControl( PIRP Irp; DeviceObject = IoGetRelatedDeviceObject(FileObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + return STATUS_INVALID_PARAMETER; + } KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -553,6 +575,10 @@ NTSTATUS TdiQueryInformation( PIRP Irp; DeviceObject = IoGetRelatedDeviceObject(FileObject); + if (!DeviceObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + return STATUS_INVALID_PARAMETER; + } KeInitializeEvent(&Event, NotificationEvent, FALSE); @@ -774,6 +800,7 @@ NTSTATUS TdiSend DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; return STATUS_INVALID_PARAMETER; } @@ -799,6 +826,7 @@ NTSTATUS TdiSend if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); + *Irp = NULL; return STATUS_INSUFFICIENT_RESOURCES; } @@ -807,11 +835,13 @@ NTSTATUS TdiSend } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); IoFreeIrp(*Irp); + *Irp = NULL; Status = STATUS_INSUFFICIENT_RESOURCES; } _SEH_END; if( !NT_SUCCESS(Status) ) { IoFreeIrp(*Irp); + *Irp = NULL; return Status; } @@ -850,6 +880,7 @@ NTSTATUS TdiReceive( DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; return STATUS_INVALID_PARAMETER; } @@ -875,6 +906,7 @@ NTSTATUS TdiReceive( if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); + *Irp = NULL; return STATUS_INSUFFICIENT_RESOURCES; } @@ -885,11 +917,13 @@ NTSTATUS TdiReceive( } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); IoFreeIrp(*Irp); + *Irp = NULL; Status = STATUS_INSUFFICIENT_RESOURCES; } _SEH_END; if( !NT_SUCCESS(Status) ) { IoFreeIrp(*Irp); + *Irp = NULL; return Status; } @@ -945,6 +979,7 @@ NTSTATUS TdiReceiveDatagram( DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; return STATUS_INVALID_PARAMETER; } @@ -970,6 +1005,7 @@ NTSTATUS TdiReceiveDatagram( if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); + *Irp = NULL; return STATUS_INSUFFICIENT_RESOURCES; } @@ -978,6 +1014,7 @@ NTSTATUS TdiReceiveDatagram( } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); IoFreeIrp(*Irp); + *Irp = NULL; _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; @@ -1033,6 +1070,7 @@ NTSTATUS TdiSendDatagram( DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); + *Irp = NULL; return STATUS_INVALID_PARAMETER; } @@ -1059,6 +1097,7 @@ NTSTATUS TdiSendDatagram( if (!Mdl) { AFD_DbgPrint(MIN_TRACE, ("Insufficient resources.\n")); IoFreeIrp(*Irp); + *Irp = NULL; return STATUS_INSUFFICIENT_RESOURCES; } @@ -1067,6 +1106,7 @@ NTSTATUS TdiSendDatagram( } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); IoFreeIrp(*Irp); + *Irp = NULL; _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; From aa8cad03d047bac30d857d566e870b9f1f735f1a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Wed, 30 Jul 2008 07:27:33 +0000 Subject: [PATCH 022/304] Fix GetEnvironmentStrings/GetEnvironmentStringsA mess svn path=/trunk/; revision=34944 --- reactos/include/psdk/winbase.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index 4448fa66829..31f9c97a954 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -1465,7 +1465,7 @@ DWORD WINAPI GetDllDirectoryW(DWORD,LPWSTR); #endif UINT WINAPI GetDriveTypeA(LPCSTR); UINT WINAPI GetDriveTypeW(LPCWSTR); -LPSTR WINAPI GetEnvironmentStrings(void); +LPSTR WINAPI GetEnvironmentStringsA(void); LPWSTR WINAPI GetEnvironmentStringsW(void); DWORD WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD); DWORD WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD); @@ -2401,7 +2401,7 @@ typedef ENUMRESTYPEPROCA ENUMRESTYPEPROC; #define GetDllDirectory GetDllDirectoryA #endif #define GetDriveType GetDriveTypeA -#define GetEnvironmentStringsA GetEnvironmentStrings +#define GetEnvironmentStrings GetEnvironmentStringsA #define GetEnvironmentVariable GetEnvironmentVariableA #define GetFileAttributes GetFileAttributesA #define GetFileAttributesEx GetFileAttributesExA From 9b55463daa38161129a9c4d9e13aa140fe2fd1e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Wed, 30 Jul 2008 07:29:55 +0000 Subject: [PATCH 023/304] unix define doesn't mean we're on a x86 compatible machine svn path=/trunk/; revision=34945 --- reactos/include/psdk/winnt.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/winnt.h b/reactos/include/psdk/winnt.h index 8eed528e681..f76a2f77c2c 100644 --- a/reactos/include/psdk/winnt.h +++ b/reactos/include/psdk/winnt.h @@ -2011,7 +2011,7 @@ typedef struct _ACL_SIZE_INFORMATION { } ACL_SIZE_INFORMATION; /* FIXME: add more machines */ -#if defined(_X86_) || defined(unix) && !defined(__PowerPC__) +#if defined(_X86_) && !defined(__PowerPC__) #define SIZE_OF_80387_REGISTERS 80 #define CONTEXT_i386 0x10000 #define CONTEXT_i486 0x10000 From c6de7a80b8e05928f41cb5ba5ff6502428d94080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Wed, 30 Jul 2008 08:02:45 +0000 Subject: [PATCH 024/304] Revert r34344, the mess with GetEnvironmentStrings/GetEnvironmentStringsA is expected. svn path=/trunk/; revision=34946 --- reactos/include/psdk/winbase.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index 31f9c97a954..4448fa66829 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -1465,7 +1465,7 @@ DWORD WINAPI GetDllDirectoryW(DWORD,LPWSTR); #endif UINT WINAPI GetDriveTypeA(LPCSTR); UINT WINAPI GetDriveTypeW(LPCWSTR); -LPSTR WINAPI GetEnvironmentStringsA(void); +LPSTR WINAPI GetEnvironmentStrings(void); LPWSTR WINAPI GetEnvironmentStringsW(void); DWORD WINAPI GetEnvironmentVariableA(LPCSTR,LPSTR,DWORD); DWORD WINAPI GetEnvironmentVariableW(LPCWSTR,LPWSTR,DWORD); @@ -2401,7 +2401,7 @@ typedef ENUMRESTYPEPROCA ENUMRESTYPEPROC; #define GetDllDirectory GetDllDirectoryA #endif #define GetDriveType GetDriveTypeA -#define GetEnvironmentStrings GetEnvironmentStringsA +#define GetEnvironmentStringsA GetEnvironmentStrings #define GetEnvironmentVariable GetEnvironmentVariableA #define GetFileAttributes GetFileAttributesA #define GetFileAttributesEx GetFileAttributesExA From 8edd5bdaa087f959729bb41af6e1608dc879cbd1 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 30 Jul 2008 09:23:45 +0000 Subject: [PATCH 025/304] - Add IRP tests based on a Alexander Morozov's patch to Wine ("[try 3] Add tests for IoInitializeIrp and IoAllocateIrp"). svn path=/trunk/; revision=34947 --- rostests/drivers/kmtest/kmtest.c | 8 +-- rostests/drivers/kmtest/ntos_io.c | 92 +++++++++++++++++++++++++++++++ 2 files changed, 95 insertions(+), 5 deletions(-) diff --git a/rostests/drivers/kmtest/kmtest.c b/rostests/drivers/kmtest/kmtest.c index 77fc9c093db..d59bcbbb4e4 100644 --- a/rostests/drivers/kmtest/kmtest.c +++ b/rostests/drivers/kmtest/kmtest.c @@ -103,8 +103,7 @@ int kmtest_ok(int condition, const char *msg, ... ) /* * Test Declarations */ -VOID NtoskrnlIoMdlTest(); -VOID NtoskrnlIoDeviceInterface(); +VOID NtoskrnlIoTests(); VOID NtoskrnlObTest(); VOID NtoskrnlExecutiveTests(); VOID NtoskrnlPoolsTest(); @@ -120,10 +119,9 @@ DriverEntry(PDRIVER_OBJECT DriverObject, DbgPrint("\n===============================================\nKernel Mode Regression Test driver starting...\n"); //NtoskrnlExecutiveTests(); //NtoskrnlIoDeviceInterface(); - //NtoskrnlIoMdlTest(); + NtoskrnlIoTests(); //NtoskrnlObTest(); - //NtoskrnlObTest(); - NtoskrnlPoolsTest(); + //NtoskrnlPoolsTest(); return STATUS_SUCCESS; } diff --git a/rostests/drivers/kmtest/ntos_io.c b/rostests/drivers/kmtest/ntos_io.c index 9a662d22992..15884da34fa 100644 --- a/rostests/drivers/kmtest/ntos_io.c +++ b/rostests/drivers/kmtest/ntos_io.c @@ -3,6 +3,7 @@ * ReactOS Kernel Mode Regression Testing framework * * Copyright 2006 Aleksey Bragin + * Copyright 2008 Etersoft (Alexander Morozov) * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Library General Public @@ -28,6 +29,9 @@ #define NDEBUG #include "debug.h" +VOID NtoskrnlIoDeviceInterface(); + + /* PUBLIC FUNCTIONS ***********************************************************/ VOID NtoskrnlIoMdlTest() @@ -79,3 +83,91 @@ VOID NtoskrnlIoMdlTest() FinishTest("NTOSKRNL Io Mdl"); } + +VOID NtoskrnlIoIrpTest() +{ + USHORT size; + IRP *iorp; + + // 1st test + size = sizeof(IRP) + 5 * sizeof(IO_STACK_LOCATION); + iorp = ExAllocatePool(NonPagedPool, size); + + if (NULL != iorp) + { + IoInitializeIrp(iorp, size, 5); + + ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type); + ok(iorp->Size == size, "Irp size should be %d, but got %d\n", + iorp->Size, size); + ok(5 == iorp->StackCount, "Irp StackCount should be 5, but got %d\n", + iorp->StackCount); + ok(6 == iorp->CurrentLocation, "Irp CurrentLocation should be 6, but got %d\n", + iorp->CurrentLocation); + ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n"); + ok ((PIO_STACK_LOCATION)(iorp + 1) + 5 == + iorp->Tail.Overlay.CurrentStackLocation, + "CurrentStackLocation mismatch\n"); + + ExFreePool(iorp); + } + + // 2nd test + size = sizeof(IRP) + 2 * sizeof(IO_STACK_LOCATION); + iorp = IoAllocateIrp(2, FALSE); + + if (NULL != iorp) + { + ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type); + ok(iorp->Size >= size, + "Irp size should be more or equal to %d, but got %d\n", + iorp->Size, size); + ok(2 == iorp->StackCount, "Irp StackCount should be 2, but got %d\n", + iorp->StackCount); + ok(3 == iorp->CurrentLocation, "Irp CurrentLocation should be 3, but got %d\n", + iorp->CurrentLocation); + ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n"); + ok ((PIO_STACK_LOCATION)(iorp + 1) + 2 == + iorp->Tail.Overlay.CurrentStackLocation, + "CurrentStackLocation mismatch\n"); + ok((IRP_ALLOCATED_FIXED_SIZE & iorp->AllocationFlags), + "IRP Allocation flags lack fixed size attribute\n"); + ok(!(IRP_LOOKASIDE_ALLOCATION & iorp->AllocationFlags), + "IRP Allocation flags should not have lookaside allocation\n"); + + IoFreeIrp(iorp); + } + + // 3rd test + size = sizeof(IRP) + 2 * sizeof(IO_STACK_LOCATION); + iorp = IoAllocateIrp(2, TRUE); + + if (NULL != iorp) + { + ok(6 == iorp->Type, "Irp type should be 6, but got %d\n", iorp->Type); + ok(iorp->Size >= size, + "Irp size should be more or equal to %d, but got %d\n", + iorp->Size, size); + ok(2 == iorp->StackCount, "Irp StackCount should be 2, but got %d\n", + iorp->StackCount); + ok(3 == iorp->CurrentLocation, "Irp CurrentLocation should be 3, but got %d\n", + iorp->CurrentLocation); + ok(IsListEmpty(&iorp->ThreadListEntry), "IRP thread list is not empty\n"); + ok ((PIO_STACK_LOCATION)(iorp + 1) + 2 == + iorp->Tail.Overlay.CurrentStackLocation, + "CurrentStackLocation mismatch\n"); + ok((IRP_ALLOCATED_FIXED_SIZE & iorp->AllocationFlags), + "IRP Allocation flags lack fixed size attribute\n"); + ok((IRP_LOOKASIDE_ALLOCATION & iorp->AllocationFlags), + "IRP Allocation flags lack lookaside allocation\n"); + + IoFreeIrp(iorp); + } +} + +VOID NtoskrnlIoTests() +{ + //NtoskrnlIoMdlTest(); + //NtoskrnlIoDeviceInterface(); + NtoskrnlIoIrpTest(); +} From ef848a8f68d3f26c33582c1907b520540717d732 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Wed, 30 Jul 2008 10:11:09 +0000 Subject: [PATCH 026/304] Remove a change from our diff file for comctl32, which is in Wine HEAD as well. See issue #2843 for more details. svn path=/trunk/; revision=34948 --- reactos/dll/win32/comctl32/comctl32_ros.diff | 9 --------- 1 file changed, 9 deletions(-) diff --git a/reactos/dll/win32/comctl32/comctl32_ros.diff b/reactos/dll/win32/comctl32/comctl32_ros.diff index c25767a938a..7011e3848b2 100644 --- a/reactos/dll/win32/comctl32/comctl32_ros.diff +++ b/reactos/dll/win32/comctl32/comctl32_ros.diff @@ -134,12 +134,3 @@ Index: treeview.c if (infoPtr->cdmode & CDRF_NOTIFYPOSTPAINT) infoPtr->cdmode = TREEVIEW_SendCustomDrawNotify(infoPtr, CDDS_POSTPAINT, hdc, rect); -@@ -3209,7 +3207,7 @@ - { - scrollRect.top = nextItem->rect.top; - -- ScrollWindowEx (infoPtr->hwnd, 0, scrollDist, &scrollRect, NULL, -+ ScrollWindowEx (infoPtr->hwnd, 0, scrollDist, &scrollRect, &scrollRect, - NULL, NULL, SW_ERASE | SW_INVALIDATE); - TREEVIEW_Invalidate(infoPtr, wineItem); - } else { From 52d04e432e672a920e05dddedb487c745f433d1b Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Wed, 30 Jul 2008 10:18:34 +0000 Subject: [PATCH 027/304] Mario Kacmar - Slovak, Polish and Ukrainian translations of packmgr updated/fixed. - See #3601 for more details. svn path=/trunk/; revision=34949 --- .../applications/packmgr/gui/lang/pl-PL.rc | 48 ++++++++++++++++++ .../applications/packmgr/gui/lang/sk-SK.rc | 45 +++++++++++++++++ .../applications/packmgr/gui/lang/uk-UA.rc | 50 +++++++++++++++++++ rosapps/applications/packmgr/gui/packmgr.rc | 3 ++ 4 files changed, 146 insertions(+) create mode 100644 rosapps/applications/packmgr/gui/lang/pl-PL.rc create mode 100644 rosapps/applications/packmgr/gui/lang/sk-SK.rc create mode 100644 rosapps/applications/packmgr/gui/lang/uk-UA.rc diff --git a/rosapps/applications/packmgr/gui/lang/pl-PL.rc b/rosapps/applications/packmgr/gui/lang/pl-PL.rc new file mode 100644 index 00000000000..99f6052bd6a --- /dev/null +++ b/rosapps/applications/packmgr/gui/lang/pl-PL.rc @@ -0,0 +1,48 @@ +/* + * translated by Caemyr - Olaf Siejka (Feb, 2008) + * Use ReactOS forum PM or IRC to contact me + * http://www.reactos.org + * IRC: irc.freenode.net #reactos-pl; + */ + +LANGUAGE LANG_POLISH, SUBLANG_DEFAULT + +/* Dialogs */ +IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Opcje" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Brak opcji do ustawienia.", 0, 50, 95, 80, 8 +END + +IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Wykonywanie zada" +FONT 8, "MS Shell Dlg" +BEGIN + + CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8 + + CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15 + + CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15 + + PUSHBUTTON "Przerwij", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED +END + +IDR_POPUP MENU DISCARDABLE +BEGIN + POPUP "PopUp", MENUBARBREAK + BEGIN + MENUITEM "Brak zada", 1, GRAYED + MENUITEM "Instaluj (zalecane)", 2, GRAYED + MENUITEM "Instaluj ze rda", 3, GRAYED + MENUITEM "Uaktualnij", 4, GRAYED + MENUITEM "Odinstaluj", 5, GRAYED + MENUITEM SEPARATOR + MENUITEM "Opcje", 8 + MENUITEM SEPARATOR + MENUITEM "ZrbTo", 6 + END +END diff --git a/rosapps/applications/packmgr/gui/lang/sk-SK.rc b/rosapps/applications/packmgr/gui/lang/sk-SK.rc new file mode 100644 index 00000000000..54215562206 --- /dev/null +++ b/rosapps/applications/packmgr/gui/lang/sk-SK.rc @@ -0,0 +1,45 @@ +/* TRANSLATOR: Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR: 03-02-2008 + */ + +LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT + +/* Dialogs */ +IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Monosti" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Zatia nie s iadne monosti.", 0, 50, 95, 80, 8 +END + +IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Vykonvam opercie" +FONT 8, "MS Shell Dlg" +BEGIN + + CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8 + + CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15 + + CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15 + + PUSHBUTTON "Zrui", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED +END + +IDR_POPUP MENU DISCARDABLE +BEGIN + POPUP "PopUp", MENUBARBREAK + BEGIN + MENUITEM "iadna akcia", 1, GRAYED + MENUITEM "Intalova (odporan)", 2, GRAYED + MENUITEM "Intalova zo zdrojovch kdov", 3, GRAYED + MENUITEM "Aktualizova", 4, GRAYED + MENUITEM "Odintalova", 5, GRAYED + MENUITEM SEPARATOR + MENUITEM "Monosti", 8 + MENUITEM SEPARATOR + MENUITEM "Spravi", 6 + END +END diff --git a/rosapps/applications/packmgr/gui/lang/uk-UA.rc b/rosapps/applications/packmgr/gui/lang/uk-UA.rc new file mode 100644 index 00000000000..462b1eef045 --- /dev/null +++ b/rosapps/applications/packmgr/gui/lang/uk-UA.rc @@ -0,0 +1,50 @@ +/* + * PROJECT: ReactOS Package Manager + * LICENSE: GPL - See COPYING in the top level directory + * FILE: rosapps/packmgr/gui/uk.rc + * PURPOSE: Ukraianian Language File for packmgr + * TRANSLATOR: Artem Reznikov + */ + +LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT + +/* Dialogs */ +IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 180, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT " .", 0, 50, 95, 80, 8 +END + +IDD_DOIT DIALOGEX DISCARDABLE 0, 0, 180, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION " " +FONT 8, "MS Shell Dlg" +BEGIN + + CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8 + + CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15 + + CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15 + + PUSHBUTTON "", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED +END + +IDR_POPUP MENU DISCARDABLE +BEGIN + POPUP "PopUp", MENUBARBREAK + BEGIN + MENUITEM " 䳿", 1, GRAYED + MENUITEM " ()", 2, GRAYED + MENUITEM " ", 3, GRAYED + MENUITEM "", 4, GRAYED + MENUITEM "", 5, GRAYED + MENUITEM SEPARATOR + MENUITEM "", 8 + MENUITEM SEPARATOR + MENUITEM "", 6 + END +END + diff --git a/rosapps/applications/packmgr/gui/packmgr.rc b/rosapps/applications/packmgr/gui/packmgr.rc index b6261eaa0d9..32f152a9dae 100644 --- a/rosapps/applications/packmgr/gui/packmgr.rc +++ b/rosapps/applications/packmgr/gui/packmgr.rc @@ -18,6 +18,9 @@ #include "lang/en-US.rc" #include "lang/es-ES.rc" #include "lang/fr-FR.rc" +#include "lang/pl-PL.rc" #include "lang/ru-RU.rc" +#include "lang/sk-SK.rc" +#include "lang/uk-UA.rc" /* EOF */ From c6d5d6895358c8a608f929e80253e3b0dfaf3158 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 30 Jul 2008 11:11:25 +0000 Subject: [PATCH 028/304] - Add unloading ability. - Don't forget to wrap any testing module into StartTest / FinishTest. svn path=/trunk/; revision=34951 --- rostests/drivers/kmtest/kmtest.c | 15 +++++++++++++++ rostests/drivers/kmtest/ntos_io.c | 4 ++++ 2 files changed, 19 insertions(+) diff --git a/rostests/drivers/kmtest/kmtest.c b/rostests/drivers/kmtest/kmtest.c index d59bcbbb4e4..5c27ed365ad 100644 --- a/rostests/drivers/kmtest/kmtest.c +++ b/rostests/drivers/kmtest/kmtest.c @@ -108,6 +108,16 @@ VOID NtoskrnlObTest(); VOID NtoskrnlExecutiveTests(); VOID NtoskrnlPoolsTest(); +/* + * KmtestUnload + */ +VOID +NTAPI +KmtestUnload(IN PDRIVER_OBJECT DriverObject) +{ + /* Nothing to do here */ +} + /* * DriverEntry */ @@ -117,6 +127,11 @@ DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) { DbgPrint("\n===============================================\nKernel Mode Regression Test driver starting...\n"); + + /* Set necessary routines */ + DriverObject->DriverUnload = KmtestUnload; + + //NtoskrnlExecutiveTests(); //NtoskrnlIoDeviceInterface(); NtoskrnlIoTests(); diff --git a/rostests/drivers/kmtest/ntos_io.c b/rostests/drivers/kmtest/ntos_io.c index 15884da34fa..ae718a80505 100644 --- a/rostests/drivers/kmtest/ntos_io.c +++ b/rostests/drivers/kmtest/ntos_io.c @@ -89,6 +89,8 @@ VOID NtoskrnlIoIrpTest() USHORT size; IRP *iorp; + StartTest(); + // 1st test size = sizeof(IRP) + 5 * sizeof(IO_STACK_LOCATION); iorp = ExAllocatePool(NonPagedPool, size); @@ -163,6 +165,8 @@ VOID NtoskrnlIoIrpTest() IoFreeIrp(iorp); } + + FinishTest("NTOSKRNL Io Irp"); } VOID NtoskrnlIoTests() From 1bdfa12e51c91c0df07b37ae4104d10e599c24c0 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Wed, 30 Jul 2008 11:12:25 +0000 Subject: [PATCH 029/304] Daniel Verkamp (daniel.verkamp@gmail.com) - Sync "list.h" to Wine to fix a pointer to integer cast warning on 64-bit hosts See issue #3579 for more details. svn path=/trunk/; revision=34952 --- reactos/include/reactos/wine/list.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/reactos/wine/list.h b/reactos/include/reactos/wine/list.h index b018a1f216c..b610e5e5ca9 100644 --- a/reactos/include/reactos/wine/list.h +++ b/reactos/include/reactos/wine/list.h @@ -225,6 +225,6 @@ static inline void list_move_head( struct list *dst, struct list *src ) /* get pointer to object containing list element */ #define LIST_ENTRY(elem, type, field) \ - ((type *)((char *)(elem) - (unsigned int)(&((type *)0)->field))) + ((type *)((char *)(elem) - (unsigned long)(&((type *)0)->field))) #endif /* __WINE_SERVER_LIST_H */ From 4035fb69b91d1dd19894c373dd9cc852bc92d165 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 30 Jul 2008 11:15:48 +0000 Subject: [PATCH 030/304] - By default enable all tests. 0 failures in Windows XP SP3. svn path=/trunk/; revision=34953 --- rostests/drivers/kmtest/kmtest.c | 8 +++----- rostests/drivers/kmtest/ntos_io.c | 4 ++-- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/rostests/drivers/kmtest/kmtest.c b/rostests/drivers/kmtest/kmtest.c index 5c27ed365ad..d30f3486752 100644 --- a/rostests/drivers/kmtest/kmtest.c +++ b/rostests/drivers/kmtest/kmtest.c @@ -131,12 +131,10 @@ DriverEntry(PDRIVER_OBJECT DriverObject, /* Set necessary routines */ DriverObject->DriverUnload = KmtestUnload; - - //NtoskrnlExecutiveTests(); - //NtoskrnlIoDeviceInterface(); + NtoskrnlExecutiveTests(); NtoskrnlIoTests(); - //NtoskrnlObTest(); - //NtoskrnlPoolsTest(); + NtoskrnlObTest(); + NtoskrnlPoolsTest(); return STATUS_SUCCESS; } diff --git a/rostests/drivers/kmtest/ntos_io.c b/rostests/drivers/kmtest/ntos_io.c index ae718a80505..55d6ff20fd5 100644 --- a/rostests/drivers/kmtest/ntos_io.c +++ b/rostests/drivers/kmtest/ntos_io.c @@ -171,7 +171,7 @@ VOID NtoskrnlIoIrpTest() VOID NtoskrnlIoTests() { - //NtoskrnlIoMdlTest(); - //NtoskrnlIoDeviceInterface(); + NtoskrnlIoMdlTest(); + NtoskrnlIoDeviceInterface(); NtoskrnlIoIrpTest(); } From 9b8755513d6f77e1b57df9448adf6461d024d72b Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Wed, 30 Jul 2008 12:14:30 +0000 Subject: [PATCH 031/304] Mario Kacmar - Updated Slovak translation for eventvwr, win32 and new Slovak translation for regedit added. - See issue #33610 for more details. svn path=/trunk/; revision=34954 --- .../mscutils/eventvwr/lang/sk-SK.rc | 17 +- .../applications/regedit/clb/lang/sk-SK.rc | 31 ++ reactos/base/applications/regedit/clb/rsrc.rc | 1 + .../base/applications/regedit/lang/sk-SK.rc | 453 ++++++++++++++++++ reactos/base/applications/regedit/rsrc.rc | 1 + reactos/dll/win32/devmgr/lang/sk-SK.rc | 20 +- reactos/dll/win32/newdev/lang/sk-SK.rc | 4 +- reactos/dll/win32/shell32/lang/sk-SK.rc | 34 +- 8 files changed, 524 insertions(+), 37 deletions(-) create mode 100644 reactos/base/applications/regedit/clb/lang/sk-SK.rc create mode 100644 reactos/base/applications/regedit/lang/sk-SK.rc diff --git a/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc b/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc index 96f0f77ae5a..0ffd814093b 100644 --- a/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc +++ b/reactos/base/applications/mscutils/eventvwr/lang/sk-SK.rc @@ -1,5 +1,6 @@ -/* TRANSLATOR: Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) - * DATE OF TR: 21-06-2008 +/* TRANSLATOR : Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR : 21-06-2008 + * LAST CHANGE: 28-07-2008 */ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT @@ -39,8 +40,8 @@ CAPTION " FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_EVENTVWR,IDC_MYICON,14,9,21,20 - LTEXT "Zobrazova udalost systmu ReactOS, verzia programu 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX - LTEXT "Autorsk prva (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)",IDC_STATIC,49,20,119,22 + LTEXT "Zobrazova udalost systmu ReactOS, verzia 1.0",IDC_STATIC,49,10,167,8,SS_NOPREFIX + LTEXT "Autorsk prva (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)",IDC_STATIC,49,20,167,22 DEFPUSHBUTTON "OK",IDOK,90,48,42,16,WS_GROUP END @@ -59,7 +60,7 @@ CAPTION "Podrobnosti o udalosti" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "&Zavrie",IDOK,12,258,50,14 - PUSHBUTTON "&Predchdzajca",IDPREVIOUS,78,258,50,14 + PUSHBUTTON "&Predol",IDPREVIOUS,78,258,50,14 PUSHBUTTON "&Nasledujca",IDNEXT,144,258,50,14 PUSHBUTTON "&Pomocnk",IDHELP,210,258,50,14 EDITTEXT IDC_EVENTTEXTEDIT,14,81,247,108,ES_MULTILINE | ES_READONLY @@ -93,8 +94,8 @@ BEGIN IDC_EVENTLOG_ERROR_TYPE "Chyba" IDC_EVENTLOG_WARNING_TYPE "Upozornenie" IDC_EVENTLOG_INFORMATION_TYPE "Informcia" - IDC_EVENTLOG_AUDIT_SUCCESS "Audit Success" - IDC_EVENTLOG_AUDIT_FAILURE "Audit Failure" - IDC_EVENTLOG_SUCCESS "Success" + IDC_EVENTLOG_AUDIT_SUCCESS "Kontrola uspen" + IDC_EVENTLOG_AUDIT_FAILURE "Kontrola zlyhala" + IDC_EVENTLOG_SUCCESS "spech" //Success IDC_EVENTLOG_UNKNOWN_TYPE "Neznma udalos" END diff --git a/reactos/base/applications/regedit/clb/lang/sk-SK.rc b/reactos/base/applications/regedit/clb/lang/sk-SK.rc new file mode 100644 index 00000000000..2479cd67b7f --- /dev/null +++ b/reactos/base/applications/regedit/clb/lang/sk-SK.rc @@ -0,0 +1,31 @@ +/* TRANSLATOR : Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR.: 07-07-2008 + */ + +LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT + +IDD_COLUMNLISTBOXSTYLES DIALOGEX 0, 0, 227, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Column List Box Styles" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Column List Box Styles", -1, 6, 7, 158, 71 + CHECKBOX "&Standard", 1710, 10, 20, 42, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Border", 1713, 10, 30, 34, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "S&ort", 1705, 10, 40, 26, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "Notif&y", 1706, 10, 50, 32, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "V&ert. Scroll Bar", 1707, 10, 60, 64, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Multiple Selection", -1, 79, 20, 72, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP | WS_DISABLED + CHECKBOX "E&xtended Selection", -1, 79, 30, 77, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP | WS_DISABLED + CHECKBOX "&Popout Headings", 1714, 79, 40, 68, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Springy Columns", 1715, 79, 50, 66, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + GROUPBOX "Basic Styles", -1, 6, 80, 158, 34 + CHECKBOX "&Visible", 1701, 10, 92, 34, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Disabled", 1702, 10, 102, 41, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Group", 1703, 79, 92, 32, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + CHECKBOX "&Tab Stop", 1704, 79, 102, 44, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + PUSHBUTTON "OK", IDOK, 37, 125, 40, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP + PUSHBUTTON "Zrui", IDCANCEL, 93, 125, 40, 14, BS_PUSHBUTTON | WS_GROUP | WS_TABSTOP + CHECKBOX "&Disable No-Scroll", 1708, 79, 60, 66, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP +END + diff --git a/reactos/base/applications/regedit/clb/rsrc.rc b/reactos/base/applications/regedit/clb/rsrc.rc index bfbacf851b2..d50035426df 100644 --- a/reactos/base/applications/regedit/clb/rsrc.rc +++ b/reactos/base/applications/regedit/clb/rsrc.rc @@ -38,6 +38,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/ja-JP.rc" #include "lang/pl-PL.rc" #include "lang/nb-NO.rc" +#include "lang/sk-SK.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/regedit/lang/sk-SK.rc b/reactos/base/applications/regedit/lang/sk-SK.rc new file mode 100644 index 00000000000..b1a8cf6686d --- /dev/null +++ b/reactos/base/applications/regedit/lang/sk-SK.rc @@ -0,0 +1,453 @@ +/* TRANSLATOR : Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR.: 07-07-2008 + * LAST CHANGE: 28-07-2008 + */ + +LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT + +ID_ACCEL ACCELERATORS +BEGIN + VK_DELETE, ID_EDIT_DELETE, VIRTKEY, NOINVERT + "^F", ID_EDIT_FIND + VK_F3, ID_EDIT_FINDNEXT, VIRTKEY, NOINVERT + VK_F5, ID_VIEW_REFRESH, VIRTKEY, NOINVERT + VK_F1, ID_HELP_HELPTOPICS, VIRTKEY, NOINVERT +END + +/* + * Menu + */ + +IDC_REGEDIT MENU DISCARDABLE +BEGIN + POPUP "&Sbor" + BEGIN + MENUITEM "S&koni", ID_REGISTRY_EXIT + END + POPUP "&Pomocnk" + BEGIN + MENUITEM "&o je ...", ID_HELP_ABOUT + END +END + +IDR_REGEDIT_MENU MENU DISCARDABLE +BEGIN + POPUP "&Sbor" + BEGIN + MENUITEM "&Importova...", ID_REGISTRY_IMPORTREGISTRYFILE + + MENUITEM "&Exportova...", ID_REGISTRY_EXPORTREGISTRYFILE + + MENUITEM SEPARATOR + MENUITEM "Load Hive...", ID_REGISTRY_LOADHIVE, GRAYED + MENUITEM "Unload Hive...", ID_REGISTRY_UNLOADHIVE, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Pripoji registre v sieti...", + ID_REGISTRY_CONNECTNETWORKREGISTRY + + MENUITEM "&Odpoji registre v sieti...", + ID_REGISTRY_DISCONNECTNETWORKREGISTRY + , GRAYED + MENUITEM SEPARATOR + MENUITEM "&Tlai\tCtrl+P", ID_REGISTRY_PRINT, GRAYED + MENUITEM SEPARATOR + MENUITEM "S&koni", ID_REGISTRY_EXIT + END + POPUP "&Upravi" + BEGIN + MENUITEM "&Zmeni", ID_EDIT_MODIFY + MENUITEM SEPARATOR + POPUP "&Nov" + BEGIN + MENUITEM "&K", ID_EDIT_NEW_KEY + MENUITEM SEPARATOR + MENUITEM "&Reazcov hodnota", ID_EDIT_NEW_STRINGVALUE + MENUITEM "&Binrna hodnota", ID_EDIT_NEW_BINARYVALUE + MENUITEM "&DWORD hodnota", ID_EDIT_NEW_DWORDVALUE + MENUITEM "&Viacreazcov hodnota", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Rozrit&en reazcov hodnota", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + END + MENUITEM SEPARATOR + MENUITEM "&Oprvnenia...", ID_EDIT_PERMISSIONS + MENUITEM SEPARATOR + MENUITEM "&Vymaza\tDel", ID_EDIT_DELETE + MENUITEM "&Premenova", ID_EDIT_RENAME + MENUITEM SEPARATOR + MENUITEM "&Koprova nzov ka", ID_EDIT_COPYKEYNAME + MENUITEM SEPARATOR + MENUITEM "&Hada\tCtrl+F", ID_EDIT_FIND + MENUITEM "Ha&da alej\tF3", ID_EDIT_FINDNEXT + END + POPUP "&Zobrazi" + BEGIN + MENUITEM "Stavov &riadok", ID_VIEW_STATUSBAR + MENUITEM SEPARATOR + MENUITEM "Rozde&lenie", ID_VIEW_SPLIT + MENUITEM SEPARATOR + MENUITEM "&Obnovi\tF5", ID_VIEW_REFRESH + END + POPUP "&Obben" + BEGIN + MENUITEM "&Prida k obbenm", ID_FAVOURITES_ADDTOFAVOURITES + , GRAYED + MENUITEM "&Odstrni z obbench", ID_FAVOURITES_REMOVEFAVOURITE + , GRAYED + END + POPUP "&Pomocnk" + BEGIN + MENUITEM "&Tmy pomocnka\tF1", ID_HELP_HELPTOPICS + MENUITEM SEPARATOR + MENUITEM "&o je Editor registrov", ID_HELP_ABOUT + END +END + +IDR_POPUP_MENUS MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Zmeni", ID_EDIT_MODIFY + MENUITEM "Zmeni binre daje", ID_EDIT_MODIFY_BIN + MENUITEM SEPARATOR + MENUITEM "&Vymaza\tDel", ID_EDIT_DELETE + MENUITEM "&Premenova", ID_EDIT_RENAME + END + POPUP "" + BEGIN + POPUP "&Nov" + BEGIN + MENUITEM "&K", ID_EDIT_NEW_KEY + MENUITEM SEPARATOR + MENUITEM "&Reazcov hodnota", ID_EDIT_NEW_STRINGVALUE + MENUITEM "&Binrna hodnota", ID_EDIT_NEW_BINARYVALUE + MENUITEM "&DWORD hodnota", ID_EDIT_NEW_DWORDVALUE + MENUITEM "&Viacreazcov hodnota", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Rozrit&en reazcov hodnota", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + END + END + POPUP "" + BEGIN + MENUITEM "Expand/Collapse", ID_TREE_EXPANDBRANCH + POPUP "&Nov" + BEGIN + MENUITEM "&K", ID_EDIT_NEW_KEY + MENUITEM SEPARATOR + MENUITEM "&Reazcov hodnota", ID_EDIT_NEW_STRINGVALUE + MENUITEM "&Binrna hodnota", ID_EDIT_NEW_BINARYVALUE + MENUITEM "&DWORD hodnota", ID_EDIT_NEW_DWORDVALUE + MENUITEM "&Viacreazcov hodnota", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Rozrit&en reazcov hodnota", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + END + MENUITEM "&Find", ID_EDIT_FIND + MENUITEM SEPARATOR + MENUITEM "&Vymaza", ID_TREE_DELETE + MENUITEM "&Premenova", ID_TREE_RENAME + MENUITEM SEPARATOR + MENUITEM "&Export", ID_TREE_EXPORT + MENUITEM "&Permissions...", ID_TREE_PERMISSIONS, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Copy Key Name", ID_EDIT_COPYKEYNAME + END +END + + +/* + * Dialog + */ + +IDD_EDIT_STRING DIALOGEX 32, 24, 252, 84 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | + WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "prava reazca" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Value &name:",IDC_STATIC,6,6,134,8 + EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "&Value data:",IDC_STATIC,6,35,161,8 + EDITTEXT IDC_VALUE_DATA,6,46,240,12,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,142,64,50,14 + PUSHBUTTON "Zrui",IDCANCEL,196,64,50,14 +END + +IDD_EDIT_MULTI_STRING DIALOGEX 32, 24, 252, 174 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | + WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "prava viacnsobnho reazca" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Value &name:",IDC_STATIC,6,6,134,8 + EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "&Value data:",IDC_STATIC,6,35,161,8 + EDITTEXT IDC_VALUE_DATA,6,46,240,102,ES_AUTOHSCROLL | ES_MULTILINE | ES_WANTRETURN | ES_AUTOVSCROLL | WS_VSCROLL + DEFPUSHBUTTON "OK",IDOK,142,154,50,14 + PUSHBUTTON "Zrui",IDCANCEL,196,154,50,14 +END + +IDD_EDIT_BIN_DATA DIALOGEX 32, 24, 252, 174 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | + WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "prava binrnej hodnoty" //upravi, upravenie +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Value &name:",IDC_STATIC,6,6,134,8 + EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "&Value data:",IDC_STATIC,6,35,161,8 + CONTROL "",IDC_VALUE_DATA,"HexEdit32",WS_VSCROLL | WS_BORDER | WS_TABSTOP,6,46,240,102 + DEFPUSHBUTTON "OK",IDOK,142,154,50,14 + PUSHBUTTON "Zrui",IDCANCEL,196,154,50,14 +END + + +IDD_EDIT_DWORD DIALOGEX 32, 24, 252, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | + WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "prava DWORD hodnoty" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Value &name:",IDC_STATIC,6,6,134,8 + EDITTEXT IDC_VALUE_NAME,6,17,240,12,ES_AUTOHSCROLL | ES_READONLY + LTEXT "&Value data:",IDC_STATIC,6,35,161,8 + EDITTEXT IDC_VALUE_DATA,6,46,116,12,ES_AUTOHSCROLL + GROUPBOX "Base",IDC_STATIC,130,35,116,39 + AUTORADIOBUTTON "&Hexadecimal",IDC_FORMAT_HEX,141,46,60,10,WS_GROUP + AUTORADIOBUTTON "&Decimal",IDC_FORMAT_DEC,141,59,60,10 + DEFPUSHBUTTON "OK",IDOK,142,82,50,14 + PUSHBUTTON "Zrui",IDCANCEL,196,82,50,14 +END + +/* + * String Table + */ + +STRINGTABLE DISCARDABLE +BEGIN + IDS_LIST_COLUMN_NAME "Nzov" + IDS_LIST_COLUMN_TYPE "Typ" + IDS_LIST_COLUMN_DATA "daje" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_TITLE "Editor registrov" + IDC_REGEDIT "REGEDIT" + IDC_REGEDIT_FRAME "REGEDIT_FRAME" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_REGISTRY_MENU "Contains commands for working with the whole registry" + ID_EDIT_MENU "Contains commands for editing values or keys" + ID_VIEW_MENU "Contains commands for customising the registry window" + ID_FAVOURITES_MENU "Contains commands for accessing frequently used keys" + ID_HELP_MENU "Contains commands for displaying help and information about registry editor" + ID_EDIT_NEW_MENU "Contains commands for creating new keys or values" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_EDIT_MODIFY "Modifies the value's data" + ID_EDIT_NEW_KEY "Prid nov k" + ID_EDIT_NEW_STRINGVALUE "Prid nov reazcov hodnotu" + ID_EDIT_NEW_BINARYVALUE "Prid nov binrnu hodnotu" + ID_EDIT_NEW_DWORDVALUE "Prid nov double word hodnotu" + ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry" + ID_REGISTRY_EXPORTREGISTRYFILE + "Exports all or part of the registry to a text file" + ID_REGISTRY_CONNECTNETWORKREGISTRY + "Connects to a remote computer's registry" + ID_REGISTRY_DISCONNECTNETWORKREGISTRY + "Disconnects from a remote computer's registry" + ID_REGISTRY_PRINT "Prints all or part of the registry" +/* ID_HELP_HELPTOPICS "Opens registry editor help" */ + ID_HELP_ABOUT "Displays program information, version number and copyright" +END + +STRINGTABLE DISCARDABLE +BEGIN + ID_REGISTRY_EXIT "Ukon editor registrov" + ID_FAVOURITES_ADDTOFAVOURITES "Adds keys to the favourites list" + ID_FAVOURITES_REMOVEFAVOURITE "Removes keys from the favourites list" + ID_VIEW_STATUSBAR "Zobraz alebo skryje stavov riadok" + ID_VIEW_SPLIT "Change position of split between two panes" + ID_VIEW_REFRESH "Refreshes the window" + ID_EDIT_DELETE "Deletes the selection" + ID_EDIT_RENAME "Renames the selection" + ID_EDIT_COPYKEYNAME "Copies the name of the selected key to the clipboard" + ID_EDIT_FIND "Finds a text string in a key, value or data" + ID_EDIT_FINDNEXT "Finds next occurrence of text specified in previous search" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_ERROR "Chyba" + IDS_WARNING "Upozornenie" + IDS_BAD_KEY "Can't query key '%s'" + IDS_BAD_VALUE "Can't query value '%s'" + IDS_UNSUPPORTED_TYPE "Can't edit keys of this type (%ld)" + IDS_TOO_BIG_VALUE "Hodnota je prli vek (%ld)" + IDS_MULTI_SZ_EMPTY_STRING "Data of type REG_MULTI_SZ cannot contain empty strings.\nThe empty strings have been removed from the list." + IDS_QUERY_DELETE_KEY_ONE "Are you sure you want to delete this key?" + IDS_QUERY_DELETE_KEY_MORE "Are you sure you want to delete these keys?" + IDS_QUERY_DELETE_KEY_CONFIRM "Confirm Key Delete" + IDS_QUERY_DELETE_ONE "Are you sure you want to delete this value?" + IDS_QUERY_DELETE_MORE "Are you sure you want to delete these values?" + IDS_QUERY_DELETE_CONFIRM "Confirm Value Delete" + IDS_ERR_DELVAL_CAPTION "Error Deleting Values" + IDS_ERR_DELETEVALUE "Unable to delete all specified values!" + IDS_ERR_RENVAL_CAPTION "Error Renaming Value" + IDS_ERR_RENVAL_TOEMPTY "Cannot rename %s. The specified value name is empty. Try another name and try again." + IDS_NEW_KEY "Nov k #%d" + IDS_NEW_VALUE "Nov hodnota #%d" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_BINARY_EMPTY "(binrna hodnota nulovej dky)" + IDS_DEFAULT_VALUE_NAME "(Predvolen)" + IDS_VALUE_NOT_SET "(hodnota nie nastaven)" + IDS_UNKNOWN_TYPE "Neznmy typ: (0x%lx)" + IDS_MY_COMPUTER "Tento pota" + IDS_IMPORT_REG_FILE "Import Registry File" + IDS_EXPORT_REG_FILE "Export Registry File" + IDS_INVALID_DWORD "(neplatn DWORD hodnota)" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_FLT_REGFILE "Registration File" + IDS_FLT_REGFILES "Registration Files" + IDS_FLT_REGFILES_FLT "*.reg" + IDS_FLT_REGEDIT4 "Win9x/NT4 Registration Files (REGEDIT4)" + IDS_FLT_REGEDIT4_FLT "*.reg" + IDS_FLT_ALLFILES "Vetky sbory (*.*)" + IDS_FLT_ALLFILES_FLT "*.*" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_ACCESS_FULLCONTROL "Full Control" + IDS_ACCESS_READ "Read" + IDS_ACCESS_QUERYVALUE "Query Value" + IDS_ACCESS_SETVALUE "Set Value" + IDS_ACCESS_CREATESUBKEY "Create Subkey" + IDS_ACCESS_ENUMERATESUBKEYS "Enumerate Subkeys" + IDS_ACCESS_NOTIFY "Notify" + IDS_ACCESS_CREATELINK "Create Link" + IDS_ACCESS_DELETE "Delete" + IDS_ACCESS_WRITEDAC "Write DAC" + IDS_ACCESS_WRITEOWNER "Write Owner" + IDS_ACCESS_READCONTROL "Read Control" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_INHERIT_THISKEYONLY "This key only" + IDS_INHERIT_THISKEYANDSUBKEYS "This key and subkeys" + IDS_INHERIT_SUBKEYSONLY "Subkeys only" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_EXPAND "&Expand" + IDS_COLLAPSE "&Collapse" + IDS_GOTO_SUGGESTED_KEY "&Go to '%s'" + IDS_FINISHEDFIND "Finished searching through the registry." +END + +/*****************************************************************/ + + +/* + * Dialog + */ + +IDD_EXPORTRANGE DIALOGEX DISCARDABLE 50, 50, 370, 50 +STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | + WS_BORDER +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Export Range",IDC_STATIC,2,0,366,48 + CONTROL "&All",IDC_EXPORT_ALL,"Button",BS_AUTORADIOBUTTON,10,10, 29,11 + CONTROL "S&elected Branch",IDC_EXPORT_BRANCH,"Button",BS_AUTORADIOBUTTON,10,22, 100,11 + EDITTEXT IDC_EXPORT_BRANCH_TEXT,30,34,335,12 +END + +IDD_ADDFAVORITES DIALOGEX DISCARDABLE 0, 0, 186, 46 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Add to Favorites" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,129,7,50,14 + PUSHBUTTON "Zrui",IDCANCEL,129,24,50,14 + LTEXT "&Favorite Name:",IDC_STATIC,7,7,70,10 + EDITTEXT IDC_FAVORITENAME,7,26,110,13,ES_AUTOHSCROLL +END + +IDD_REMOVEFAVORITES DIALOGEX DISCARDABLE 0, 0, 164, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Remove Favorites" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK",IDOK,107,114,50,14 + PUSHBUTTON "Zrui",IDCANCEL,7,114,50,14 + CONTROL "List1",IDC_FAVORITESLIST,"SysListView32",LVS_LIST | + WS_BORDER | WS_TABSTOP,7,20,150,90 + LTEXT "Select Favorite(s):",IDC_STATIC,7,7,99,12 +END + +IDD_FIND DIALOGEX DISCARDABLE 0, 0, 254, 82 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Find" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Find Next",IDOK,197,7,50,14 + PUSHBUTTON "Zrui",IDCANCEL,197,24,50,14 + GROUPBOX "Look at",IDC_STATIC,7,25,63,51 + LTEXT "Fi&nd what:",IDC_STATIC,7,8,37,10 + EDITTEXT IDC_FINDWHAT,47,7,142,13,ES_AUTOHSCROLL + CONTROL "&Ke",IDC_LOOKAT_KEYS,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,36,35,8 + CONTROL "&Hodnoty",IDC_LOOKAT_VALUES,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,48,36,8 + CONTROL "&daje",IDC_LOOKAT_DATA,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,14,60,42,8 + CONTROL "Match &whole string only",IDC_MATCHSTRING,"Button", + BS_AUTOCHECKBOX | WS_TABSTOP,83,32,94,13 + CONTROL "Match &case",IDC_MATCHCASE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP,83,48,90,12 +END + +IDD_FINDING DIALOGEX 0, 0, 145, 50 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP | + WS_CAPTION | WS_SYSMENU +CAPTION "Find" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + ICON IDI_REGEDIT,IDC_STATIC,7,7,20,20 + PUSHBUTTON "&Zrui",IDCANCEL,93,29,45,14 + LTEXT "Searching the registry...",IDC_STATIC,33,12,83,8 +END + +/* + * TEXTINCLUDE + */ + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + + + +/* + * String Table + */ + +/* + *STRINGTABLE DISCARDABLE + *BEGIN + * ID_HELP_HELPTOPICS "Otvor pomocnka pre Editor registrov." + * ID_HELP_ABOUT "Zobrazuje informcie programu, slo verzie a autorsk prva." + *END + */ + +/*****************************************************************/ diff --git a/reactos/base/applications/regedit/rsrc.rc b/reactos/base/applications/regedit/rsrc.rc index bd6709af3c8..3334a80ceaa 100644 --- a/reactos/base/applications/regedit/rsrc.rc +++ b/reactos/base/applications/regedit/rsrc.rc @@ -47,6 +47,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/pt-PT.rc" #include "lang/ru-RU.rc" #include "lang/sl-SI.rc" +#include "lang/sk-SK.rc" #include "lang/sv-SE.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/devmgr/lang/sk-SK.rc b/reactos/dll/win32/devmgr/lang/sk-SK.rc index f49eb1bfddb..4d3da98ea51 100644 --- a/reactos/dll/win32/devmgr/lang/sk-SK.rc +++ b/reactos/dll/win32/devmgr/lang/sk-SK.rc @@ -1,6 +1,6 @@ /* TRANSLATOR : Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) * DATE OF TR.: 30-05-2008 - * LAST CHANGE: 17-06-2008 + * LAST CHANGE: 30-07-2008 */ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT @@ -12,7 +12,7 @@ BEGIN IDS_MANUFACTURER "Vrobca: %1" IDS_LOCATION "Umiestnenie: %1" IDS_STATUS "Stav zariadenia: %1" - IDS_UNKNOWN "Neznmy" + IDS_UNKNOWN "Neznme" IDS_LOCATIONSTR "Umiestnenie %1!u! (%2)" IDS_DEVCODE " (Kd %1!u!)" IDS_DEVCODE2 " (Kd %2!u!)" @@ -21,14 +21,14 @@ BEGIN IDS_UNKNOWNDEVICE "Neznme zariadenie" IDS_NODRIVERLOADED "Pre toto zariadenie nie s naintalovan iadne ovldae." IDS_DEVONPARENT "na %1" - IDS_TROUBLESHOOTDEV "&Troubleshoot..." + IDS_TROUBLESHOOTDEV "&Rieenie problmov..." IDS_ENABLEDEV "E&nable Device" IDS_REINSTALLDRV "Re&install Driver" IDS_PROPERTIES "P&roperties" - IDS_UPDATEDRV "U&pdate Driver..." + IDS_UPDATEDRV "&Aktualizova ovlda..." IDS_REBOOT "Restart &Computer..." IDS_NOTAVAILABLE "Nie je k dispozcii" //Not available - IDS_NOTDIGITALLYSIGNED "Not digitally signed" + IDS_NOTDIGITALLYSIGNED "Digitlne nepodpsan" IDS_NODRIVERS "No driver files are required or have been loaded for this device." END @@ -98,7 +98,7 @@ IDD_HARDWARE DIALOGEX DISCARDABLE 0, 0, 300, 400 STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT FONT 8, "MS Shell Dlg" BEGIN - LTEXT "&Devices:",IDC_DEVICES,7,6,196,10 + LTEXT "&Zariadenia:",IDC_DEVICES,7,6,196,10 CONTROL "",IDC_LV_DEVICES,"SysListView32",LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,16,196,50 @@ -106,7 +106,7 @@ BEGIN LTEXT "",IDC_MANUFACTURER,14,88,183,10,SS_ENDELLIPSIS LTEXT "",IDC_LOCATION,14,100,183,10,SS_ENDELLIPSIS LTEXT "",IDC_STATUS,14,112,183,30 - PUSHBUTTON "&Troubleshoot...",IDC_TROUBLESHOOT,85,140,54,14, + PUSHBUTTON "&Rieenie problmov...",IDC_TROUBLESHOOT,85,140,54,14, BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP PUSHBUTTON "Vl&astnosti",IDC_PROPERTIES,146,140,50,14 END @@ -126,8 +126,8 @@ BEGIN EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY GROUPBOX "Stav zariadenia", IDC_DEVSTATUSGROUP, 7, 83, 238, 100 EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL - PUSHBUTTON "&Troubleshoot...", IDC_DEVPROBLEM, 148, 163, 90, 15 - LTEXT "&Device usage:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED + PUSHBUTTON "&Rieenie problmov...", IDC_DEVPROBLEM, 148, 163, 90, 15 + LTEXT "&Vyuitie zariadenia:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED END @@ -152,7 +152,7 @@ END IDD_DRIVERDETAILS DIALOGEX DISCARDABLE 0, 0, 224, 250 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME -CAPTION "Detaily sboru ovldaa" +CAPTION "Detaily o sboroch ovldaa" FONT 8, "MS Shell Dlg" BEGIN ICON "", IDC_DEVICON, 7, 7, 20, 20 diff --git a/reactos/dll/win32/newdev/lang/sk-SK.rc b/reactos/dll/win32/newdev/lang/sk-SK.rc index 9f34db196ca..ccb70f080e4 100644 --- a/reactos/dll/win32/newdev/lang/sk-SK.rc +++ b/reactos/dll/win32/newdev/lang/sk-SK.rc @@ -1,6 +1,6 @@ /* TRANSLATOR : Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) * DATE OF TR.: 15-02-2008 - * LAST CHANGE: 27-06-2008 + * LAST CHANGE: 24-07-2008 */ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT @@ -16,7 +16,7 @@ BEGIN IDC_STATIC,120,21,195,16 LTEXT "Kliknite na tlaidlo alej pre pokraovanie.",IDC_STATIC,120,169,195,17 LTEXT "NEZNME ZARIADENIE",IDC_DEVICE,134,36,164,11 - LTEXT "UPOZORNENIE! NAINTALOVANIE VLASNTNHO ZARIADENIA MԎE SPSOBI ZAMZANIE VHO POTAA ALEBO ZNEFUNKNI ZAVDZANIE OPERANHO SYSTMU!",IDC_STATIC,120,59,195,16 + LTEXT "UPOZORNENIE! NAINTALOVANIE VLASTNHO ZARIADENIA MԎE SPSOBI ZAMZANIE VHO POTAA ALEBO ZNEFUNKNI ZAVDZANIE OPERANHO SYSTMU!",IDC_STATIC,120,59,195,36 CONTROL "Naintalova ovlda automaticky",IDC_RADIO_AUTO,"Button", BS_AUTORADIOBUTTON,120,112,178,13 CONTROL "Naintalova ovlda zo zadanho umiestnenia",IDC_RADIO_MANUAL, diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index bcfffec811a..320f517fa20 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -1,7 +1,7 @@ /* TRANSLATOR : Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) * NOTE : partially translated * TRANSLATED : 26-12-2007 - * LAST CHANGE: 07-07-2008 + * LAST CHANGE: 30-07-2008 */ /* @@ -212,18 +212,18 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type of file:", 14004, 8, 35, 50, 10 - LTEXT "Folder", 14005, 68, 35, 160, 10 - LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "Typ:", 14004, 8, 35, 50, 10 + LTEXT "Prieinok", 14005, 68, 35, 160, 10 + LTEXT "Umiestnenie:", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 315, 10 - LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "Vekos:", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "Obsahuje:", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "Vytvoren:", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 - AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 + AUTOCHECKBOX "&Iba na tanie", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Skryt", 14022, 126, 150, 50, 10 END SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 @@ -241,15 +241,15 @@ BEGIN LTEXT "", 14009, 68, 72, 315, 10 LTEXT "Vekos:", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Vytvoren:", 14014, 8, 118, 45, 10 + LTEXT "Vytvoren:", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - LTEXT "Zmenen:", 14016, 8, 140, 45, 10 + LTEXT "Zmenen:", 14016, 8, 140, 45, 10 LTEXT "", 14017, 68, 140, 160, 10 - LTEXT "Otvoren:", 14018, 8, 160, 45, 10 + LTEXT "Otvoren:", 14018, 8, 160, 45, 10 LTEXT "", 14019, 68, 160, 160, 10 LTEXT "Atribty:", 14020, 8, 189, 45, 10 CHECKBOX "&Iba na tanie", 14021, 58, 189, 67, 10 - CHECKBOX "S&kryt", 14022, 126, 189, 50, 10 + CHECKBOX "&Skryt", 14022, 126, 189, 50, 10 CHECKBOX "&Archvny", 14023, 181, 189, 49, 10 END @@ -299,10 +299,10 @@ BEGIN CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 - LTEXT "Jednotka %s", 14010, 100, 170, 40, 10 + LTEXT "Jednotka %s", 14010, 100, 170, 45, 10 PUSHBUTTON "&istenie disku", 14011, 180, 175, 50, 15, WS_TABSTOP CHECKBOX "Uetri miesto na disku &kompresiou jednotky", 14012, 15, 205, 180, 10, WS_DISABLED - CHECKBOX "&Povoli indexovanie pre tento disk, a zrchli tak hadanie sborov", 14012, 15, 220, 200, 10, WS_DISABLED + CHECKBOX "&Povoli indexovanie pre tento disk, a zrchli tak hadanie sborov", 14012, 15, 220, 220, 10, WS_DISABLED END DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 @@ -360,7 +360,7 @@ BEGIN EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER LTEXT "&Maximlna vekos (MB):", -1, 20, 105, 70, 10 RADIOBUTTON "Sbory nepremiestova do &koa. Zmazan sbory hne odstrni.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP - AUTOCHECKBOX "Zobrazova &dialgov okno potvrdenia odstrnenia", 14004, 20, 155, 140, 10, WS_TABSTOP + AUTOCHECKBOX "Zobrazova &dialgov okno potvrdenia odstrnenia", 14004, 20, 155, 196, 10, WS_TABSTOP END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 @@ -715,5 +715,5 @@ BEGIN IDS_PLAY_VERB "Prehra" IDS_PREVIEW_VERB "Preview" //Nhad, Ukka, Prezrie ??? - IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_FILE_FOLDER "sbory: %u, prieinky: %u" END From 19a25c06717a82a8fcef1925b6655e5a8248b754 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 30 Jul 2008 12:22:10 +0000 Subject: [PATCH 032/304] - SVN maintenance. svn path=/trunk/; revision=34955 --- .../boot/freeldr/freeldr/windows/conversion.c | 256 +-- .../boot/freeldr/freeldr/windows/peloader.c | 1660 +++++++------- reactos/boot/freeldr/freeldr/windows/winldr.c | 98 +- .../boot/freeldr/freeldr/windows/wlmemory.c | 1920 ++++++++--------- 4 files changed, 1967 insertions(+), 1967 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/windows/conversion.c b/reactos/boot/freeldr/freeldr/windows/conversion.c index f99810c4954..87ba43ee331 100644 --- a/reactos/boot/freeldr/freeldr/windows/conversion.c +++ b/reactos/boot/freeldr/freeldr/windows/conversion.c @@ -1,128 +1,128 @@ -/* - * PROJECT: EFI Windows Loader - * LICENSE: GPL - See COPYING in the top level directory - * FILE: freeldr/winldr/conversion.c - * PURPOSE: Physical <-> Virtual addressing mode conversions - * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) - */ - -/* INCLUDES ***************************************************************/ - -#include - -//#include -#include - -/* FUNCTIONS **************************************************************/ - -/* Arch-specific addresses translation implementation */ -PVOID -VaToPa(PVOID Va) -{ - return (PVOID)((ULONG_PTR)Va & ~KSEG0_BASE); -} - -PVOID -PaToVa(PVOID Pa) -{ - return (PVOID)((ULONG_PTR)Pa | KSEG0_BASE); -} - -VOID -List_PaToVa(LIST_ENTRY *ListEntry) -{ - LIST_ENTRY *ListHead = ListEntry; - LIST_ENTRY *Next = ListEntry->Flink; - LIST_ENTRY *NextPA; - - //Print(L"\n\nList_Entry: %X, First Next: %X\n", ListEntry, Next); - // - // Walk through the whole list - // - if (Next != NULL) - { - while (Next != PaToVa(ListHead)) - { - NextPA = VaToPa(Next); - //Print(L"Current: %X, Flink: %X, Blink: %X\n", Next, NextPA->Flink, NextPA->Blink); - - NextPA->Flink = PaToVa((PVOID)NextPA->Flink); - NextPA->Blink = PaToVa((PVOID)NextPA->Blink); - - //Print(L"After converting Flink: %X, Blink: %X\n", NextPA->Flink, NextPA->Blink); - - Next = NextPA->Flink; - } - - // - // Finally convert first Flink/Blink - // - ListEntry->Flink = PaToVa((PVOID)ListEntry->Flink); - if (ListEntry->Blink) - ListEntry->Blink = PaToVa((PVOID)ListEntry->Blink); - } -} - -// This function converts only Child->Child, and calls itself for each Sibling -VOID -ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start) -{ - PCONFIGURATION_COMPONENT_DATA Child; - PCONFIGURATION_COMPONENT_DATA Sibling; - - DbgPrint((DPRINT_WINDOWS, "ConvertConfigToVA(Start 0x%X)\n", Start)); - Child = Start; - - while (Child != NULL) - { - if (Child->ConfigurationData) - Child->ConfigurationData = PaToVa(Child->ConfigurationData); - - if (Child->Child) - Child->Child = PaToVa(Child->Child); - - if (Child->Parent) - Child->Parent = PaToVa(Child->Parent); - - if (Child->Sibling) - Child->Sibling = PaToVa(Child->Sibling); - - if (Child->ComponentEntry.Identifier) - Child->ComponentEntry.Identifier = PaToVa(Child->ComponentEntry.Identifier); - - DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Child, - Child->ComponentEntry.Class, Child->ComponentEntry.Type, VaToPa(Child->ComponentEntry.Identifier), Child->Parent)); - - // Go through siblings list - Sibling = VaToPa(Child->Sibling); - while (Sibling != NULL) - { - if (Sibling->ConfigurationData) - Sibling->ConfigurationData = PaToVa(Sibling->ConfigurationData); - - if (Sibling->Child) - Sibling->Child = PaToVa(Sibling->Child); - - if (Sibling->Parent) - Sibling->Parent = PaToVa(Sibling->Parent); - - if (Sibling->Sibling) - Sibling->Sibling = PaToVa(Sibling->Sibling); - - if (Sibling->ComponentEntry.Identifier) - Sibling->ComponentEntry.Identifier = PaToVa(Sibling->ComponentEntry.Identifier); - - DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Sibling, - Sibling->ComponentEntry.Class, Sibling->ComponentEntry.Type, VaToPa(Sibling->ComponentEntry.Identifier), Sibling->Parent)); - - // Recurse into the Child tree - if (VaToPa(Sibling->Child) != NULL) - ConvertConfigToVA(VaToPa(Sibling->Child)); - - Sibling = VaToPa(Sibling->Sibling); - } - - // Go to the next child - Child = VaToPa(Child->Child); - } -} +/* + * PROJECT: EFI Windows Loader + * LICENSE: GPL - See COPYING in the top level directory + * FILE: freeldr/winldr/conversion.c + * PURPOSE: Physical <-> Virtual addressing mode conversions + * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + */ + +/* INCLUDES ***************************************************************/ + +#include + +//#include +#include + +/* FUNCTIONS **************************************************************/ + +/* Arch-specific addresses translation implementation */ +PVOID +VaToPa(PVOID Va) +{ + return (PVOID)((ULONG_PTR)Va & ~KSEG0_BASE); +} + +PVOID +PaToVa(PVOID Pa) +{ + return (PVOID)((ULONG_PTR)Pa | KSEG0_BASE); +} + +VOID +List_PaToVa(LIST_ENTRY *ListEntry) +{ + LIST_ENTRY *ListHead = ListEntry; + LIST_ENTRY *Next = ListEntry->Flink; + LIST_ENTRY *NextPA; + + //Print(L"\n\nList_Entry: %X, First Next: %X\n", ListEntry, Next); + // + // Walk through the whole list + // + if (Next != NULL) + { + while (Next != PaToVa(ListHead)) + { + NextPA = VaToPa(Next); + //Print(L"Current: %X, Flink: %X, Blink: %X\n", Next, NextPA->Flink, NextPA->Blink); + + NextPA->Flink = PaToVa((PVOID)NextPA->Flink); + NextPA->Blink = PaToVa((PVOID)NextPA->Blink); + + //Print(L"After converting Flink: %X, Blink: %X\n", NextPA->Flink, NextPA->Blink); + + Next = NextPA->Flink; + } + + // + // Finally convert first Flink/Blink + // + ListEntry->Flink = PaToVa((PVOID)ListEntry->Flink); + if (ListEntry->Blink) + ListEntry->Blink = PaToVa((PVOID)ListEntry->Blink); + } +} + +// This function converts only Child->Child, and calls itself for each Sibling +VOID +ConvertConfigToVA(PCONFIGURATION_COMPONENT_DATA Start) +{ + PCONFIGURATION_COMPONENT_DATA Child; + PCONFIGURATION_COMPONENT_DATA Sibling; + + DbgPrint((DPRINT_WINDOWS, "ConvertConfigToVA(Start 0x%X)\n", Start)); + Child = Start; + + while (Child != NULL) + { + if (Child->ConfigurationData) + Child->ConfigurationData = PaToVa(Child->ConfigurationData); + + if (Child->Child) + Child->Child = PaToVa(Child->Child); + + if (Child->Parent) + Child->Parent = PaToVa(Child->Parent); + + if (Child->Sibling) + Child->Sibling = PaToVa(Child->Sibling); + + if (Child->ComponentEntry.Identifier) + Child->ComponentEntry.Identifier = PaToVa(Child->ComponentEntry.Identifier); + + DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Child, + Child->ComponentEntry.Class, Child->ComponentEntry.Type, VaToPa(Child->ComponentEntry.Identifier), Child->Parent)); + + // Go through siblings list + Sibling = VaToPa(Child->Sibling); + while (Sibling != NULL) + { + if (Sibling->ConfigurationData) + Sibling->ConfigurationData = PaToVa(Sibling->ConfigurationData); + + if (Sibling->Child) + Sibling->Child = PaToVa(Sibling->Child); + + if (Sibling->Parent) + Sibling->Parent = PaToVa(Sibling->Parent); + + if (Sibling->Sibling) + Sibling->Sibling = PaToVa(Sibling->Sibling); + + if (Sibling->ComponentEntry.Identifier) + Sibling->ComponentEntry.Identifier = PaToVa(Sibling->ComponentEntry.Identifier); + + DbgPrint((DPRINT_WINDOWS, "Device 0x%X class %d type %d id '%s', parent %p\n", Sibling, + Sibling->ComponentEntry.Class, Sibling->ComponentEntry.Type, VaToPa(Sibling->ComponentEntry.Identifier), Sibling->Parent)); + + // Recurse into the Child tree + if (VaToPa(Sibling->Child) != NULL) + ConvertConfigToVA(VaToPa(Sibling->Child)); + + Sibling = VaToPa(Sibling->Sibling); + } + + // Go to the next child + Child = VaToPa(Child->Child); + } +} diff --git a/reactos/boot/freeldr/freeldr/windows/peloader.c b/reactos/boot/freeldr/freeldr/windows/peloader.c index a3792388669..aa5e3ad9b80 100644 --- a/reactos/boot/freeldr/freeldr/windows/peloader.c +++ b/reactos/boot/freeldr/freeldr/windows/peloader.c @@ -1,830 +1,830 @@ -/* - * PROJECT: FreeLoader - * LICENSE: GPL - See COPYING in the top level directory - * FILE: freeldr/winldr/peloader.c - * PURPOSE: Provides routines for loading PE files. To be merged with - * arch/i386/loader.c in future - * This article was very handy during development: - * http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/ - * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) - * The source code in this file is based on the work of respective - * authors of PE loading code in ReactOS and Brian Palmer and - * Alex Ionescu's arch/i386/loader.c, and my research project - * (creating a native EFI loader for Windows) - */ - -/* INCLUDES ***************************************************************/ -#include -#include - - -BOOLEAN -WinLdrpCompareDllName(IN PCH DllName, - IN PUNICODE_STRING UnicodeName); - -BOOLEAN -WinLdrpBindImportName(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PVOID DllBase, - IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData, - IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, - IN ULONG ExportSize, - IN BOOLEAN ProcessForwards); - -BOOLEAN -WinLdrpLoadAndScanReferencedDll(PLOADER_PARAMETER_BLOCK WinLdrBlock, - PCCH DirectoryPath, - PCH ImportName, - PLDR_DATA_TABLE_ENTRY *DataTableEntry); - -BOOLEAN -WinLdrpScanImportAddressTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PVOID DllBase, - IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData); - - - -/* FUNCTIONS **************************************************************/ - -/* Returns TRUE if DLL has already been loaded - looks in LoadOrderList in LPB */ -BOOLEAN -WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PCH DllName, - OUT PLDR_DATA_TABLE_ENTRY *LoadedEntry) -{ - PLDR_DATA_TABLE_ENTRY DataTableEntry; - LIST_ENTRY *ModuleEntry; - - DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: DllName %X, LoadedEntry: %X\n", - DllName, LoadedEntry)); - - /* Just go through each entry in the LoadOrderList and compare loaded module's - name with a given name */ - ModuleEntry = WinLdrBlock->LoadOrderListHead.Flink; - while (ModuleEntry != &WinLdrBlock->LoadOrderListHead) - { - /* Get pointer to the current DTE */ - DataTableEntry = CONTAINING_RECORD(ModuleEntry, - LDR_DATA_TABLE_ENTRY, - InLoadOrderLinks); - - DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: DTE %p, EP %p\n", - DataTableEntry, DataTableEntry->EntryPoint)); - - /* Compare names */ - if (WinLdrpCompareDllName(DllName, &DataTableEntry->BaseDllName)) - { - /* Yes, found it, report pointer to the loaded module's DTE - to the caller and increase load count for it */ - *LoadedEntry = DataTableEntry; - DataTableEntry->LoadCount++; - DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: LoadedEntry %X\n", DataTableEntry)); - return TRUE; - } - - /* Go to the next entry */ - ModuleEntry = ModuleEntry->Flink; - } - - /* Nothing found */ - return FALSE; -} - -BOOLEAN -WinLdrScanImportDescriptorTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PCCH DirectoryPath, - IN PLDR_DATA_TABLE_ENTRY ScanDTE) -{ - PLDR_DATA_TABLE_ENTRY DataTableEntry; - PIMAGE_IMPORT_DESCRIPTOR ImportTable; - ULONG ImportTableSize; - PCH ImportName; - BOOLEAN Status; - - /* Get a pointer to the import table of this image */ - ImportTable = (PIMAGE_IMPORT_DESCRIPTOR)RtlImageDirectoryEntryToData(VaToPa(ScanDTE->DllBase), - TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ImportTableSize); - - { - UNICODE_STRING BaseName; - BaseName.Buffer = VaToPa(ScanDTE->BaseDllName.Buffer); - BaseName.MaximumLength = ScanDTE->BaseDllName.MaximumLength; - BaseName.Length = ScanDTE->BaseDllName.Length; - DbgPrint((DPRINT_WINDOWS, "WinLdrScanImportDescriptorTable(): %wZ ImportTable = 0x%X\n", - &BaseName, ImportTable)); - } - - /* If image doesn't have any import directory - just return success */ - if (ImportTable == NULL) - return TRUE; - - /* Loop through all entries */ - for (;(ImportTable->Name != 0) && (ImportTable->FirstThunk != 0);ImportTable++) - { - /* Get pointer to the name */ - ImportName = (PCH)VaToPa(RVA(ScanDTE->DllBase, ImportTable->Name)); - DbgPrint((DPRINT_WINDOWS, "WinLdrScanImportDescriptorTable(): Looking at %s\n", ImportName)); - - /* In case we get a reference to ourselves - just skip it */ - if (WinLdrpCompareDllName(ImportName, &ScanDTE->BaseDllName)) - continue; - - /* Load the DLL if it is not already loaded */ - if (!WinLdrCheckForLoadedDll(WinLdrBlock, ImportName, &DataTableEntry)) - { - Status = WinLdrpLoadAndScanReferencedDll(WinLdrBlock, - DirectoryPath, - ImportName, - &DataTableEntry); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrpLoadAndScanReferencedDll() failed\n")); - return Status; - } - } - - /* Scan its import address table */ - Status = WinLdrpScanImportAddressTable( - WinLdrBlock, - DataTableEntry->DllBase, - ScanDTE->DllBase, - (PIMAGE_THUNK_DATA)RVA(ScanDTE->DllBase, ImportTable->FirstThunk)); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable() failed\n")); - return Status; - } - } - - return TRUE; -} - -BOOLEAN -WinLdrAllocateDataTableEntry(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PCCH BaseDllName, - IN PCCH FullDllName, - IN PVOID BasePA, - OUT PLDR_DATA_TABLE_ENTRY *NewEntry) -{ - PVOID BaseVA = PaToVa(BasePA); - PWSTR Buffer; - PLDR_DATA_TABLE_ENTRY DataTableEntry; - PIMAGE_NT_HEADERS NtHeaders; - USHORT Length; - - /* Allocate memory for a data table entry, zero-initialize it */ - DataTableEntry = (PLDR_DATA_TABLE_ENTRY)MmHeapAlloc(sizeof(LDR_DATA_TABLE_ENTRY)); - if (DataTableEntry == NULL) - return FALSE; - RtlZeroMemory(DataTableEntry, sizeof(LDR_DATA_TABLE_ENTRY)); - - /* Get NT headers from the image */ - NtHeaders = RtlImageNtHeader(BasePA); - - /* Initialize corresponding fields of DTE based on NT headers value */ - DataTableEntry->DllBase = BaseVA; - DataTableEntry->SizeOfImage = NtHeaders->OptionalHeader.SizeOfImage; - DataTableEntry->EntryPoint = RVA(BaseVA, NtHeaders->OptionalHeader.AddressOfEntryPoint); - DataTableEntry->SectionPointer = 0; - DataTableEntry->CheckSum = NtHeaders->OptionalHeader.CheckSum; - - /* Initialize BaseDllName field (UNICODE_STRING) from the Ansi BaseDllName - by simple conversion - copying each character */ - Length = (USHORT)(strlen(BaseDllName) * sizeof(WCHAR)); - Buffer = (PWSTR)MmHeapAlloc(Length); - if (Buffer == NULL) - { - MmHeapFree(DataTableEntry); - return FALSE; - } - RtlZeroMemory(Buffer, Length); - - DataTableEntry->BaseDllName.Length = Length; - DataTableEntry->BaseDllName.MaximumLength = Length; - DataTableEntry->BaseDllName.Buffer = PaToVa(Buffer); - while (*BaseDllName != 0) - { - *Buffer++ = *BaseDllName++; - } - - /* Initialize FullDllName field (UNICODE_STRING) from the Ansi FullDllName - using the same method */ - Length = (USHORT)(strlen(FullDllName) * sizeof(WCHAR)); - Buffer = (PWSTR)MmHeapAlloc(Length); - if (Buffer == NULL) - { - MmHeapFree(DataTableEntry); - return FALSE; - } - RtlZeroMemory(Buffer, Length); - - DataTableEntry->FullDllName.Length = Length; - DataTableEntry->FullDllName.MaximumLength = Length; - DataTableEntry->FullDllName.Buffer = PaToVa(Buffer); - while (*FullDllName != 0) - { - *Buffer++ = *FullDllName++; - } - - /* Initialize what's left - LoadCount which is 1, and set Flags so that - we know this entry is processed */ - DataTableEntry->Flags = LDRP_ENTRY_PROCESSED; - DataTableEntry->LoadCount = 1; - - /* Insert this DTE to a list in the LPB */ - InsertTailList(&WinLdrBlock->LoadOrderListHead, &DataTableEntry->InLoadOrderLinks); - - /* Save pointer to a newly allocated and initialized entry */ - *NewEntry = DataTableEntry; - - /* Return success */ - return TRUE; -} - -/* WinLdrLoadImage loads the specified image from the file (it doesn't - perform any additional operations on the filename, just directly - calls the file I/O routines), and relocates it so that it's ready - to be used when paging is enabled. - Addressing mode: physical - */ -BOOLEAN -WinLdrLoadImage(IN PCHAR FileName, - TYPE_OF_MEMORY MemoryType, - OUT PVOID *ImageBasePA) -{ - PFILE FileHandle; - PVOID PhysicalBase; - PVOID VirtualBase = NULL; - UCHAR HeadersBuffer[SECTOR_SIZE * 2]; - PIMAGE_NT_HEADERS NtHeaders; - PIMAGE_SECTION_HEADER SectionHeader; - ULONG VirtualSize, SizeOfRawData, NumberOfSections; - BOOLEAN Status; - ULONG i, BytesRead; - - CHAR ProgressString[256]; - - /* Inform user we are loading files */ - sprintf(ProgressString, "Loading %s...", FileName); - UiDrawProgressBarCenter(1, 100, ProgressString); - - /* Open the image file */ - FileHandle = FsOpenFile(FileName); - - if (FileHandle == NULL) - { - //Print(L"Can not open the file %s\n",FileName); - UiMessageBox("Can not open the file"); - return FALSE; - } - - /* Load the first 2 sectors of the image so we can read the PE header */ - Status = FsReadFile(FileHandle, SECTOR_SIZE * 2, NULL, HeadersBuffer); - if (!Status) - { - //Print(L"Error reading from file %s\n", FileName); - UiMessageBox("Error reading from file"); - FsCloseFile(FileHandle); - return FALSE; - } - - /* Now read the MZ header to get the offset to the PE Header */ - NtHeaders = RtlImageNtHeader(HeadersBuffer); - - if (!NtHeaders) - { - //Print(L"Error - no NT header found in %s\n", FileName); - UiMessageBox("Error - no NT header found"); - FsCloseFile(FileHandle); - return FALSE; - } - - /* Ensure this is executable image */ - if (((NtHeaders->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE) == 0)) - { - //Print(L"Not an executable image %s\n", FileName); - UiMessageBox("Not an executable image"); - FsCloseFile(FileHandle); - return FALSE; - } - - /* Store number of sections to read and a pointer to the first section */ - NumberOfSections = NtHeaders->FileHeader.NumberOfSections; - SectionHeader = IMAGE_FIRST_SECTION(NtHeaders); - - /* Try to allocate this memory, if fails - allocate somewhere else */ - PhysicalBase = MmAllocateMemoryAtAddress(NtHeaders->OptionalHeader.SizeOfImage, - (PVOID)((ULONG)NtHeaders->OptionalHeader.ImageBase & (KSEG0_BASE - 1)), - MemoryType); - - if (PhysicalBase == NULL) - { - /* It's ok, we don't panic - let's allocate again at any other "low" place */ - PhysicalBase = MmAllocateMemoryWithType(NtHeaders->OptionalHeader.SizeOfImage, MemoryType); - - if (PhysicalBase == NULL) - { - //Print(L"Failed to alloc pages for image %s\n", FileName); - UiMessageBox("Failed to alloc pages for image"); - FsCloseFile(FileHandle); - return FALSE; - } - } - - /* This is the real image base - in form of a virtual address */ - VirtualBase = PaToVa(PhysicalBase); - - DbgPrint((DPRINT_WINDOWS, "Base PA: 0x%X, VA: 0x%X\n", PhysicalBase, VirtualBase)); - - /* Set to 0 position and fully load the file image */ - FsSetFilePointer(FileHandle, 0); - - Status = FsReadFile(FileHandle, NtHeaders->OptionalHeader.SizeOfHeaders, NULL, PhysicalBase); - - if (!Status) - { - //Print(L"Error reading headers %s\n", FileName); - UiMessageBox("Error reading headers"); - FsCloseFile(FileHandle); - return FALSE; - } - - /* Reload the NT Header */ - NtHeaders = RtlImageNtHeader(PhysicalBase); - - /* Load the first section */ - SectionHeader = IMAGE_FIRST_SECTION(NtHeaders); - - /* Fill output parameters */ - *ImageBasePA = PhysicalBase; - - /* Walk through each section and read it (check/fix any possible - bad situations, if they arise) */ - for (i = 0; i < NumberOfSections; i++) - { - VirtualSize = SectionHeader->Misc.VirtualSize; - SizeOfRawData = SectionHeader->SizeOfRawData; - - /* Handle a case when VirtualSize equals 0 */ - if (VirtualSize == 0) - VirtualSize = SizeOfRawData; - - /* If PointerToRawData is 0, then force its size to be also 0 */ - if (SectionHeader->PointerToRawData == 0) - { - SizeOfRawData = 0; - } - else - { - /* Cut the loaded size to the VirtualSize extents */ - if (SizeOfRawData > VirtualSize) - SizeOfRawData = VirtualSize; - } - - /* Actually read the section (if its size is not 0) */ - if (SizeOfRawData != 0) - { - /* Seek to the correct position */ - FsSetFilePointer(FileHandle, SectionHeader->PointerToRawData); - - DbgPrint((DPRINT_WINDOWS, "SH->VA: 0x%X\n", SectionHeader->VirtualAddress)); - - /* Read this section from the file, size = SizeOfRawData */ - Status = FsReadFile(FileHandle, SizeOfRawData, &BytesRead, (PUCHAR)PhysicalBase + SectionHeader->VirtualAddress); - - if (!Status && (BytesRead == 0)) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage(): Error reading section from file!\n")); - break; - } - } - - /* Size of data is less than the virtual size - fill up the remainder with zeroes */ - if (SizeOfRawData < VirtualSize) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage(): SORD %d < VS %d", SizeOfRawData, VirtualSize)); - RtlZeroMemory((PVOID)(SectionHeader->VirtualAddress + (ULONG)PhysicalBase + SizeOfRawData), VirtualSize - SizeOfRawData); - } - - SectionHeader++; - } - - /* We are done with the file - close it */ - FsCloseFile(FileHandle); - - /* If loading failed - return right now */ - if (!Status) - return FALSE; - - - /* Relocate the image, if it needs it */ - if (NtHeaders->OptionalHeader.ImageBase != (ULONG)VirtualBase) - { - DbgPrint((DPRINT_WINDOWS, "Relocating %p -> %p\n", - NtHeaders->OptionalHeader.ImageBase, VirtualBase)); - Status = (BOOLEAN)LdrRelocateImageWithBias(PhysicalBase, - (ULONG_PTR)VirtualBase - (ULONG_PTR)PhysicalBase, - "FreeLdr", - TRUE, - TRUE, /* in case of conflict still return success */ - FALSE); - } - - return Status; -} - -/* PRIVATE FUNCTIONS *******************************************************/ - -/* DllName - physical, UnicodeString->Buffer - virtual */ -BOOLEAN -WinLdrpCompareDllName(IN PCH DllName, - IN PUNICODE_STRING UnicodeName) -{ - PWSTR Buffer; - UNICODE_STRING UnicodeNamePA; - ULONG i, Length; - - /* First obvious check: for length of two names */ - Length = strlen(DllName); - - UnicodeNamePA.Length = UnicodeName->Length; - UnicodeNamePA.MaximumLength = UnicodeName->MaximumLength; - UnicodeNamePA.Buffer = VaToPa(UnicodeName->Buffer); - DbgPrint((DPRINT_WINDOWS, "WinLdrpCompareDllName: %s and %wZ, Length = %d " - "UN->Length %d\n", DllName, &UnicodeNamePA, Length, UnicodeName->Length)); - - if ((Length * sizeof(WCHAR)) > UnicodeName->Length) - return FALSE; - - /* Store pointer to unicode string's buffer */ - Buffer = VaToPa(UnicodeName->Buffer); - - /* Loop character by character */ - for (i = 0; i < Length; i++) - { - /* Compare two characters, uppercasing them */ - if (toupper(*DllName) != toupper((CHAR)*Buffer)) - return FALSE; - - /* Move to the next character */ - DllName++; - Buffer++; - } - - /* Check, if strings either fully match, or match till the "." (w/o extension) */ - if ((UnicodeName->Length == Length * sizeof(WCHAR)) || (*Buffer == L'.')) - { - /* Yes they do */ - return TRUE; - } - - /* Strings don't match, return FALSE */ - return FALSE; -} - -BOOLEAN -WinLdrpBindImportName(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PVOID DllBase, - IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData, - IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, - IN ULONG ExportSize, - IN BOOLEAN ProcessForwards) -{ - ULONG Ordinal; - PULONG NameTable, FunctionTable; - PUSHORT OrdinalTable; - LONG High, Low, Middle, Result; - ULONG Hint; - - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): DllBase 0x%X, ImageBase 0x%X, ThunkData 0x%X, ExportDirectory 0x%X, ExportSize %d, ProcessForwards 0x%X\n", - // DllBase, ImageBase, ThunkData, ExportDirectory, ExportSize, ProcessForwards)); - - /* Check passed DllBase param */ - if(DllBase == NULL) - { - DbgPrint((DPRINT_WINDOWS, "WARNING: DllBase == NULL!\n")); - return FALSE; - } - - /* Convert all non-critical pointers to PA from VA */ - ThunkData = VaToPa(ThunkData); - - /* Is the reference by ordinal? */ - if (IMAGE_SNAP_BY_ORDINAL(ThunkData->u1.Ordinal) && !ProcessForwards) - { - /* Yes, calculate the ordinal */ - Ordinal = (ULONG)(IMAGE_ORDINAL(ThunkData->u1.Ordinal) - (UINT32)ExportDirectory->Base); - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): Ordinal %d\n", Ordinal)); - } - else - { - /* It's reference by name, we have to look it up in the export directory */ - if (!ProcessForwards) - { - /* AddressOfData in thunk entry will become a virtual address (from relative) */ - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ThunkData->u1.AOD was %p\n", ThunkData->u1.AddressOfData)); - ThunkData->u1.AddressOfData = - (ULONG)RVA(ImageBase, ThunkData->u1.AddressOfData); - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ThunkData->u1.AOD became %p\n", ThunkData->u1.AddressOfData)); - } - - /* Get pointers to Name and Ordinal tables (RVA -> VA) */ - NameTable = (PULONG)VaToPa(RVA(DllBase, ExportDirectory->AddressOfNames)); - OrdinalTable = (PUSHORT)VaToPa(RVA(DllBase, ExportDirectory->AddressOfNameOrdinals)); - - //DbgPrint((DPRINT_WINDOWS, "NameTable 0x%X, OrdinalTable 0x%X, ED->AddressOfNames 0x%X, ED->AOFO 0x%X\n", - // NameTable, OrdinalTable, ExportDirectory->AddressOfNames, ExportDirectory->AddressOfNameOrdinals)); - - /* Get the hint, convert it to a physical pointer */ - Hint = ((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Hint; - //DbgPrint((DPRINT_WINDOWS, "HintIndex %d\n", Hint)); - - /* If Hint is less than total number of entries in the export directory, - and import name == export name, then we can just get it from the OrdinalTable */ - if ( - (Hint < ExportDirectory->NumberOfNames) && - ( - strcmp(VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Name[0]), - (PCHAR)VaToPa( RVA(DllBase, NameTable[Hint])) ) == 0 - ) - ) - { - Ordinal = OrdinalTable[Hint]; - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): Ordinal %d\n", Ordinal)); - } - else - { - /* It's not the easy way, we have to lookup import name in the name table. - Let's use a binary search for this task. */ - - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName() looking up the import name using binary search...\n")); - - /* Low boundary is set to 0, and high boundary to the maximum index */ - Low = 0; - High = ExportDirectory->NumberOfNames - 1; - - /* Perform a binary-search loop */ - while (High >= Low) - { - /* Divide by 2 by shifting to the right once */ - Middle = (Low + High) >> 1; - - /* Compare the names */ - Result = strcmp(VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Name[0]), - (PCHAR)VaToPa(RVA(DllBase, NameTable[Middle]))); - - /*DbgPrint((DPRINT_WINDOWS, "Binary search: comparing Import '__', Export '%s'\n",*/ - /*VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa(ThunkData->u1.AddressOfData))->Name[0]),*/ - /*(PCHAR)VaToPa(RVA(DllBase, NameTable[Middle]))));*/ - - /*DbgPrint((DPRINT_WINDOWS, "TE->u1.AOD %p, fulladdr %p\n", - ThunkData->u1.AddressOfData, - ((PIMAGE_IMPORT_BY_NAME)VaToPa(ThunkData->u1.AddressOfData))->Name ));*/ - - - /* Depending on result of strcmp, perform different actions */ - if (Result < 0) - { - /* Adjust top boundary */ - High = Middle - 1; - } - else if (Result > 0) - { - /* Adjust bottom boundary */ - Low = Middle + 1; - } - else - { - /* Yay, found it! */ - break; - } - } - - /* If high boundary is less than low boundary, then no result found */ - if (High < Low) - { - //Print(L"Error in binary search\n"); - DbgPrint((DPRINT_WINDOWS, "Error in binary search!\n")); - return FALSE; - } - - /* Everything allright, get the ordinal */ - Ordinal = OrdinalTable[Middle]; - - //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName() found Ordinal %d\n", Ordinal)); - } - } - - /* Check ordinal number for validity! */ - if (Ordinal >= ExportDirectory->NumberOfFunctions) - { - DbgPrint((DPRINT_WINDOWS, "Ordinal number is invalid!\n")); - return FALSE; - } - - /* Get a pointer to the function table */ - FunctionTable = (PULONG)VaToPa(RVA(DllBase, ExportDirectory->AddressOfFunctions)); - - /* Save a pointer to the function */ - ThunkData->u1.Function = (ULONG)RVA(DllBase, FunctionTable[Ordinal]); - - /* Is it a forwarder? (function pointer isn't within the export directory) */ - if (((ULONG)VaToPa((PVOID)ThunkData->u1.Function) > (ULONG)ExportDirectory) && - ((ULONG)VaToPa((PVOID)ThunkData->u1.Function) < ((ULONG)ExportDirectory + ExportSize))) - { - PLDR_DATA_TABLE_ENTRY DataTableEntry; - CHAR ForwardDllName[255]; - PIMAGE_EXPORT_DIRECTORY RefExportDirectory; - ULONG RefExportSize; - - /* Save the name of the forward dll */ - RtlCopyMemory(ForwardDllName, (PCHAR)VaToPa((PVOID)ThunkData->u1.Function), sizeof(ForwardDllName)); - - /* Strip out its extension */ - *strchr(ForwardDllName,'.') = '\0'; - - DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ForwardDllName %s\n", ForwardDllName)); - if (!WinLdrCheckForLoadedDll(WinLdrBlock, ForwardDllName, &DataTableEntry)) - { - /* We can't continue if DLL couldn't be loaded, so bomb out with an error */ - //Print(L"Error loading DLL!\n"); - DbgPrint((DPRINT_WINDOWS, "Error loading DLL!\n")); - return FALSE; - } - - /* Get pointer to the export directory of loaded DLL */ - RefExportDirectory = (PIMAGE_EXPORT_DIRECTORY) - RtlImageDirectoryEntryToData(VaToPa(DataTableEntry->DllBase), - TRUE, - IMAGE_DIRECTORY_ENTRY_EXPORT, - &RefExportSize); - - /* Fail if it's NULL */ - if (RefExportDirectory) - { - UCHAR Buffer[128]; - IMAGE_THUNK_DATA RefThunkData; - PIMAGE_IMPORT_BY_NAME ImportByName; - PCHAR ImportName; - BOOLEAN Status; - - /* Get pointer to the import name */ - ImportName = strchr((PCHAR)VaToPa((PVOID)ThunkData->u1.Function), '.') + 1; - - /* Create a IMAGE_IMPORT_BY_NAME structure, pointing to the local Buffer */ - ImportByName = (PIMAGE_IMPORT_BY_NAME)Buffer; - - /* Fill the name with the import name */ - RtlCopyMemory(ImportByName->Name, ImportName, strlen(ImportName)+1); - - /* Set Hint to 0 */ - ImportByName->Hint = 0; - - /* And finally point ThunkData's AddressOfData to that structure */ - RefThunkData.u1.AddressOfData = (ULONG)ImportByName; - - /* And recursively call ourselves */ - Status = WinLdrpBindImportName( - WinLdrBlock, - DataTableEntry->DllBase, - ImageBase, - &RefThunkData, - RefExportDirectory, - RefExportSize, - TRUE); - - /* Fill out the ThunkData with data from RefThunkData */ - ThunkData->u1 = RefThunkData.u1; - - /* Return what we got from the recursive call */ - return Status; - } - else - { - /* Fail if ExportDirectory is NULL */ - return FALSE; - } - } - - /* Success! */ - return TRUE; -} - -BOOLEAN -WinLdrpLoadAndScanReferencedDll(PLOADER_PARAMETER_BLOCK WinLdrBlock, - PCCH DirectoryPath, - PCH ImportName, - PLDR_DATA_TABLE_ENTRY *DataTableEntry) -{ - CHAR FullDllName[256]; - BOOLEAN Status; - PVOID BasePA; - - /* Prepare the full path to the file to be loaded */ - strcpy(FullDllName, DirectoryPath); - strcat(FullDllName, ImportName); - - DbgPrint((DPRINT_WINDOWS, "Loading referenced DLL: %s\n", FullDllName)); - //Print(L"Loading referenced DLL: %s\n", FullDllName); - - /* Load the image */ - Status = WinLdrLoadImage(FullDllName, LoaderHalCode, &BasePA); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage() failed\n")); - return Status; - } - - /* Allocate DTE for newly loaded DLL */ - Status = WinLdrAllocateDataTableEntry(WinLdrBlock, - ImportName, - FullDllName, - BasePA, - DataTableEntry); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, - "WinLdrAllocateDataTableEntry() failed with Status=0x%X\n", Status)); - return Status; - } - - /* Scan its dependencies too */ - DbgPrint((DPRINT_WINDOWS, - "WinLdrScanImportDescriptorTable() calling ourselves for %S\n", - VaToPa((*DataTableEntry)->BaseDllName.Buffer))); - Status = WinLdrScanImportDescriptorTable(WinLdrBlock, DirectoryPath, *DataTableEntry); - - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, - "WinLdrScanImportDescriptorTable() failed with Status=0x%X\n", Status)); - return Status; - } - - return TRUE; -} - -BOOLEAN -WinLdrpScanImportAddressTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, - IN PVOID DllBase, - IN PVOID ImageBase, - IN PIMAGE_THUNK_DATA ThunkData) -{ - PIMAGE_EXPORT_DIRECTORY ExportDirectory = NULL; - BOOLEAN Status; - ULONG ExportSize; - - DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable(): DllBase 0x%X, " - "ImageBase 0x%X, ThunkData 0x%X\n", DllBase, ImageBase, ThunkData)); - - /* Obtain the export table from the DLL's base */ - if (DllBase == NULL) - { - //Print(L"Error, DllBase == NULL!\n"); - return FALSE; - } - else - { - ExportDirectory = - (PIMAGE_EXPORT_DIRECTORY)RtlImageDirectoryEntryToData(VaToPa(DllBase), - TRUE, - IMAGE_DIRECTORY_ENTRY_EXPORT, - &ExportSize); - } - - DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable(): ExportDirectory 0x%X\n", ExportDirectory)); - - /* If pointer to Export Directory is */ - if (ExportDirectory == NULL) - return FALSE; - - /* Go through each entry in the thunk table and bind it */ - while (((PIMAGE_THUNK_DATA)VaToPa(ThunkData))->u1.AddressOfData != 0) - { - /* Bind it */ - Status = WinLdrpBindImportName( - WinLdrBlock, - DllBase, - ImageBase, - ThunkData, - ExportDirectory, - ExportSize, - FALSE); - - /* Move to the next entry */ - ThunkData++; - - /* Return error if binding was unsuccessful */ - if (!Status) - return Status; - } - - /* Return success */ - return TRUE; -} +/* + * PROJECT: FreeLoader + * LICENSE: GPL - See COPYING in the top level directory + * FILE: freeldr/winldr/peloader.c + * PURPOSE: Provides routines for loading PE files. To be merged with + * arch/i386/loader.c in future + * This article was very handy during development: + * http://msdn.microsoft.com/msdnmag/issues/02/03/PE2/ + * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + * The source code in this file is based on the work of respective + * authors of PE loading code in ReactOS and Brian Palmer and + * Alex Ionescu's arch/i386/loader.c, and my research project + * (creating a native EFI loader for Windows) + */ + +/* INCLUDES ***************************************************************/ +#include +#include + + +BOOLEAN +WinLdrpCompareDllName(IN PCH DllName, + IN PUNICODE_STRING UnicodeName); + +BOOLEAN +WinLdrpBindImportName(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PVOID DllBase, + IN PVOID ImageBase, + IN PIMAGE_THUNK_DATA ThunkData, + IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, + IN ULONG ExportSize, + IN BOOLEAN ProcessForwards); + +BOOLEAN +WinLdrpLoadAndScanReferencedDll(PLOADER_PARAMETER_BLOCK WinLdrBlock, + PCCH DirectoryPath, + PCH ImportName, + PLDR_DATA_TABLE_ENTRY *DataTableEntry); + +BOOLEAN +WinLdrpScanImportAddressTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PVOID DllBase, + IN PVOID ImageBase, + IN PIMAGE_THUNK_DATA ThunkData); + + + +/* FUNCTIONS **************************************************************/ + +/* Returns TRUE if DLL has already been loaded - looks in LoadOrderList in LPB */ +BOOLEAN +WinLdrCheckForLoadedDll(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PCH DllName, + OUT PLDR_DATA_TABLE_ENTRY *LoadedEntry) +{ + PLDR_DATA_TABLE_ENTRY DataTableEntry; + LIST_ENTRY *ModuleEntry; + + DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: DllName %X, LoadedEntry: %X\n", + DllName, LoadedEntry)); + + /* Just go through each entry in the LoadOrderList and compare loaded module's + name with a given name */ + ModuleEntry = WinLdrBlock->LoadOrderListHead.Flink; + while (ModuleEntry != &WinLdrBlock->LoadOrderListHead) + { + /* Get pointer to the current DTE */ + DataTableEntry = CONTAINING_RECORD(ModuleEntry, + LDR_DATA_TABLE_ENTRY, + InLoadOrderLinks); + + DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: DTE %p, EP %p\n", + DataTableEntry, DataTableEntry->EntryPoint)); + + /* Compare names */ + if (WinLdrpCompareDllName(DllName, &DataTableEntry->BaseDllName)) + { + /* Yes, found it, report pointer to the loaded module's DTE + to the caller and increase load count for it */ + *LoadedEntry = DataTableEntry; + DataTableEntry->LoadCount++; + DbgPrint((DPRINT_WINDOWS, "WinLdrCheckForLoadedDll: LoadedEntry %X\n", DataTableEntry)); + return TRUE; + } + + /* Go to the next entry */ + ModuleEntry = ModuleEntry->Flink; + } + + /* Nothing found */ + return FALSE; +} + +BOOLEAN +WinLdrScanImportDescriptorTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PCCH DirectoryPath, + IN PLDR_DATA_TABLE_ENTRY ScanDTE) +{ + PLDR_DATA_TABLE_ENTRY DataTableEntry; + PIMAGE_IMPORT_DESCRIPTOR ImportTable; + ULONG ImportTableSize; + PCH ImportName; + BOOLEAN Status; + + /* Get a pointer to the import table of this image */ + ImportTable = (PIMAGE_IMPORT_DESCRIPTOR)RtlImageDirectoryEntryToData(VaToPa(ScanDTE->DllBase), + TRUE, IMAGE_DIRECTORY_ENTRY_IMPORT, &ImportTableSize); + + { + UNICODE_STRING BaseName; + BaseName.Buffer = VaToPa(ScanDTE->BaseDllName.Buffer); + BaseName.MaximumLength = ScanDTE->BaseDllName.MaximumLength; + BaseName.Length = ScanDTE->BaseDllName.Length; + DbgPrint((DPRINT_WINDOWS, "WinLdrScanImportDescriptorTable(): %wZ ImportTable = 0x%X\n", + &BaseName, ImportTable)); + } + + /* If image doesn't have any import directory - just return success */ + if (ImportTable == NULL) + return TRUE; + + /* Loop through all entries */ + for (;(ImportTable->Name != 0) && (ImportTable->FirstThunk != 0);ImportTable++) + { + /* Get pointer to the name */ + ImportName = (PCH)VaToPa(RVA(ScanDTE->DllBase, ImportTable->Name)); + DbgPrint((DPRINT_WINDOWS, "WinLdrScanImportDescriptorTable(): Looking at %s\n", ImportName)); + + /* In case we get a reference to ourselves - just skip it */ + if (WinLdrpCompareDllName(ImportName, &ScanDTE->BaseDllName)) + continue; + + /* Load the DLL if it is not already loaded */ + if (!WinLdrCheckForLoadedDll(WinLdrBlock, ImportName, &DataTableEntry)) + { + Status = WinLdrpLoadAndScanReferencedDll(WinLdrBlock, + DirectoryPath, + ImportName, + &DataTableEntry); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrpLoadAndScanReferencedDll() failed\n")); + return Status; + } + } + + /* Scan its import address table */ + Status = WinLdrpScanImportAddressTable( + WinLdrBlock, + DataTableEntry->DllBase, + ScanDTE->DllBase, + (PIMAGE_THUNK_DATA)RVA(ScanDTE->DllBase, ImportTable->FirstThunk)); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable() failed\n")); + return Status; + } + } + + return TRUE; +} + +BOOLEAN +WinLdrAllocateDataTableEntry(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PCCH BaseDllName, + IN PCCH FullDllName, + IN PVOID BasePA, + OUT PLDR_DATA_TABLE_ENTRY *NewEntry) +{ + PVOID BaseVA = PaToVa(BasePA); + PWSTR Buffer; + PLDR_DATA_TABLE_ENTRY DataTableEntry; + PIMAGE_NT_HEADERS NtHeaders; + USHORT Length; + + /* Allocate memory for a data table entry, zero-initialize it */ + DataTableEntry = (PLDR_DATA_TABLE_ENTRY)MmHeapAlloc(sizeof(LDR_DATA_TABLE_ENTRY)); + if (DataTableEntry == NULL) + return FALSE; + RtlZeroMemory(DataTableEntry, sizeof(LDR_DATA_TABLE_ENTRY)); + + /* Get NT headers from the image */ + NtHeaders = RtlImageNtHeader(BasePA); + + /* Initialize corresponding fields of DTE based on NT headers value */ + DataTableEntry->DllBase = BaseVA; + DataTableEntry->SizeOfImage = NtHeaders->OptionalHeader.SizeOfImage; + DataTableEntry->EntryPoint = RVA(BaseVA, NtHeaders->OptionalHeader.AddressOfEntryPoint); + DataTableEntry->SectionPointer = 0; + DataTableEntry->CheckSum = NtHeaders->OptionalHeader.CheckSum; + + /* Initialize BaseDllName field (UNICODE_STRING) from the Ansi BaseDllName + by simple conversion - copying each character */ + Length = (USHORT)(strlen(BaseDllName) * sizeof(WCHAR)); + Buffer = (PWSTR)MmHeapAlloc(Length); + if (Buffer == NULL) + { + MmHeapFree(DataTableEntry); + return FALSE; + } + RtlZeroMemory(Buffer, Length); + + DataTableEntry->BaseDllName.Length = Length; + DataTableEntry->BaseDllName.MaximumLength = Length; + DataTableEntry->BaseDllName.Buffer = PaToVa(Buffer); + while (*BaseDllName != 0) + { + *Buffer++ = *BaseDllName++; + } + + /* Initialize FullDllName field (UNICODE_STRING) from the Ansi FullDllName + using the same method */ + Length = (USHORT)(strlen(FullDllName) * sizeof(WCHAR)); + Buffer = (PWSTR)MmHeapAlloc(Length); + if (Buffer == NULL) + { + MmHeapFree(DataTableEntry); + return FALSE; + } + RtlZeroMemory(Buffer, Length); + + DataTableEntry->FullDllName.Length = Length; + DataTableEntry->FullDllName.MaximumLength = Length; + DataTableEntry->FullDllName.Buffer = PaToVa(Buffer); + while (*FullDllName != 0) + { + *Buffer++ = *FullDllName++; + } + + /* Initialize what's left - LoadCount which is 1, and set Flags so that + we know this entry is processed */ + DataTableEntry->Flags = LDRP_ENTRY_PROCESSED; + DataTableEntry->LoadCount = 1; + + /* Insert this DTE to a list in the LPB */ + InsertTailList(&WinLdrBlock->LoadOrderListHead, &DataTableEntry->InLoadOrderLinks); + + /* Save pointer to a newly allocated and initialized entry */ + *NewEntry = DataTableEntry; + + /* Return success */ + return TRUE; +} + +/* WinLdrLoadImage loads the specified image from the file (it doesn't + perform any additional operations on the filename, just directly + calls the file I/O routines), and relocates it so that it's ready + to be used when paging is enabled. + Addressing mode: physical + */ +BOOLEAN +WinLdrLoadImage(IN PCHAR FileName, + TYPE_OF_MEMORY MemoryType, + OUT PVOID *ImageBasePA) +{ + PFILE FileHandle; + PVOID PhysicalBase; + PVOID VirtualBase = NULL; + UCHAR HeadersBuffer[SECTOR_SIZE * 2]; + PIMAGE_NT_HEADERS NtHeaders; + PIMAGE_SECTION_HEADER SectionHeader; + ULONG VirtualSize, SizeOfRawData, NumberOfSections; + BOOLEAN Status; + ULONG i, BytesRead; + + CHAR ProgressString[256]; + + /* Inform user we are loading files */ + sprintf(ProgressString, "Loading %s...", FileName); + UiDrawProgressBarCenter(1, 100, ProgressString); + + /* Open the image file */ + FileHandle = FsOpenFile(FileName); + + if (FileHandle == NULL) + { + //Print(L"Can not open the file %s\n",FileName); + UiMessageBox("Can not open the file"); + return FALSE; + } + + /* Load the first 2 sectors of the image so we can read the PE header */ + Status = FsReadFile(FileHandle, SECTOR_SIZE * 2, NULL, HeadersBuffer); + if (!Status) + { + //Print(L"Error reading from file %s\n", FileName); + UiMessageBox("Error reading from file"); + FsCloseFile(FileHandle); + return FALSE; + } + + /* Now read the MZ header to get the offset to the PE Header */ + NtHeaders = RtlImageNtHeader(HeadersBuffer); + + if (!NtHeaders) + { + //Print(L"Error - no NT header found in %s\n", FileName); + UiMessageBox("Error - no NT header found"); + FsCloseFile(FileHandle); + return FALSE; + } + + /* Ensure this is executable image */ + if (((NtHeaders->FileHeader.Characteristics & IMAGE_FILE_EXECUTABLE_IMAGE) == 0)) + { + //Print(L"Not an executable image %s\n", FileName); + UiMessageBox("Not an executable image"); + FsCloseFile(FileHandle); + return FALSE; + } + + /* Store number of sections to read and a pointer to the first section */ + NumberOfSections = NtHeaders->FileHeader.NumberOfSections; + SectionHeader = IMAGE_FIRST_SECTION(NtHeaders); + + /* Try to allocate this memory, if fails - allocate somewhere else */ + PhysicalBase = MmAllocateMemoryAtAddress(NtHeaders->OptionalHeader.SizeOfImage, + (PVOID)((ULONG)NtHeaders->OptionalHeader.ImageBase & (KSEG0_BASE - 1)), + MemoryType); + + if (PhysicalBase == NULL) + { + /* It's ok, we don't panic - let's allocate again at any other "low" place */ + PhysicalBase = MmAllocateMemoryWithType(NtHeaders->OptionalHeader.SizeOfImage, MemoryType); + + if (PhysicalBase == NULL) + { + //Print(L"Failed to alloc pages for image %s\n", FileName); + UiMessageBox("Failed to alloc pages for image"); + FsCloseFile(FileHandle); + return FALSE; + } + } + + /* This is the real image base - in form of a virtual address */ + VirtualBase = PaToVa(PhysicalBase); + + DbgPrint((DPRINT_WINDOWS, "Base PA: 0x%X, VA: 0x%X\n", PhysicalBase, VirtualBase)); + + /* Set to 0 position and fully load the file image */ + FsSetFilePointer(FileHandle, 0); + + Status = FsReadFile(FileHandle, NtHeaders->OptionalHeader.SizeOfHeaders, NULL, PhysicalBase); + + if (!Status) + { + //Print(L"Error reading headers %s\n", FileName); + UiMessageBox("Error reading headers"); + FsCloseFile(FileHandle); + return FALSE; + } + + /* Reload the NT Header */ + NtHeaders = RtlImageNtHeader(PhysicalBase); + + /* Load the first section */ + SectionHeader = IMAGE_FIRST_SECTION(NtHeaders); + + /* Fill output parameters */ + *ImageBasePA = PhysicalBase; + + /* Walk through each section and read it (check/fix any possible + bad situations, if they arise) */ + for (i = 0; i < NumberOfSections; i++) + { + VirtualSize = SectionHeader->Misc.VirtualSize; + SizeOfRawData = SectionHeader->SizeOfRawData; + + /* Handle a case when VirtualSize equals 0 */ + if (VirtualSize == 0) + VirtualSize = SizeOfRawData; + + /* If PointerToRawData is 0, then force its size to be also 0 */ + if (SectionHeader->PointerToRawData == 0) + { + SizeOfRawData = 0; + } + else + { + /* Cut the loaded size to the VirtualSize extents */ + if (SizeOfRawData > VirtualSize) + SizeOfRawData = VirtualSize; + } + + /* Actually read the section (if its size is not 0) */ + if (SizeOfRawData != 0) + { + /* Seek to the correct position */ + FsSetFilePointer(FileHandle, SectionHeader->PointerToRawData); + + DbgPrint((DPRINT_WINDOWS, "SH->VA: 0x%X\n", SectionHeader->VirtualAddress)); + + /* Read this section from the file, size = SizeOfRawData */ + Status = FsReadFile(FileHandle, SizeOfRawData, &BytesRead, (PUCHAR)PhysicalBase + SectionHeader->VirtualAddress); + + if (!Status && (BytesRead == 0)) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage(): Error reading section from file!\n")); + break; + } + } + + /* Size of data is less than the virtual size - fill up the remainder with zeroes */ + if (SizeOfRawData < VirtualSize) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage(): SORD %d < VS %d", SizeOfRawData, VirtualSize)); + RtlZeroMemory((PVOID)(SectionHeader->VirtualAddress + (ULONG)PhysicalBase + SizeOfRawData), VirtualSize - SizeOfRawData); + } + + SectionHeader++; + } + + /* We are done with the file - close it */ + FsCloseFile(FileHandle); + + /* If loading failed - return right now */ + if (!Status) + return FALSE; + + + /* Relocate the image, if it needs it */ + if (NtHeaders->OptionalHeader.ImageBase != (ULONG)VirtualBase) + { + DbgPrint((DPRINT_WINDOWS, "Relocating %p -> %p\n", + NtHeaders->OptionalHeader.ImageBase, VirtualBase)); + Status = (BOOLEAN)LdrRelocateImageWithBias(PhysicalBase, + (ULONG_PTR)VirtualBase - (ULONG_PTR)PhysicalBase, + "FreeLdr", + TRUE, + TRUE, /* in case of conflict still return success */ + FALSE); + } + + return Status; +} + +/* PRIVATE FUNCTIONS *******************************************************/ + +/* DllName - physical, UnicodeString->Buffer - virtual */ +BOOLEAN +WinLdrpCompareDllName(IN PCH DllName, + IN PUNICODE_STRING UnicodeName) +{ + PWSTR Buffer; + UNICODE_STRING UnicodeNamePA; + ULONG i, Length; + + /* First obvious check: for length of two names */ + Length = strlen(DllName); + + UnicodeNamePA.Length = UnicodeName->Length; + UnicodeNamePA.MaximumLength = UnicodeName->MaximumLength; + UnicodeNamePA.Buffer = VaToPa(UnicodeName->Buffer); + DbgPrint((DPRINT_WINDOWS, "WinLdrpCompareDllName: %s and %wZ, Length = %d " + "UN->Length %d\n", DllName, &UnicodeNamePA, Length, UnicodeName->Length)); + + if ((Length * sizeof(WCHAR)) > UnicodeName->Length) + return FALSE; + + /* Store pointer to unicode string's buffer */ + Buffer = VaToPa(UnicodeName->Buffer); + + /* Loop character by character */ + for (i = 0; i < Length; i++) + { + /* Compare two characters, uppercasing them */ + if (toupper(*DllName) != toupper((CHAR)*Buffer)) + return FALSE; + + /* Move to the next character */ + DllName++; + Buffer++; + } + + /* Check, if strings either fully match, or match till the "." (w/o extension) */ + if ((UnicodeName->Length == Length * sizeof(WCHAR)) || (*Buffer == L'.')) + { + /* Yes they do */ + return TRUE; + } + + /* Strings don't match, return FALSE */ + return FALSE; +} + +BOOLEAN +WinLdrpBindImportName(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PVOID DllBase, + IN PVOID ImageBase, + IN PIMAGE_THUNK_DATA ThunkData, + IN PIMAGE_EXPORT_DIRECTORY ExportDirectory, + IN ULONG ExportSize, + IN BOOLEAN ProcessForwards) +{ + ULONG Ordinal; + PULONG NameTable, FunctionTable; + PUSHORT OrdinalTable; + LONG High, Low, Middle, Result; + ULONG Hint; + + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): DllBase 0x%X, ImageBase 0x%X, ThunkData 0x%X, ExportDirectory 0x%X, ExportSize %d, ProcessForwards 0x%X\n", + // DllBase, ImageBase, ThunkData, ExportDirectory, ExportSize, ProcessForwards)); + + /* Check passed DllBase param */ + if(DllBase == NULL) + { + DbgPrint((DPRINT_WINDOWS, "WARNING: DllBase == NULL!\n")); + return FALSE; + } + + /* Convert all non-critical pointers to PA from VA */ + ThunkData = VaToPa(ThunkData); + + /* Is the reference by ordinal? */ + if (IMAGE_SNAP_BY_ORDINAL(ThunkData->u1.Ordinal) && !ProcessForwards) + { + /* Yes, calculate the ordinal */ + Ordinal = (ULONG)(IMAGE_ORDINAL(ThunkData->u1.Ordinal) - (UINT32)ExportDirectory->Base); + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): Ordinal %d\n", Ordinal)); + } + else + { + /* It's reference by name, we have to look it up in the export directory */ + if (!ProcessForwards) + { + /* AddressOfData in thunk entry will become a virtual address (from relative) */ + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ThunkData->u1.AOD was %p\n", ThunkData->u1.AddressOfData)); + ThunkData->u1.AddressOfData = + (ULONG)RVA(ImageBase, ThunkData->u1.AddressOfData); + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ThunkData->u1.AOD became %p\n", ThunkData->u1.AddressOfData)); + } + + /* Get pointers to Name and Ordinal tables (RVA -> VA) */ + NameTable = (PULONG)VaToPa(RVA(DllBase, ExportDirectory->AddressOfNames)); + OrdinalTable = (PUSHORT)VaToPa(RVA(DllBase, ExportDirectory->AddressOfNameOrdinals)); + + //DbgPrint((DPRINT_WINDOWS, "NameTable 0x%X, OrdinalTable 0x%X, ED->AddressOfNames 0x%X, ED->AOFO 0x%X\n", + // NameTable, OrdinalTable, ExportDirectory->AddressOfNames, ExportDirectory->AddressOfNameOrdinals)); + + /* Get the hint, convert it to a physical pointer */ + Hint = ((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Hint; + //DbgPrint((DPRINT_WINDOWS, "HintIndex %d\n", Hint)); + + /* If Hint is less than total number of entries in the export directory, + and import name == export name, then we can just get it from the OrdinalTable */ + if ( + (Hint < ExportDirectory->NumberOfNames) && + ( + strcmp(VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Name[0]), + (PCHAR)VaToPa( RVA(DllBase, NameTable[Hint])) ) == 0 + ) + ) + { + Ordinal = OrdinalTable[Hint]; + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): Ordinal %d\n", Ordinal)); + } + else + { + /* It's not the easy way, we have to lookup import name in the name table. + Let's use a binary search for this task. */ + + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName() looking up the import name using binary search...\n")); + + /* Low boundary is set to 0, and high boundary to the maximum index */ + Low = 0; + High = ExportDirectory->NumberOfNames - 1; + + /* Perform a binary-search loop */ + while (High >= Low) + { + /* Divide by 2 by shifting to the right once */ + Middle = (Low + High) >> 1; + + /* Compare the names */ + Result = strcmp(VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa((PVOID)ThunkData->u1.AddressOfData))->Name[0]), + (PCHAR)VaToPa(RVA(DllBase, NameTable[Middle]))); + + /*DbgPrint((DPRINT_WINDOWS, "Binary search: comparing Import '__', Export '%s'\n",*/ + /*VaToPa(&((PIMAGE_IMPORT_BY_NAME)VaToPa(ThunkData->u1.AddressOfData))->Name[0]),*/ + /*(PCHAR)VaToPa(RVA(DllBase, NameTable[Middle]))));*/ + + /*DbgPrint((DPRINT_WINDOWS, "TE->u1.AOD %p, fulladdr %p\n", + ThunkData->u1.AddressOfData, + ((PIMAGE_IMPORT_BY_NAME)VaToPa(ThunkData->u1.AddressOfData))->Name ));*/ + + + /* Depending on result of strcmp, perform different actions */ + if (Result < 0) + { + /* Adjust top boundary */ + High = Middle - 1; + } + else if (Result > 0) + { + /* Adjust bottom boundary */ + Low = Middle + 1; + } + else + { + /* Yay, found it! */ + break; + } + } + + /* If high boundary is less than low boundary, then no result found */ + if (High < Low) + { + //Print(L"Error in binary search\n"); + DbgPrint((DPRINT_WINDOWS, "Error in binary search!\n")); + return FALSE; + } + + /* Everything allright, get the ordinal */ + Ordinal = OrdinalTable[Middle]; + + //DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName() found Ordinal %d\n", Ordinal)); + } + } + + /* Check ordinal number for validity! */ + if (Ordinal >= ExportDirectory->NumberOfFunctions) + { + DbgPrint((DPRINT_WINDOWS, "Ordinal number is invalid!\n")); + return FALSE; + } + + /* Get a pointer to the function table */ + FunctionTable = (PULONG)VaToPa(RVA(DllBase, ExportDirectory->AddressOfFunctions)); + + /* Save a pointer to the function */ + ThunkData->u1.Function = (ULONG)RVA(DllBase, FunctionTable[Ordinal]); + + /* Is it a forwarder? (function pointer isn't within the export directory) */ + if (((ULONG)VaToPa((PVOID)ThunkData->u1.Function) > (ULONG)ExportDirectory) && + ((ULONG)VaToPa((PVOID)ThunkData->u1.Function) < ((ULONG)ExportDirectory + ExportSize))) + { + PLDR_DATA_TABLE_ENTRY DataTableEntry; + CHAR ForwardDllName[255]; + PIMAGE_EXPORT_DIRECTORY RefExportDirectory; + ULONG RefExportSize; + + /* Save the name of the forward dll */ + RtlCopyMemory(ForwardDllName, (PCHAR)VaToPa((PVOID)ThunkData->u1.Function), sizeof(ForwardDllName)); + + /* Strip out its extension */ + *strchr(ForwardDllName,'.') = '\0'; + + DbgPrint((DPRINT_WINDOWS, "WinLdrpBindImportName(): ForwardDllName %s\n", ForwardDllName)); + if (!WinLdrCheckForLoadedDll(WinLdrBlock, ForwardDllName, &DataTableEntry)) + { + /* We can't continue if DLL couldn't be loaded, so bomb out with an error */ + //Print(L"Error loading DLL!\n"); + DbgPrint((DPRINT_WINDOWS, "Error loading DLL!\n")); + return FALSE; + } + + /* Get pointer to the export directory of loaded DLL */ + RefExportDirectory = (PIMAGE_EXPORT_DIRECTORY) + RtlImageDirectoryEntryToData(VaToPa(DataTableEntry->DllBase), + TRUE, + IMAGE_DIRECTORY_ENTRY_EXPORT, + &RefExportSize); + + /* Fail if it's NULL */ + if (RefExportDirectory) + { + UCHAR Buffer[128]; + IMAGE_THUNK_DATA RefThunkData; + PIMAGE_IMPORT_BY_NAME ImportByName; + PCHAR ImportName; + BOOLEAN Status; + + /* Get pointer to the import name */ + ImportName = strchr((PCHAR)VaToPa((PVOID)ThunkData->u1.Function), '.') + 1; + + /* Create a IMAGE_IMPORT_BY_NAME structure, pointing to the local Buffer */ + ImportByName = (PIMAGE_IMPORT_BY_NAME)Buffer; + + /* Fill the name with the import name */ + RtlCopyMemory(ImportByName->Name, ImportName, strlen(ImportName)+1); + + /* Set Hint to 0 */ + ImportByName->Hint = 0; + + /* And finally point ThunkData's AddressOfData to that structure */ + RefThunkData.u1.AddressOfData = (ULONG)ImportByName; + + /* And recursively call ourselves */ + Status = WinLdrpBindImportName( + WinLdrBlock, + DataTableEntry->DllBase, + ImageBase, + &RefThunkData, + RefExportDirectory, + RefExportSize, + TRUE); + + /* Fill out the ThunkData with data from RefThunkData */ + ThunkData->u1 = RefThunkData.u1; + + /* Return what we got from the recursive call */ + return Status; + } + else + { + /* Fail if ExportDirectory is NULL */ + return FALSE; + } + } + + /* Success! */ + return TRUE; +} + +BOOLEAN +WinLdrpLoadAndScanReferencedDll(PLOADER_PARAMETER_BLOCK WinLdrBlock, + PCCH DirectoryPath, + PCH ImportName, + PLDR_DATA_TABLE_ENTRY *DataTableEntry) +{ + CHAR FullDllName[256]; + BOOLEAN Status; + PVOID BasePA; + + /* Prepare the full path to the file to be loaded */ + strcpy(FullDllName, DirectoryPath); + strcat(FullDllName, ImportName); + + DbgPrint((DPRINT_WINDOWS, "Loading referenced DLL: %s\n", FullDllName)); + //Print(L"Loading referenced DLL: %s\n", FullDllName); + + /* Load the image */ + Status = WinLdrLoadImage(FullDllName, LoaderHalCode, &BasePA); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "WinLdrLoadImage() failed\n")); + return Status; + } + + /* Allocate DTE for newly loaded DLL */ + Status = WinLdrAllocateDataTableEntry(WinLdrBlock, + ImportName, + FullDllName, + BasePA, + DataTableEntry); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, + "WinLdrAllocateDataTableEntry() failed with Status=0x%X\n", Status)); + return Status; + } + + /* Scan its dependencies too */ + DbgPrint((DPRINT_WINDOWS, + "WinLdrScanImportDescriptorTable() calling ourselves for %S\n", + VaToPa((*DataTableEntry)->BaseDllName.Buffer))); + Status = WinLdrScanImportDescriptorTable(WinLdrBlock, DirectoryPath, *DataTableEntry); + + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, + "WinLdrScanImportDescriptorTable() failed with Status=0x%X\n", Status)); + return Status; + } + + return TRUE; +} + +BOOLEAN +WinLdrpScanImportAddressTable(IN OUT PLOADER_PARAMETER_BLOCK WinLdrBlock, + IN PVOID DllBase, + IN PVOID ImageBase, + IN PIMAGE_THUNK_DATA ThunkData) +{ + PIMAGE_EXPORT_DIRECTORY ExportDirectory = NULL; + BOOLEAN Status; + ULONG ExportSize; + + DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable(): DllBase 0x%X, " + "ImageBase 0x%X, ThunkData 0x%X\n", DllBase, ImageBase, ThunkData)); + + /* Obtain the export table from the DLL's base */ + if (DllBase == NULL) + { + //Print(L"Error, DllBase == NULL!\n"); + return FALSE; + } + else + { + ExportDirectory = + (PIMAGE_EXPORT_DIRECTORY)RtlImageDirectoryEntryToData(VaToPa(DllBase), + TRUE, + IMAGE_DIRECTORY_ENTRY_EXPORT, + &ExportSize); + } + + DbgPrint((DPRINT_WINDOWS, "WinLdrpScanImportAddressTable(): ExportDirectory 0x%X\n", ExportDirectory)); + + /* If pointer to Export Directory is */ + if (ExportDirectory == NULL) + return FALSE; + + /* Go through each entry in the thunk table and bind it */ + while (((PIMAGE_THUNK_DATA)VaToPa(ThunkData))->u1.AddressOfData != 0) + { + /* Bind it */ + Status = WinLdrpBindImportName( + WinLdrBlock, + DllBase, + ImageBase, + ThunkData, + ExportDirectory, + ExportSize, + FALSE); + + /* Move to the next entry */ + ThunkData++; + + /* Return error if binding was unsuccessful */ + if (!Status) + return Status; + } + + /* Return success */ + return TRUE; +} diff --git a/reactos/boot/freeldr/freeldr/windows/winldr.c b/reactos/boot/freeldr/freeldr/windows/winldr.c index 622d258d8f7..4bd5ee5002f 100644 --- a/reactos/boot/freeldr/freeldr/windows/winldr.c +++ b/reactos/boot/freeldr/freeldr/windows/winldr.c @@ -364,55 +364,55 @@ WinLdrLoadBootDrivers(PLOADER_PARAMETER_BLOCK LoaderBlock, PVOID WinLdrLoadModule(PCSTR ModuleName, ULONG *Size, TYPE_OF_MEMORY MemoryType) { - PFILE FileHandle; - PVOID PhysicalBase; - ULONG FileSize; - BOOLEAN Status; - - //CHAR ProgressString[256]; - - /* Inform user we are loading files */ - //sprintf(ProgressString, "Loading %s...", FileName); - //UiDrawProgressBarCenter(1, 100, ProgressString); - - DbgPrint((DPRINT_WINDOWS, "Loading module %s\n", ModuleName)); - *Size = 0; - - /* Open the image file */ - FileHandle = FsOpenFile(ModuleName); - - if (FileHandle == NULL) - { - /* In case of errors, we just return, without complaining to the user */ - return NULL; - } - - /* Get this file's size */ - FileSize = FsGetFileSize(FileHandle); - *Size = FileSize; - - /* Allocate memory */ - PhysicalBase = MmAllocateMemoryWithType(FileSize, MemoryType); - if (PhysicalBase == NULL) - { - FsCloseFile(FileHandle); - return NULL; - } - - /* Load whole file */ - Status = FsReadFile(FileHandle, FileSize, NULL, PhysicalBase); - if (!Status) - { - FsCloseFile(FileHandle); - return NULL; - } - - DbgPrint((DPRINT_WINDOWS, "Loaded %s at 0x%x with size 0x%x\n", ModuleName, PhysicalBase, FileSize)); - - /* We are done with the file - close it */ - FsCloseFile(FileHandle); - - return PhysicalBase; + PFILE FileHandle; + PVOID PhysicalBase; + ULONG FileSize; + BOOLEAN Status; + + //CHAR ProgressString[256]; + + /* Inform user we are loading files */ + //sprintf(ProgressString, "Loading %s...", FileName); + //UiDrawProgressBarCenter(1, 100, ProgressString); + + DbgPrint((DPRINT_WINDOWS, "Loading module %s\n", ModuleName)); + *Size = 0; + + /* Open the image file */ + FileHandle = FsOpenFile(ModuleName); + + if (FileHandle == NULL) + { + /* In case of errors, we just return, without complaining to the user */ + return NULL; + } + + /* Get this file's size */ + FileSize = FsGetFileSize(FileHandle); + *Size = FileSize; + + /* Allocate memory */ + PhysicalBase = MmAllocateMemoryWithType(FileSize, MemoryType); + if (PhysicalBase == NULL) + { + FsCloseFile(FileHandle); + return NULL; + } + + /* Load whole file */ + Status = FsReadFile(FileHandle, FileSize, NULL, PhysicalBase); + if (!Status) + { + FsCloseFile(FileHandle); + return NULL; + } + + DbgPrint((DPRINT_WINDOWS, "Loaded %s at 0x%x with size 0x%x\n", ModuleName, PhysicalBase, FileSize)); + + /* We are done with the file - close it */ + FsCloseFile(FileHandle); + + return PhysicalBase; } diff --git a/reactos/boot/freeldr/freeldr/windows/wlmemory.c b/reactos/boot/freeldr/freeldr/windows/wlmemory.c index 6ae0d1dbca6..b8d5d435863 100644 --- a/reactos/boot/freeldr/freeldr/windows/wlmemory.c +++ b/reactos/boot/freeldr/freeldr/windows/wlmemory.c @@ -1,960 +1,960 @@ -/* - * PROJECT: EFI Windows Loader - * LICENSE: GPL - See COPYING in the top level directory - * FILE: freeldr/winldr/wlmemory.c - * PURPOSE: Memory related routines - * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) - */ - -/* INCLUDES ***************************************************************/ - -#include - -#include -#include - -extern ULONG TotalNLSSize; -extern ULONG LoaderPagesSpanned; - -// This is needed because headers define wrong one for ReactOS -#undef KIP0PCRADDRESS -#define KIP0PCRADDRESS 0xffdff000 - -#define HYPER_SPACE_ENTRY 0x300 - -PCHAR MemTypeDesc[] = { - "ExceptionBlock ", // ? - "SystemBlock ", // ? - "Free ", - "Bad ", // used - "LoadedProgram ", // == Free - "FirmwareTemporary ", // == Free - "FirmwarePermanent ", // == Bad - "OsloaderHeap ", // used - "OsloaderStack ", // == Free - "SystemCode ", - "HalCode ", - "BootDriver ", // not used - "ConsoleInDriver ", // ? - "ConsoleOutDriver ", // ? - "StartupDpcStack ", // ? - "StartupKernelStack", // ? - "StartupPanicStack ", // ? - "StartupPcrPage ", // ? - "StartupPdrPage ", // ? - "RegistryData ", // used - "MemoryData ", // not used - "NlsData ", // used - "SpecialMemory ", // == Bad - "BBTMemory " // == Bad - }; - -VOID -WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock); - - -VOID -MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - ULONG BasePage, - ULONG PageCount, - ULONG Type); -VOID -WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor); - -VOID -WinLdrRemoveDescriptor(IN PMEMORY_ALLOCATION_DESCRIPTOR Descriptor); - -VOID -WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss); - -// This is needed only for SetProcessorContext routine -#pragma pack(2) - typedef struct - { - USHORT Limit; - ULONG Base; - } GDTIDT; -#pragma pack(4) - -// this is needed for new IDT filling -#if 0 -extern ULONG_PTR i386DivideByZero; -extern ULONG_PTR i386DebugException; -extern ULONG_PTR i386NMIException; -extern ULONG_PTR i386Breakpoint; -extern ULONG_PTR i386Overflow; -extern ULONG_PTR i386BoundException; -extern ULONG_PTR i386InvalidOpcode; -extern ULONG_PTR i386FPUNotAvailable; -extern ULONG_PTR i386DoubleFault; -extern ULONG_PTR i386CoprocessorSegment; -extern ULONG_PTR i386InvalidTSS; -extern ULONG_PTR i386SegmentNotPresent; -extern ULONG_PTR i386StackException; -extern ULONG_PTR i386GeneralProtectionFault; -extern ULONG_PTR i386PageFault; // exc 14 -extern ULONG_PTR i386CoprocessorError; // exc 16 -extern ULONG_PTR i386AlignmentCheck; // exc 17 -#endif - -/* GLOBALS ***************************************************************/ - -PHARDWARE_PTE PDE; -PHARDWARE_PTE HalPageTable; - -PUCHAR PhysicalPageTablesBuffer; -PUCHAR KernelPageTablesBuffer; -ULONG PhysicalPageTables; -ULONG KernelPageTables; - -MEMORY_ALLOCATION_DESCRIPTOR *Mad; -ULONG MadCount = 0; - - -/* FUNCTIONS **************************************************************/ - -BOOLEAN -MempAllocatePageTables() -{ - ULONG NumPageTables, TotalSize; - PUCHAR Buffer; - // It's better to allocate PDE + PTEs contigiuos - - // Max number of entries = MaxPageNum >> 10 - // FIXME: This is a number to describe ALL physical memory - // and windows doesn't expect ALL memory mapped... - NumPageTables = (GetSystemMemorySize() >> MM_PAGE_SHIFT) >> 10; - - DbgPrint((DPRINT_WINDOWS, "NumPageTables = %d\n", NumPageTables)); - - // Allocate memory block for all these things: - // PDE, HAL mapping page table, physical mapping, kernel mapping - TotalSize = (1+1+NumPageTables*2)*MM_PAGE_SIZE; - - // PDE+HAL+KernelPTEs == MemoryData - Buffer = MmAllocateMemoryWithType( - TotalSize - NumPageTables*MM_PAGE_SIZE, LoaderMemoryData); - - // Physical PTEs = FirmwareTemporary - PhysicalPageTablesBuffer = MmAllocateMemoryWithType( - NumPageTables*MM_PAGE_SIZE, LoaderFirmwareTemporary); - - if (Buffer + (TotalSize - NumPageTables*MM_PAGE_SIZE) != - PhysicalPageTablesBuffer) - { - DbgPrint((DPRINT_WINDOWS, "There was a problem allocating two adjacent blocks of memory!")); - } - - if (Buffer == NULL || PhysicalPageTablesBuffer == NULL) - { - UiMessageBox("Impossible to allocate memory block for page tables!"); - return FALSE; - } - - // Zero all this memory block - RtlZeroMemory(Buffer, TotalSize); - - // Set up pointers correctly now - PDE = (PHARDWARE_PTE)Buffer; - - // Map the page directory at 0xC0000000 (maps itself) - PDE[HYPER_SPACE_ENTRY].PageFrameNumber = (ULONG)PDE >> MM_PAGE_SHIFT; - PDE[HYPER_SPACE_ENTRY].Valid = 1; - PDE[HYPER_SPACE_ENTRY].Write = 1; - - // The last PDE slot is allocated for HAL's memory mapping (Virtual Addresses 0xFFC00000 - 0xFFFFFFFF) - HalPageTable = (PHARDWARE_PTE)&Buffer[MM_PAGE_SIZE*1]; - - // Map it - PDE[1023].PageFrameNumber = (ULONG)HalPageTable >> MM_PAGE_SHIFT; - PDE[1023].Valid = 1; - PDE[1023].Write = 1; - - // Store pointer to the table for easier access - KernelPageTablesBuffer = &Buffer[MM_PAGE_SIZE*2]; - - // Zero counters of page tables used - PhysicalPageTables = 0; - KernelPageTables = 0; - - return TRUE; -} - -VOID -MempAllocatePTE(ULONG Entry, PHARDWARE_PTE *PhysicalPT, PHARDWARE_PTE *KernelPT) -{ - //Print(L"Creating PDE Entry %X\n", Entry); - - // Identity mapping - *PhysicalPT = (PHARDWARE_PTE)&PhysicalPageTablesBuffer[PhysicalPageTables*MM_PAGE_SIZE]; - PhysicalPageTables++; - - PDE[Entry].PageFrameNumber = (ULONG)*PhysicalPT >> MM_PAGE_SHIFT; - PDE[Entry].Valid = 1; - PDE[Entry].Write = 1; - - if (Entry+(KSEG0_BASE >> 22) > 1023) - { - DbgPrint((DPRINT_WINDOWS, "WARNING! Entry: %X > 1023\n", Entry+(KSEG0_BASE >> 22))); - } - - // Kernel-mode mapping - *KernelPT = (PHARDWARE_PTE)&KernelPageTablesBuffer[KernelPageTables*MM_PAGE_SIZE]; - KernelPageTables++; - - PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber = ((ULONG)*KernelPT >> MM_PAGE_SHIFT); - PDE[Entry+(KSEG0_BASE >> 22)].Valid = 1; - PDE[Entry+(KSEG0_BASE >> 22)].Write = 1; -} - -BOOLEAN -MempSetupPaging(IN ULONG StartPage, - IN ULONG NumberOfPages) -{ - PHARDWARE_PTE PhysicalPT; - PHARDWARE_PTE KernelPT; - ULONG Entry, Page; - - //Print(L"MempSetupPaging: SP 0x%X, Number: 0x%X\n", StartPage, NumberOfPages); - - // HACK - if (StartPage+NumberOfPages >= 0x80000) - { - // - // We can't map this as it requires more than 1 PDE - // and in fact it's not possible at all ;) - // - //Print(L"skipping...\n"); - return TRUE; - } - - // - // Now actually set up the page tables for identity mapping - // - for (Page=StartPage; Page < StartPage+NumberOfPages; Page++) - { - Entry = Page >> 10; - - if (((PULONG)PDE)[Entry] == 0) - { - MempAllocatePTE(Entry, &PhysicalPT, &KernelPT); - } - else - { - PhysicalPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); - KernelPT = (PHARDWARE_PTE)(PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber << MM_PAGE_SHIFT); - } - - if (Page == 0) - { - PhysicalPT[Page & 0x3ff].PageFrameNumber = Page; - PhysicalPT[Page & 0x3ff].Valid = 0; - PhysicalPT[Page & 0x3ff].Write = 0; - - KernelPT[Page & 0x3ff].PageFrameNumber = Page; - KernelPT[Page & 0x3ff].Valid = 0; - KernelPT[Page & 0x3ff].Write = 0; - } - else - { - PhysicalPT[Page & 0x3ff].PageFrameNumber = Page; - PhysicalPT[Page & 0x3ff].Valid = 1; - PhysicalPT[Page & 0x3ff].Write = 1; - - KernelPT[Page & 0x3ff].PageFrameNumber = Page; - KernelPT[Page & 0x3ff].Valid = 1; - KernelPT[Page & 0x3ff].Write = 1; - } - } - - return TRUE; -} - -VOID -MempDisablePages() -{ - int i; - - // - // We need to delete kernel mapping from memory areas which are - // marked as Special or Permanent memory (thus non-accessible) - // - - for (i=0; i LoaderPagesSpanned) - EndPage = LoaderPagesSpanned; - } - - for (Page = StartPage; Page < EndPage; Page++) - { - PHARDWARE_PTE KernelPT; - ULONG Entry = (Page >> 10) + (KSEG0_BASE >> 22); - - if (PDE[Entry].Valid) - { - KernelPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); - - if (KernelPT) - { - KernelPT[Page & 0x3ff].PageFrameNumber = 0; - KernelPT[Page & 0x3ff].Valid = 0; - KernelPT[Page & 0x3ff].Write = 0; - } - } - } - } - } -} - -VOID -MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - ULONG BasePage, - ULONG PageCount, - ULONG Type) -{ - BOOLEAN Status; - - // - // Check for some weird stuff at the top - // - if (BasePage + PageCount > 0xF0000) - { - // - // Just skip this, without even adding to MAD list - // - return; - } - - // - // Set Base page, page count and type - // - Mad[MadCount].BasePage = BasePage; - Mad[MadCount].PageCount = PageCount; - Mad[MadCount].MemoryType = Type; - - // - // Check if it's more than the allowed for OS loader - // if yes - don't map the pages, just add as FirmwareTemporary - // - if (BasePage + PageCount > LoaderPagesSpanned) - { - if (Mad[MadCount].MemoryType != LoaderSpecialMemory && - Mad[MadCount].MemoryType != LoaderFirmwarePermanent && - Mad[MadCount].MemoryType != LoaderFree) - { - DbgPrint((DPRINT_WINDOWS, "Setting page %x %x to Temporary from %d\n", - BasePage, PageCount, Mad[MadCount].MemoryType)); - Mad[MadCount].MemoryType = LoaderFirmwareTemporary; - } - - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - - return; - } - - // - // Add descriptor - // - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - - // - // Map it (don't map low 1Mb because it was already contigiously - // mapped in WinLdrTurnOnPaging) - // - if (BasePage >= 0x100) - { - Status = MempSetupPaging(BasePage, PageCount); - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "Error during MempSetupPaging\n")); - return; - } - } -} - -#ifdef _M_IX86 - -BOOLEAN LocalAPIC = FALSE; -ULONG_PTR APICAddress = 0; - -VOID -WinLdrpMapApic() -{ - /* Check if we have a local APIC */ - asm(".intel_syntax noprefix\n"); - asm("mov eax, 1\n"); - asm("cpuid\n"); - asm("shr edx, 9\n"); - asm("and edx, 0x1\n"); - asm("mov _LocalAPIC, edx\n"); - asm(".att_syntax\n"); - - /* If there is no APIC, just return */ - if (!LocalAPIC) - return; - - asm(".intel_syntax noprefix\n"); - asm("mov ecx, 0x1B\n"); - asm("rdmsr\n"); - asm("mov edx, eax\n"); - asm("and edx, 0xFFFFF000\n"); - asm("mov _APICAddress, edx"); - asm(".att_syntax\n"); - - DbgPrint((DPRINT_WINDOWS, "Local APIC detected at address 0x%x\n", - APICAddress)); - - /* Map it */ - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber - = APICAddress >> MM_PAGE_SHIFT; - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].WriteThrough = 1; - HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].CacheDisable = 1; -} -#else -VOID -WinLdrpMapApic() -{ - /* Implement it for another arch */ -} -#endif - -BOOLEAN -WinLdrTurnOnPaging(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - ULONG PcrBasePage, - ULONG TssBasePage, - PVOID GdtIdt) -{ - ULONG i, PagesCount, MemoryMapSizeInPages; - ULONG LastPageIndex, LastPageType, MemoryMapStartPage; - PPAGE_LOOKUP_TABLE_ITEM MemoryMap; - ULONG NoEntries; - PKTSS Tss; - BOOLEAN Status; - - // - // Creating a suitable memory map for the Windows can be tricky, so let's - // give a few advices: - // 1) One must not map the whole available memory pages to PDE! - // Map only what's needed - 16Mb, 24Mb, 32Mb max I think, - // thus occupying 4, 6 or 8 PDE entries for identical mapping, - // the same quantity for KSEG0_BASE mapping, one more entry for - // hyperspace and one more entry for HAL physical pages mapping. - // 2) Memory descriptors must map *the whole* physical memory - // showing any memory above 16/24/32 as FirmwareTemporary - // - // 3) Overall memory blocks count must not exceed 30 (?? why?) - // - - // - // During MmInitMachineDependent, the kernel zeroes PDE at the following address - // 0xC0300000 - 0xC03007FC - // - // Then it finds the best place for non-paged pool: - // StartPde C0300F70, EndPde C0300FF8, NumberOfPages C13, NextPhysPage 3AD - // - - // Before we start mapping pages, create a block of memory, which will contain - // PDE and PTEs - if (MempAllocatePageTables() == FALSE) - return FALSE; - - // Allocate memory for memory allocation descriptors - Mad = MmHeapAlloc(sizeof(MEMORY_ALLOCATION_DESCRIPTOR) * 1024); - - // Setup an entry for each descriptor - MemoryMap = MmGetMemoryMap(&NoEntries); - if (MemoryMap == NULL) - { - UiMessageBox("Can not retrieve the current memory map"); - return FALSE; - } - - // Calculate parameters of the memory map - MemoryMapStartPage = (ULONG_PTR)MemoryMap >> MM_PAGE_SHIFT; - MemoryMapSizeInPages = NoEntries * sizeof(PAGE_LOOKUP_TABLE_ITEM); - - DbgPrint((DPRINT_WINDOWS, "Got memory map with %d entries\n", NoEntries)); - - // Always contigiously map low 1Mb of memory - Status = MempSetupPaging(0, 0x100); - if (!Status) - { - DbgPrint((DPRINT_WINDOWS, "Error during MempSetupPaging of low 1Mb\n")); - return FALSE; - } - - // Construct a good memory map from what we've got, - // but mark entries which the memory allocation bitmap takes - // as free entries (this is done in order to have the ability - // to place mem alloc bitmap outside lower 16Mb zone) - PagesCount = 1; - LastPageIndex = 0; - LastPageType = MemoryMap[0].PageAllocated; - for(i=1;i= MemoryMapStartPage && - i < (MemoryMapStartPage+MemoryMapSizeInPages)) - { - // Exclude it if current page belongs to the memory map - MemoryMap[i].PageAllocated = LoaderFree; - } - - // Process entry - if (MemoryMap[i].PageAllocated == LastPageType && - (i != NoEntries-1) ) - { - PagesCount++; - } - else - { - // Add the resulting region - MempAddMemoryBlock(LoaderBlock, LastPageIndex, PagesCount, LastPageType); - - // Reset our counter vars - LastPageIndex = i; - LastPageType = MemoryMap[i].PageAllocated; - PagesCount = 1; - } - } - - // TEMP, DEBUG! - // adding special reserved memory zones for vmware workstation -#if 0 - { - Mad[MadCount].BasePage = 0xfec00; - Mad[MadCount].PageCount = 0x10; - Mad[MadCount].MemoryType = LoaderSpecialMemory; - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - - Mad[MadCount].BasePage = 0xfee00; - Mad[MadCount].PageCount = 0x1; - Mad[MadCount].MemoryType = LoaderSpecialMemory; - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - - Mad[MadCount].BasePage = 0xfffe0; - Mad[MadCount].PageCount = 0x20; - Mad[MadCount].MemoryType = LoaderSpecialMemory; - WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); - MadCount++; - } -#endif - - DbgPrint((DPRINT_WINDOWS, "MadCount: %d\n", MadCount)); - - WinLdrpDumpMemoryDescriptors(LoaderBlock); //FIXME: Delete! - - // Map our loader image, so we can continue running - /*Status = MempSetupPaging(OsLoaderBase >> MM_PAGE_SHIFT, OsLoaderSize >> MM_PAGE_SHIFT); - if (!Status) - { - UiMessageBox("Error during MempSetupPaging"); - return; - }*/ - - //VideoDisplayString(L"Hello from VGA, going into the kernel\n"); - DbgPrint((DPRINT_WINDOWS, "HalPageTable: 0x%X\n", HalPageTable)); - - // Page Tables have been setup, make special handling for PCR and TSS - // (which is done in BlSetupFotNt in usual ntldr) - HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber = PcrBasePage+1; - HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; - HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; - - HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber = PcrBasePage; - HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; - HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; - - // Map APIC - WinLdrpMapApic(); - - // Map VGA memory - //VideoMemoryBase = MmMapIoSpace(0xb8000, 4000, MmNonCached); - //DbgPrint((DPRINT_WINDOWS, "VideoMemoryBase: 0x%X\n", VideoMemoryBase)); - - Tss = (PKTSS)(KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT)); - - // Unmap what is not needed from kernel page table - MempDisablePages(); - - // Fill the memory descriptor list and - //PrepareMemoryDescriptorList(); - DbgPrint((DPRINT_WINDOWS, "Memory Descriptor List prepared, printing PDE\n")); - List_PaToVa(&LoaderBlock->MemoryDescriptorListHead); - -#ifdef DBG - { - ULONG *PDE_Addr=(ULONG *)PDE;//0xC0300000; - int j; - - DbgPrint((DPRINT_WINDOWS, "\nPDE\n")); - - for (i=0; i<128; i++) - { - DbgPrint((DPRINT_WINDOWS, "0x%04X | ", i*8)); - - for (j=0; j<8; j++) - { - DbgPrint((DPRINT_WINDOWS, "0x%08X ", PDE_Addr[i*8+j])); - } - - DbgPrint((DPRINT_WINDOWS, "\n")); - } - } -#endif - - - // Enable paging - //BS->ExitBootServices(ImageHandle,MapKey); - - // Disable Interrupts - _disable(); - - // Re-initalize EFLAGS - Ke386EraseFlags(); - - // Set the PDBR - __writecr3((ULONG_PTR)PDE); - - // Enable paging by modifying CR0 - __writecr0(__readcr0() | CR0_PG); - - // Set processor context - WinLdrSetProcessorContext(GdtIdt, KIP0PCRADDRESS, KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT)); - - // Zero KI_USER_SHARED_DATA page - memset((PVOID)KI_USER_SHARED_DATA, 0, MM_PAGE_SIZE); - - return TRUE; -} - -// Two special things this func does: it sorts descriptors, -// and it merges free ones -VOID -WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, - IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor) -{ - PLIST_ENTRY ListHead = &LoaderBlock->MemoryDescriptorListHead; - PLIST_ENTRY PreviousEntry, NextEntry; - PMEMORY_ALLOCATION_DESCRIPTOR PreviousDescriptor = NULL, NextDescriptor = NULL; - - DbgPrint((DPRINT_WINDOWS, "BP=0x%X PC=0x%X %s\n", NewDescriptor->BasePage, - NewDescriptor->PageCount, MemTypeDesc[NewDescriptor->MemoryType])); - - /* Find a place where to insert the new descriptor to */ - PreviousEntry = ListHead; - NextEntry = ListHead->Flink; - while (NextEntry != ListHead) - { - NextDescriptor = CONTAINING_RECORD(NextEntry, - MEMORY_ALLOCATION_DESCRIPTOR, - ListEntry); - if (NewDescriptor->BasePage < NextDescriptor->BasePage) - break; - - PreviousEntry = NextEntry; - PreviousDescriptor = NextDescriptor; - NextEntry = NextEntry->Flink; - } - - /* Don't forget about merging free areas */ - if (NewDescriptor->MemoryType != LoaderFree) - { - /* Just insert, nothing to merge */ - InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry); - } - else - { - /* Previous block also free? */ - if ((PreviousEntry != ListHead) && (PreviousDescriptor->MemoryType == LoaderFree) && - ((PreviousDescriptor->BasePage + PreviousDescriptor->PageCount) == - NewDescriptor->BasePage)) - { - /* Just enlarge previous descriptor's PageCount */ - PreviousDescriptor->PageCount += NewDescriptor->PageCount; - NewDescriptor = PreviousDescriptor; - } - else - { - /* Nope, just insert */ - InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry); - } - - /* Next block is free ?*/ - if ((NextEntry != ListHead) && - (NextDescriptor->MemoryType == LoaderFree) && - ((NewDescriptor->BasePage + NewDescriptor->PageCount) == NextDescriptor->BasePage)) - { - /* Enlarge next descriptor's PageCount */ - NewDescriptor->PageCount += NextDescriptor->PageCount; - RemoveEntryList(&NextDescriptor->ListEntry); - } - } - - return; -} - -VOID -WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss) -{ - GDTIDT GdtDesc, IdtDesc, OldIdt; - PKGDTENTRY pGdt; - PKIDTENTRY pIdt; - ULONG Ldt = 0; - //ULONG i; - - DbgPrint((DPRINT_WINDOWS, "GDtIdt %p, Pcr %p, Tss 0x%08X\n", - GdtIdt, Pcr, Tss)); - - // Kernel expects the PCR to be zero-filled on startup - // FIXME: Why zero it here when we can zero it right after allocation? - RtlZeroMemory((PVOID)Pcr, MM_PAGE_SIZE); //FIXME: Why zero only 1 page when we allocate 2? - - // Get old values of GDT and IDT - Ke386GetGlobalDescriptorTable(GdtDesc); - Ke386GetInterruptDescriptorTable(IdtDesc); - - // Save old IDT - OldIdt.Base = IdtDesc.Base; - OldIdt.Limit = IdtDesc.Limit; - - // Prepare new IDT+GDT - GdtDesc.Base = KSEG0_BASE | (ULONG_PTR)GdtIdt; - GdtDesc.Limit = NUM_GDT * sizeof(KGDTENTRY) - 1; - IdtDesc.Base = (ULONG)((PUCHAR)GdtDesc.Base + GdtDesc.Limit + 1); - IdtDesc.Limit = NUM_IDT * sizeof(KIDTENTRY) - 1; - - // ======================== - // Fill all descriptors now - // ======================== - - pGdt = (PKGDTENTRY)GdtDesc.Base; - pIdt = (PKIDTENTRY)IdtDesc.Base; - - // - // Code selector (0x8) - // Flat 4Gb - // - pGdt[1].LimitLow = 0xFFFF; - pGdt[1].BaseLow = 0; - pGdt[1].HighWord.Bytes.BaseMid = 0; - pGdt[1].HighWord.Bytes.Flags1 = 0x9A; - pGdt[1].HighWord.Bytes.Flags2 = 0xCF; - pGdt[1].HighWord.Bytes.BaseHi = 0; - - // - // Data selector (0x10) - // Flat 4Gb - // - pGdt[2].LimitLow = 0xFFFF; - pGdt[2].BaseLow = 0; - pGdt[2].HighWord.Bytes.BaseMid = 0; - pGdt[2].HighWord.Bytes.Flags1 = 0x92; - pGdt[2].HighWord.Bytes.Flags2 = 0xCF; - pGdt[2].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x18) - // Flat 2Gb - // - pGdt[3].LimitLow = 0xFFFF; - pGdt[3].BaseLow = 0; - pGdt[3].HighWord.Bytes.BaseMid = 0; - pGdt[3].HighWord.Bytes.Flags1 = 0xFA; - pGdt[3].HighWord.Bytes.Flags2 = 0xCF; - pGdt[3].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x20) - // Flat 2Gb - // - pGdt[4].LimitLow = 0xFFFF; - pGdt[4].BaseLow = 0; - pGdt[4].HighWord.Bytes.BaseMid = 0; - pGdt[4].HighWord.Bytes.Flags1 = 0xF2; - pGdt[4].HighWord.Bytes.Flags2 = 0xCF; - pGdt[4].HighWord.Bytes.BaseHi = 0; - - // - // TSS Selector (0x28) - // - pGdt[5].LimitLow = 0x78-1; //FIXME: Check this - pGdt[5].BaseLow = (USHORT)(Tss & 0xffff); - pGdt[5].HighWord.Bytes.BaseMid = (UCHAR)((Tss >> 16) & 0xff); - pGdt[5].HighWord.Bytes.Flags1 = 0x89; - pGdt[5].HighWord.Bytes.Flags2 = 0x00; - pGdt[5].HighWord.Bytes.BaseHi = (UCHAR)((Tss >> 24) & 0xff); - - // - // PCR Selector (0x30) - // - pGdt[6].LimitLow = 0x01; - pGdt[6].BaseLow = (USHORT)(Pcr & 0xffff); - pGdt[6].HighWord.Bytes.BaseMid = (UCHAR)((Pcr >> 16) & 0xff); - pGdt[6].HighWord.Bytes.Flags1 = 0x92; - pGdt[6].HighWord.Bytes.Flags2 = 0xC0; - pGdt[6].HighWord.Bytes.BaseHi = (UCHAR)((Pcr >> 24) & 0xff); - - // - // Selector (0x38) - // - pGdt[7].LimitLow = 0xFFFF; - pGdt[7].BaseLow = 0; - pGdt[7].HighWord.Bytes.BaseMid = 0; - pGdt[7].HighWord.Bytes.Flags1 = 0xF3; - pGdt[7].HighWord.Bytes.Flags2 = 0x40; - pGdt[7].HighWord.Bytes.BaseHi = 0; - - // - // Some BIOS stuff (0x40) - // - pGdt[8].LimitLow = 0xFFFF; - pGdt[8].BaseLow = 0x400; - pGdt[8].HighWord.Bytes.BaseMid = 0; - pGdt[8].HighWord.Bytes.Flags1 = 0xF2; - pGdt[8].HighWord.Bytes.Flags2 = 0x0; - pGdt[8].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x48) - // - pGdt[9].LimitLow = 0; - pGdt[9].BaseLow = 0; - pGdt[9].HighWord.Bytes.BaseMid = 0; - pGdt[9].HighWord.Bytes.Flags1 = 0; - pGdt[9].HighWord.Bytes.Flags2 = 0; - pGdt[9].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x50) - // - pGdt[10].LimitLow = 0xFFFF; //FIXME: Not correct! - pGdt[10].BaseLow = 0; - pGdt[10].HighWord.Bytes.BaseMid = 0x2; - pGdt[10].HighWord.Bytes.Flags1 = 0x89; - pGdt[10].HighWord.Bytes.Flags2 = 0; - pGdt[10].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x58) - // - pGdt[11].LimitLow = 0xFFFF; - pGdt[11].BaseLow = 0; - pGdt[11].HighWord.Bytes.BaseMid = 0x2; - pGdt[11].HighWord.Bytes.Flags1 = 0x9A; - pGdt[11].HighWord.Bytes.Flags2 = 0; - pGdt[11].HighWord.Bytes.BaseHi = 0; - - // - // Selector (0x60) - // - pGdt[12].LimitLow = 0xFFFF; - pGdt[12].BaseLow = 0; //FIXME: Maybe not correct, but noone cares - pGdt[12].HighWord.Bytes.BaseMid = 0x2; - pGdt[12].HighWord.Bytes.Flags1 = 0x92; - pGdt[12].HighWord.Bytes.Flags2 = 0; - pGdt[12].HighWord.Bytes.BaseHi = 0; - - // - // Video buffer Selector (0x68) - // - pGdt[13].LimitLow = 0x3FFF; - pGdt[13].BaseLow = 0x8000; - pGdt[13].HighWord.Bytes.BaseMid = 0x0B; - pGdt[13].HighWord.Bytes.Flags1 = 0x92; - pGdt[13].HighWord.Bytes.Flags2 = 0; - pGdt[13].HighWord.Bytes.BaseHi = 0; - - // - // Points to GDT (0x70) - // - pGdt[14].LimitLow = NUM_GDT*sizeof(KGDTENTRY) - 1; - pGdt[14].BaseLow = 0x7000; - pGdt[14].HighWord.Bytes.BaseMid = 0xFF; - pGdt[14].HighWord.Bytes.Flags1 = 0x92; - pGdt[14].HighWord.Bytes.Flags2 = 0; - pGdt[14].HighWord.Bytes.BaseHi = 0xFF; - - // - // Some unused descriptors should go here - // - - // Copy the old IDT - RtlCopyMemory(pIdt, (PVOID)OldIdt.Base, OldIdt.Limit); - - // Mask interrupts - //asm("cli\n"); // they are already masked before enabling paged mode - - // Load GDT+IDT - Ke386SetGlobalDescriptorTable(GdtDesc); - Ke386SetInterruptDescriptorTable(IdtDesc); - - // Jump to proper CS and clear prefetch queue - asm("ljmp $0x08, $mb1\n" - "mb1:\n"); - - // Set SS selector - asm(".intel_syntax noprefix\n"); - asm("mov ax, 0x10\n"); // DataSelector=0x10 - asm("mov ss, ax\n"); - asm(".att_syntax\n"); - - // Set DS and ES selectors - Ke386SetDs(0x10); - Ke386SetEs(0x10); // this is vital for rep stosd - - // LDT = not used ever, thus set to 0 - Ke386SetLocalDescriptorTable(Ldt); - - // Load TSR - Ke386SetTr(0x28); - - // Clear GS - asm(".intel_syntax noprefix\n"); - asm("push 0\n"); - asm("pop gs\n"); - asm(".att_syntax\n"); - - // Set FS to PCR - Ke386SetFs(0x30); - - // Real end of the function, just for information - /* do not uncomment! - pop edi; - pop esi; - pop ebx; - mov esp, ebp; - pop ebp; - ret - */ -} +/* + * PROJECT: EFI Windows Loader + * LICENSE: GPL - See COPYING in the top level directory + * FILE: freeldr/winldr/wlmemory.c + * PURPOSE: Memory related routines + * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + */ + +/* INCLUDES ***************************************************************/ + +#include + +#include +#include + +extern ULONG TotalNLSSize; +extern ULONG LoaderPagesSpanned; + +// This is needed because headers define wrong one for ReactOS +#undef KIP0PCRADDRESS +#define KIP0PCRADDRESS 0xffdff000 + +#define HYPER_SPACE_ENTRY 0x300 + +PCHAR MemTypeDesc[] = { + "ExceptionBlock ", // ? + "SystemBlock ", // ? + "Free ", + "Bad ", // used + "LoadedProgram ", // == Free + "FirmwareTemporary ", // == Free + "FirmwarePermanent ", // == Bad + "OsloaderHeap ", // used + "OsloaderStack ", // == Free + "SystemCode ", + "HalCode ", + "BootDriver ", // not used + "ConsoleInDriver ", // ? + "ConsoleOutDriver ", // ? + "StartupDpcStack ", // ? + "StartupKernelStack", // ? + "StartupPanicStack ", // ? + "StartupPcrPage ", // ? + "StartupPdrPage ", // ? + "RegistryData ", // used + "MemoryData ", // not used + "NlsData ", // used + "SpecialMemory ", // == Bad + "BBTMemory " // == Bad + }; + +VOID +WinLdrpDumpMemoryDescriptors(PLOADER_PARAMETER_BLOCK LoaderBlock); + + +VOID +MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + ULONG BasePage, + ULONG PageCount, + ULONG Type); +VOID +WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor); + +VOID +WinLdrRemoveDescriptor(IN PMEMORY_ALLOCATION_DESCRIPTOR Descriptor); + +VOID +WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss); + +// This is needed only for SetProcessorContext routine +#pragma pack(2) + typedef struct + { + USHORT Limit; + ULONG Base; + } GDTIDT; +#pragma pack(4) + +// this is needed for new IDT filling +#if 0 +extern ULONG_PTR i386DivideByZero; +extern ULONG_PTR i386DebugException; +extern ULONG_PTR i386NMIException; +extern ULONG_PTR i386Breakpoint; +extern ULONG_PTR i386Overflow; +extern ULONG_PTR i386BoundException; +extern ULONG_PTR i386InvalidOpcode; +extern ULONG_PTR i386FPUNotAvailable; +extern ULONG_PTR i386DoubleFault; +extern ULONG_PTR i386CoprocessorSegment; +extern ULONG_PTR i386InvalidTSS; +extern ULONG_PTR i386SegmentNotPresent; +extern ULONG_PTR i386StackException; +extern ULONG_PTR i386GeneralProtectionFault; +extern ULONG_PTR i386PageFault; // exc 14 +extern ULONG_PTR i386CoprocessorError; // exc 16 +extern ULONG_PTR i386AlignmentCheck; // exc 17 +#endif + +/* GLOBALS ***************************************************************/ + +PHARDWARE_PTE PDE; +PHARDWARE_PTE HalPageTable; + +PUCHAR PhysicalPageTablesBuffer; +PUCHAR KernelPageTablesBuffer; +ULONG PhysicalPageTables; +ULONG KernelPageTables; + +MEMORY_ALLOCATION_DESCRIPTOR *Mad; +ULONG MadCount = 0; + + +/* FUNCTIONS **************************************************************/ + +BOOLEAN +MempAllocatePageTables() +{ + ULONG NumPageTables, TotalSize; + PUCHAR Buffer; + // It's better to allocate PDE + PTEs contigiuos + + // Max number of entries = MaxPageNum >> 10 + // FIXME: This is a number to describe ALL physical memory + // and windows doesn't expect ALL memory mapped... + NumPageTables = (GetSystemMemorySize() >> MM_PAGE_SHIFT) >> 10; + + DbgPrint((DPRINT_WINDOWS, "NumPageTables = %d\n", NumPageTables)); + + // Allocate memory block for all these things: + // PDE, HAL mapping page table, physical mapping, kernel mapping + TotalSize = (1+1+NumPageTables*2)*MM_PAGE_SIZE; + + // PDE+HAL+KernelPTEs == MemoryData + Buffer = MmAllocateMemoryWithType( + TotalSize - NumPageTables*MM_PAGE_SIZE, LoaderMemoryData); + + // Physical PTEs = FirmwareTemporary + PhysicalPageTablesBuffer = MmAllocateMemoryWithType( + NumPageTables*MM_PAGE_SIZE, LoaderFirmwareTemporary); + + if (Buffer + (TotalSize - NumPageTables*MM_PAGE_SIZE) != + PhysicalPageTablesBuffer) + { + DbgPrint((DPRINT_WINDOWS, "There was a problem allocating two adjacent blocks of memory!")); + } + + if (Buffer == NULL || PhysicalPageTablesBuffer == NULL) + { + UiMessageBox("Impossible to allocate memory block for page tables!"); + return FALSE; + } + + // Zero all this memory block + RtlZeroMemory(Buffer, TotalSize); + + // Set up pointers correctly now + PDE = (PHARDWARE_PTE)Buffer; + + // Map the page directory at 0xC0000000 (maps itself) + PDE[HYPER_SPACE_ENTRY].PageFrameNumber = (ULONG)PDE >> MM_PAGE_SHIFT; + PDE[HYPER_SPACE_ENTRY].Valid = 1; + PDE[HYPER_SPACE_ENTRY].Write = 1; + + // The last PDE slot is allocated for HAL's memory mapping (Virtual Addresses 0xFFC00000 - 0xFFFFFFFF) + HalPageTable = (PHARDWARE_PTE)&Buffer[MM_PAGE_SIZE*1]; + + // Map it + PDE[1023].PageFrameNumber = (ULONG)HalPageTable >> MM_PAGE_SHIFT; + PDE[1023].Valid = 1; + PDE[1023].Write = 1; + + // Store pointer to the table for easier access + KernelPageTablesBuffer = &Buffer[MM_PAGE_SIZE*2]; + + // Zero counters of page tables used + PhysicalPageTables = 0; + KernelPageTables = 0; + + return TRUE; +} + +VOID +MempAllocatePTE(ULONG Entry, PHARDWARE_PTE *PhysicalPT, PHARDWARE_PTE *KernelPT) +{ + //Print(L"Creating PDE Entry %X\n", Entry); + + // Identity mapping + *PhysicalPT = (PHARDWARE_PTE)&PhysicalPageTablesBuffer[PhysicalPageTables*MM_PAGE_SIZE]; + PhysicalPageTables++; + + PDE[Entry].PageFrameNumber = (ULONG)*PhysicalPT >> MM_PAGE_SHIFT; + PDE[Entry].Valid = 1; + PDE[Entry].Write = 1; + + if (Entry+(KSEG0_BASE >> 22) > 1023) + { + DbgPrint((DPRINT_WINDOWS, "WARNING! Entry: %X > 1023\n", Entry+(KSEG0_BASE >> 22))); + } + + // Kernel-mode mapping + *KernelPT = (PHARDWARE_PTE)&KernelPageTablesBuffer[KernelPageTables*MM_PAGE_SIZE]; + KernelPageTables++; + + PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber = ((ULONG)*KernelPT >> MM_PAGE_SHIFT); + PDE[Entry+(KSEG0_BASE >> 22)].Valid = 1; + PDE[Entry+(KSEG0_BASE >> 22)].Write = 1; +} + +BOOLEAN +MempSetupPaging(IN ULONG StartPage, + IN ULONG NumberOfPages) +{ + PHARDWARE_PTE PhysicalPT; + PHARDWARE_PTE KernelPT; + ULONG Entry, Page; + + //Print(L"MempSetupPaging: SP 0x%X, Number: 0x%X\n", StartPage, NumberOfPages); + + // HACK + if (StartPage+NumberOfPages >= 0x80000) + { + // + // We can't map this as it requires more than 1 PDE + // and in fact it's not possible at all ;) + // + //Print(L"skipping...\n"); + return TRUE; + } + + // + // Now actually set up the page tables for identity mapping + // + for (Page=StartPage; Page < StartPage+NumberOfPages; Page++) + { + Entry = Page >> 10; + + if (((PULONG)PDE)[Entry] == 0) + { + MempAllocatePTE(Entry, &PhysicalPT, &KernelPT); + } + else + { + PhysicalPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); + KernelPT = (PHARDWARE_PTE)(PDE[Entry+(KSEG0_BASE >> 22)].PageFrameNumber << MM_PAGE_SHIFT); + } + + if (Page == 0) + { + PhysicalPT[Page & 0x3ff].PageFrameNumber = Page; + PhysicalPT[Page & 0x3ff].Valid = 0; + PhysicalPT[Page & 0x3ff].Write = 0; + + KernelPT[Page & 0x3ff].PageFrameNumber = Page; + KernelPT[Page & 0x3ff].Valid = 0; + KernelPT[Page & 0x3ff].Write = 0; + } + else + { + PhysicalPT[Page & 0x3ff].PageFrameNumber = Page; + PhysicalPT[Page & 0x3ff].Valid = 1; + PhysicalPT[Page & 0x3ff].Write = 1; + + KernelPT[Page & 0x3ff].PageFrameNumber = Page; + KernelPT[Page & 0x3ff].Valid = 1; + KernelPT[Page & 0x3ff].Write = 1; + } + } + + return TRUE; +} + +VOID +MempDisablePages() +{ + int i; + + // + // We need to delete kernel mapping from memory areas which are + // marked as Special or Permanent memory (thus non-accessible) + // + + for (i=0; i LoaderPagesSpanned) + EndPage = LoaderPagesSpanned; + } + + for (Page = StartPage; Page < EndPage; Page++) + { + PHARDWARE_PTE KernelPT; + ULONG Entry = (Page >> 10) + (KSEG0_BASE >> 22); + + if (PDE[Entry].Valid) + { + KernelPT = (PHARDWARE_PTE)(PDE[Entry].PageFrameNumber << MM_PAGE_SHIFT); + + if (KernelPT) + { + KernelPT[Page & 0x3ff].PageFrameNumber = 0; + KernelPT[Page & 0x3ff].Valid = 0; + KernelPT[Page & 0x3ff].Write = 0; + } + } + } + } + } +} + +VOID +MempAddMemoryBlock(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + ULONG BasePage, + ULONG PageCount, + ULONG Type) +{ + BOOLEAN Status; + + // + // Check for some weird stuff at the top + // + if (BasePage + PageCount > 0xF0000) + { + // + // Just skip this, without even adding to MAD list + // + return; + } + + // + // Set Base page, page count and type + // + Mad[MadCount].BasePage = BasePage; + Mad[MadCount].PageCount = PageCount; + Mad[MadCount].MemoryType = Type; + + // + // Check if it's more than the allowed for OS loader + // if yes - don't map the pages, just add as FirmwareTemporary + // + if (BasePage + PageCount > LoaderPagesSpanned) + { + if (Mad[MadCount].MemoryType != LoaderSpecialMemory && + Mad[MadCount].MemoryType != LoaderFirmwarePermanent && + Mad[MadCount].MemoryType != LoaderFree) + { + DbgPrint((DPRINT_WINDOWS, "Setting page %x %x to Temporary from %d\n", + BasePage, PageCount, Mad[MadCount].MemoryType)); + Mad[MadCount].MemoryType = LoaderFirmwareTemporary; + } + + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + + return; + } + + // + // Add descriptor + // + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + + // + // Map it (don't map low 1Mb because it was already contigiously + // mapped in WinLdrTurnOnPaging) + // + if (BasePage >= 0x100) + { + Status = MempSetupPaging(BasePage, PageCount); + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "Error during MempSetupPaging\n")); + return; + } + } +} + +#ifdef _M_IX86 + +BOOLEAN LocalAPIC = FALSE; +ULONG_PTR APICAddress = 0; + +VOID +WinLdrpMapApic() +{ + /* Check if we have a local APIC */ + asm(".intel_syntax noprefix\n"); + asm("mov eax, 1\n"); + asm("cpuid\n"); + asm("shr edx, 9\n"); + asm("and edx, 0x1\n"); + asm("mov _LocalAPIC, edx\n"); + asm(".att_syntax\n"); + + /* If there is no APIC, just return */ + if (!LocalAPIC) + return; + + asm(".intel_syntax noprefix\n"); + asm("mov ecx, 0x1B\n"); + asm("rdmsr\n"); + asm("mov edx, eax\n"); + asm("and edx, 0xFFFFF000\n"); + asm("mov _APICAddress, edx"); + asm(".att_syntax\n"); + + DbgPrint((DPRINT_WINDOWS, "Local APIC detected at address 0x%x\n", + APICAddress)); + + /* Map it */ + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber + = APICAddress >> MM_PAGE_SHIFT; + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].WriteThrough = 1; + HalPageTable[(APIC_BASE - 0xFFC00000) >> MM_PAGE_SHIFT].CacheDisable = 1; +} +#else +VOID +WinLdrpMapApic() +{ + /* Implement it for another arch */ +} +#endif + +BOOLEAN +WinLdrTurnOnPaging(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + ULONG PcrBasePage, + ULONG TssBasePage, + PVOID GdtIdt) +{ + ULONG i, PagesCount, MemoryMapSizeInPages; + ULONG LastPageIndex, LastPageType, MemoryMapStartPage; + PPAGE_LOOKUP_TABLE_ITEM MemoryMap; + ULONG NoEntries; + PKTSS Tss; + BOOLEAN Status; + + // + // Creating a suitable memory map for the Windows can be tricky, so let's + // give a few advices: + // 1) One must not map the whole available memory pages to PDE! + // Map only what's needed - 16Mb, 24Mb, 32Mb max I think, + // thus occupying 4, 6 or 8 PDE entries for identical mapping, + // the same quantity for KSEG0_BASE mapping, one more entry for + // hyperspace and one more entry for HAL physical pages mapping. + // 2) Memory descriptors must map *the whole* physical memory + // showing any memory above 16/24/32 as FirmwareTemporary + // + // 3) Overall memory blocks count must not exceed 30 (?? why?) + // + + // + // During MmInitMachineDependent, the kernel zeroes PDE at the following address + // 0xC0300000 - 0xC03007FC + // + // Then it finds the best place for non-paged pool: + // StartPde C0300F70, EndPde C0300FF8, NumberOfPages C13, NextPhysPage 3AD + // + + // Before we start mapping pages, create a block of memory, which will contain + // PDE and PTEs + if (MempAllocatePageTables() == FALSE) + return FALSE; + + // Allocate memory for memory allocation descriptors + Mad = MmHeapAlloc(sizeof(MEMORY_ALLOCATION_DESCRIPTOR) * 1024); + + // Setup an entry for each descriptor + MemoryMap = MmGetMemoryMap(&NoEntries); + if (MemoryMap == NULL) + { + UiMessageBox("Can not retrieve the current memory map"); + return FALSE; + } + + // Calculate parameters of the memory map + MemoryMapStartPage = (ULONG_PTR)MemoryMap >> MM_PAGE_SHIFT; + MemoryMapSizeInPages = NoEntries * sizeof(PAGE_LOOKUP_TABLE_ITEM); + + DbgPrint((DPRINT_WINDOWS, "Got memory map with %d entries\n", NoEntries)); + + // Always contigiously map low 1Mb of memory + Status = MempSetupPaging(0, 0x100); + if (!Status) + { + DbgPrint((DPRINT_WINDOWS, "Error during MempSetupPaging of low 1Mb\n")); + return FALSE; + } + + // Construct a good memory map from what we've got, + // but mark entries which the memory allocation bitmap takes + // as free entries (this is done in order to have the ability + // to place mem alloc bitmap outside lower 16Mb zone) + PagesCount = 1; + LastPageIndex = 0; + LastPageType = MemoryMap[0].PageAllocated; + for(i=1;i= MemoryMapStartPage && + i < (MemoryMapStartPage+MemoryMapSizeInPages)) + { + // Exclude it if current page belongs to the memory map + MemoryMap[i].PageAllocated = LoaderFree; + } + + // Process entry + if (MemoryMap[i].PageAllocated == LastPageType && + (i != NoEntries-1) ) + { + PagesCount++; + } + else + { + // Add the resulting region + MempAddMemoryBlock(LoaderBlock, LastPageIndex, PagesCount, LastPageType); + + // Reset our counter vars + LastPageIndex = i; + LastPageType = MemoryMap[i].PageAllocated; + PagesCount = 1; + } + } + + // TEMP, DEBUG! + // adding special reserved memory zones for vmware workstation +#if 0 + { + Mad[MadCount].BasePage = 0xfec00; + Mad[MadCount].PageCount = 0x10; + Mad[MadCount].MemoryType = LoaderSpecialMemory; + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + + Mad[MadCount].BasePage = 0xfee00; + Mad[MadCount].PageCount = 0x1; + Mad[MadCount].MemoryType = LoaderSpecialMemory; + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + + Mad[MadCount].BasePage = 0xfffe0; + Mad[MadCount].PageCount = 0x20; + Mad[MadCount].MemoryType = LoaderSpecialMemory; + WinLdrInsertDescriptor(LoaderBlock, &Mad[MadCount]); + MadCount++; + } +#endif + + DbgPrint((DPRINT_WINDOWS, "MadCount: %d\n", MadCount)); + + WinLdrpDumpMemoryDescriptors(LoaderBlock); //FIXME: Delete! + + // Map our loader image, so we can continue running + /*Status = MempSetupPaging(OsLoaderBase >> MM_PAGE_SHIFT, OsLoaderSize >> MM_PAGE_SHIFT); + if (!Status) + { + UiMessageBox("Error during MempSetupPaging"); + return; + }*/ + + //VideoDisplayString(L"Hello from VGA, going into the kernel\n"); + DbgPrint((DPRINT_WINDOWS, "HalPageTable: 0x%X\n", HalPageTable)); + + // Page Tables have been setup, make special handling for PCR and TSS + // (which is done in BlSetupFotNt in usual ntldr) + HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber = PcrBasePage+1; + HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; + HalPageTable[(KI_USER_SHARED_DATA - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; + + HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].PageFrameNumber = PcrBasePage; + HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].Valid = 1; + HalPageTable[(KIP0PCRADDRESS - 0xFFC00000) >> MM_PAGE_SHIFT].Write = 1; + + // Map APIC + WinLdrpMapApic(); + + // Map VGA memory + //VideoMemoryBase = MmMapIoSpace(0xb8000, 4000, MmNonCached); + //DbgPrint((DPRINT_WINDOWS, "VideoMemoryBase: 0x%X\n", VideoMemoryBase)); + + Tss = (PKTSS)(KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT)); + + // Unmap what is not needed from kernel page table + MempDisablePages(); + + // Fill the memory descriptor list and + //PrepareMemoryDescriptorList(); + DbgPrint((DPRINT_WINDOWS, "Memory Descriptor List prepared, printing PDE\n")); + List_PaToVa(&LoaderBlock->MemoryDescriptorListHead); + +#ifdef DBG + { + ULONG *PDE_Addr=(ULONG *)PDE;//0xC0300000; + int j; + + DbgPrint((DPRINT_WINDOWS, "\nPDE\n")); + + for (i=0; i<128; i++) + { + DbgPrint((DPRINT_WINDOWS, "0x%04X | ", i*8)); + + for (j=0; j<8; j++) + { + DbgPrint((DPRINT_WINDOWS, "0x%08X ", PDE_Addr[i*8+j])); + } + + DbgPrint((DPRINT_WINDOWS, "\n")); + } + } +#endif + + + // Enable paging + //BS->ExitBootServices(ImageHandle,MapKey); + + // Disable Interrupts + _disable(); + + // Re-initalize EFLAGS + Ke386EraseFlags(); + + // Set the PDBR + __writecr3((ULONG_PTR)PDE); + + // Enable paging by modifying CR0 + __writecr0(__readcr0() | CR0_PG); + + // Set processor context + WinLdrSetProcessorContext(GdtIdt, KIP0PCRADDRESS, KSEG0_BASE | (TssBasePage << MM_PAGE_SHIFT)); + + // Zero KI_USER_SHARED_DATA page + memset((PVOID)KI_USER_SHARED_DATA, 0, MM_PAGE_SIZE); + + return TRUE; +} + +// Two special things this func does: it sorts descriptors, +// and it merges free ones +VOID +WinLdrInsertDescriptor(IN OUT PLOADER_PARAMETER_BLOCK LoaderBlock, + IN PMEMORY_ALLOCATION_DESCRIPTOR NewDescriptor) +{ + PLIST_ENTRY ListHead = &LoaderBlock->MemoryDescriptorListHead; + PLIST_ENTRY PreviousEntry, NextEntry; + PMEMORY_ALLOCATION_DESCRIPTOR PreviousDescriptor = NULL, NextDescriptor = NULL; + + DbgPrint((DPRINT_WINDOWS, "BP=0x%X PC=0x%X %s\n", NewDescriptor->BasePage, + NewDescriptor->PageCount, MemTypeDesc[NewDescriptor->MemoryType])); + + /* Find a place where to insert the new descriptor to */ + PreviousEntry = ListHead; + NextEntry = ListHead->Flink; + while (NextEntry != ListHead) + { + NextDescriptor = CONTAINING_RECORD(NextEntry, + MEMORY_ALLOCATION_DESCRIPTOR, + ListEntry); + if (NewDescriptor->BasePage < NextDescriptor->BasePage) + break; + + PreviousEntry = NextEntry; + PreviousDescriptor = NextDescriptor; + NextEntry = NextEntry->Flink; + } + + /* Don't forget about merging free areas */ + if (NewDescriptor->MemoryType != LoaderFree) + { + /* Just insert, nothing to merge */ + InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry); + } + else + { + /* Previous block also free? */ + if ((PreviousEntry != ListHead) && (PreviousDescriptor->MemoryType == LoaderFree) && + ((PreviousDescriptor->BasePage + PreviousDescriptor->PageCount) == + NewDescriptor->BasePage)) + { + /* Just enlarge previous descriptor's PageCount */ + PreviousDescriptor->PageCount += NewDescriptor->PageCount; + NewDescriptor = PreviousDescriptor; + } + else + { + /* Nope, just insert */ + InsertHeadList(PreviousEntry, &NewDescriptor->ListEntry); + } + + /* Next block is free ?*/ + if ((NextEntry != ListHead) && + (NextDescriptor->MemoryType == LoaderFree) && + ((NewDescriptor->BasePage + NewDescriptor->PageCount) == NextDescriptor->BasePage)) + { + /* Enlarge next descriptor's PageCount */ + NewDescriptor->PageCount += NextDescriptor->PageCount; + RemoveEntryList(&NextDescriptor->ListEntry); + } + } + + return; +} + +VOID +WinLdrSetProcessorContext(PVOID GdtIdt, IN ULONG Pcr, IN ULONG Tss) +{ + GDTIDT GdtDesc, IdtDesc, OldIdt; + PKGDTENTRY pGdt; + PKIDTENTRY pIdt; + ULONG Ldt = 0; + //ULONG i; + + DbgPrint((DPRINT_WINDOWS, "GDtIdt %p, Pcr %p, Tss 0x%08X\n", + GdtIdt, Pcr, Tss)); + + // Kernel expects the PCR to be zero-filled on startup + // FIXME: Why zero it here when we can zero it right after allocation? + RtlZeroMemory((PVOID)Pcr, MM_PAGE_SIZE); //FIXME: Why zero only 1 page when we allocate 2? + + // Get old values of GDT and IDT + Ke386GetGlobalDescriptorTable(GdtDesc); + Ke386GetInterruptDescriptorTable(IdtDesc); + + // Save old IDT + OldIdt.Base = IdtDesc.Base; + OldIdt.Limit = IdtDesc.Limit; + + // Prepare new IDT+GDT + GdtDesc.Base = KSEG0_BASE | (ULONG_PTR)GdtIdt; + GdtDesc.Limit = NUM_GDT * sizeof(KGDTENTRY) - 1; + IdtDesc.Base = (ULONG)((PUCHAR)GdtDesc.Base + GdtDesc.Limit + 1); + IdtDesc.Limit = NUM_IDT * sizeof(KIDTENTRY) - 1; + + // ======================== + // Fill all descriptors now + // ======================== + + pGdt = (PKGDTENTRY)GdtDesc.Base; + pIdt = (PKIDTENTRY)IdtDesc.Base; + + // + // Code selector (0x8) + // Flat 4Gb + // + pGdt[1].LimitLow = 0xFFFF; + pGdt[1].BaseLow = 0; + pGdt[1].HighWord.Bytes.BaseMid = 0; + pGdt[1].HighWord.Bytes.Flags1 = 0x9A; + pGdt[1].HighWord.Bytes.Flags2 = 0xCF; + pGdt[1].HighWord.Bytes.BaseHi = 0; + + // + // Data selector (0x10) + // Flat 4Gb + // + pGdt[2].LimitLow = 0xFFFF; + pGdt[2].BaseLow = 0; + pGdt[2].HighWord.Bytes.BaseMid = 0; + pGdt[2].HighWord.Bytes.Flags1 = 0x92; + pGdt[2].HighWord.Bytes.Flags2 = 0xCF; + pGdt[2].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x18) + // Flat 2Gb + // + pGdt[3].LimitLow = 0xFFFF; + pGdt[3].BaseLow = 0; + pGdt[3].HighWord.Bytes.BaseMid = 0; + pGdt[3].HighWord.Bytes.Flags1 = 0xFA; + pGdt[3].HighWord.Bytes.Flags2 = 0xCF; + pGdt[3].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x20) + // Flat 2Gb + // + pGdt[4].LimitLow = 0xFFFF; + pGdt[4].BaseLow = 0; + pGdt[4].HighWord.Bytes.BaseMid = 0; + pGdt[4].HighWord.Bytes.Flags1 = 0xF2; + pGdt[4].HighWord.Bytes.Flags2 = 0xCF; + pGdt[4].HighWord.Bytes.BaseHi = 0; + + // + // TSS Selector (0x28) + // + pGdt[5].LimitLow = 0x78-1; //FIXME: Check this + pGdt[5].BaseLow = (USHORT)(Tss & 0xffff); + pGdt[5].HighWord.Bytes.BaseMid = (UCHAR)((Tss >> 16) & 0xff); + pGdt[5].HighWord.Bytes.Flags1 = 0x89; + pGdt[5].HighWord.Bytes.Flags2 = 0x00; + pGdt[5].HighWord.Bytes.BaseHi = (UCHAR)((Tss >> 24) & 0xff); + + // + // PCR Selector (0x30) + // + pGdt[6].LimitLow = 0x01; + pGdt[6].BaseLow = (USHORT)(Pcr & 0xffff); + pGdt[6].HighWord.Bytes.BaseMid = (UCHAR)((Pcr >> 16) & 0xff); + pGdt[6].HighWord.Bytes.Flags1 = 0x92; + pGdt[6].HighWord.Bytes.Flags2 = 0xC0; + pGdt[6].HighWord.Bytes.BaseHi = (UCHAR)((Pcr >> 24) & 0xff); + + // + // Selector (0x38) + // + pGdt[7].LimitLow = 0xFFFF; + pGdt[7].BaseLow = 0; + pGdt[7].HighWord.Bytes.BaseMid = 0; + pGdt[7].HighWord.Bytes.Flags1 = 0xF3; + pGdt[7].HighWord.Bytes.Flags2 = 0x40; + pGdt[7].HighWord.Bytes.BaseHi = 0; + + // + // Some BIOS stuff (0x40) + // + pGdt[8].LimitLow = 0xFFFF; + pGdt[8].BaseLow = 0x400; + pGdt[8].HighWord.Bytes.BaseMid = 0; + pGdt[8].HighWord.Bytes.Flags1 = 0xF2; + pGdt[8].HighWord.Bytes.Flags2 = 0x0; + pGdt[8].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x48) + // + pGdt[9].LimitLow = 0; + pGdt[9].BaseLow = 0; + pGdt[9].HighWord.Bytes.BaseMid = 0; + pGdt[9].HighWord.Bytes.Flags1 = 0; + pGdt[9].HighWord.Bytes.Flags2 = 0; + pGdt[9].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x50) + // + pGdt[10].LimitLow = 0xFFFF; //FIXME: Not correct! + pGdt[10].BaseLow = 0; + pGdt[10].HighWord.Bytes.BaseMid = 0x2; + pGdt[10].HighWord.Bytes.Flags1 = 0x89; + pGdt[10].HighWord.Bytes.Flags2 = 0; + pGdt[10].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x58) + // + pGdt[11].LimitLow = 0xFFFF; + pGdt[11].BaseLow = 0; + pGdt[11].HighWord.Bytes.BaseMid = 0x2; + pGdt[11].HighWord.Bytes.Flags1 = 0x9A; + pGdt[11].HighWord.Bytes.Flags2 = 0; + pGdt[11].HighWord.Bytes.BaseHi = 0; + + // + // Selector (0x60) + // + pGdt[12].LimitLow = 0xFFFF; + pGdt[12].BaseLow = 0; //FIXME: Maybe not correct, but noone cares + pGdt[12].HighWord.Bytes.BaseMid = 0x2; + pGdt[12].HighWord.Bytes.Flags1 = 0x92; + pGdt[12].HighWord.Bytes.Flags2 = 0; + pGdt[12].HighWord.Bytes.BaseHi = 0; + + // + // Video buffer Selector (0x68) + // + pGdt[13].LimitLow = 0x3FFF; + pGdt[13].BaseLow = 0x8000; + pGdt[13].HighWord.Bytes.BaseMid = 0x0B; + pGdt[13].HighWord.Bytes.Flags1 = 0x92; + pGdt[13].HighWord.Bytes.Flags2 = 0; + pGdt[13].HighWord.Bytes.BaseHi = 0; + + // + // Points to GDT (0x70) + // + pGdt[14].LimitLow = NUM_GDT*sizeof(KGDTENTRY) - 1; + pGdt[14].BaseLow = 0x7000; + pGdt[14].HighWord.Bytes.BaseMid = 0xFF; + pGdt[14].HighWord.Bytes.Flags1 = 0x92; + pGdt[14].HighWord.Bytes.Flags2 = 0; + pGdt[14].HighWord.Bytes.BaseHi = 0xFF; + + // + // Some unused descriptors should go here + // + + // Copy the old IDT + RtlCopyMemory(pIdt, (PVOID)OldIdt.Base, OldIdt.Limit); + + // Mask interrupts + //asm("cli\n"); // they are already masked before enabling paged mode + + // Load GDT+IDT + Ke386SetGlobalDescriptorTable(GdtDesc); + Ke386SetInterruptDescriptorTable(IdtDesc); + + // Jump to proper CS and clear prefetch queue + asm("ljmp $0x08, $mb1\n" + "mb1:\n"); + + // Set SS selector + asm(".intel_syntax noprefix\n"); + asm("mov ax, 0x10\n"); // DataSelector=0x10 + asm("mov ss, ax\n"); + asm(".att_syntax\n"); + + // Set DS and ES selectors + Ke386SetDs(0x10); + Ke386SetEs(0x10); // this is vital for rep stosd + + // LDT = not used ever, thus set to 0 + Ke386SetLocalDescriptorTable(Ldt); + + // Load TSR + Ke386SetTr(0x28); + + // Clear GS + asm(".intel_syntax noprefix\n"); + asm("push 0\n"); + asm("pop gs\n"); + asm(".att_syntax\n"); + + // Set FS to PCR + Ke386SetFs(0x30); + + // Real end of the function, just for information + /* do not uncomment! + pop edi; + pop esi; + pop ebx; + mov esp, ebp; + pop ebp; + ret + */ +} From 6e77c40907e99685b4e8c82b0ff73ce34bde5d56 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Wed, 30 Jul 2008 12:34:00 +0000 Subject: [PATCH 033/304] - fix wrong "ss" in German (Germany) ressource - Swiss German version need own ressource file svn path=/trunk/; revision=34956 --- reactos/dll/win32/user32/lang/de-DE.rc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/user32/lang/de-DE.rc b/reactos/dll/win32/user32/lang/de-DE.rc index cfc5ee6db2f..9df5f13e9dc 100644 --- a/reactos/dll/win32/user32/lang/de-DE.rc +++ b/reactos/dll/win32/user32/lang/de-DE.rc @@ -43,11 +43,11 @@ SYSMENU MENU LOADONCALL MOVEABLE DISCARDABLE BEGIN MENUITEM "&Wiederherstellen", 61728 MENUITEM "&Verschieben", 61456 - MENUITEM "&Grsse", 61440 + MENUITEM "&Gre", 61440 MENUITEM "Mi&nimieren", 61472 MENUITEM "Ma&ximieren", 61488 MENUITEM SEPARATOR - MENUITEM "S&chliessen\tAlt-F4", 61536 + MENUITEM "S&chlieen\tAlt-F4", 61536 END ///////////////////////////////////////////////////////////////////////////// From b3ca3dbbd008c8790847628a66f4318308b66851 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 30 Jul 2008 13:09:49 +0000 Subject: [PATCH 034/304] - fix a bug which made the label display 2x times the drive letter svn path=/trunk/; revision=34957 --- reactos/dll/win32/shell32/shfldr_mycomp.c | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/reactos/dll/win32/shell32/shfldr_mycomp.c b/reactos/dll/win32/shell32/shfldr_mycomp.c index 9acab06fc31..b54e7d2e9ee 100644 --- a/reactos/dll/win32/shell32/shfldr_mycomp.c +++ b/reactos/dll/win32/shell32/shfldr_mycomp.c @@ -695,6 +695,7 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, static const WCHAR wszCloseBracket[] = {')',0}; lstrcpynW(wszDrive, pszPath, 4); + pszPath[0] = L'\0'; GetVolumeInformationW (wszDrive, pszPath, MAX_PATH - 7, &dwVolumeSerialNumber, @@ -723,12 +724,6 @@ static HRESULT WINAPI ISF_MyComputer_fnGetDisplayNameOf (IShellFolder2 *iface, dwFileSystemFlags = LoadStringW(shell32_hInstance, ResourceId, pszPath, MAX_PATH); if (dwFileSystemFlags > MAX_PATH - 7) pszPath[MAX_PATH-7] = L'\0'; - else if (dwFileSystemFlags == 0) - pszPath[0] = L'\0'; - } - else - { - pszPath[0] = L'\0'; } } strcatW (pszPath, wszOpenBracket); From e0acf025bcf2bf998ea891359e40ed493c0d5903 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 30 Jul 2008 13:13:52 +0000 Subject: [PATCH 035/304] - dont double free an irp - patch by bugboy - bug 3530 svn path=/trunk/; revision=34958 --- reactos/ntoskrnl/io/iomgr/iofunc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/io/iomgr/iofunc.c b/reactos/ntoskrnl/io/iomgr/iofunc.c index cc81b783068..e210a183fb5 100644 --- a/reactos/ntoskrnl/io/iomgr/iofunc.c +++ b/reactos/ntoskrnl/io/iomgr/iofunc.c @@ -3355,7 +3355,7 @@ NtSetVolumeInformationFile(IN HANDLE FileHandle, Status = IopPerformSynchronousRequest(DeviceObject, Irp, FileObject, - TRUE, + FALSE, PreviousMode, !LocalEvent, IopOtherTransfer); From 8db0ed21814bba3d2eb8c631404316db69ad5490 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 30 Jul 2008 13:24:05 +0000 Subject: [PATCH 036/304] - Fix Irp flags assignment in case of an IoAllocateIrp call with ChargeQuota set to TRUE. Reduces number of kmtest failures by 1. svn path=/trunk/; revision=34959 --- reactos/ntoskrnl/io/iomgr/irp.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/reactos/ntoskrnl/io/iomgr/irp.c index 76914551205..b204045d015 100644 --- a/reactos/ntoskrnl/io/iomgr/irp.c +++ b/reactos/ntoskrnl/io/iomgr/irp.c @@ -525,6 +525,9 @@ IoAllocateIrp(IN CCHAR StackSize, PNPAGED_LOOKASIDE_LIST List = NULL; PP_NPAGED_LOOKASIDE_NUMBER ListType = LookasideSmallIrpList; + /* Set Charge Quota Flag */ + if (ChargeQuota) Flags |= IRP_QUOTA_CHARGED; + /* Figure out which Lookaside List to use */ if ((StackSize <= 8) && (ChargeQuota == FALSE)) { @@ -586,11 +589,11 @@ IoAllocateIrp(IN CCHAR StackSize, else { /* We have an IRP from Lookaside */ - Flags |= IRP_LOOKASIDE_ALLOCATION; - } + if (ChargeQuota) Flags |= IRP_LOOKASIDE_ALLOCATION; - /* Set Flag */ - if (ChargeQuota) Flags |= IRP_QUOTA_CHARGED; + /* In this case there is no charge quota */ + Flags &= ~IRP_QUOTA_CHARGED; + } /* Now Initialize it */ IoInitializeIrp(Irp, Size, StackSize); From 8c33c799516470c0ea1d726b290c6bcd771bbb7d Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Wed, 30 Jul 2008 14:15:41 +0000 Subject: [PATCH 037/304] Remove all translations for the "Paged Memory", "Nonpaged Memory" and "Free Memory" progress bars. This is debug stuff, which should have never been translated. As the translated strings are also sometimes longer than the english ones, they led to unnecessary problems like text overlapping. svn path=/trunk/; revision=34960 --- reactos/base/setup/usetup/interface/usetup.c | 7 ++++--- reactos/base/setup/usetup/lang/bg-BG.h | 6 ------ reactos/base/setup/usetup/lang/cs-CZ.h | 6 ------ reactos/base/setup/usetup/lang/de-DE.h | 6 ------ reactos/base/setup/usetup/lang/el-GR.h | 6 ------ reactos/base/setup/usetup/lang/en-US.h | 6 ------ reactos/base/setup/usetup/lang/es-ES.h | 6 ------ reactos/base/setup/usetup/lang/fr-FR.h | 6 ------ reactos/base/setup/usetup/lang/it-IT.h | 6 ------ reactos/base/setup/usetup/lang/lt-LT.h | 6 ------ reactos/base/setup/usetup/lang/pl-PL.h | 6 ------ reactos/base/setup/usetup/lang/ru-RU.h | 6 ------ reactos/base/setup/usetup/lang/sk-SK.h | 6 ------ reactos/base/setup/usetup/lang/sv-SE.h | 6 ------ reactos/base/setup/usetup/lang/uk-UA.h | 6 ------ reactos/base/setup/usetup/mui.h | 3 --- 16 files changed, 4 insertions(+), 90 deletions(-) diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c index 0b984ffe282..b0fd1caa334 100644 --- a/reactos/base/setup/usetup/interface/usetup.c +++ b/reactos/base/setup/usetup/interface/usetup.c @@ -3081,6 +3081,7 @@ FileCopyPage(PINPUT_RECORD Ir) TRUE, MUIGetString(STRING_SETUPCOPYINGFILES)); + /* ATTENTION: The following progress bars are debug stuff, which should not be translated!! */ /* Create the paged pool progress bar */ CopyContext.MemoryBars[0] = CreateProgressBar(13, 40, @@ -3089,7 +3090,7 @@ FileCopyPage(PINPUT_RECORD Ir) 10, 44, FALSE, - MUIGetString(STRING_PAGEDMEM)); + "Paged Memory"); /* Create the non paged pool progress bar */ CopyContext.MemoryBars[1] = CreateProgressBar(28, @@ -3099,7 +3100,7 @@ FileCopyPage(PINPUT_RECORD Ir) 24, 44, FALSE, - MUIGetString(STRING_NONPAGEDMEM)); + "Nonpaged Memory"); /* Create the global memory progress bar */ CopyContext.MemoryBars[2] = CreateProgressBar(43, @@ -3109,7 +3110,7 @@ FileCopyPage(PINPUT_RECORD Ir) 40, 44, FALSE, - MUIGetString(STRING_FREEMEM)); + "Free Memory"); /* Do the file copying */ SetupCommitFileQueueW(NULL, diff --git a/reactos/base/setup/usetup/lang/bg-BG.h b/reactos/base/setup/usetup/lang/bg-BG.h index 0735258838b..ca3889eed20 100644 --- a/reactos/base/setup/usetup/lang/bg-BG.h +++ b/reactos/base/setup/usetup/lang/bg-BG.h @@ -1623,12 +1623,6 @@ MUI_STRING bgBGStrings[] = "\xB3 䠩: %S"}, {STRING_SETUPCOPYINGFILES, " ᢠ 䠩..."}, - {STRING_PAGEDMEM, - "࠭࠭"}, - {STRING_NONPAGEDMEM, - "࠭࠭"}, - {STRING_FREEMEM, - " "}, {STRING_REGHIVEUPDATE, " ६ ॣ୨ ஥..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/cs-CZ.h b/reactos/base/setup/usetup/lang/cs-CZ.h index b1163d1baf6..15727f76e54 100644 --- a/reactos/base/setup/usetup/lang/cs-CZ.h +++ b/reactos/base/setup/usetup/lang/cs-CZ.h @@ -1620,12 +1620,6 @@ MUI_STRING csCZStrings[] = "\xB3 Kopruji soubor: %S"}, {STRING_SETUPCOPYINGFILES, "Instalace kopruje soubory..."}, - {STRING_PAGEDMEM, - "Strnkovno"}, - {STRING_NONPAGEDMEM, - "Nestrnkovno"}, - {STRING_FREEMEM, - "Voln pam؜"}, {STRING_REGHIVEUPDATE, " Aktualizuji registr..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/de-DE.h b/reactos/base/setup/usetup/lang/de-DE.h index b45ca8d5759..53bc8563781 100644 --- a/reactos/base/setup/usetup/lang/de-DE.h +++ b/reactos/base/setup/usetup/lang/de-DE.h @@ -1614,12 +1614,6 @@ MUI_STRING deDEStrings[] = "\xB3 Kopiere Datei: %S"}, {STRING_SETUPCOPYINGFILES, "Setup kopiert Dateien..."}, - {STRING_PAGEDMEM, - "Ausgel. Sp."}, - {STRING_NONPAGEDMEM, - "Nicht ausgel. Sp."}, - {STRING_FREEMEM, - "Freier Sp."}, {STRING_REGHIVEUPDATE, " Registry hives werden aktualisiert..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/el-GR.h b/reactos/base/setup/usetup/lang/el-GR.h index 7beda68759f..a8e88460b15 100644 --- a/reactos/base/setup/usetup/lang/el-GR.h +++ b/reactos/base/setup/usetup/lang/el-GR.h @@ -1643,12 +1643,6 @@ MUI_STRING elGRStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/en-US.h b/reactos/base/setup/usetup/lang/en-US.h index 0b0a00c37f7..a22d19506f2 100644 --- a/reactos/base/setup/usetup/lang/en-US.h +++ b/reactos/base/setup/usetup/lang/en-US.h @@ -1615,12 +1615,6 @@ MUI_STRING enUSStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/es-ES.h b/reactos/base/setup/usetup/lang/es-ES.h index faa35c980a2..930ebbd2226 100644 --- a/reactos/base/setup/usetup/lang/es-ES.h +++ b/reactos/base/setup/usetup/lang/es-ES.h @@ -1613,12 +1613,6 @@ MUI_STRING esESStrings[] = "\xB3 Copiando archivo: %S"}, {STRING_SETUPCOPYINGFILES, "El instalador est copiando archivos..."}, - {STRING_PAGEDMEM, - "Mem. paginada"}, - {STRING_NONPAGEDMEM, - "Mem. nopaginada"}, - {STRING_FREEMEM, - "Memoria libre"}, {STRING_REGHIVEUPDATE, " Actualizando el rbol del registro..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/fr-FR.h b/reactos/base/setup/usetup/lang/fr-FR.h index 85b79cd0e38..797a99b3411 100644 --- a/reactos/base/setup/usetup/lang/fr-FR.h +++ b/reactos/base/setup/usetup/lang/fr-FR.h @@ -1626,12 +1626,6 @@ MUI_STRING frFRStrings[] = "\xB3 Copie du fichier: %S"}, {STRING_SETUPCOPYINGFILES, "Setup copie les fichiers..."}, - {STRING_PAGEDMEM, - "Mmoire pagine"}, - {STRING_NONPAGEDMEM, - "Mmoire non pagine"}, - {STRING_FREEMEM, - "Mmoire libre"}, {STRING_REGHIVEUPDATE, " Mise jour de la base de registre..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/it-IT.h b/reactos/base/setup/usetup/lang/it-IT.h index 7f866744118..15da462ae9e 100644 --- a/reactos/base/setup/usetup/lang/it-IT.h +++ b/reactos/base/setup/usetup/lang/it-IT.h @@ -1614,12 +1614,6 @@ MUI_STRING itITStrings[] = "\xB3 Copia di: %S"}, {STRING_SETUPCOPYINGFILES, "Copia dei file in corso..."}, - {STRING_PAGEDMEM, - "Memoria paginata"}, - {STRING_NONPAGEDMEM, - "Memoria non paginata"}, - {STRING_FREEMEM, - "Memoria libera"}, {STRING_REGHIVEUPDATE, " Aggiornamento degli hives del registro..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/lt-LT.h b/reactos/base/setup/usetup/lang/lt-LT.h index b78543ed188..6e95e79643a 100644 --- a/reactos/base/setup/usetup/lang/lt-LT.h +++ b/reactos/base/setup/usetup/lang/lt-LT.h @@ -1623,12 +1623,6 @@ MUI_STRING ltLTStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/pl-PL.h b/reactos/base/setup/usetup/lang/pl-PL.h index 564b5ccddd5..7f8af6fff4f 100644 --- a/reactos/base/setup/usetup/lang/pl-PL.h +++ b/reactos/base/setup/usetup/lang/pl-PL.h @@ -1622,12 +1622,6 @@ MUI_STRING plPLStrings[] = "\xB3 Kopiowanie plikw: %S"}, {STRING_SETUPCOPYINGFILES, "Instalator kopiuje pliki..."}, - {STRING_PAGEDMEM, - "Stronicowanej"}, - {STRING_NONPAGEDMEM, - "Niestronicowanej"}, - {STRING_FREEMEM, - " Dostpnej"}, {STRING_REGHIVEUPDATE, " Uaktualnianie..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/ru-RU.h b/reactos/base/setup/usetup/lang/ru-RU.h index 4beda28fef7..104b80b8aef 100644 --- a/reactos/base/setup/usetup/lang/ru-RU.h +++ b/reactos/base/setup/usetup/lang/ru-RU.h @@ -1614,12 +1614,6 @@ MUI_STRING ruRUStrings[] = "\xB3 ஢: %S"}, {STRING_SETUPCOPYINGFILES, "ணࠬ ⠭ 䠩..."}, - {STRING_PAGEDMEM, - " ࠭筠"}, - {STRING_NONPAGEDMEM, - " ࠭筠"}, - {STRING_FREEMEM, - " "}, {STRING_REGHIVEUPDATE, " ⮢ ॥..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/sk-SK.h b/reactos/base/setup/usetup/lang/sk-SK.h index 6ea1d2fe8ea..38c7a022c4a 100644 --- a/reactos/base/setup/usetup/lang/sk-SK.h +++ b/reactos/base/setup/usetup/lang/sk-SK.h @@ -1622,12 +1622,6 @@ MUI_STRING skSKStrings[] = "\xB3 Kopruje sa sbor: %S"}, {STRING_SETUPCOPYINGFILES, "Intaltor kopruje sbory..."}, - {STRING_PAGEDMEM, - "Strnkovan"}, //reazec "Strnkovan pam" sa nevmest - {STRING_NONPAGEDMEM, - "Nestrnkovan"}, //reazec "Nestrnkovan pam" sa nevmest - {STRING_FREEMEM, - "Von pam"}, {STRING_REGHIVEUPDATE, " Aktualizujem poloky registrov..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/sv-SE.h b/reactos/base/setup/usetup/lang/sv-SE.h index 79d2f63cb0c..12211da722a 100644 --- a/reactos/base/setup/usetup/lang/sv-SE.h +++ b/reactos/base/setup/usetup/lang/sv-SE.h @@ -1613,12 +1613,6 @@ MUI_STRING svSEStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/lang/uk-UA.h b/reactos/base/setup/usetup/lang/uk-UA.h index fcb41845a80..7f6253859ad 100644 --- a/reactos/base/setup/usetup/lang/uk-UA.h +++ b/reactos/base/setup/usetup/lang/uk-UA.h @@ -1614,12 +1614,6 @@ MUI_STRING ukUAStrings[] = "\xB3 Copying file: %S"}, {STRING_SETUPCOPYINGFILES, "Setup is copying files..."}, - {STRING_PAGEDMEM, - "Paged Memory"}, - {STRING_NONPAGEDMEM, - "Nonpaged Memory"}, - {STRING_FREEMEM, - "Free Memory"}, {STRING_REGHIVEUPDATE, " Updating registry hives..."}, {STRING_IMPORTFILE, diff --git a/reactos/base/setup/usetup/mui.h b/reactos/base/setup/usetup/mui.h index ec6aa6f7268..41ac6eb0b0b 100644 --- a/reactos/base/setup/usetup/mui.h +++ b/reactos/base/setup/usetup/mui.h @@ -96,9 +96,6 @@ MUIGetString(ULONG Number); #define STRING_TXTSETUPFAILED 14 #define STRING_COPYING 15 #define STRING_SETUPCOPYINGFILES 16 -#define STRING_PAGEDMEM 17 -#define STRING_NONPAGEDMEM 18 -#define STRING_FREEMEM 19 #define STRING_REGHIVEUPDATE 20 #define STRING_IMPORTFILE 21 #define STRING_DISPLAYETTINGSUPDATE 22 From 92680636efd6f8eaa3540dfd8027132ad65f2337 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Wed, 30 Jul 2008 15:00:57 +0000 Subject: [PATCH 038/304] kernel32: Don't enter the ConsoleLock if it has already been deleted by DllMain. Patch by hto (hto at dev dot null) (Bug 2308) svn path=/trunk/; revision=34961 --- reactos/dll/win32/kernel32/misc/console.c | 4 ++++ reactos/dll/win32/kernel32/misc/dllmain.c | 3 ++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/reactos/dll/win32/kernel32/misc/console.c b/reactos/dll/win32/kernel32/misc/console.c index 3104e28ccc4..10de6a44800 100644 --- a/reactos/dll/win32/kernel32/misc/console.c +++ b/reactos/dll/win32/kernel32/misc/console.c @@ -22,6 +22,7 @@ extern BOOL WINAPI DefaultConsoleCtrlHandler(DWORD Event); extern __declspec(noreturn) VOID CALLBACK ConsoleControlDispatcher(DWORD CodeAndFlag); extern RTL_CRITICAL_SECTION ConsoleLock; +extern BOOL ConsoleInitialized; extern BOOL WINAPI IsDebuggerPresent(VOID); /* GLOBALS *******************************************************************/ @@ -87,6 +88,8 @@ SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST); erException.NumberParameters = 0; RtlRaiseException(&erException); } + + if (!ConsoleInitialized) ExitThread(0); RtlEnterCriticalSection(&ConsoleLock); if(!(nCode == CTRL_C_EVENT && @@ -106,6 +109,7 @@ SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_HIGHEST); default: ExitThread(0); } + if (!ConsoleInitialized) ExitThread(0); RtlEnterCriticalSection(&ConsoleLock); if(!(nCode == CTRL_C_EVENT && diff --git a/reactos/dll/win32/kernel32/misc/dllmain.c b/reactos/dll/win32/kernel32/misc/dllmain.c index e1f9a5b53d6..4ced11d77f8 100644 --- a/reactos/dll/win32/kernel32/misc/dllmain.c +++ b/reactos/dll/win32/kernel32/misc/dllmain.c @@ -26,9 +26,9 @@ HMODULE hCurrentModule = NULL; HANDLE hBaseDir = NULL; PPEB Peb; ULONG SessionId; +BOOL ConsoleInitialized = FALSE; static BOOL DllInitialized = FALSE; -static BOOL ConsoleInitialized = FALSE; BOOL STDCALL DllMain(HANDLE hInst, @@ -374,6 +374,7 @@ DllMain(HANDLE hDll, /* Delete DLL critical section */ if (ConsoleInitialized == TRUE) { + ConsoleInitialized = FALSE; RtlDeleteCriticalSection (&ConsoleLock); } RtlDeleteCriticalSection (&DllLock); From 70b5975a50b8f28ca3bb2b6b6714ed6d0e747bf5 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Wed, 30 Jul 2008 15:12:09 +0000 Subject: [PATCH 039/304] uniform distribution of memory progress bars svn path=/trunk/; revision=34962 --- reactos/base/setup/usetup/interface/usetup.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/reactos/base/setup/usetup/interface/usetup.c b/reactos/base/setup/usetup/interface/usetup.c index b0fd1caa334..a40728bb76c 100644 --- a/reactos/base/setup/usetup/interface/usetup.c +++ b/reactos/base/setup/usetup/interface/usetup.c @@ -3081,33 +3081,36 @@ FileCopyPage(PINPUT_RECORD Ir) TRUE, MUIGetString(STRING_SETUPCOPYINGFILES)); + // fit memory bars to screen width, distribute them uniform + unsigned int mem_bar_width = (xScreen - 26) / 5; + mem_bar_width -= mem_bar_width % 2; // make even /* ATTENTION: The following progress bars are debug stuff, which should not be translated!! */ /* Create the paged pool progress bar */ CopyContext.MemoryBars[0] = CreateProgressBar(13, 40, - 18, + 13 + mem_bar_width, 43, - 10, + 13, 44, FALSE, "Paged Memory"); /* Create the non paged pool progress bar */ - CopyContext.MemoryBars[1] = CreateProgressBar(28, + CopyContext.MemoryBars[1] = CreateProgressBar((xScreen / 2)- (mem_bar_width / 2), 40, - 33, + (xScreen / 2) + (mem_bar_width / 2), 43, - 24, + (xScreen / 2)- (mem_bar_width / 2), 44, FALSE, "Nonpaged Memory"); /* Create the global memory progress bar */ - CopyContext.MemoryBars[2] = CreateProgressBar(43, + CopyContext.MemoryBars[2] = CreateProgressBar(xScreen - 13 - mem_bar_width, 40, - 48, + xScreen - 13, 43, - 40, + xScreen - 13 - mem_bar_width, 44, FALSE, "Free Memory"); From 17131c25129e578433e28dc9bf94e9c81b7a96aa Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 30 Jul 2008 16:55:45 +0000 Subject: [PATCH 040/304] - don't display network propery dialog since it is not yet implemented svn path=/trunk/; revision=34963 --- reactos/dll/win32/shell32/shv_item_cmenu.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/reactos/dll/win32/shell32/shv_item_cmenu.c b/reactos/dll/win32/shell32/shv_item_cmenu.c index a03f0340532..499c78a651d 100644 --- a/reactos/dll/win32/shell32/shv_item_cmenu.c +++ b/reactos/dll/win32/shell32/shv_item_cmenu.c @@ -864,6 +864,14 @@ static void DoProperties( SH_ShowDriveProperties(buffer); return; } + else if (_ILIsNetHood(This->apidl[0])) + { + /* FIXME + * implement nethood properties + */ + FIXME("implement nethood property dialog\n"); + return; + } else if (_ILIsBitBucket(This->apidl[0])) { ///FIXME From aabe1e5462997081e00cdb7609b295762058f5a2 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Wed, 30 Jul 2008 18:54:05 +0000 Subject: [PATCH 041/304] - center window only once - get path from executable module instead of current directory svn path=/trunk/; revision=34964 --- reactos/base/setup/reactos/reactos.c | 25 ++++++------------------- 1 file changed, 6 insertions(+), 19 deletions(-) diff --git a/reactos/base/setup/reactos/reactos.c b/reactos/base/setup/reactos/reactos.c index c08b3da895a..bdd091be8ec 100644 --- a/reactos/base/setup/reactos/reactos.c +++ b/reactos/base/setup/reactos/reactos.c @@ -29,6 +29,7 @@ #include #include #include +#include #include "resource.h" @@ -211,9 +212,6 @@ LangSelDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -309,9 +307,6 @@ TypeDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -364,9 +359,6 @@ DeviceDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -417,9 +409,6 @@ DriveDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -471,9 +460,6 @@ ProcessDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -525,9 +511,6 @@ RestartDlgProc(HWND hwndDlg, hwndControl = GetParent(hwndDlg); - /* Center the wizard window */ - CenterWindow (hwndControl); - dwStyle = GetWindowLong(hwndControl, GWL_STYLE); SetWindowLong(hwndControl, GWL_STYLE, dwStyle & ~WS_SYSMENU); @@ -586,6 +569,7 @@ RestartDlgProc(HWND hwndDlg, BOOL isUnattendSetup() { WCHAR szPath[MAX_PATH]; + WCHAR *ch; HINF hUnattendedInf; INFCONTEXT InfContext; TCHAR szValue[MAX_PATH]; @@ -593,7 +577,10 @@ BOOL isUnattendSetup() //HKEY hKey; BOOL result = 0; - GetCurrentDirectoryW(MAX_PATH, szPath); // FIXME + GetModuleFileNameW(NULL,szPath,MAX_PATH); + ch = strrchrW(szPath,L'\\'); + if (ch != NULL) + *ch = L'\0'; wcscat(szPath, L"\\unattend.inf"); hUnattendedInf = SetupOpenInfFileW(szPath, NULL, INF_STYLE_OLDNT, NULL); From dd7dc24c8d63e767de381347717c3608e72bb8d3 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Wed, 30 Jul 2008 21:16:03 +0000 Subject: [PATCH 042/304] Patch by Gregor Schneider a.k.a DosX - use line breaks in debug output svn path=/trunk/; revision=34966 --- reactos/dll/win32/shell32/recyclebin.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/shell32/recyclebin.c b/reactos/dll/win32/shell32/recyclebin.c index 0bf9260b98b..bc19b0e856d 100644 --- a/reactos/dll/win32/shell32/recyclebin.c +++ b/reactos/dll/win32/shell32/recyclebin.c @@ -972,7 +972,7 @@ BOOL SH_ShowRecycleBinProperties(WCHAR sDrive) hprop = SH_CreatePropertySheetPage("BITBUCKET_PROPERTIES_DLG", BitBucketDlg, (LPARAM)sDrive, NULL); if (!hprop) { - ERR("Failed to create property sheet"); + ERR("Failed to create property sheet\n"); return FALSE; } hpsp[psh.nPages] = hprop; @@ -1006,7 +1006,7 @@ TRASH_CanTrashFile(LPCWSTR wszPath) res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, szKey, 0, KEY_QUERY_VALUE, &hKey); if (res != ERROR_SUCCESS) { - FIXME("Failed to open registry path"); + FIXME("Failed to open registry path\n"); return FALSE; } dwLength = sizeof(RegSerial); @@ -1021,7 +1021,7 @@ TRASH_CanTrashFile(LPCWSTR wszPath) /* FIXME * the current volume was mounted on a different path */ - FIXME("mismatched serial volume number"); + FIXME("mismatched serial volume number\n"); RegCloseKey(hKey); return FALSE; } From ef7ceb62bb15af978f0cc72dfa6be9a62e1df30d Mon Sep 17 00:00:00 2001 From: ReactOS Portable Systems Group Date: Thu, 31 Jul 2008 07:04:58 +0000 Subject: [PATCH 043/304] fix formatting of i386 mmu code. svn path=/trunk/; revision=34973 --- reactos/ntoskrnl/mm/i386/page.c | 1864 +++++++++++++++---------------- 1 file changed, 932 insertions(+), 932 deletions(-) diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index 44461618bdc..1fcba4f853e 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -52,9 +52,9 @@ ULONG MmGlobalKernelPageDirectory[1024]; #else __inline LARGE_INTEGER PTE_TO_PAGE(ULONG npage) { - LARGE_INTEGER dummy; - dummy.QuadPart = (LONGLONG)(PAGE_MASK(npage)); - return dummy; + LARGE_INTEGER dummy; + dummy.QuadPart = (LONGLONG)(PAGE_MASK(npage)); + return dummy; } #endif @@ -66,28 +66,28 @@ ULONG_PTR NTAPI MiFlushTlbIpiRoutine(ULONG_PTR Address) { - if (Address == (ULONG_PTR)-1) - { - KeFlushCurrentTb(); - } - else if (Address == (ULONG_PTR)-2) - { - KeFlushCurrentTb(); - } - else - { - __invlpg((PVOID)Address); - } - return 0; + if (Address == (ULONG_PTR)-1) + { + KeFlushCurrentTb(); + } + else if (Address == (ULONG_PTR)-2) + { + KeFlushCurrentTb(); + } + else + { + __invlpg((PVOID)Address); + } + return 0; } VOID MiFlushTlb(PULONG Pt, PVOID Address) { - if ((Pt && MmUnmapPageTable(Pt)) || Address >= MmSystemRangeStart) - { - __invlpg(Address); - } + if ((Pt && MmUnmapPageTable(Pt)) || Address >= MmSystemRangeStart) + { + __invlpg(Address); + } } @@ -95,73 +95,73 @@ MiFlushTlb(PULONG Pt, PVOID Address) PULONG MmGetPageDirectory(VOID) { - return (PULONG)__readcr3(); + return (PULONG)__readcr3(); } static ULONG ProtectToPTE(ULONG flProtect) { - ULONG Attributes = 0; - - if (flProtect & (PAGE_NOACCESS|PAGE_GUARD)) - { - Attributes = 0; - } - else if (flProtect & PAGE_IS_WRITABLE) - { - Attributes = PA_PRESENT | PA_READWRITE; - } - else if (flProtect & (PAGE_IS_READABLE | PAGE_IS_EXECUTABLE)) - { - Attributes = PA_PRESENT; - } - else - { - DPRINT1("Unknown main protection type.\n"); - KEBUGCHECK(0); - } + ULONG Attributes = 0; - if (flProtect & PAGE_SYSTEM) - { - } - else - { - Attributes = Attributes | PA_USER; - } - if (flProtect & PAGE_NOCACHE) - { - Attributes = Attributes | PA_CD; - } - if (flProtect & PAGE_WRITETHROUGH) - { - Attributes = Attributes | PA_WT; - } - return(Attributes); + if (flProtect & (PAGE_NOACCESS|PAGE_GUARD)) + { + Attributes = 0; + } + else if (flProtect & PAGE_IS_WRITABLE) + { + Attributes = PA_PRESENT | PA_READWRITE; + } + else if (flProtect & (PAGE_IS_READABLE | PAGE_IS_EXECUTABLE)) + { + Attributes = PA_PRESENT; + } + else + { + DPRINT1("Unknown main protection type.\n"); + KEBUGCHECK(0); + } + + if (flProtect & PAGE_SYSTEM) + { + } + else + { + Attributes = Attributes | PA_USER; + } + if (flProtect & PAGE_NOCACHE) + { + Attributes = Attributes | PA_CD; + } + if (flProtect & PAGE_WRITETHROUGH) + { + Attributes = Attributes | PA_WT; + } + return(Attributes); } NTSTATUS NTAPI Mmi386ReleaseMmInfo(PEPROCESS Process) { - PUSHORT LdtDescriptor; - ULONG LdtBase; - PULONG PageDir; - ULONG i; - - DPRINT("Mmi386ReleaseMmInfo(Process %x)\n",Process); - - LdtDescriptor = (PUSHORT) &Process->Pcb.LdtDescriptor; - LdtBase = LdtDescriptor[1] | - ((LdtDescriptor[2] & 0xff) << 16) | - ((LdtDescriptor[3] & ~0xff) << 16); - - DPRINT("LdtBase: %x\n", LdtBase); - - if (LdtBase) - { - ExFreePool((PVOID) LdtBase); - } - + PUSHORT LdtDescriptor; + ULONG LdtBase; + PULONG PageDir; + ULONG i; + + DPRINT("Mmi386ReleaseMmInfo(Process %x)\n",Process); + + LdtDescriptor = (PUSHORT) &Process->Pcb.LdtDescriptor; + LdtBase = LdtDescriptor[1] | + ((LdtDescriptor[2] & 0xff) << 16) | + ((LdtDescriptor[3] & ~0xff) << 16); + + DPRINT("LdtBase: %x\n", LdtBase); + + if (LdtBase) + { + ExFreePool((PVOID) LdtBase); + } + PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); for (i = 0; i < ADDR_TO_PDE_OFFSET(MmSystemRangeStart); i++) { @@ -176,15 +176,15 @@ Mmi386ReleaseMmInfo(PEPROCESS Process) MmReleasePageMemoryConsumer(MC_NPPOOL, PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); #if defined(__GNUC__) - - Process->Pcb.DirectoryTableBase.QuadPart = 0LL; + + Process->Pcb.DirectoryTableBase.QuadPart = 0LL; #else - - Process->Pcb.DirectoryTableBase.QuadPart = 0; + + Process->Pcb.DirectoryTableBase.QuadPart = 0; #endif - - DPRINT("Finished Mmi386ReleaseMmInfo()\n"); - return(STATUS_SUCCESS); + + DPRINT("Finished Mmi386ReleaseMmInfo()\n"); + return(STATUS_SUCCESS); } NTSTATUS @@ -210,237 +210,237 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Process, IN PLARGE_INTEGER DirectoryTableBase) { - NTSTATUS Status; - ULONG i, j; - PFN_TYPE Pfn[2]; - PULONG PageDirectory; - - DPRINT("MmCopyMmInfo(Src %x, Dest %x)\n", MinWs, Process); - - for (i = 0; i < 2; i++) - { - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn[i]); - if (!NT_SUCCESS(Status)) - { - for (j = 0; j < i; j++) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn[j]); - } - - return FALSE; - } - } - - PageDirectory = MmCreateHyperspaceMapping(Pfn[0]); - - memcpy(PageDirectory + ADDR_TO_PDE_OFFSET(MmSystemRangeStart), - MmGlobalKernelPageDirectory + ADDR_TO_PDE_OFFSET(MmSystemRangeStart), - (1024 - ADDR_TO_PDE_OFFSET(MmSystemRangeStart)) * sizeof(ULONG)); - - DPRINT("Addr %x\n",ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)); - PageDirectory[ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)] = PFN_TO_PTE(Pfn[0]) | PA_PRESENT | PA_READWRITE; - PageDirectory[ADDR_TO_PDE_OFFSET(HYPERSPACE)] = PFN_TO_PTE(Pfn[1]) | PA_PRESENT | PA_READWRITE; - - MmDeleteHyperspaceMapping(PageDirectory); - - DirectoryTableBase->QuadPart = PFN_TO_PTE(Pfn[0]); - DPRINT("Finished MmCopyMmInfo(): %I64x\n", DirectoryTableBase->QuadPart); - return TRUE; + NTSTATUS Status; + ULONG i, j; + PFN_TYPE Pfn[2]; + PULONG PageDirectory; + + DPRINT("MmCopyMmInfo(Src %x, Dest %x)\n", MinWs, Process); + + for (i = 0; i < 2; i++) + { + Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn[i]); + if (!NT_SUCCESS(Status)) + { + for (j = 0; j < i; j++) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn[j]); + } + + return FALSE; + } + } + + PageDirectory = MmCreateHyperspaceMapping(Pfn[0]); + + memcpy(PageDirectory + ADDR_TO_PDE_OFFSET(MmSystemRangeStart), + MmGlobalKernelPageDirectory + ADDR_TO_PDE_OFFSET(MmSystemRangeStart), + (1024 - ADDR_TO_PDE_OFFSET(MmSystemRangeStart)) * sizeof(ULONG)); + + DPRINT("Addr %x\n",ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)); + PageDirectory[ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)] = PFN_TO_PTE(Pfn[0]) | PA_PRESENT | PA_READWRITE; + PageDirectory[ADDR_TO_PDE_OFFSET(HYPERSPACE)] = PFN_TO_PTE(Pfn[1]) | PA_PRESENT | PA_READWRITE; + + MmDeleteHyperspaceMapping(PageDirectory); + + DirectoryTableBase->QuadPart = PFN_TO_PTE(Pfn[0]); + DPRINT("Finished MmCopyMmInfo(): %I64x\n", DirectoryTableBase->QuadPart); + return TRUE; } VOID NTAPI MmDeletePageTable(PEPROCESS Process, PVOID Address) { - PEPROCESS CurrentProcess = PsGetCurrentProcess(); - - if (Process != NULL && Process != CurrentProcess) - { - KeAttachProcess(&Process->Pcb); - } - - MiAddressToPde(Address)->u.Long = 0; - MiFlushTlb((PULONG)MiAddressToPde(Address), - MiAddressToPte(Address)); - - if (Address >= MmSystemRangeStart) - { - KEBUGCHECK(0); - // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; - } - if (Process != NULL && Process != CurrentProcess) - { - KeDetachProcess(); - } + PEPROCESS CurrentProcess = PsGetCurrentProcess(); + + if (Process != NULL && Process != CurrentProcess) + { + KeAttachProcess(&Process->Pcb); + } + + MiAddressToPde(Address)->u.Long = 0; + MiFlushTlb((PULONG)MiAddressToPde(Address), + MiAddressToPte(Address)); + + if (Address >= MmSystemRangeStart) + { + KEBUGCHECK(0); + // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; + } + if (Process != NULL && Process != CurrentProcess) + { + KeDetachProcess(); + } } VOID NTAPI MmFreePageTable(PEPROCESS Process, PVOID Address) { - PEPROCESS CurrentProcess = PsGetCurrentProcess(); - ULONG i; - PFN_TYPE Pfn; - PULONG PageTable; - - DPRINT("ProcessId %d, Address %x\n", Process->UniqueProcessId, Address); - if (Process != NULL && Process != CurrentProcess) - { - KeAttachProcess(&Process->Pcb); - } - - PageTable = (PULONG)PAGE_ROUND_DOWN((PVOID)MiAddressToPte(Address)); - for (i = 0; i < 1024; i++) - { - if (PageTable[i] != 0) - { + PEPROCESS CurrentProcess = PsGetCurrentProcess(); + ULONG i; + PFN_TYPE Pfn; + PULONG PageTable; + + DPRINT("ProcessId %d, Address %x\n", Process->UniqueProcessId, Address); + if (Process != NULL && Process != CurrentProcess) + { + KeAttachProcess(&Process->Pcb); + } + + PageTable = (PULONG)PAGE_ROUND_DOWN((PVOID)MiAddressToPte(Address)); + for (i = 0; i < 1024; i++) + { + if (PageTable[i] != 0) + { DbgPrint("Page table entry not clear at %x/%x (is %x)\n", ((ULONG)Address / (4*1024*1024)), i, PageTable[i]); KEBUGCHECK(0); - } - } - Pfn = MiAddressToPde(Address)->u.Hard.PageFrameNumber; - MiAddressToPde(Address)->u.Long = 0; - MiFlushTlb((PULONG)MiAddressToPde(Address), MiAddressToPte(Address)); - - if (Address >= MmSystemRangeStart) - { - // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; - KEBUGCHECK(0); - } - else - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - } - if (Process != NULL && Process != CurrentProcess) - { - KeDetachProcess(); - } + } + } + Pfn = MiAddressToPde(Address)->u.Hard.PageFrameNumber; + MiAddressToPde(Address)->u.Long = 0; + MiFlushTlb((PULONG)MiAddressToPde(Address), MiAddressToPte(Address)); + + if (Address >= MmSystemRangeStart) + { + // MmGlobalKernelPageDirectory[ADDR_TO_PDE_OFFSET(Address)] = 0; + KEBUGCHECK(0); + } + else + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + if (Process != NULL && Process != CurrentProcess) + { + KeDetachProcess(); + } } static PULONG MmGetPageTableForProcess(PEPROCESS Process, PVOID Address, BOOLEAN Create) { - ULONG PdeOffset = ADDR_TO_PDE_OFFSET(Address); - NTSTATUS Status; - PFN_TYPE Pfn; - ULONG Entry; - PULONG Pt, PageDir; - - if (Address < MmSystemRangeStart && Process && Process != PsGetCurrentProcess()) - { - PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.LowPart)); - if (PageDir == NULL) - { - KEBUGCHECK(0); - } - if (0 == InterlockedCompareExchangeUL(&PageDir[PdeOffset], 0, 0)) - { - if (Create == FALSE) - { - MmDeleteHyperspaceMapping(PageDir); - return NULL; - } - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); - if (!NT_SUCCESS(Status) || Pfn == 0) - { - KEBUGCHECK(0); - } - Entry = InterlockedCompareExchangeUL(&PageDir[PdeOffset], PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE | PA_USER, 0); - if (Entry != 0) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - Pfn = PTE_TO_PFN(Entry); - } - } - else - { - Pfn = PTE_TO_PFN(PageDir[PdeOffset]); - } - MmDeleteHyperspaceMapping(PageDir); - Pt = MmCreateHyperspaceMapping(Pfn); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - return Pt + ADDR_TO_PTE_OFFSET(Address); - } - PageDir = (PULONG)MiAddressToPde(Address); - if (0 == InterlockedCompareExchangeUL(PageDir, 0, 0)) - { - if (Address >= MmSystemRangeStart) - { - if (0 == InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], 0, 0)) - { - if (Create == FALSE) - { - return NULL; - } + ULONG PdeOffset = ADDR_TO_PDE_OFFSET(Address); + NTSTATUS Status; + PFN_TYPE Pfn; + ULONG Entry; + PULONG Pt, PageDir; + + if (Address < MmSystemRangeStart && Process && Process != PsGetCurrentProcess()) + { + PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.LowPart)); + if (PageDir == NULL) + { + KEBUGCHECK(0); + } + if (0 == InterlockedCompareExchangeUL(&PageDir[PdeOffset], 0, 0)) + { + if (Create == FALSE) + { + MmDeleteHyperspaceMapping(PageDir); + return NULL; + } Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); - if (!NT_SUCCESS(Status) || Pfn == 0) - { - KEBUGCHECK(0); - } - Entry = PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE; - if (Ke386GlobalPagesEnabled) - { - Entry |= PA_GLOBAL; - } - if(0 != InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], Entry, 0)) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - } - } - (void)InterlockedExchangeUL(PageDir, MmGlobalKernelPageDirectory[PdeOffset]); - } - else - { - if (Create == FALSE) - { - return NULL; - } - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); - if (!NT_SUCCESS(Status) || Pfn == 0) - { - KEBUGCHECK(0); - } - Entry = InterlockedCompareExchangeUL(PageDir, PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE | PA_USER, 0); - if (Entry != 0) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - } - } - } - return (PULONG)MiAddressToPte(Address); + if (!NT_SUCCESS(Status) || Pfn == 0) + { + KEBUGCHECK(0); + } + Entry = InterlockedCompareExchangeUL(&PageDir[PdeOffset], PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE | PA_USER, 0); + if (Entry != 0) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + Pfn = PTE_TO_PFN(Entry); + } + } + else + { + Pfn = PTE_TO_PFN(PageDir[PdeOffset]); + } + MmDeleteHyperspaceMapping(PageDir); + Pt = MmCreateHyperspaceMapping(Pfn); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + return Pt + ADDR_TO_PTE_OFFSET(Address); + } + PageDir = (PULONG)MiAddressToPde(Address); + if (0 == InterlockedCompareExchangeUL(PageDir, 0, 0)) + { + if (Address >= MmSystemRangeStart) + { + if (0 == InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], 0, 0)) + { + if (Create == FALSE) + { + return NULL; + } + Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); + if (!NT_SUCCESS(Status) || Pfn == 0) + { + KEBUGCHECK(0); + } + Entry = PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE; + if (Ke386GlobalPagesEnabled) + { + Entry |= PA_GLOBAL; + } + if(0 != InterlockedCompareExchangeUL(&MmGlobalKernelPageDirectory[PdeOffset], Entry, 0)) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + } + (void)InterlockedExchangeUL(PageDir, MmGlobalKernelPageDirectory[PdeOffset]); + } + else + { + if (Create == FALSE) + { + return NULL; + } + Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); + if (!NT_SUCCESS(Status) || Pfn == 0) + { + KEBUGCHECK(0); + } + Entry = InterlockedCompareExchangeUL(PageDir, PFN_TO_PTE(Pfn) | PA_PRESENT | PA_READWRITE | PA_USER, 0); + if (Entry != 0) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + } + } + return (PULONG)MiAddressToPte(Address); } BOOLEAN MmUnmapPageTable(PULONG Pt) { - if (Pt >= (PULONG)PAGETABLE_MAP && Pt < (PULONG)PAGETABLE_MAP + 1024*1024) - { - return TRUE; - } - - if (Pt) - { - MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pt)); - } - return FALSE; + if (Pt >= (PULONG)PAGETABLE_MAP && Pt < (PULONG)PAGETABLE_MAP + 1024*1024) + { + return TRUE; + } + + if (Pt) + { + MmDeleteHyperspaceMapping((PVOID)PAGE_ROUND_DOWN(Pt)); + } + return FALSE; } static ULONG MmGetPageEntryForProcess(PEPROCESS Process, PVOID Address) { - ULONG Pte; - PULONG Pt; - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt) - { - Pte = *Pt; - MmUnmapPageTable(Pt); - return Pte; - } - return 0; + ULONG Pte; + PULONG Pt; + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt) + { + Pte = *Pt; + MmUnmapPageTable(Pt); + return Pte; + } + return 0; } PFN_TYPE @@ -448,13 +448,13 @@ NTAPI MmGetPfnForProcess(PEPROCESS Process, PVOID Address) { - ULONG Entry; - Entry = MmGetPageEntryForProcess(Process, Address); - if (!(Entry & PA_PRESENT)) - { - return 0; - } - return(PTE_TO_PFN(Entry)); + ULONG Entry; + Entry = MmGetPageEntryForProcess(Process, Address); + if (!(Entry & PA_PRESENT)) + { + return 0; + } + return(PTE_TO_PFN(Entry)); } VOID @@ -464,58 +464,58 @@ MmDisableVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN* WasDirty, PPF * FUNCTION: Delete a virtual mapping */ { - BOOLEAN WasValid; - ULONG Pte; - PULONG Pt; - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - /* - * Atomically disable the present bit and get the old value. - */ - do - { + BOOLEAN WasValid; + ULONG Pte; + PULONG Pt; + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + /* + * Atomically disable the present bit and get the old value. + */ + do + { Pte = *Pt; - } while (Pte != InterlockedCompareExchangeUL(Pt, Pte & ~PA_PRESENT, Pte)); - - MiFlushTlb(Pt, Address); - WasValid = (PAGE_MASK(Pte) != 0); - if (!WasValid) - { - KEBUGCHECK(0); - } - - /* - * Return some information to the caller - */ - if (WasDirty != NULL) - { - *WasDirty = Pte & PA_DIRTY; - } - if (Page != NULL) - { - *Page = PTE_TO_PFN(Pte); - } + } while (Pte != InterlockedCompareExchangeUL(Pt, Pte & ~PA_PRESENT, Pte)); + + MiFlushTlb(Pt, Address); + WasValid = (PAGE_MASK(Pte) != 0); + if (!WasValid) + { + KEBUGCHECK(0); + } + + /* + * Return some information to the caller + */ + if (WasDirty != NULL) + { + *WasDirty = Pte & PA_DIRTY; + } + if (Page != NULL) + { + *Page = PTE_TO_PFN(Pte); + } } VOID NTAPI MmRawDeleteVirtualMapping(PVOID Address) { - PULONG Pt; - - Pt = MmGetPageTableForProcess(NULL, Address, FALSE); - if (Pt && *Pt) - { - /* - * Set the entry to zero - */ - (void)InterlockedExchangeUL(Pt, 0); - MiFlushTlb(Pt, Address); - } + PULONG Pt; + + Pt = MmGetPageTableForProcess(NULL, Address, FALSE); + if (Pt && *Pt) + { + /* + * Set the entry to zero + */ + (void)InterlockedExchangeUL(Pt, 0); + MiFlushTlb(Pt, Address); + } } VOID @@ -526,63 +526,63 @@ MmDeleteVirtualMapping(PEPROCESS Process, PVOID Address, BOOLEAN FreePage, * FUNCTION: Delete a virtual mapping */ { - BOOLEAN WasValid = FALSE; - PFN_TYPE Pfn; - ULONG Pte; - PULONG Pt; - - DPRINT("MmDeleteVirtualMapping(%x, %x, %d, %x, %x)\n", - Process, Address, FreePage, WasDirty, Page); - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - - if (Pt == NULL) - { - if (WasDirty != NULL) - { + BOOLEAN WasValid = FALSE; + PFN_TYPE Pfn; + ULONG Pte; + PULONG Pt; + + DPRINT("MmDeleteVirtualMapping(%x, %x, %d, %x, %x)\n", + Process, Address, FreePage, WasDirty, Page); + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + + if (Pt == NULL) + { + if (WasDirty != NULL) + { *WasDirty = FALSE; - } - if (Page != NULL) - { + } + if (Page != NULL) + { *Page = 0; - } - return; - } - - /* - * Atomically set the entry to zero and get the old value. - */ - Pte = InterlockedExchangeUL(Pt, 0); - - MiFlushTlb(Pt, Address); - - WasValid = (PAGE_MASK(Pte) != 0); - if (WasValid) - { - Pfn = PTE_TO_PFN(Pte); - MmMarkPageUnmapped(Pfn); - } - else - { - Pfn = 0; - } - - if (FreePage && WasValid) - { - MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); - } - - /* - * Return some information to the caller - */ - if (WasDirty != NULL) - { - *WasDirty = Pte & PA_DIRTY ? TRUE : FALSE; - } - if (Page != NULL) - { - *Page = Pfn; - } + } + return; + } + + /* + * Atomically set the entry to zero and get the old value. + */ + Pte = InterlockedExchangeUL(Pt, 0); + + MiFlushTlb(Pt, Address); + + WasValid = (PAGE_MASK(Pte) != 0); + if (WasValid) + { + Pfn = PTE_TO_PFN(Pte); + MmMarkPageUnmapped(Pfn); + } + else + { + Pfn = 0; + } + + if (FreePage && WasValid) + { + MmReleasePageMemoryConsumer(MC_NPPOOL, Pfn); + } + + /* + * Return some information to the caller + */ + if (WasDirty != NULL) + { + *WasDirty = Pte & PA_DIRTY ? TRUE : FALSE; + } + if (Page != NULL) + { + *Page = Pfn; + } } VOID @@ -593,51 +593,51 @@ MmDeletePageFileMapping(PEPROCESS Process, PVOID Address, * FUNCTION: Delete a virtual mapping */ { - ULONG Pte; - PULONG Pt; - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - - if (Pt == NULL) - { - *SwapEntry = 0; - return; - } - - /* - * Atomically set the entry to zero and get the old value. - */ - Pte = InterlockedExchangeUL(Pt, 0); - - MiFlushTlb(Pt, Address); - - /* - * Return some information to the caller - */ - *SwapEntry = Pte >> 1; + ULONG Pte; + PULONG Pt; + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + + if (Pt == NULL) + { + *SwapEntry = 0; + return; + } + + /* + * Atomically set the entry to zero and get the old value. + */ + Pte = InterlockedExchangeUL(Pt, 0); + + MiFlushTlb(Pt, Address); + + /* + * Return some information to the caller + */ + *SwapEntry = Pte >> 1; } BOOLEAN Mmi386MakeKernelPageTableGlobal(PVOID PAddress) { - PULONG Pt, Pde; - Pde = (PULONG)MiAddressToPde(PAddress); - if (*Pde == 0) - { - Pt = MmGetPageTableForProcess(NULL, PAddress, FALSE); - if (Pt != NULL) - { + PULONG Pt, Pde; + Pde = (PULONG)MiAddressToPde(PAddress); + if (*Pde == 0) + { + Pt = MmGetPageTableForProcess(NULL, PAddress, FALSE); + if (Pt != NULL) + { return TRUE; - } - } - return(FALSE); + } + } + return(FALSE); } BOOLEAN NTAPI MmIsDirtyPage(PEPROCESS Process, PVOID Address) { - return MmGetPageEntryForProcess(Process, Address) & PA_DIRTY ? TRUE : FALSE; + return MmGetPageEntryForProcess(Process, Address) & PA_DIRTY ? TRUE : FALSE; } BOOLEAN @@ -646,24 +646,24 @@ MmIsAccessedAndResetAccessPage(PEPROCESS Process, PVOID Address) { PULONG Pt; ULONG Pte; - + if (Address < MmSystemRangeStart && Process == NULL) { DPRINT1("MmIsAccessedAndResetAccessPage is called for user space without a process.\n"); KEBUGCHECK(0); } - + Pt = MmGetPageTableForProcess(Process, Address, FALSE); if (Pt == NULL) { KEBUGCHECK(0); } - + do { Pte = *Pt; } while (Pte != InterlockedCompareExchangeUL(Pt, Pte & ~PA_ACCESSED, Pte)); - + if (Pte & PA_ACCESSED) { MiFlushTlb(Pt, Address); @@ -682,25 +682,25 @@ MmSetCleanPage(PEPROCESS Process, PVOID Address) { PULONG Pt; ULONG Pte; - + if (Address < MmSystemRangeStart && Process == NULL) { DPRINT1("MmSetCleanPage is called for user space without a process.\n"); KEBUGCHECK(0); } - + Pt = MmGetPageTableForProcess(Process, Address, FALSE); - + if (Pt == NULL) { KEBUGCHECK(0); } - + do { Pte = *Pt; } while (Pte != InterlockedCompareExchangeUL(Pt, Pte & ~PA_DIRTY, Pte)); - + if (Pte & PA_DIRTY) { MiFlushTlb(Pt, Address); @@ -715,76 +715,76 @@ VOID NTAPI MmSetDirtyPage(PEPROCESS Process, PVOID Address) { - PULONG Pt; - ULONG Pte; - - if (Address < MmSystemRangeStart && Process == NULL) - { - DPRINT1("MmSetDirtyPage is called for user space without a process.\n"); - KEBUGCHECK(0); - } - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - - do - { - Pte = *Pt; - } while (Pte != InterlockedCompareExchangeUL(Pt, Pte | PA_DIRTY, Pte)); - if (!(Pte & PA_DIRTY)) - { - MiFlushTlb(Pt, Address); - } - else - { - MmUnmapPageTable(Pt); - } + PULONG Pt; + ULONG Pte; + + if (Address < MmSystemRangeStart && Process == NULL) + { + DPRINT1("MmSetDirtyPage is called for user space without a process.\n"); + KEBUGCHECK(0); + } + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + + do + { + Pte = *Pt; + } while (Pte != InterlockedCompareExchangeUL(Pt, Pte | PA_DIRTY, Pte)); + if (!(Pte & PA_DIRTY)) + { + MiFlushTlb(Pt, Address); + } + else + { + MmUnmapPageTable(Pt); + } } VOID NTAPI MmEnableVirtualMapping(PEPROCESS Process, PVOID Address) { - PULONG Pt; - ULONG Pte; - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - - do - { - Pte = *Pt; - } while (Pte != InterlockedCompareExchangeUL(Pt, Pte | PA_PRESENT, Pte)); - if (!(Pte & PA_PRESENT)) - { - MiFlushTlb(Pt, Address); - } - else - { - MmUnmapPageTable(Pt); - } + PULONG Pt; + ULONG Pte; + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + + do + { + Pte = *Pt; + } while (Pte != InterlockedCompareExchangeUL(Pt, Pte | PA_PRESENT, Pte)); + if (!(Pte & PA_PRESENT)) + { + MiFlushTlb(Pt, Address); + } + else + { + MmUnmapPageTable(Pt); + } } BOOLEAN NTAPI MmIsPagePresent(PEPROCESS Process, PVOID Address) { - return MmGetPageEntryForProcess(Process, Address) & PA_PRESENT ? TRUE : FALSE; + return MmGetPageEntryForProcess(Process, Address) & PA_PRESENT ? TRUE : FALSE; } BOOLEAN NTAPI MmIsPageSwapEntry(PEPROCESS Process, PVOID Address) { - ULONG Entry; - Entry = MmGetPageEntryForProcess(Process, Address); - return !(Entry & PA_PRESENT) && Entry != 0 ? TRUE : FALSE; + ULONG Entry; + Entry = MmGetPageEntryForProcess(Process, Address); + return !(Entry & PA_PRESENT) && Entry != 0 ? TRUE : FALSE; } NTSTATUS @@ -792,80 +792,80 @@ NTAPI MmCreateVirtualMappingForKernel(PVOID Address, ULONG flProtect, PPFN_TYPE Pages, - ULONG PageCount) + ULONG PageCount) { - ULONG Attributes; - ULONG i; - PVOID Addr; - ULONG PdeOffset, oldPdeOffset; - PULONG Pt; - ULONG Pte; - BOOLEAN NoExecute = FALSE; - - DPRINT("MmCreateVirtualMappingForKernel(%x, %x, %x, %d)\n", + ULONG Attributes; + ULONG i; + PVOID Addr; + ULONG PdeOffset, oldPdeOffset; + PULONG Pt; + ULONG Pte; + BOOLEAN NoExecute = FALSE; + + DPRINT("MmCreateVirtualMappingForKernel(%x, %x, %x, %d)\n", Address, flProtect, Pages, PageCount); - - if (Address < MmSystemRangeStart) - { - DPRINT1("MmCreateVirtualMappingForKernel is called for user space\n"); - KEBUGCHECK(0); - } - - Attributes = ProtectToPTE(flProtect); - if (Attributes & 0x80000000) - { - NoExecute = TRUE; - } - Attributes &= 0xfff; - if (Ke386GlobalPagesEnabled) - { - Attributes |= PA_GLOBAL; - } - - Addr = Address; - - oldPdeOffset = ADDR_TO_PDE_OFFSET(Addr); - Pt = MmGetPageTableForProcess(NULL, Addr, TRUE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - Pt--; - - for (i = 0; i < PageCount; i++, Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE)) - { - if (!(Attributes & PA_PRESENT) && Pages[i] != 0) - { + + if (Address < MmSystemRangeStart) + { + DPRINT1("MmCreateVirtualMappingForKernel is called for user space\n"); + KEBUGCHECK(0); + } + + Attributes = ProtectToPTE(flProtect); + if (Attributes & 0x80000000) + { + NoExecute = TRUE; + } + Attributes &= 0xfff; + if (Ke386GlobalPagesEnabled) + { + Attributes |= PA_GLOBAL; + } + + Addr = Address; + + oldPdeOffset = ADDR_TO_PDE_OFFSET(Addr); + Pt = MmGetPageTableForProcess(NULL, Addr, TRUE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + Pt--; + + for (i = 0; i < PageCount; i++, Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE)) + { + if (!(Attributes & PA_PRESENT) && Pages[i] != 0) + { DPRINT1("Setting physical address but not allowing access at address " "0x%.8X with attributes %x/%x.\n", Addr, Attributes, flProtect); KEBUGCHECK(0); - } - - PdeOffset = ADDR_TO_PDE_OFFSET(Addr); - if (oldPdeOffset != PdeOffset) - { + } + + PdeOffset = ADDR_TO_PDE_OFFSET(Addr); + if (oldPdeOffset != PdeOffset) + { Pt = MmGetPageTableForProcess(NULL, Addr, TRUE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - } - else - { + if (Pt == NULL) + { + KEBUGCHECK(0); + } + } + else + { Pt++; - } - oldPdeOffset = PdeOffset; - - Pte = *Pt; - if (Pte != 0) - { + } + oldPdeOffset = PdeOffset; + + Pte = *Pt; + if (Pte != 0) + { KEBUGCHECK(0); - } - (void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes); - } - - return(STATUS_SUCCESS); + } + (void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes); + } + + return(STATUS_SUCCESS); } NTSTATUS @@ -874,45 +874,45 @@ MmCreatePageFileMapping(PEPROCESS Process, PVOID Address, SWAPENTRY SwapEntry) { - PULONG Pt; - ULONG Pte; - - if (Process == NULL && Address < MmSystemRangeStart) - { - DPRINT1("No process\n"); - KEBUGCHECK(0); - } - if (Process != NULL && Address >= MmSystemRangeStart) - { - DPRINT1("Setting kernel address with process context\n"); - KEBUGCHECK(0); - } - if (SwapEntry & (1 << 31)) - { - KEBUGCHECK(0); - } - - Pt = MmGetPageTableForProcess(Process, Address, TRUE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - Pte = *Pt; - if (PAGE_MASK((Pte)) != 0) - { - MmMarkPageUnmapped(PTE_TO_PFN((Pte))); - } - (void)InterlockedExchangeUL(Pt, SwapEntry << 1); - if (Pte != 0) - { - MiFlushTlb(Pt, Address); - } - else - { - MmUnmapPageTable(Pt); - } - - return(STATUS_SUCCESS); + PULONG Pt; + ULONG Pte; + + if (Process == NULL && Address < MmSystemRangeStart) + { + DPRINT1("No process\n"); + KEBUGCHECK(0); + } + if (Process != NULL && Address >= MmSystemRangeStart) + { + DPRINT1("Setting kernel address with process context\n"); + KEBUGCHECK(0); + } + if (SwapEntry & (1 << 31)) + { + KEBUGCHECK(0); + } + + Pt = MmGetPageTableForProcess(Process, Address, TRUE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + Pte = *Pt; + if (PAGE_MASK((Pte)) != 0) + { + MmMarkPageUnmapped(PTE_TO_PFN((Pte))); + } + (void)InterlockedExchangeUL(Pt, SwapEntry << 1); + if (Pte != 0) + { + MiFlushTlb(Pt, Address); + } + else + { + MmUnmapPageTable(Pt); + } + + return(STATUS_SUCCESS); } @@ -924,119 +924,119 @@ MmCreateVirtualMappingUnsafe(PEPROCESS Process, PPFN_TYPE Pages, ULONG PageCount) { - ULONG Attributes; - PVOID Addr; - ULONG i; - ULONG oldPdeOffset, PdeOffset; - PULONG Pt = NULL; - ULONG Pte; - BOOLEAN NoExecute = FALSE; - - DPRINT("MmCreateVirtualMappingUnsafe(%x, %x, %x, %x (%x), %d)\n", - Process, Address, flProtect, Pages, *Pages, PageCount); - - if (Process == NULL) - { - if (Address < MmSystemRangeStart) - { - DPRINT1("No process\n"); - KEBUGCHECK(0); - } - if (PageCount > 0x10000 || - (ULONG_PTR) Address / PAGE_SIZE + PageCount > 0x100000) - { - DPRINT1("Page count to large\n"); - KEBUGCHECK(0); - } - } - else - { - if (Address >= MmSystemRangeStart) - { - DPRINT1("Setting kernel address with process context\n"); - KEBUGCHECK(0); - } - if (PageCount > (ULONG_PTR)MmSystemRangeStart / PAGE_SIZE || - (ULONG_PTR) Address / PAGE_SIZE + PageCount > - (ULONG_PTR)MmSystemRangeStart / PAGE_SIZE) - { - DPRINT1("Page Count to large\n"); - KEBUGCHECK(0); - } - } - - Attributes = ProtectToPTE(flProtect); - if (Attributes & 0x80000000) - { - NoExecute = TRUE; - } - Attributes &= 0xfff; - if (Address >= MmSystemRangeStart) - { - Attributes &= ~PA_USER; - if (Ke386GlobalPagesEnabled) - { - Attributes |= PA_GLOBAL; - } - } - else - { - Attributes |= PA_USER; - } - - Addr = Address; - oldPdeOffset = ADDR_TO_PDE_OFFSET(Addr) + 1; - for (i = 0; i < PageCount; i++, Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE)) - { - if (!(Attributes & PA_PRESENT) && Pages[i] != 0) - { + ULONG Attributes; + PVOID Addr; + ULONG i; + ULONG oldPdeOffset, PdeOffset; + PULONG Pt = NULL; + ULONG Pte; + BOOLEAN NoExecute = FALSE; + + DPRINT("MmCreateVirtualMappingUnsafe(%x, %x, %x, %x (%x), %d)\n", + Process, Address, flProtect, Pages, *Pages, PageCount); + + if (Process == NULL) + { + if (Address < MmSystemRangeStart) + { + DPRINT1("No process\n"); + KEBUGCHECK(0); + } + if (PageCount > 0x10000 || + (ULONG_PTR) Address / PAGE_SIZE + PageCount > 0x100000) + { + DPRINT1("Page count to large\n"); + KEBUGCHECK(0); + } + } + else + { + if (Address >= MmSystemRangeStart) + { + DPRINT1("Setting kernel address with process context\n"); + KEBUGCHECK(0); + } + if (PageCount > (ULONG_PTR)MmSystemRangeStart / PAGE_SIZE || + (ULONG_PTR) Address / PAGE_SIZE + PageCount > + (ULONG_PTR)MmSystemRangeStart / PAGE_SIZE) + { + DPRINT1("Page Count to large\n"); + KEBUGCHECK(0); + } + } + + Attributes = ProtectToPTE(flProtect); + if (Attributes & 0x80000000) + { + NoExecute = TRUE; + } + Attributes &= 0xfff; + if (Address >= MmSystemRangeStart) + { + Attributes &= ~PA_USER; + if (Ke386GlobalPagesEnabled) + { + Attributes |= PA_GLOBAL; + } + } + else + { + Attributes |= PA_USER; + } + + Addr = Address; + oldPdeOffset = ADDR_TO_PDE_OFFSET(Addr) + 1; + for (i = 0; i < PageCount; i++, Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE)) + { + if (!(Attributes & PA_PRESENT) && Pages[i] != 0) + { DPRINT1("Setting physical address but not allowing access at address " "0x%.8X with attributes %x/%x.\n", Addr, Attributes, flProtect); KEBUGCHECK(0); - } - PdeOffset = ADDR_TO_PDE_OFFSET(Addr); - if (oldPdeOffset != PdeOffset) - { + } + PdeOffset = ADDR_TO_PDE_OFFSET(Addr); + if (oldPdeOffset != PdeOffset) + { MmUnmapPageTable(Pt); - Pt = MmGetPageTableForProcess(Process, Addr, TRUE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - } - else - { + Pt = MmGetPageTableForProcess(Process, Addr, TRUE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + } + else + { Pt++; - } - oldPdeOffset = PdeOffset; - - Pte = *Pt; - MmMarkPageMapped(Pages[i]); - if (PAGE_MASK((Pte)) != 0 && !((Pte) & PA_PRESENT)) - { + } + oldPdeOffset = PdeOffset; + + Pte = *Pt; + MmMarkPageMapped(Pages[i]); + if (PAGE_MASK((Pte)) != 0 && !((Pte) & PA_PRESENT)) + { KEBUGCHECK(0); - } - if (PAGE_MASK((Pte)) != 0) - { + } + if (PAGE_MASK((Pte)) != 0) + { MmMarkPageUnmapped(PTE_TO_PFN((Pte))); - } - (void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes); - if (Pte != 0) - { + } + (void)InterlockedExchangeUL(Pt, PFN_TO_PTE(Pages[i]) | Attributes); + if (Pte != 0) + { if (Address > MmSystemRangeStart || (Pt >= (PULONG)PAGETABLE_MAP && Pt < (PULONG)PAGETABLE_MAP + 1024*1024)) { - MiFlushTlb(Pt, Address); + MiFlushTlb(Pt, Address); } - } - } - if (Addr > Address) - { - MmUnmapPageTable(Pt); - } - - return(STATUS_SUCCESS); + } + } + if (Addr > Address) + { + MmUnmapPageTable(Pt); + } + + return(STATUS_SUCCESS); } NTSTATUS @@ -1047,102 +1047,102 @@ MmCreateVirtualMapping(PEPROCESS Process, PPFN_TYPE Pages, ULONG PageCount) { - ULONG i; - - for (i = 0; i < PageCount; i++) - { - if (!MmIsPageInUse(Pages[i])) - { - DPRINT1("Page at address %x not in use\n", PFN_TO_PTE(Pages[i])); - KEBUGCHECK(0); - } - } - - return(MmCreateVirtualMappingUnsafe(Process, - Address, - flProtect, - Pages, - PageCount)); + ULONG i; + + for (i = 0; i < PageCount; i++) + { + if (!MmIsPageInUse(Pages[i])) + { + DPRINT1("Page at address %x not in use\n", PFN_TO_PTE(Pages[i])); + KEBUGCHECK(0); + } + } + + return(MmCreateVirtualMappingUnsafe(Process, + Address, + flProtect, + Pages, + PageCount)); } ULONG NTAPI MmGetPageProtect(PEPROCESS Process, PVOID Address) { - ULONG Entry; - ULONG Protect; + ULONG Entry; + ULONG Protect; - Entry = MmGetPageEntryForProcess(Process, Address); - - - if (!(Entry & PA_PRESENT)) - { - Protect = PAGE_NOACCESS; - } - else - { - if (Entry & PA_READWRITE) - { - Protect = PAGE_READWRITE; - } - else - { - Protect = PAGE_EXECUTE_READ; - } - if (Entry & PA_CD) - { - Protect |= PAGE_NOCACHE; - } - if (Entry & PA_WT) - { - Protect |= PAGE_WRITETHROUGH; - } - if (!(Entry & PA_USER)) - { - Protect |= PAGE_SYSTEM; - } - - } - return(Protect); + Entry = MmGetPageEntryForProcess(Process, Address); + + + if (!(Entry & PA_PRESENT)) + { + Protect = PAGE_NOACCESS; + } + else + { + if (Entry & PA_READWRITE) + { + Protect = PAGE_READWRITE; + } + else + { + Protect = PAGE_EXECUTE_READ; + } + if (Entry & PA_CD) + { + Protect |= PAGE_NOCACHE; + } + if (Entry & PA_WT) + { + Protect |= PAGE_WRITETHROUGH; + } + if (!(Entry & PA_USER)) + { + Protect |= PAGE_SYSTEM; + } + + } + return(Protect); } VOID NTAPI MmSetPageProtect(PEPROCESS Process, PVOID Address, ULONG flProtect) { - ULONG Attributes = 0; - BOOLEAN NoExecute = FALSE; - PULONG Pt; - - DPRINT("MmSetPageProtect(Process %x Address %x flProtect %x)\n", - Process, Address, flProtect); - - Attributes = ProtectToPTE(flProtect); - if (Attributes & 0x80000000) - { - NoExecute = TRUE; - } - Attributes &= 0xfff; - if (Address >= MmSystemRangeStart) - { - Attributes &= ~PA_USER; - if (Ke386GlobalPagesEnabled) - { - Attributes |= PA_GLOBAL; - } - } - else - { - Attributes |= PA_USER; - } - - Pt = MmGetPageTableForProcess(Process, Address, FALSE); - if (Pt == NULL) - { - KEBUGCHECK(0); - } - InterlockedExchange((PLONG)Pt, PAGE_MASK(*Pt) | Attributes | (*Pt & (PA_ACCESSED|PA_DIRTY))); - MiFlushTlb(Pt, Address); + ULONG Attributes = 0; + BOOLEAN NoExecute = FALSE; + PULONG Pt; + + DPRINT("MmSetPageProtect(Process %x Address %x flProtect %x)\n", + Process, Address, flProtect); + + Attributes = ProtectToPTE(flProtect); + if (Attributes & 0x80000000) + { + NoExecute = TRUE; + } + Attributes &= 0xfff; + if (Address >= MmSystemRangeStart) + { + Attributes &= ~PA_USER; + if (Ke386GlobalPagesEnabled) + { + Attributes |= PA_GLOBAL; + } + } + else + { + Attributes |= PA_USER; + } + + Pt = MmGetPageTableForProcess(Process, Address, FALSE); + if (Pt == NULL) + { + KEBUGCHECK(0); + } + InterlockedExchange((PLONG)Pt, PAGE_MASK(*Pt) | Attributes | (*Pt & (PA_ACCESSED|PA_DIRTY))); + MiFlushTlb(Pt, Address); } /* @@ -1154,155 +1154,155 @@ MmGetPhysicalAddress(PVOID vaddr) * FUNCTION: Returns the physical address corresponding to a virtual address */ { - PHYSICAL_ADDRESS p; - ULONG Pte; - - DPRINT("MmGetPhysicalAddress(vaddr %x)\n", vaddr); - Pte = MmGetPageEntryForProcess(NULL, vaddr); - if (Pte != 0 && Pte & PA_PRESENT) - { - p.QuadPart = PAGE_MASK(Pte); - p.u.LowPart |= (ULONG_PTR)vaddr & (PAGE_SIZE - 1); - } - else - { - p.QuadPart = 0; - } - return p; + PHYSICAL_ADDRESS p; + ULONG Pte; + + DPRINT("MmGetPhysicalAddress(vaddr %x)\n", vaddr); + Pte = MmGetPageEntryForProcess(NULL, vaddr); + if (Pte != 0 && Pte & PA_PRESENT) + { + p.QuadPart = PAGE_MASK(Pte); + p.u.LowPart |= (ULONG_PTR)vaddr & (PAGE_SIZE - 1); + } + else + { + p.QuadPart = 0; + } + return p; } PVOID NTAPI MmCreateHyperspaceMapping(PFN_TYPE Page) { - PVOID Address; - ULONG i; - - ULONG Entry; - PULONG Pte; - Entry = PFN_TO_PTE(Page) | PA_PRESENT | PA_READWRITE; - Pte = (PULONG)MiAddressToPte(HYPERSPACE) + Page % 1024; - if (Page & 1024) - { - for (i = Page % 1024; i < 1024; i++, Pte++) - { + PVOID Address; + ULONG i; + + ULONG Entry; + PULONG Pte; + Entry = PFN_TO_PTE(Page) | PA_PRESENT | PA_READWRITE; + Pte = (PULONG)MiAddressToPte(HYPERSPACE) + Page % 1024; + if (Page & 1024) + { + for (i = Page % 1024; i < 1024; i++, Pte++) + { if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) { - break; + break; } - } - if (i >= 1024) - { + } + if (i >= 1024) + { Pte = (PULONG)MiAddressToPte(HYPERSPACE); for (i = 0; i < Page % 1024; i++, Pte++) { - if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) - { - break; - } + if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) + { + break; + } } if (i >= Page % 1024) { - KEBUGCHECK(0); + KEBUGCHECK(0); } - } - } - else - { - for (i = Page % 1024; (LONG)i >= 0; i--, Pte--) - { + } + } + else + { + for (i = Page % 1024; (LONG)i >= 0; i--, Pte--) + { if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) { - break; + break; } - } - if ((LONG)i < 0) - { + } + if ((LONG)i < 0) + { Pte = (PULONG)MiAddressToPte(HYPERSPACE) + 1023; for (i = 1023; i > Page % 1024; i--, Pte--) { - if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) - { - break; - } + if (0 == InterlockedCompareExchange((PLONG)Pte, (LONG)Entry, 0)) + { + break; + } } if (i <= Page % 1024) { - KEBUGCHECK(0); + KEBUGCHECK(0); } - } - } - Address = (PVOID)((ULONG_PTR)HYPERSPACE + i * PAGE_SIZE); - __invlpg(Address); - return Address; + } + } + Address = (PVOID)((ULONG_PTR)HYPERSPACE + i * PAGE_SIZE); + __invlpg(Address); + return Address; } PFN_TYPE NTAPI MmChangeHyperspaceMapping(PVOID Address, PFN_TYPE NewPage) { - PFN_TYPE Pfn; - ULONG Entry; - - ASSERT (IS_HYPERSPACE(Address)); - - Entry = InterlockedExchange((PLONG)MiAddressToPte(Address), PFN_TO_PTE(NewPage) | PA_PRESENT | PA_READWRITE); - Pfn = PTE_TO_PFN(Entry); - - __invlpg(Address); - return Pfn; + PFN_TYPE Pfn; + ULONG Entry; + + ASSERT (IS_HYPERSPACE(Address)); + + Entry = InterlockedExchange((PLONG)MiAddressToPte(Address), PFN_TO_PTE(NewPage) | PA_PRESENT | PA_READWRITE); + Pfn = PTE_TO_PFN(Entry); + + __invlpg(Address); + return Pfn; } PFN_TYPE NTAPI MmDeleteHyperspaceMapping(PVOID Address) { - PFN_TYPE Pfn; - ULONG Entry; - - ASSERT (IS_HYPERSPACE(Address)); - - Entry = InterlockedExchange((PLONG)MiAddressToPte(Address), 0); - Pfn = PTE_TO_PFN(Entry); - - __invlpg(Address); - return Pfn; + PFN_TYPE Pfn; + ULONG Entry; + + ASSERT (IS_HYPERSPACE(Address)); + + Entry = InterlockedExchange((PLONG)MiAddressToPte(Address), 0); + Pfn = PTE_TO_PFN(Entry); + + __invlpg(Address); + return Pfn; } VOID NTAPI MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) { - ULONG StartOffset, EndOffset, Offset; - PULONG Pde; - - if (Address < MmSystemRangeStart) - { - KEBUGCHECK(0); - } - - StartOffset = ADDR_TO_PDE_OFFSET(Address); - EndOffset = ADDR_TO_PDE_OFFSET((PVOID)((ULONG_PTR)Address + Size)); - - if (Process != NULL && Process != PsGetCurrentProcess()) - { - Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); - } - else - { - Pde = (PULONG)PAGEDIRECTORY_MAP; - } - for (Offset = StartOffset; Offset <= EndOffset; Offset++) - { - if (Offset != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)) - { + ULONG StartOffset, EndOffset, Offset; + PULONG Pde; + + if (Address < MmSystemRangeStart) + { + KEBUGCHECK(0); + } + + StartOffset = ADDR_TO_PDE_OFFSET(Address); + EndOffset = ADDR_TO_PDE_OFFSET((PVOID)((ULONG_PTR)Address + Size)); + + if (Process != NULL && Process != PsGetCurrentProcess()) + { + Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); + } + else + { + Pde = (PULONG)PAGEDIRECTORY_MAP; + } + for (Offset = StartOffset; Offset <= EndOffset; Offset++) + { + if (Offset != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP)) + { (void)InterlockedCompareExchangeUL(&Pde[Offset], MmGlobalKernelPageDirectory[Offset], 0); - } - } - if (Pde != (PULONG)PAGEDIRECTORY_MAP) - { - MmDeleteHyperspaceMapping(Pde); - } + } + } + if (Pde != (PULONG)PAGEDIRECTORY_MAP) + { + MmDeleteHyperspaceMapping(Pde); + } } VOID @@ -1310,25 +1310,25 @@ INIT_FUNCTION NTAPI MmInitGlobalKernelPageDirectory(VOID) { - ULONG i; - PULONG CurrentPageDirectory = (PULONG)PAGEDIRECTORY_MAP; - - DPRINT("MmInitGlobalKernelPageDirectory()\n"); - - for (i = ADDR_TO_PDE_OFFSET(MmSystemRangeStart); i < 1024; i++) - { - if (i != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP) && - i != ADDR_TO_PDE_OFFSET(HYPERSPACE) && - 0 == MmGlobalKernelPageDirectory[i] && 0 != CurrentPageDirectory[i]) - { + ULONG i; + PULONG CurrentPageDirectory = (PULONG)PAGEDIRECTORY_MAP; + + DPRINT("MmInitGlobalKernelPageDirectory()\n"); + + for (i = ADDR_TO_PDE_OFFSET(MmSystemRangeStart); i < 1024; i++) + { + if (i != ADDR_TO_PDE_OFFSET(PAGETABLE_MAP) && + i != ADDR_TO_PDE_OFFSET(HYPERSPACE) && + 0 == MmGlobalKernelPageDirectory[i] && 0 != CurrentPageDirectory[i]) + { MmGlobalKernelPageDirectory[i] = CurrentPageDirectory[i]; - if (Ke386GlobalPagesEnabled) - { - MmGlobalKernelPageDirectory[i] |= PA_GLOBAL; - CurrentPageDirectory[i] |= PA_GLOBAL; - } - } - } + if (Ke386GlobalPagesEnabled) + { + MmGlobalKernelPageDirectory[i] |= PA_GLOBAL; + CurrentPageDirectory[i] |= PA_GLOBAL; + } + } + } } VOID @@ -1336,43 +1336,43 @@ INIT_FUNCTION NTAPI MiInitPageDirectoryMap(VOID) { - MEMORY_AREA* kernel_map_desc = NULL; - MEMORY_AREA* hyperspace_desc = NULL; - PHYSICAL_ADDRESS BoundaryAddressMultiple; - PVOID BaseAddress; - NTSTATUS Status; - - DPRINT("MiInitPageDirectoryMap()\n"); - - BoundaryAddressMultiple.QuadPart = 0; - BaseAddress = (PVOID)PAGETABLE_MAP; - Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), - MEMORY_AREA_SYSTEM, - &BaseAddress, - 0x400000, - PAGE_READWRITE, - &kernel_map_desc, - TRUE, - 0, - BoundaryAddressMultiple); - if (!NT_SUCCESS(Status)) - { - KEBUGCHECK(0); - } - BaseAddress = (PVOID)HYPERSPACE; - Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), - MEMORY_AREA_SYSTEM, - &BaseAddress, - 0x400000, - PAGE_READWRITE, - &hyperspace_desc, - TRUE, - 0, - BoundaryAddressMultiple); - if (!NT_SUCCESS(Status)) - { - KEBUGCHECK(0); - } + MEMORY_AREA* kernel_map_desc = NULL; + MEMORY_AREA* hyperspace_desc = NULL; + PHYSICAL_ADDRESS BoundaryAddressMultiple; + PVOID BaseAddress; + NTSTATUS Status; + + DPRINT("MiInitPageDirectoryMap()\n"); + + BoundaryAddressMultiple.QuadPart = 0; + BaseAddress = (PVOID)PAGETABLE_MAP; + Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), + MEMORY_AREA_SYSTEM, + &BaseAddress, + 0x400000, + PAGE_READWRITE, + &kernel_map_desc, + TRUE, + 0, + BoundaryAddressMultiple); + if (!NT_SUCCESS(Status)) + { + KEBUGCHECK(0); + } + BaseAddress = (PVOID)HYPERSPACE; + Status = MmCreateMemoryArea(MmGetKernelAddressSpace(), + MEMORY_AREA_SYSTEM, + &BaseAddress, + 0x400000, + PAGE_READWRITE, + &hyperspace_desc, + TRUE, + 0, + BoundaryAddressMultiple); + if (!NT_SUCCESS(Status)) + { + KEBUGCHECK(0); + } } /* EOF */ From 6abcb17d2a215d5ae6a597a023ef26c8fc8168f0 Mon Sep 17 00:00:00 2001 From: ReactOS Portable Systems Group Date: Thu, 31 Jul 2008 07:06:19 +0000 Subject: [PATCH 044/304] implement kiuserinitializeapc, and begin writing test code for kiswapprocess. svn path=/trunk/; revision=34974 --- reactos/ntoskrnl/ke/arm/stubs_asm.s | 2 -- reactos/ntoskrnl/ke/arm/trapc.c | 26 +++++++++++++++++ reactos/ntoskrnl/ke/arm/usercall.c | 44 +++++++++++++++++++++++++++++ 3 files changed, 70 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/arm/stubs_asm.s b/reactos/ntoskrnl/ke/arm/stubs_asm.s index ba4c7126798..214b3976085 100644 --- a/reactos/ntoskrnl/ke/arm/stubs_asm.s +++ b/reactos/ntoskrnl/ke/arm/stubs_asm.s @@ -32,8 +32,6 @@ GENERATE_ARM_STUB KeSynchronizeExecution // // User Mode Support // -GENERATE_ARM_STUB KiInitializeUserApc -GENERATE_ARM_STUB KiSwapProcess GENERATE_ARM_STUB KeSwitchKernelStack GENERATE_ARM_STUB RtlCreateUserThread GENERATE_ARM_STUB RtlInitializeContext diff --git a/reactos/ntoskrnl/ke/arm/trapc.c b/reactos/ntoskrnl/ke/arm/trapc.c index 71a56216529..52a4b1743c4 100644 --- a/reactos/ntoskrnl/ke/arm/trapc.c +++ b/reactos/ntoskrnl/ke/arm/trapc.c @@ -87,6 +87,32 @@ KiIdleLoop(VOID) } } +VOID +NTAPI +KiSwapProcess(IN PKPROCESS NewProcess, + IN PKPROCESS OldProcess) +{ + ARM_TTB_REGISTER TtbRegister; + DPRINT1("Swapping from: %p (%16s) to %p (%16s)\n", + OldProcess, ((PEPROCESS)OldProcess)->ImageFileName, + NewProcess, ((PEPROCESS)NewProcess)->ImageFileName); + + // + // Update the page directory base + // + TtbRegister.AsUlong = (ULONG)NewProcess->DirectoryTableBase.LowPart; + ASSERT(TtbRegister.Reserved == 0); + KeArmTranslationTableRegisterSet(TtbRegister); + + // + // FIXME: Flush the TLB + // + + + DPRINT1("Survived!\n"); + while (TRUE); +} + BOOLEAN KiSwapContextInternal(IN PKTHREAD OldThread, IN PKTHREAD NewThread) diff --git a/reactos/ntoskrnl/ke/arm/usercall.c b/reactos/ntoskrnl/ke/arm/usercall.c index 1f11468d834..6d6997d1178 100644 --- a/reactos/ntoskrnl/ke/arm/usercall.c +++ b/reactos/ntoskrnl/ke/arm/usercall.c @@ -261,3 +261,47 @@ KiSystemService(IN PKTHREAD Thread, // Thread->TrapFrame = (PKTRAP_FRAME)TrapFrame->PreviousTrapFrame; } + +VOID +NTAPI +KiInitializeUserApc(IN PKEXCEPTION_FRAME ExceptionFrame, + IN PKTRAP_FRAME TrapFrame, + IN PKNORMAL_ROUTINE NormalRoutine, + IN PVOID NormalContext, + IN PVOID SystemArgument1, + IN PVOID SystemArgument2) +{ + CONTEXT Context; + ULONG_PTR Stack; + ULONG ContextLength; + DPRINT1("User APC: %p %p %p\n", NormalContext, SystemArgument1, SystemArgument2); + + // + // Build the user mode context + // + Context.ContextFlags = CONTEXT_FULL; + KeTrapFrameToContext(TrapFrame, ExceptionFrame, &Context); + + // + // Setup the context on the user stack + // + ContextLength = sizeof(CONTEXT); + Stack = (ULONG_PTR)(Context.Sp & ~7) - ContextLength; + + // + // Make sure the stack is valid, and copy the context + // + ProbeForWrite((PVOID)Stack, ContextLength, sizeof(QUAD)); + RtlMoveMemory((PVOID)Stack, &Context, sizeof(CONTEXT)); + + // + // Setup the trap frame when we return to user mode + // + TrapFrame->R0 = (ULONG)NormalContext; + TrapFrame->R1 = (ULONG)SystemArgument1; + TrapFrame->R2 = (ULONG)SystemArgument2; + TrapFrame->R3 = (ULONG)NormalRoutine; + TrapFrame->R8 = Stack; + TrapFrame->UserSp = Stack; + TrapFrame->UserLr = (ULONG)KeUserApcDispatcher; +} From e1d4f7bdf2b40aa2dafaccd2d1287477a64a7e2e Mon Sep 17 00:00:00 2001 From: ReactOS Portable Systems Group Date: Thu, 31 Jul 2008 07:07:00 +0000 Subject: [PATCH 045/304] dont include i386 headers in arm mmu manager headers. svn path=/trunk/; revision=34975 --- reactos/ntoskrnl/include/internal/arm/mm.h | 3 +++ reactos/ntoskrnl/include/internal/i386/mm.h | 4 ++++ 2 files changed, 7 insertions(+) diff --git a/reactos/ntoskrnl/include/internal/arm/mm.h b/reactos/ntoskrnl/include/internal/arm/mm.h index 83b553fe6a5..5d24793cb16 100644 --- a/reactos/ntoskrnl/include/internal/arm/mm.h +++ b/reactos/ntoskrnl/include/internal/arm/mm.h @@ -166,4 +166,7 @@ typedef enum _ARM_DOMAIN #define PDE_BASE 0xC1000000 #define HYPER_SPACE 0xC1100000 +struct _EPROCESS; +PULONG MmGetPageDirectory(VOID); + #endif diff --git a/reactos/ntoskrnl/include/internal/i386/mm.h b/reactos/ntoskrnl/include/internal/i386/mm.h index 44867629e4b..ce83e73c497 100644 --- a/reactos/ntoskrnl/include/internal/i386/mm.h +++ b/reactos/ntoskrnl/include/internal/i386/mm.h @@ -5,6 +5,8 @@ #ifndef __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H #define __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H +#ifdef _M_IX86 + struct _EPROCESS; PULONG MmGetPageDirectory(VOID); @@ -28,4 +30,6 @@ PULONG MmGetPageDirectory(VOID); /* Easy accessing PFN in PTE */ #define PFN_FROM_PTE(v) ((v)->u.Hard.PageFrameNumber) +#endif + #endif /* __NTOSKRNL_INCLUDE_INTERNAL_I386_MM_H */ From ddaf47dec3f096666757ff2cc9892adc01da887c Mon Sep 17 00:00:00 2001 From: ReactOS Portable Systems Group Date: Thu, 31 Jul 2008 07:09:28 +0000 Subject: [PATCH 046/304] mmcreatevirtualmapping internal should accept process as input parameter, not assume null. implement a broken version of mmcreateprocessaddressspace. commit current checkpoint of arm mmu manager virtual mapping rewrite to sync with i386 code. the kernel part works fine and the kernel boots as far as it did before, but the code is still ugly. svn path=/trunk/; revision=34976 --- reactos/ntoskrnl/mm/arm/stubs.c | 231 +++++++++++++++++++++----------- 1 file changed, 155 insertions(+), 76 deletions(-) diff --git a/reactos/ntoskrnl/mm/arm/stubs.c b/reactos/ntoskrnl/mm/arm/stubs.c index b8a1a8ac5fe..950dddd4f33 100644 --- a/reactos/ntoskrnl/mm/arm/stubs.c +++ b/reactos/ntoskrnl/mm/arm/stubs.c @@ -66,9 +66,9 @@ MiGetPageTableForProcess(IN PEPROCESS Process, IN PVOID Address, IN BOOLEAN Create) { - ULONG PdeOffset; - PMMPTE PointerPde; - MMPTE Pte; + //ULONG PdeOffset; + PMMPTE PointerPde, PointerPte; + MMPTE TempPde, TempPte; NTSTATUS Status; PFN_NUMBER Pfn; @@ -85,6 +85,12 @@ MiGetPageTableForProcess(IN PEPROCESS Process, ASSERT(FALSE); } + // + // Get our templates + // + TempPde = MiArmTemplatePde; + TempPte = MiArmTemplatePte; + // // Get the PDE // @@ -99,18 +105,16 @@ MiGetPageTableForProcess(IN PEPROCESS Process, // // Does it exist in the kernel page directory? // - PdeOffset = MiGetPdeOffset(Address); - if (MmGlobalKernelPageDirectory[PdeOffset] == 0) + //PdeOffset = MiGetPdeOffset(Address); + //if (MmGlobalKernelPageDirectory[PdeOffset] == 0) { // // It doesn't. Is this a create operation? If not, fail // if (Create == FALSE) return NULL; - - // - // THIS WHOLE PATH IS TODO - // - ASSERT(FALSE); + kernelHack: + DPRINT1("Must create a page for: %p PDE: %p\n", // Offset: %lx!\n", + Address, PointerPde);//, PdeOffset); // // Allocate a non paged pool page for the PDE @@ -119,20 +123,51 @@ MiGetPageTableForProcess(IN PEPROCESS Process, if (!NT_SUCCESS(Status)) return NULL; // - // Make the entry valid + // Setup the PFN // - Pte.u.Hard.AsUlong = 0xDEADBEEF; + TempPde.u.Hard.L1.Coarse.BaseAddress = (Pfn << PAGE_SHIFT) >> CPT_SHIFT; + + // + // Write the PDE + // + ASSERT(PointerPde->u.Hard.L1.Fault.Type == FaultPte); + ASSERT(TempPde.u.Hard.L1.Coarse.Type == CoarsePte); + *PointerPde = TempPde; // // Save it // - MmGlobalKernelPageDirectory[PdeOffset] = Pte.u.Hard.AsUlong; + //MmGlobalKernelPageDirectory[PdeOffset] = TempPde.u.Hard.AsUlong; + //DPRINT1("KPD: %p PDEADDR: %p\n", &MmGlobalKernelPageDirectory[PdeOffset], MiGetPdeAddress(Address)); + + // + // FIXFIX: Double check with Felix tomorrow + // +///// + // + // Get the PTE for this 1MB region + // + PointerPte = MiGetPteAddress(MiGetPteAddress(Address)); + DPRINT1("PointerPte: %p\n", PointerPte); + + // + // Write the PFN of the PDE + // + TempPte.u.Hard.L2.Small.BaseAddress = Pfn; + + // + // Write the PTE + // + ASSERT(PointerPte->u.Hard.L2.Fault.Type == FaultPte); + ASSERT(TempPte.u.Hard.L2.Small.Type == SmallPte); + *PointerPte = TempPte; +///// } // // Now set the actual PDE // - PointerPde = (PMMPTE)&MmGlobalKernelPageDirectory[PdeOffset]; + //PointerPde = (PMMPTE)&MmGlobalKernelPageDirectory[PdeOffset]; } else { @@ -144,6 +179,7 @@ MiGetPageTableForProcess(IN PEPROCESS Process, // // THIS WHOLE PATH IS TODO // + goto kernelHack; ASSERT(FALSE); // @@ -155,12 +191,12 @@ MiGetPageTableForProcess(IN PEPROCESS Process, // // Make the entry valid // - Pte.u.Hard.AsUlong = 0xDEADBEEF; + TempPte.u.Hard.AsUlong = 0xDEADBEEF; // // Set it // - *PointerPde = Pte; + *PointerPde = TempPte; } } @@ -247,7 +283,7 @@ MmDeletePageTable(IN PEPROCESS Process, // // Invalidate the TLB entry // - MiFlushTlb(PointerPde, MiAddressToPte(Address)); + MiFlushTlb(PointerPde, MiGetPteAddress(Address)); } BOOLEAN @@ -256,12 +292,76 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Process, IN PLARGE_INTEGER DirectoryTableBase) { + NTSTATUS Status; + ULONG i; + PFN_NUMBER Pfn[2]; + PMMPTE PageDirectory, PointerPde; + MMPTE TempPde; + ASSERT(FALSE); + // - // FIXME-USER: Need to create address space + // Loop two tables (Hyperspace and TTB). Each one is 16KB // - UNIMPLEMENTED; - while (TRUE); - return 0; + // + for (i = 0; i < 8; i++) + { + // + // Allocate a page + // + Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn[i]); + if (!NT_SUCCESS(Status)) ASSERT(FALSE); + } + + // + // Map the base + // + PageDirectory = MmCreateHyperspaceMapping(Pfn[0]); + + // + // Copy the PDEs for kernel-mode + // + RtlCopyMemory(PageDirectory + MiGetPdeOffset(MmSystemRangeStart), + MmGlobalKernelPageDirectory + MiGetPdeOffset(MmSystemRangeStart), + (1024 - MiGetPdeOffset(MmSystemRangeStart)) * sizeof(ULONG)); + + + // + // Setup the PDE for the table base + // + TempPde = MiArmTemplatePde; + TempPde.u.Hard.L1.Coarse.BaseAddress = (Pfn[0] << PAGE_SHIFT) >> CPT_SHIFT; + PointerPde = &PageDirectory[MiGetPdeOffset(PTE_BASE)]; + + // + // Write the PDE + // + ASSERT(PointerPde->u.Hard.L1.Fault.Type == FaultPte); + ASSERT(TempPde.u.Hard.L1.Coarse.Type == CoarsePte); + *PointerPde = TempPde; + + // + // Setup the PDE for the hyperspace + // + TempPde.u.Hard.L1.Coarse.BaseAddress = (Pfn[1] << PAGE_SHIFT) >> CPT_SHIFT; + PointerPde = &PageDirectory[MiGetPdeOffset(HYPER_SPACE)]; + + // + // Write the PDE + // + ASSERT(PointerPde->u.Hard.L1.Fault.Type == FaultPte); + ASSERT(TempPde.u.Hard.L1.Coarse.Type == CoarsePte); + *PointerPde = TempPde; + + // + // Unmap the page directory + // + MmDeleteHyperspaceMapping(PageDirectory); + + // + // Return the page table base + // + DirectoryTableBase->QuadPart = Pfn[0] << PAGE_SHIFT; + return TRUE; } VOID @@ -349,86 +449,63 @@ MmEnableVirtualMapping(IN PEPROCESS Process, NTSTATUS NTAPI -MmCreateVirtualMappingInternal(IN PVOID Address, +MmCreateVirtualMappingInternal(IN PEPROCESS Process, + IN PVOID Address, IN ULONG Protection, IN PPFN_NUMBER Pages, IN ULONG PageCount, IN BOOLEAN MarkAsMapped) { - PMMPTE PointerPte, LastPte, PointerPde, LastPde; - MMPTE TempPte, TempPde; - NTSTATUS Status; - PFN_NUMBER Pfn; + PMMPTE PointerPte = NULL; + MMPTE TempPte; + PVOID Addr; + ULONG OldPdeOffset, PdeOffset, i; DPRINT("[KMAP]: %p %d\n", Address, PageCount); //ASSERT(Address >= MmSystemRangeStart); // - // Get our templates + // Get our template PTE // TempPte = MiArmTemplatePte; - TempPde = MiArmTemplatePde; // - // Check if we have PDEs for this region + // Loop every page // - PointerPde = MiGetPdeAddress(Address); - LastPde = PointerPde + (PageCount / 256); - while (PointerPde <= LastPde) + Addr = Address; + OldPdeOffset = MiGetPdeOffset(Addr) + 1; + for (i = 0; i < PageCount; i++) { // - // Check if we need to allocate the PDE + // Get the next PDE offset and check if it's a new one // - if (PointerPde->u.Hard.L1.Fault.Type == FaultPte) + PdeOffset = MiGetPdeOffset(Addr); + if (OldPdeOffset != PdeOffset) { // - // Request a page + // Get rid of the old L2 Table, if this was the last PTE on it // - Status = MmRequestPageMemoryConsumer(MC_NPPOOL, FALSE, &Pfn); - if (!NT_SUCCESS(Status)) return Status; + MiUnmapPageTable(PointerPte); // - // Setup the PFN + // Get the PTE for this address, and create the PDE for it // - TempPde.u.Hard.L1.Coarse.BaseAddress = (Pfn << PAGE_SHIFT) >> CPT_SHIFT; - + PointerPte = MiGetPageTableForProcess(NULL, Addr, TRUE); + ASSERT(PointerPte); + } + else + { // - // Write the PDE + // Go to the next PTE on this PDE // - ASSERT(PointerPde->u.Hard.L1.Fault.Type == FaultPte); - ASSERT(TempPde.u.Hard.L1.Coarse.Type == CoarsePte); - *PointerPde = TempPde; - - // - // Get the PTE for this 1MB region - // - PointerPte = MiGetPteAddress(MiGetPteAddress(Address)); - - // - // Write the PFN of the PDE - // - TempPte.u.Hard.L2.Small.BaseAddress = Pfn; - - // - // Write the PTE - // - ASSERT(PointerPte->u.Hard.L2.Fault.Type == FaultPte); - ASSERT(TempPte.u.Hard.L2.Small.Type == SmallPte); - *PointerPte = TempPte; + ASSERT(PointerPte); + PointerPte++; } // - // Next + // Save the current PDE // - PointerPde++; - } - - // - // Get start and end address and loop each PTE - // - PointerPte = MiGetPteAddress(Address); - LastPte = PointerPte + PageCount - 1; - while (PointerPte <= LastPte) - { + OldPdeOffset = PdeOffset; + // // Mark it as mapped // @@ -447,9 +524,9 @@ MmCreateVirtualMappingInternal(IN PVOID Address, *PointerPte = TempPte; // - // Next + // Move to the next page // - PointerPte++; + Addr = (PVOID)((ULONG_PTR)Addr + PAGE_SIZE); } // @@ -468,7 +545,8 @@ MmCreateVirtualMappingForKernel(IN PVOID Address, // // Call the internal version // - return MmCreateVirtualMappingInternal(Address, + return MmCreateVirtualMappingInternal(NULL, + Address, Protection, Pages, PageCount, @@ -491,7 +569,8 @@ MmCreateVirtualMappingUnsafe(IN PEPROCESS Process, // // Call the internal version // - return MmCreateVirtualMappingInternal(Address, + return MmCreateVirtualMappingInternal(Process, + Address, Protection, Pages, PageCount, From f492f5a8cde72834028a48b261847b60606fdca4 Mon Sep 17 00:00:00 2001 From: ReactOS Portable Systems Group Date: Thu, 31 Jul 2008 07:31:55 +0000 Subject: [PATCH 047/304] - Fix ARM NTOS brekage (and amd64/ppc): - Only build kd/i386 on i386 builds since this code is x86-32 centric. - Only call KdpEnableSafeMem on i386 builds, since the code uses x86-32 centric defines. svn path=/trunk/; revision=34977 --- reactos/ntoskrnl/kd/kdinit.c | 6 +++++- reactos/ntoskrnl/ntoskrnl-generic.rbuild | 8 +++++--- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/kd/kdinit.c b/reactos/ntoskrnl/kd/kdinit.c index dfbb09f349d..6746593bb29 100644 --- a/reactos/ntoskrnl/kd/kdinit.c +++ b/reactos/ntoskrnl/kd/kdinit.c @@ -258,7 +258,11 @@ KdInitSystem(ULONG BootPhase, return TRUE; } else - KdpEnableSafeMem(); + { +#ifdef _M_IX86 + KdpEnableSafeMem(); +#endif + } /* Call the Initialization Routines of the Registered Providers */ KdpCallInitRoutine(BootPhase); diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index 6856489d44e..fd1aa231725 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -273,9 +273,11 @@ - - kdmemsup.c - + + + kdmemsup.c + + From 41ad8e0c8041b62819ccdb1968c788145deb5a5c Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Thu, 31 Jul 2008 14:25:35 +0000 Subject: [PATCH 048/304] - Change an infinite loop to an assert to simplify debugging svn path=/trunk/; revision=34979 --- reactos/ntoskrnl/ke/i386/irqobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ke/i386/irqobj.c b/reactos/ntoskrnl/ke/i386/irqobj.c index b6f5ae20737..52266fd63eb 100644 --- a/reactos/ntoskrnl/ke/i386/irqobj.c +++ b/reactos/ntoskrnl/ke/i386/irqobj.c @@ -281,7 +281,7 @@ KeConnectInterrupt(IN PKINTERRUPT Interrupt) (Dispatch.Interrupt->Mode == Interrupt->Mode)) { /* The vector is shared and the interrupts are compatible */ - while (TRUE); // FIXME: NOT YET SUPPORTED/TESTED + ASSERT(FALSE); // FIXME: NOT YET SUPPORTED/TESTED Interrupt->Connected = Connected = TRUE; ASSERT(Irql <= SYNCH_LEVEL); From 173a8d6c7af0f82aac600da71e79e84603b4ee52 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Thu, 31 Jul 2008 17:46:50 +0000 Subject: [PATCH 049/304] In exit and _cexit, call atexit routines. (Bug 3432_) svn path=/trunk/; revision=34980 --- reactos/lib/sdk/crt/stdlib/_exit.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/reactos/lib/sdk/crt/stdlib/_exit.c b/reactos/lib/sdk/crt/stdlib/_exit.c index 3a5c2d3e8bb..a876fe222e6 100644 --- a/reactos/lib/sdk/crt/stdlib/_exit.c +++ b/reactos/lib/sdk/crt/stdlib/_exit.c @@ -1,6 +1,8 @@ #include #include +extern void _atexit_cleanup(void); + struct __atexit *__atexit_ptr = 0; /* @@ -18,6 +20,7 @@ void exit(int status) */ /* in case the program set it this way */ _setmode(0, O_TEXT); + _atexit_cleanup(); _exit(status); for(;;); } @@ -28,6 +31,7 @@ void exit(int status) */ void _exit(int _status) { + // FIXME: _exit and _c_exit should prevent atexit routines from being called during DLL unload ExitProcess(_status); for(;;); } @@ -37,6 +41,7 @@ void _exit(int _status) */ void _cexit( void ) { + _atexit_cleanup(); // flush } @@ -45,5 +50,6 @@ void _cexit( void ) */ void _c_exit( void ) { + // FIXME: _exit and _c_exit should prevent atexit routines from being called during DLL unload // reset interup vectors } From ffad542df1ad66c18bf892d3c55469c61422fdac Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Thu, 31 Jul 2008 19:53:49 +0000 Subject: [PATCH 050/304] Mario Kacmar - Key remapping for qwertz applied. svn path=/trunk/; revision=34983 --- reactos/dll/keyboard/kbdsk/kbdsk.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/reactos/dll/keyboard/kbdsk/kbdsk.c b/reactos/dll/keyboard/kbdsk/kbdsk.c index 64f89724bea..e071140735e 100644 --- a/reactos/dll/keyboard/kbdsk/kbdsk.c +++ b/reactos/dll/keyboard/kbdsk/kbdsk.c @@ -41,9 +41,9 @@ ROSDATA USHORT scancode_to_vk[] = { '7', '8', '9', '0', VK_OEM_MINUS, VK_OEM_PLUS, VK_BACK, /* - 0f - */ - /* First Letters Row */ + /* First Letters Row - qwertZ */ VK_TAB, 'Q', 'W', 'E', - 'R', 'T', 'Y', 'U', + 'R', 'T', 'Z', 'U', 'I', 'O', 'P', VK_OEM_4, VK_OEM_6, VK_RETURN, /* - 1d - */ @@ -55,7 +55,7 @@ ROSDATA USHORT scancode_to_vk[] = { VK_LSHIFT, VK_OEM_7, /* - 2c - */ /* Third letters row */ - 'Z', 'X', 'C', 'V', + 'Y', 'X', 'C', 'V', 'B', 'N', 'M', VK_OEM_COMMA, VK_OEM_PERIOD,VK_OEM_2, VK_RSHIFT|KEXT, /* - 37 - */ @@ -253,8 +253,8 @@ ROSDATA VK_TO_WCHARS4 key_to_chars_4mod[] = { { 'V', CAPS, {'v', 'V', 0x16, '@'} }, { 'W', CAPS, {'w', 'W', 0x17, '|'} }, { 'X', CAPS, {'x', 'X', 0x18, '#'} }, - { 'Y', CAPS, {'z', 'Z', 0x1a, WCH_NONE} }, // qwertZ - { 'Z', CAPS, {'y', 'Y', 0x19, '>'} }, + { 'Y', CAPS, {'y', 'Y', 0x19, WCH_NONE} }, + { 'Z', CAPS, {'z', 'Z', 0x1a, '>'} }, { 0, 0 } }; From 717a13e2d77103407b119f435484d2199ab35b83 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Thu, 31 Jul 2008 21:33:17 +0000 Subject: [PATCH 051/304] Fix handle leaks in RtlCreateUserThread and SmExecPgm. svn path=/trunk/; revision=34984 --- reactos/base/system/smss/smapiexec.c | 2 ++ reactos/lib/rtl/thread.c | 5 ++++- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/reactos/base/system/smss/smapiexec.c b/reactos/base/system/smss/smapiexec.c index 87d7089f7d8..77f08871d2f 100644 --- a/reactos/base/system/smss/smapiexec.c +++ b/reactos/base/system/smss/smapiexec.c @@ -265,6 +265,8 @@ SMAPI(SmExecPgm) DPRINT1("SM: %s: SmCreateClient failed (Status=0x%08lx)\n", __FUNCTION__, Status); } + NtClose(ProcessInfo.ThreadHandle); + NtClose(ProcessInfo.ProcessHandle); } } else diff --git a/reactos/lib/rtl/thread.c b/reactos/lib/rtl/thread.c index e862e85323e..aafe0b4fb0f 100644 --- a/reactos/lib/rtl/thread.c +++ b/reactos/lib/rtl/thread.c @@ -209,7 +209,10 @@ RtlCreateUserThread(IN HANDLE ProcessHandle, else { /* Return thread data */ - if (ThreadHandle) *ThreadHandle = Handle; + if (ThreadHandle) + *ThreadHandle = Handle; + else + NtClose(Handle); if (ClientId) *ClientId = ThreadCid; } From 30d2593564403259713572ab57921a3a3755ac96 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 31 Jul 2008 22:48:59 +0000 Subject: [PATCH 052/304] - Support relative callback proc with module base. svn path=/trunk/; revision=34985 --- reactos/subsystems/win32/win32k/ntuser/hook.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index 5b508fff483..84a2679d250 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -1142,7 +1142,11 @@ NtUserSetWindowsHookEx( Hook->ModuleName.Length = ModuleName.Length; } - Hook->Proc = HookProc; + if (Mod) /* make proc relative to the module base */ + Hook->Proc = (void *)((char *)HookProc - (char *)Mod); + else + Hook->Proc = HookProc; + Hook->Ansi = Ansi; Handle = Hook->Self; From 3e6656c48cbfde753ddf5e6b220bf79d49298d44 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Thu, 31 Jul 2008 23:48:35 +0000 Subject: [PATCH 053/304] - Preliminary implementation of SetWinEventHook and UnhookWinEvent. - Only wine cross test uses this and testing is not stable. - Patches are welcome but all code is subject to change. - All Hook code should be ready by Aug 4th. svn path=/trunk/; revision=34988 --- .../subsystems/win32/win32k/include/hook.h | 2 + .../win32/win32k/include/msgqueue.h | 7 +- .../subsystems/win32/win32k/ntuser/event.c | 256 +++++++++++++++++- reactos/subsystems/win32/win32k/ntuser/hook.c | 2 +- .../subsystems/win32/win32k/ntuser/message.c | 2 +- .../subsystems/win32/win32k/ntuser/msgqueue.c | 11 +- 6 files changed, 263 insertions(+), 17 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/hook.h b/reactos/subsystems/win32/win32k/include/hook.h index 221372b615b..0a020bfaed1 100644 --- a/reactos/subsystems/win32/win32k/include/hook.h +++ b/reactos/subsystems/win32/win32k/include/hook.h @@ -33,6 +33,8 @@ typedef struct tagEVENTHOOK PETHREAD Thread; /* Thread owning the event */ UINT eventMin; UINT eventMax; + DWORD idProcess; + DWORD idThread; WINEVENTPROC Proc; /* Event function */ BOOLEAN Ansi; /* Is it an Ansi event? */ ULONG Flags; /* Some internal flags */ diff --git a/reactos/subsystems/win32/win32k/include/msgqueue.h b/reactos/subsystems/win32/win32k/include/msgqueue.h index 8a009dc0d8d..06ee33d3261 100644 --- a/reactos/subsystems/win32/win32k/include/msgqueue.h +++ b/reactos/subsystems/win32/win32k/include/msgqueue.h @@ -4,6 +4,9 @@ #include "hook.h" #define MSQ_HUNG 5000 +#define MSQ_NORMAL 0 +#define MSQ_ISHOOK 1 +#define MSQ_ISEVENT 2 typedef struct _USER_MESSAGE { @@ -25,7 +28,7 @@ typedef struct _USER_SENT_MESSAGE ULONG_PTR CompletionCallbackContext; /* entry in the dispatching list of the sender's message queue */ LIST_ENTRY DispatchingListEntry; - BOOL HookMessage; + INT HookMessage; } USER_SENT_MESSAGE, *PUSER_SENT_MESSAGE; typedef struct _USER_SENT_MESSAGE_NOTIFY @@ -121,7 +124,7 @@ MsqIsHung(PUSER_MESSAGE_QUEUE MessageQueue); NTSTATUS FASTCALL co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, - UINT uTimeout, BOOL Block, BOOL HookMessage, + UINT uTimeout, BOOL Block, INT HookMessage, ULONG_PTR *uResult); PUSER_MESSAGE FASTCALL MsqCreateMessage(LPMSG Msg, BOOLEAN FreeLParam); diff --git a/reactos/subsystems/win32/win32k/ntuser/event.c b/reactos/subsystems/win32/win32k/ntuser/event.c index bdec573132e..821e5b842aa 100644 --- a/reactos/subsystems/win32/win32k/ntuser/event.c +++ b/reactos/subsystems/win32/win32k/ntuser/event.c @@ -4,8 +4,9 @@ #define NDEBUG #include -//static PEVENTTABLE GlobalEvents; - +static PEVENTTABLE GlobalEvents = NULL; +static ULONG EventSys[EVENT_SYSTEM_MINIMIZEEND+1] = {0}; +static ULONG EventObj[( EVENT_OBJECT_ACCELERATORCHANGE - EVENT_OBJECT_CREATE) +1] = {0}; /* PRIVATE FUNCTIONS *********************************************************/ @@ -43,6 +44,88 @@ GetMaskFromEvent(DWORD Event) return Ret; } +static +VOID +FASTCALL +IntEventUpCount(ULONG eventMin, ULONG eventMax) +{ + INT i, Min, Max; + + if ( eventMin >= EVENT_SYSTEM_SOUND && eventMax <= EVENT_SYSTEM_MINIMIZEEND) + { + for (i = eventMin; i < eventMax; i++) + { + gpsi->SrvEventActivity |= GetMaskFromEvent(i); + EventSys[i]++; + } + } + if ( eventMin >= EVENT_OBJECT_CREATE && eventMax <= EVENT_OBJECT_ACCELERATORCHANGE) + { + for (i = eventMin; i < eventMax; i++) + { + gpsi->SrvEventActivity |= GetMaskFromEvent(i); + EventObj[i - EVENT_OBJECT_CREATE]++; + } + } + if ( eventMin >= EVENT_SYSTEM_SOUND && eventMax <= EVENT_OBJECT_ACCELERATORCHANGE) + { + Max = EVENT_SYSTEM_MINIMIZEEND; + for (i = eventMin; i < Max; i++) + { + gpsi->SrvEventActivity |= GetMaskFromEvent(i); + EventSys[i]++; + } + Min = EVENT_OBJECT_CREATE; + for (i = Min; i < eventMax; i++) + { + gpsi->SrvEventActivity |= GetMaskFromEvent(i); + EventObj[i - EVENT_OBJECT_CREATE]++; + } + } +} + +static +VOID +FASTCALL +IntEventDownCount(ULONG eventMin, ULONG eventMax) +{ + INT i, Min, Max; + + if ( eventMin >= EVENT_SYSTEM_SOUND && eventMax <= EVENT_SYSTEM_MINIMIZEEND) + { + for (i = eventMin; i < eventMax; i++) + { + EventSys[i]--; + if (!EventSys[i]) gpsi->SrvEventActivity &= ~GetMaskFromEvent(i); + } + } + if ( eventMin >= EVENT_OBJECT_CREATE && eventMax <= EVENT_OBJECT_ACCELERATORCHANGE) + { + for (i = eventMin; i < eventMax; i++) + { + EventObj[i - EVENT_OBJECT_CREATE]--; + if (!EventObj[i - EVENT_OBJECT_CREATE]) + gpsi->SrvEventActivity &= ~GetMaskFromEvent(i); + } + } + if ( eventMin >= EVENT_SYSTEM_SOUND && eventMax <= EVENT_OBJECT_ACCELERATORCHANGE) + { + Max = EVENT_SYSTEM_MINIMIZEEND; + for (i = eventMin; i < Max; i++) + { + EventSys[i]--; + if (!EventSys[i]) gpsi->SrvEventActivity &= ~GetMaskFromEvent(i); + } + Min = EVENT_OBJECT_CREATE; + for (i = Min; i < eventMax; i++) + { + EventObj[i - EVENT_OBJECT_CREATE]--; + if (!EventObj[i - EVENT_OBJECT_CREATE]) + gpsi->SrvEventActivity &= ~GetMaskFromEvent(i); + } + } +} + static DWORD @@ -52,6 +135,48 @@ TimeStamp(VOID) return (DWORD)((ULONGLONG)SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier / 16777216); } +static +LRESULT +FASTCALL +IntCallLowLevelEvent( PEVENTHOOK pEH, + DWORD event, + HWND hwnd, + LONG idObject, + LONG idChild) +{ + NTSTATUS Status; + ULONG_PTR uResult; + + /* FIXME should get timeout from + * HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout */ + Status = co_MsqSendMessage(((PW32THREAD)pEH->Thread->Tcb.Win32Thread)->MessageQueue, + hwnd, + event, + idObject, + idChild, + 5000, + TRUE, + MSQ_ISEVENT, + &uResult); + + return NT_SUCCESS(Status) ? uResult : 0; +} + +static +BOOL +FASTCALL +IntRemoveEvent(PEVENTHOOK pEH) +{ + if (pEH) + { + RemoveEntryList(&pEH->Chain); + GlobalEvents->Counts--; + UserDeleteObject(pEH->Self, otEvent); + return TRUE; + } + return FALSE; +} + /* FUNCTIONS *****************************************************************/ LRESULT @@ -62,18 +187,26 @@ co_EVENT_CallEvents( DWORD event, LONG idChild) { - PEVENTHOOK peh = UserHeapAlloc(sizeof(EVENTHOOK)); + PEVENTHOOK pEH = UserHeapAlloc(sizeof(EVENTHOOK)); if ((gpsi->SrvEventActivity & GetMaskFromEvent(event))) return 0; // No events to run. - LRESULT Result = co_IntCallEventProc(peh->Self, + + if ((pEH->Thread != PsGetCurrentThread()) && (pEH->Thread != NULL)) + { + // Post it in message queue. + return IntCallLowLevelEvent(pEH, event, hwnd, idObject, idChild); + } + + + LRESULT Result = co_IntCallEventProc(pEH->Self, event, hwnd, idObject, idChild, (DWORD)(NtCurrentTeb()->Cid).UniqueThread, TimeStamp(), - peh->Proc); + pEH->Proc); return Result; } @@ -86,7 +219,9 @@ NtUserNotifyWinEvent( LONG idObject, LONG idChild) { + UserEnterExclusive(); UNIMPLEMENTED + UserLeave(); } HWINEVENTHOOK @@ -101,12 +236,98 @@ NtUserSetWinEventHook( DWORD idThread, UINT dwflags) { - gpsi->SrvEventActivity |= GetMaskFromEvent(eventMin); - gpsi->SrvEventActivity &= ~GetMaskFromEvent(eventMin); + PEVENTHOOK pEH; + HWINEVENTHOOK Ret = NULL; + UNICODE_STRING ModuleName; + NTSTATUS Status; + HANDLE Handle; - UNIMPLEMENTED + UserEnterExclusive(); - return 0; + DPRINT1("WARNING! Use at your own risk! Function is UNIMPLEMENTED!\n"); + + if ( !GlobalEvents ) + { + GlobalEvents = ExAllocatePoolWithTag(PagedPool, sizeof(EVENTTABLE), TAG_HOOK); + GlobalEvents->Counts = 0; + InitializeListHead(&GlobalEvents->Events); + } + + pEH = UserCreateObject(gHandleTable, &Handle, otEvent, sizeof(EVENTHOOK)); + if (pEH) + { + InsertTailList(&GlobalEvents->Events, &pEH->Chain); + GlobalEvents->Counts++; + + pEH->Self = Handle; + pEH->Thread = PsGetCurrentThread(); + pEH->eventMin = eventMin; + pEH->eventMax = eventMax; + pEH->idProcess = idProcess; + pEH->idThread = idThread; + pEH->Ansi = FALSE; + pEH->Flags = dwflags; + + if ((dwflags & WINEVENT_INCONTEXT) && !hmodWinEventProc) + { + SetLastWin32Error(ERROR_HOOK_NEEDS_HMOD); + goto SetEventExit; + } + + if (eventMin > eventMax) + { + SetLastWin32Error(ERROR_INVALID_HOOK_FILTER); + goto SetEventExit; + } + + if (NULL != hmodWinEventProc) + { + Status = MmCopyFromCaller(&ModuleName, puString, sizeof(UNICODE_STRING)); + if (! NT_SUCCESS(Status)) + { + UserDereferenceObject(pEH); + IntRemoveEvent(pEH); + SetLastNtError(Status); + goto SetEventExit; + } + pEH->ModuleName.Buffer = ExAllocatePoolWithTag(PagedPool, + ModuleName.MaximumLength, + TAG_HOOK); + if (NULL == pEH->ModuleName.Buffer) + { + UserDereferenceObject(pEH); + IntRemoveEvent(pEH); + SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY); + goto SetEventExit; + } + pEH->ModuleName.MaximumLength = ModuleName.MaximumLength; + Status = MmCopyFromCaller(pEH->ModuleName.Buffer, + ModuleName.Buffer, + ModuleName.MaximumLength); + if (! NT_SUCCESS(Status)) + { + ExFreePool(pEH->ModuleName.Buffer); + UserDereferenceObject(pEH); + IntRemoveEvent(pEH); + SetLastNtError(Status); + goto SetEventExit; + } + pEH->ModuleName.Length = ModuleName.Length; + pEH->Proc = (void *)((char *)lpfnWinEventProc - (char *)hmodWinEventProc); + } + else + pEH->Proc = lpfnWinEventProc; + + Ret = Handle; + /* + Now we are good, set the Events and counts. + */ + IntEventUpCount(eventMin, eventMax); + } + +SetEventExit: + UserLeave(); + return Ret; } @@ -115,9 +336,22 @@ STDCALL NtUserUnhookWinEvent( HWINEVENTHOOK hWinEventHook) { - UNIMPLEMENTED + PEVENTHOOK pEH; + BOOL Ret = FALSE; - return FALSE; + UserEnterExclusive(); + + DPRINT1("WARNING! Use at your own risk! Function is UNIMPLEMENTED!\n"); + + pEH = (PEVENTHOOK)UserGetObject(gHandleTable, hWinEventHook, otEvent); + if (pEH) + { + IntEventDownCount(pEH->eventMin, pEH->eventMax); + Ret = IntRemoveEvent(pEH); + } + + UserLeave(); + return Ret; } /* EOF */ diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index 84a2679d250..52c4a4b2819 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -281,7 +281,7 @@ IntCallLowLevelHook(PHOOK Hook, INT Code, WPARAM wParam, LPARAM lParam) lParam, 5000, TRUE, - TRUE, + MSQ_ISHOOK, &uResult); return NT_SUCCESS(Status) ? uResult : 0; diff --git a/reactos/subsystems/win32/win32k/ntuser/message.c b/reactos/subsystems/win32/win32k/ntuser/message.c index ac1a77cca50..0889c717191 100644 --- a/reactos/subsystems/win32/win32k/ntuser/message.c +++ b/reactos/subsystems/win32/win32k/ntuser/message.c @@ -1555,7 +1555,7 @@ co_IntSendMessageTimeoutSingle(HWND hWnd, lParam, uTimeout, (uFlags & SMTO_BLOCK), - FALSE, + MSQ_NORMAL, uResult); } while ((STATUS_TIMEOUT == Status) && diff --git a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c index ac2bc371555..d472d8ec2cb 100644 --- a/reactos/subsystems/win32/win32k/ntuser/msgqueue.c +++ b/reactos/subsystems/win32/win32k/ntuser/msgqueue.c @@ -929,13 +929,20 @@ co_MsqDispatchOneSentMessage(PUSER_MESSAGE_QUEUE MessageQueue) InsertTailList(&MessageQueue->LocalDispatchingMessagesHead, &Message->ListEntry); - if (Message->HookMessage) + if (Message->HookMessage == MSQ_ISHOOK) { Result = co_HOOK_CallHooks(Message->Msg.message, (INT)(INT_PTR)Message->Msg.hwnd, Message->Msg.wParam, Message->Msg.lParam); } + else if (Message->HookMessage == MSQ_ISEVENT) + { + Result = co_EVENT_CallEvents( Message->Msg.message, + Message->Msg.hwnd, + (LONG) Message->Msg.wParam, + (LONG) Message->Msg.lParam); + } else { /* Call the window procedure. */ @@ -1090,7 +1097,7 @@ MsqSendNotifyMessage(PUSER_MESSAGE_QUEUE MessageQueue, NTSTATUS FASTCALL co_MsqSendMessage(PUSER_MESSAGE_QUEUE MessageQueue, HWND Wnd, UINT Msg, WPARAM wParam, LPARAM lParam, - UINT uTimeout, BOOL Block, BOOL HookMessage, + UINT uTimeout, BOOL Block, INT HookMessage, ULONG_PTR *uResult) { PUSER_SENT_MESSAGE Message; From 415228662a351dd3473d60d5313d826e5e611c15 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 1 Aug 2008 09:14:56 +0000 Subject: [PATCH 054/304] Updated French translation for shell32. Also fixed typo, even if I thought I already did it!? svn path=/trunk/; revision=34991 --- reactos/dll/win32/shell32/lang/fr-FR.rc | 94 ++++++++++++------------- 1 file changed, 47 insertions(+), 47 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index f997136458d..614a18a3a03 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -101,7 +101,7 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "", IDD_TITLE, 10, 8, 198, 24 LTEXT "", IDD_STATUS, 10, 25, 198, 12 - LTEXT "Dossier:", IDD_FOLDER, 10, 152, 40, 12 + LTEXT "Dossier :", IDD_FOLDER, 10, 152, 40, 12 CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP PUSHBUTTON "Crer un nouveau dossier", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP @@ -171,19 +171,19 @@ CAPTION "Raccourci" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 4, 30, 30, WS_VISIBLE - LTEXT "Type de la cible:", 14004, 8, 38, 64, 10 + LTEXT "Type de la cible :", 14004, 8, 38, 64, 10 LTEXT "", 14005, 78, 38, 142, 10 - LTEXT "Localisation de la cible:", 14006, 8, 58, 64, 10 + LTEXT "Localisation de la cible :", 14006, 8, 58, 64, 10 LTEXT "", 14007, 79, 58, 141, 10 - LTEXT "Cible:", 14008, 8, 77, 45, 10 + LTEXT "Cible :", 14008, 8, 77, 45, 10 EDITTEXT 14009, 79, 75, 150, 14, ES_AUTOHSCROLL - LTEXT "Dmarrer dans:", 14010, 8, 96, 57, 10 + LTEXT "Dmarrer dans :", 14010, 8, 96, 57, 10 EDITTEXT 14011, 79, 94, 150, 14, ES_AUTOHSCROLL - LTEXT "Touche de raccourci:", 14014, 8, 115, 57, 10 + LTEXT "Touche de raccourci :", 14014, 8, 115, 57, 10 EDITTEXT 14015, 79, 112, 150, 14, ES_LEFT - LTEXT "Excuter:", 14016, 8, 134, 57, 10 + LTEXT "Excuter :", 14016, 8, 134, 57, 10 EDITTEXT 14017, 79, 131, 150, 14, ES_AUTOHSCROLL - LTEXT "C&ommentaire:", 14018, 8, 152, 57, 10 + LTEXT "C&ommentaire :", 14018, 8, 152, 57, 10 EDITTEXT 14019, 79, 149, 150, 14, ES_AUTOHSCROLL PUSHBUTTON "Trouver la cible...", 14020, 9, 172, 70, 14, ES_LEFT PUSHBUTTON "&Changer d'icne...", 14021, 84, 172, 70, 14, ES_LEFT @@ -210,18 +210,18 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type of file:", 14004, 8, 35, 50, 10 - LTEXT "Folder", 14005, 68, 35, 160, 10 - LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "Type de fichier :", 14004, 8, 35, 50, 10 + LTEXT "Dossier", 14005, 68, 35, 160, 10 + LTEXT "Localisation :", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 315, 10 - LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "Taille :", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "Contient :", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "Cr :", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 - AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 + AUTOCHECKBOX "Lectu&re-seule", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "Cac&h", 14022, 126, 150, 50, 10 END SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 @@ -231,21 +231,21 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type de fichier:", 14004, 8, 35, 50, 10 + LTEXT "Type de fichier :", 14004, 8, 35, 50, 10 LTEXT "Fichier", 14005, 68, 35, 160, 10 - LTEXT "Ouvrir avec:", 14006, 8, 53, 50, 10 + LTEXT "Ouvrir avec :", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 160, 10 - LTEXT "Localisation:", 14008, 8, 72, 45, 10 + LTEXT "Localisation :", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Taille:", 14010, 8, 93, 45, 10 + LTEXT "Taille :", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Cr:", 14014, 8, 118, 45, 10 + LTEXT "Cr :", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - LTEXT "Modifi:", 14016, 8, 140, 45, 10 + LTEXT "Modifi :", 14016, 8, 140, 45, 10 LTEXT "", 14017, 68, 140, 160, 10 - LTEXT "Accd:", 14018, 8, 160, 45, 10 + LTEXT "Accd :", 14018, 8, 160, 45, 10 LTEXT "", 14019, 68, 160, 160, 10 - LTEXT "Attributs:", 14020, 8, 189, 45, 10 + LTEXT "Attributs :", 14020, 8, 189, 45, 10 CHECKBOX "Lectu&re-seule", 14021, 58, 189, 67, 10 CHECKBOX "Cac&h", 14022, 126, 189, 50, 10 CHECKBOX "&Archive", 14023, 181, 189, 49, 10 @@ -256,15 +256,15 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Version" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Version du fichier: ", 14000, 10, 10, 55, 10 + LTEXT "Version du fichier : ", 14000, 10, 10, 55, 10 LTEXT "", 14001, 77, 10, 152, 10 - LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "Description : ", 14002, 10, 27, 45, 10 LTEXT "", 14003, 77, 27, 152, 10 - LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "Copyright : ", 14004, 10, 46, 66, 10 LTEXT "", 14005, 77, 46, 152, 10 - GROUPBOX "Autres informations de version: ", 14006, 6, 70, 222, 115 - LTEXT "Nom de l'lment: ", 14007, 13, 82, 50, 10 - LTEXT "Valeur: ", 14008, 112, 82, 45, 10 + GROUPBOX "Autres informations de version : ", 14006, 6, 70, 222, 115 + LTEXT "Nom de l'lment : ", 14007, 13, 82, 50, 10 + LTEXT "Valeur : ", 14008, 112, 82, 45, 10 LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY END @@ -275,23 +275,23 @@ CAPTION "G FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN EDITTEXT 14001, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP - LTEXT "Type:", -1, 15, 55, 40, 10 + LTEXT "Type :", -1, 15, 55, 40, 10 LTEXT "", 14002, 110, 55, 100, 10 - LTEXT "Systme de fichier:", -1, 15, 70, 100, 10 + LTEXT "Systme de fichier :", -1, 15, 70, 100, 10 LTEXT "", 14003, 110, 70, 100, 10 CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 - LTEXT "Espace utilis:", -1, 25, 90, 120, 10 + LTEXT "Espace utilis :", -1, 25, 90, 120, 10 LTEXT "", 14004, 110, 90, 120, 10 LTEXT "", 14005, 200, 90, 40, 10 CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 - LTEXT "Espace libre:", -1, 25, 105, 70, 10 + LTEXT "Espace libre :", -1, 25, 105, 70, 10 LTEXT "", 14006, 110, 105, 120, 10 LTEXT "", 14007, 200, 105, 40, 10 - LTEXT "Capacit:", -1, 25, 125, 80, 10 + LTEXT "Capacit :", -1, 25, 125, 80, 10 LTEXT "", 14008, 110, 125, 120, 10 LTEXT "", 14009, 200, 125, 40, 10 @@ -335,12 +335,12 @@ BEGIN CHECKBOX "Utilisateur actuel %s", 14000, 10, 45, 150, 10 LTEXT "Protger mon ordinateur et mes donnes de l'activ de programme non autoriss", -1, 25, 57, 200, 10, WS_DISABLED CHECKBOX "Cette option peut empcher les virus d'ordinateur d'endommager votre ordinateur ou vos donnes personnelles, nanmoins slectionner cette option pourrait empcher le programme de fonctionner correctement.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE - CHECKBOX "L'utilisateur suivant:", 14002, 10, 100, 90, 10 - LTEXT "Nom d'utilisateur:", -1, 20, 118, 54, 10 + CHECKBOX "L'utilisateur suivant :", 14002, 10, 100, 90, 10 + LTEXT "Nom d'utilisateur :", -1, 20, 118, 54, 10 COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP - LTEXT "Mot de passe:", -1, 20, 143, 53, 10 + LTEXT "Mot de passe :", -1, 20, 143, 53, 10 EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP @@ -617,14 +617,14 @@ BEGIN IDS_CREATEFOLDER_CAPTION "Erreur lors de la cration du nouveau dossier" IDS_DELETEITEM_CAPTION "Confirmer la suppression du fichier" IDS_DELETEFOLDER_CAPTION "Confirmer la suppression du dossier" - IDS_DELETEITEM_TEXT "tes-vous sr de vouloir supprimer '%1'?" + IDS_DELETEITEM_TEXT "tes-vous sr de vouloir supprimer '%1' ?" IDS_DELETEMULTIPLE_TEXT "tes-vous sr de vouloir supprimer ces %1 lments ?" - IDS_DELETESELECTED_TEXT "tes-vous sr de vouloir supprimer l(es) lement(s) slectionn(s)?" - IDS_TRASHITEM_TEXT "tes-vous sr de vouloir envoyer '%1' la Corbeille?" - IDS_TRASHFOLDER_TEXT "tes-vous sr de vouloir envoyer '%1' et tout ce qu'il contient la Corbeille?" - IDS_TRASHMULTIPLE_TEXT "tes-vous sr de vouloir envoyer ces %1 lments la Corbeille?" - IDS_CANTTRASH_TEXT "L'lment '%1' ne peut tre envoy la Corbeille. Voulez-vous le supprimer?" - IDS_OVERWRITEFILE_TEXT "Ce dossier contient dj un fichier nomm '%1'.\n\nVoulez-vous le remplacer?" + IDS_DELETESELECTED_TEXT "tes-vous sr de vouloir supprimer l(es) lement(s) slectionn(s) ?" + IDS_TRASHITEM_TEXT "tes-vous sr de vouloir envoyer '%1' la Corbeille ?" + IDS_TRASHFOLDER_TEXT "tes-vous sr de vouloir envoyer '%1' et tout ce qu'il contient la Corbeille ?" + IDS_TRASHMULTIPLE_TEXT "tes-vous sr de vouloir envoyer ces %1 lments la Corbeille ?" + IDS_CANTTRASH_TEXT "L'lment '%1' ne peut tre envoy la Corbeille. Voulez-vous le supprimer ?" + IDS_OVERWRITEFILE_TEXT "Ce dossier contient dj un fichier nomm '%1'.\n\nVoulez-vous le remplacer ?" IDS_OVERWRITEFILE_CAPTION "Confirmer l'crasement du fichier" IDS_OVERWRITEFOLDER_TEXT "Ce dossier contient dj un dossier nomm '%1'.\n\n"\ "Si les fichiers dans le dossier de destination ont les mmes noms que ceux dans le\n"\ @@ -633,9 +633,9 @@ BEGIN /* message box strings */ IDS_RESTART_TITLE "Redmarrer" - IDS_RESTART_PROMPT "Voulez-vous redmarrer votre ordinateur?" + IDS_RESTART_PROMPT "Voulez-vous redmarrer votre ordinateur ?" IDS_SHUTDOWN_TITLE "Arrter" - IDS_SHUTDOWN_PROMPT "Voulez-vous fermer la session ReactOS?" + IDS_SHUTDOWN_PROMPT "Voulez-vous fermer la session ReactOS ?" /* shell folder path default values */ IDS_PROGRAMS "Menu Dmarrer\\Programmes" From 0e213bbc00ec24315ce91d1d7aa68322e767a56f Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Fri, 1 Aug 2008 10:17:41 +0000 Subject: [PATCH 055/304] Lars Martin Hambro - Norwegian translation of magnify and downloader added. - Fixed resource file (we request patches, not single changed files) - See issue #3504 for more information. svn path=/trunk/; revision=34993 --- rosapps/applications/downloader/lang/no-NO.rc | 61 ++++++++++++++++++ rosapps/applications/downloader/rsrc.rc | 1 + rosapps/applications/magnify/lang/no-NO.rc | 64 +++++++++++++++++++ rosapps/applications/magnify/rsrc.rc | 1 + 4 files changed, 127 insertions(+) create mode 100644 rosapps/applications/downloader/lang/no-NO.rc create mode 100644 rosapps/applications/magnify/lang/no-NO.rc diff --git a/rosapps/applications/downloader/lang/no-NO.rc b/rosapps/applications/downloader/lang/no-NO.rc new file mode 100644 index 00000000000..0a03c9bfa43 --- /dev/null +++ b/rosapps/applications/downloader/lang/no-NO.rc @@ -0,0 +1,61 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_DOWNLOAD DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 76 +STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE +CAPTION "Nedlasting..." +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Prosess1",IDC_PROGRESS,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12 + LTEXT "", IDC_STATUS, 10, 30, 200, 10, SS_CENTER + PUSHBUTTON "Avbryt", IDCANCEL, 85, 58, 50, 15, WS_GROUP | WS_TABSTOP +END + +IDD_PROF DIALOGEX 6, 6, 267, 110 +STYLE DS_SHELLFONT | DS_CENTER | WS_BORDER | WS_CAPTION | WS_POPUP | WS_SYSMENU | WS_VISIBLE +CAPTION "Innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nedlastingsmappe:", -1, 6, 10, 140, 8 + EDITTEXT IDC_DOWNLOAD_FOLDER_EDIT, 6, 20, 205, 14, WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "V&elg...", IDC_CHOOSE_BUTTON, 216, 20, 45, 14 + AUTOCHECKBOX "&Slett installasjonsfiler etter innstallering", IDC_DELINST_FILES_CHECKBOX, 8, 40, 210, 10, WS_GROUP + LTEXT "Oppdater server:", -1, 6, 55, 140, 8 + EDITTEXT IDC_UPDATE_SERVER_EDIT, 6, 65, 255, 14, WS_VISIBLE | WS_TABSTOP + DEFPUSHBUTTON "&OK", IDOK, 147, 90, 54, 15 + PUSHBUTTON "&Avbryt", IDCANCEL, 207, 90, 54, 15 +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_WINDOW_TITLE "Nedlasting ! - ReactOS Nedlasting" + IDS_WELCOME_TITLE "Velkommen til ReactOS Nedlasting" + IDS_WELCOME "Vennligst velg en kategori til hyre. Dette er versjon 1.1." + IDS_NO_APP_TITLE "Ingen applikasjoner er valgt" + IDS_NO_APP "Vennligst velg en applikasjon fr du klikker p nedlasting knappen, hvis du trenger hjelp vennligst klikk p sprsmlsmerke knappen p toppen i hyre hjrne." + IDS_UPDATE_TITLE "Oppdater" + IDS_UPDATE "Beklager denne funksjonen er ikke implementert enn." + IDS_HELP_TITLE "Hjelp" + IDS_HELP "Velg en kategori til venstre, ogs velg en applikasjon og klikk p nedlastings knappen. For oppdatere applikasjon informasjonen klikk p knappen neste etter hjelp knappen." + IDS_NO_APPS "Beklager, det er ingen applikasjoner i denne kategorien enn. Du kan hjelpe og legge til flere applikasjoner." + IDS_CHOOSE_APP "Vennligst velg en applikasjon." + IDS_CHOOSE_SUB "Vennligst velg en underkategori." + IDS_CHOOSE_CATEGORY "Vennligst velg en kategori." + IDS_CHOOSE_BOTH "Vennligst velg en underkategori eller en applikasjon." + IDS_XMLERROR_1 "Kan ikke finne xml filen !" + IDS_XMLERROR_2 "Kan ikke analysere xml filen !" + IDS_DOWNLOAD_ERROR "Ikke mulig laste ned filen.\nVennligst sjekk din internett forbindelse." + IDS_VERSION "Versjon: " + IDS_LICENCE "Lisens: " + IDS_MAINTAINER "Produsent: " + IDS_APPS_TITLE "Applikasjoner" + IDS_CATS_TITLE "Kategori" + IDS_CHOOSE_FOLDER "Vennligst, velg mappen..." + IDS_NOTCREATE_REGKEY "Kan ikke opprette registernkkel." + IDS_DOWNLOAD_FOLDER "Nedlasting" + IDS_UNABLECREATE_FOLDER "Ikke mulig opprette mappe med dette navnet!" + IDS_UPDATE_URL "http://svn.reactos.org" + IDS_INSTALL_DEP "%s trengs bli kjrt %s. Skal %s bli innstallert n?" + TTT_HELPBUTTON "F hjelp om nedlastingen" + TTT_UPDATEBUTTON "Ikke enn tilgjengelig" + TTT_PROFBUTTON "La deg konfigurere nedlastingen" +END diff --git a/rosapps/applications/downloader/rsrc.rc b/rosapps/applications/downloader/rsrc.rc index ce814c3a34e..9c0d4dec986 100644 --- a/rosapps/applications/downloader/rsrc.rc +++ b/rosapps/applications/downloader/rsrc.rc @@ -31,6 +31,7 @@ IDB_TREEVIEW_ICON_13 BITMAP DISCARDABLE "resources/13.bmp" #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/lt-LT.rc" #include "lang/ru-RU.rc" diff --git a/rosapps/applications/magnify/lang/no-NO.rc b/rosapps/applications/magnify/lang/no-NO.rc new file mode 100644 index 00000000000..f9052e9903a --- /dev/null +++ b/rosapps/applications/magnify/lang/no-NO.rc @@ -0,0 +1,64 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDC_MAGNIFIER MENU +BEGIN + POPUP "&Fil" + BEGIN + MENUITEM "A&vslutt", IDM_EXIT + MENUITEM "&Valg", IDM_OPTIONS + MENUITEM SEPARATOR + MENUITEM "&Om ...", IDM_ABOUT + END +END + +IDC_MAGNIFIER ACCELERATORS +BEGIN + "?", IDM_ABOUT, ASCII, ALT + "/", IDM_ABOUT, ASCII, ALT +END + +IDD_ABOUTBOX DIALOGEX 22, 17, 220, 75 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_CAPTION | WS_SYSMENU +CAPTION "Om" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_ICON,IDC_MYICON,14,9,20,20 + LTEXT "Forstrrelse Versjon 1.0",IDC_STATIC,49,10,119,8,SS_NOPREFIX + LTEXT "Enerett (C) 2007 Marc Piulachs (marc.piulachs@codexchange.net)",IDC_STATIC,48,24,125,22 + PUSHBUTTON "OK",IDOK,162,48,50,14 +END + +IDD_DIALOGOPTIONS DIALOGEX 0, 0, 153, 182 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Forstrrelse Innstilling" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "Avslutt",IDOK,96,161,50,14 + PUSHBUTTON "Hjelp",IDC_BUTTON_HELP,38,161,50,14 + LTEXT "Forstrrelse niv:",IDC_STATIC,6,8,68,8 + COMBOBOX IDC_ZOOM,72,6,63,66,CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + GROUPBOX "Sporflging",IDC_STATIC,7,25,139,59 + GROUPBOX "Presentasjon",IDC_STATIC,7,87,139,57 + CONTROL "Flg musen markr",IDC_FOLLOWMOUSECHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,42,114,10 + CONTROL "Flg tastatur fokus",IDC_FOLLOWKEYBOARDCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,54,114,10 + CONTROL "Flg tekstredigerig",IDC_FOLLOWTEXTEDITINGCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,66,114,10 + CONTROL "Invertere Farger",IDC_INVERTCOLORSCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,102,114,10 + CONTROL "Start minimert",IDC_STARTMINIMIZEDCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,114,114,10 + CONTROL "Vis forstrrelse",IDC_SHOWMAGNIFIERCHECK,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,18,126,114,10 +END + +IDD_WARNINGDIALOG DIALOGEX 0, 0, 250, 97 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION +CAPTION "ReactOS Forstrrelse" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,193,76,50,14 + ICON IDI_ICON,IDC_STATIC,7,17,20,20 + LTEXT "Forstrrelse er ptenkt for forsyne en minimum niv av funksjonalitet for brukere med svak syn. Mest brukere med svakt syn som trenger en forstrrelse hjelperedskap med hyere funksjon for dagligbruk.",IDC_STATIC,36,7,207,33 + CONTROL "Ikke vis denne meldingen igjen",IDC_SHOWWARNINGCHECK, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,43,80,137,10 +END + +STRINGTABLE +BEGIN + IDS_APP_TITLE "Forstrrelse" +END diff --git a/rosapps/applications/magnify/rsrc.rc b/rosapps/applications/magnify/rsrc.rc index 4ac906a51fd..9c0059d4d0a 100644 --- a/rosapps/applications/magnify/rsrc.rc +++ b/rosapps/applications/magnify/rsrc.rc @@ -7,6 +7,7 @@ #include "lang/de-DE.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" From 6e81d0c92b38946b6f75e94b84bce8de0f9f19f5 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 1 Aug 2008 11:54:27 +0000 Subject: [PATCH 056/304] Gregor Schneider - Return error code "buffer overflow" instead of "buffer too small" and only do that if really necessary - Only append 0 if Length parameter allows to do so - Use uppercase letters Aleksey Bragin - Wrap it into PSEH, however commented out till a solution for the bootloader is found (linking freeldr with PSEH is not very beautiful). See issue #3583 for more details. svn path=/trunk/; revision=34995 --- reactos/lib/rtl/unicode.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/reactos/lib/rtl/unicode.c b/reactos/lib/rtl/unicode.c index eb2f28debb8..4b86aa6a9fd 100644 --- a/reactos/lib/rtl/unicode.c +++ b/reactos/lib/rtl/unicode.c @@ -1515,6 +1515,7 @@ RtlLargeIntegerToChar( IN ULONG Length, IN OUT PCHAR String) { + NTSTATUS Status = STATUS_SUCCESS; ULONG Radix; CHAR temp[65]; ULONGLONG v = Value->QuadPart; @@ -1538,19 +1539,32 @@ RtlLargeIntegerToChar( if (i < 10) *tp = i + '0'; else - *tp = i + 'a' - 10; + *tp = i + 'A' - 10; tp++; } - if ((ULONG)((ULONG_PTR)tp - (ULONG_PTR)temp) >= Length) - return STATUS_BUFFER_TOO_SMALL; + if ((ULONG)((ULONG_PTR)tp - (ULONG_PTR)temp) > Length) + return STATUS_BUFFER_OVERFLOW; - sp = String; - while (tp > temp) - *sp++ = *--tp; - *sp = 0; + //_SEH_TRY + { + sp = String; + while (tp > temp) + *sp++ = *--tp; - return STATUS_SUCCESS; + if((ULONG)((ULONG_PTR)sp - (ULONG_PTR)String) < Length) + *sp = 0; + } +#if 0 + _SEH_HANDLE + { + /* Get the error code */ + Status = _SEH_GetExceptionCode(); + } + _SEH_END; +#endif + + return Status; } /* From 55f1b1538279e59fb8d40b60b3b16ae9c36e659e Mon Sep 17 00:00:00 2001 From: James Tabor Date: Fri, 1 Aug 2008 12:03:46 +0000 Subject: [PATCH 057/304] - Implement EngGetTickCount. svn path=/trunk/; revision=34996 --- reactos/subsystems/win32/win32k/include/eng.h | 1 + reactos/subsystems/win32/win32k/stubs/stubs.c | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/eng.h b/reactos/subsystems/win32/win32k/include/eng.h index 5ad934cfde9..bbb206f5cc1 100644 --- a/reactos/subsystems/win32/win32k/include/eng.h +++ b/reactos/subsystems/win32/win32k/include/eng.h @@ -22,5 +22,6 @@ IntEngWindowChanged( VOID FASTCALL IntGdiAcquireSemaphore ( HSEMAPHORE hsem ); VOID FASTCALL IntGdiReleaseSemaphore ( HSEMAPHORE hsem ); +ULONGLONG APIENTRY EngGetTickCount(VOID); #endif /* _WIN32K_ENG_H */ diff --git a/reactos/subsystems/win32/win32k/stubs/stubs.c b/reactos/subsystems/win32/win32k/stubs/stubs.c index 5a6ba8c8146..d388cec7c72 100644 --- a/reactos/subsystems/win32/win32k/stubs/stubs.c +++ b/reactos/subsystems/win32/win32k/stubs/stubs.c @@ -2971,8 +2971,7 @@ ULONGLONG APIENTRY EngGetTickCount(VOID) { - UNIMPLEMENTED; - return 0; + return ((ULONGLONG)SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier / 16777216); } BOOLEAN From 00b5f8b803ee335f9d8185b0753b738b7185bd88 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 1 Aug 2008 12:08:01 +0000 Subject: [PATCH 058/304] Removed wrong FIXME: CcInitializeCacheMap doesn't raise exceptions. See issue #3315 for more details. svn path=/trunk/; revision=34998 --- reactos/drivers/filesystems/fastfat/fcb.c | 1 - reactos/drivers/filesystems/fastfat/fsctl.c | 1 - reactos/drivers/filesystems/fastfat/rw.c | 2 -- 3 files changed, 4 deletions(-) diff --git a/reactos/drivers/filesystems/fastfat/fcb.c b/reactos/drivers/filesystems/fastfat/fcb.c index f42d3a62b62..8ae22b8411d 100644 --- a/reactos/drivers/filesystems/fastfat/fcb.c +++ b/reactos/drivers/filesystems/fastfat/fcb.c @@ -332,7 +332,6 @@ vfatFCBInitializeCacheFromVolume (PVCB vcb, PVFATFCB fcb) fcb->FileObject = fileObject; fcb->RefCount++; - /* FIXME: Guard by SEH. */ CcInitializeCacheMap(fileObject, (PCC_FILE_SIZES)(&fcb->RFCB.AllocationSize), FALSE, diff --git a/reactos/drivers/filesystems/fastfat/fsctl.c b/reactos/drivers/filesystems/fastfat/fsctl.c index 99ff3faf3f1..fed155a672b 100644 --- a/reactos/drivers/filesystems/fastfat/fsctl.c +++ b/reactos/drivers/filesystems/fastfat/fsctl.c @@ -537,7 +537,6 @@ VfatMount (PVFAT_IRP_CONTEXT IrpContext) Fcb->RFCB.ValidDataLength = Fcb->RFCB.FileSize; Fcb->RFCB.AllocationSize = Fcb->RFCB.FileSize; - /* FIXME: Guard by SEH. */ CcInitializeCacheMap(DeviceExt->FATFileObject, (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), FALSE, diff --git a/reactos/drivers/filesystems/fastfat/rw.c b/reactos/drivers/filesystems/fastfat/rw.c index dfb12ffe661..11ed87212ae 100644 --- a/reactos/drivers/filesystems/fastfat/rw.c +++ b/reactos/drivers/filesystems/fastfat/rw.c @@ -671,7 +671,6 @@ VfatRead(PVFAT_IRP_CONTEXT IrpContext) CHECKPOINT; if (IrpContext->FileObject->PrivateCacheMap == NULL) { - /* FIXME: Guard by SEH. */ CcInitializeCacheMap(IrpContext->FileObject, (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), FALSE, @@ -965,7 +964,6 @@ NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext) if (IrpContext->FileObject->PrivateCacheMap == NULL) { - /* FIXME: Guard by SEH. */ CcInitializeCacheMap(IrpContext->FileObject, (PCC_FILE_SIZES)(&Fcb->RFCB.AllocationSize), FALSE, From 93988768a0e912d0b0f8565a4a28bac886633b0a Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 1 Aug 2008 12:15:51 +0000 Subject: [PATCH 059/304] - Update some apps in Downloader. svn path=/trunk/; revision=35000 --- rosapps/applications/downloader/downloader.xml | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/rosapps/applications/downloader/downloader.xml b/rosapps/applications/downloader/downloader.xml index 2cd5cdfcc59..0cc0185a3f6 100644 --- a/rosapps/applications/downloader/downloader.xml +++ b/rosapps/applications/downloader/downloader.xml @@ -8,11 +8,11 @@ http://svn.reactos.org/packages/Firefox%20Setup%201.5.0.12.exe - Mozilla Firefox (2.0.0.14) + Mozilla Firefox (2.0.0.16) MPL/GPL/LGPL - 2.0.0.14 + 2.0.0.16 The most popular and one of the best free Web Browsers out there. - http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-2.0/win32/en-US/Firefox%20Setup%202.0.0.14.exe + http://releases.mozilla.org/pub/mozilla.org/firefox/releases/latest-2.0/win32/en-US/Firefox%20Setup%202.0.0.16.exe Opera @@ -33,7 +33,7 @@ MPL/GPL/LGPL 2.0.0.14 The most popular and one of the best free Mail Clients out there. - http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/2.0.0.14/win32/en-US/Thunderbird%20Setup%202.0.0.14.exe + http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-2.0/win32/en-US/Thunderbird%20Setup%202.0.0.16.exe SeaMonkey (1.1.9) @@ -55,9 +55,9 @@ mIRC Shareware - 6.31 + 6.33 The most popular client for the Internet Relay Chat (IRC). - http://mirc.bigchief.dk/mirc631.exe + http://mirc.bigchief.dk/mirc633.exe This tool allows you to access your Windows shared folders/printers with ReactOS. @@ -79,10 +79,10 @@ - "AbiWord 2.6.2 (remove only)" - 2.6.2 + "AbiWord 2.6.4 (remove only)" + 2.6.4 Word processor. - http://www.abiword.org/downloads/abiword/2.6.2/Windows/abiword-setup-2.6.2.exe + http://www.abiword.org/downloads/abiword/2.6.4/Windows/abiword-setup-2.6.4.exe OpenOffice.org 2.4 From 312a3d7379873a63b55779365fe6c4dda1f3ffc9 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 1 Aug 2008 12:34:42 +0000 Subject: [PATCH 060/304] Update forgotten fields svn path=/trunk/; revision=35002 --- rosapps/applications/downloader/downloader.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/rosapps/applications/downloader/downloader.xml b/rosapps/applications/downloader/downloader.xml index 0cc0185a3f6..2cf6f3dddd2 100644 --- a/rosapps/applications/downloader/downloader.xml +++ b/rosapps/applications/downloader/downloader.xml @@ -29,9 +29,9 @@ http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-1.5/win32/en-US/Thunderbird%20Setup%201.5.0.14.exe - Mozilla Thunderbird (2.0.0.14) + Mozilla Thunderbird (2.0.0.16) MPL/GPL/LGPL - 2.0.0.14 + 2.0.0.16 The most popular and one of the best free Mail Clients out there. http://releases.mozilla.org/pub/mozilla.org/thunderbird/releases/latest-2.0/win32/en-US/Thunderbird%20Setup%202.0.0.16.exe From 9d2d4329e13bd16b9ace7dfe08be7ce3cdca4970 Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Fri, 1 Aug 2008 12:48:34 +0000 Subject: [PATCH 061/304] Rename the Norwegian RC Files to no-NO.rc, which is correct according to MSDN. svn path=/trunk/; revision=35003 --- rosapps/applications/imagesoft/lang/{nb-NO.rc => no-NO.rc} | 0 rosapps/applications/imagesoft/rsrc.rc | 2 +- rosapps/applications/winfile/lang/{nb-NO.rc => no-NO.rc} | 0 rosapps/applications/winfile/rsrc.rc | 2 +- rosapps/applications/write/lang/{nb-NO.rc => no-NO.rc} | 0 rosapps/applications/write/rsrc.rc | 2 +- rosapps/templates/old_wordpad/lang/{nb-NO.rc => no-NO.rc} | 0 rosapps/templates/old_wordpad/rsrc.rc | 2 +- 8 files changed, 4 insertions(+), 4 deletions(-) rename rosapps/applications/imagesoft/lang/{nb-NO.rc => no-NO.rc} (100%) rename rosapps/applications/winfile/lang/{nb-NO.rc => no-NO.rc} (100%) rename rosapps/applications/write/lang/{nb-NO.rc => no-NO.rc} (100%) rename rosapps/templates/old_wordpad/lang/{nb-NO.rc => no-NO.rc} (100%) diff --git a/rosapps/applications/imagesoft/lang/nb-NO.rc b/rosapps/applications/imagesoft/lang/no-NO.rc similarity index 100% rename from rosapps/applications/imagesoft/lang/nb-NO.rc rename to rosapps/applications/imagesoft/lang/no-NO.rc diff --git a/rosapps/applications/imagesoft/rsrc.rc b/rosapps/applications/imagesoft/rsrc.rc index 201e9c969a3..511079ed9f6 100644 --- a/rosapps/applications/imagesoft/rsrc.rc +++ b/rosapps/applications/imagesoft/rsrc.rc @@ -13,7 +13,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/rosapps/applications/winfile/lang/nb-NO.rc b/rosapps/applications/winfile/lang/no-NO.rc similarity index 100% rename from rosapps/applications/winfile/lang/nb-NO.rc rename to rosapps/applications/winfile/lang/no-NO.rc diff --git a/rosapps/applications/winfile/rsrc.rc b/rosapps/applications/winfile/rsrc.rc index 2419b343cc0..ea0fe1302e4 100644 --- a/rosapps/applications/winfile/rsrc.rc +++ b/rosapps/applications/winfile/rsrc.rc @@ -64,7 +64,7 @@ IDB_IMAGES BITMAP DISCARDABLE images.bmp #include "lang/hu-HU.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/rosapps/applications/write/lang/nb-NO.rc b/rosapps/applications/write/lang/no-NO.rc similarity index 100% rename from rosapps/applications/write/lang/nb-NO.rc rename to rosapps/applications/write/lang/no-NO.rc diff --git a/rosapps/applications/write/rsrc.rc b/rosapps/applications/write/rsrc.rc index 4204913886c..837aa3bc97e 100644 --- a/rosapps/applications/write/rsrc.rc +++ b/rosapps/applications/write/rsrc.rc @@ -28,7 +28,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/en-US.rc" #include "lang/fr-FR.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ro-RO.rc" diff --git a/rosapps/templates/old_wordpad/lang/nb-NO.rc b/rosapps/templates/old_wordpad/lang/no-NO.rc similarity index 100% rename from rosapps/templates/old_wordpad/lang/nb-NO.rc rename to rosapps/templates/old_wordpad/lang/no-NO.rc diff --git a/rosapps/templates/old_wordpad/rsrc.rc b/rosapps/templates/old_wordpad/rsrc.rc index 91bc58f611b..bc652298cde 100644 --- a/rosapps/templates/old_wordpad/rsrc.rc +++ b/rosapps/templates/old_wordpad/rsrc.rc @@ -8,7 +8,7 @@ #include "lang/fi-FI.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" From ea8d877fe46a159dbec9f451b73093e2d54ade3a Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Fri, 1 Aug 2008 13:08:15 +0000 Subject: [PATCH 062/304] Rename the Norwegian RC Files to no-NO.rc, which is correct according to MSDN. Bug 3516: Translate source archive by Lars Martin (lars_martin4@hotmail.com) svn path=/trunk/; revision=35004 --- .../cacls/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/cacls/rsrc.rc | 2 +- .../calc/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/calc/resource.rc | 2 +- .../charmap/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/charmap/rsrc.rc | 2 +- .../applications/cmdutils/find/lang/no-NO.rc | 17 + .../base/applications/cmdutils/find/rsrc.rc | 1 + .../applications/cmdutils/more/lang/no-NO.rc | 15 + .../base/applications/cmdutils/more/rsrc.rc | 1 + .../dxdiag/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/dxdiag/rsrc.rc | 2 +- .../solitaire/lang/{nb-NO.rc => no-NO.rc} | 24 +- .../base/applications/games/solitaire/rsrc.rc | 2 +- .../winemine/lang/{nb-NO.rc => no-NO.rc} | 12 +- .../base/applications/games/winemine/rsrc.rc | 2 +- .../kbswitch/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/kbswitch/rsrc.rc | 2 +- .../logoff/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/logoff/rsrc.rc | 2 +- .../mmc/lang/{nb_NO.rc => no-NO.rc} | 0 reactos/base/applications/mmc/rsrc.rc | 2 +- .../msconfig/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/msconfig/rsrc.rc | 2 +- .../devmgmt/lang/{nb-NO.rc => no-NO.rc} | 0 .../applications/mscutils/devmgmt/rsrc.rc | 2 +- .../eventvwr/lang/{nb-NO.rc => no-NO.rc} | 0 .../applications/mscutils/eventvwr/rsrc.rc | 2 +- .../servman/lang/{nb-NO.rc => no-NO.rc} | 0 .../applications/mscutils/servman/rsrc.rc | 2 +- .../mstsc/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/mstsc/rsrc.rc | 2 +- .../applications/network/ipconfig/ipconfig.rc | 1 + .../network/ipconfig/lang/no-NO.rc | 65 +++ .../notepad/lang/{nb-NO.rc => no-NO.rc} | 22 +- reactos/base/applications/notepad/rsrc.rc | 2 +- .../regedit/clb/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/regedit/clb/rsrc.rc | 2 +- .../regedit/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/regedit/rsrc.rc | 2 +- .../shutdown/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/shutdown/rsrc.rc | 2 +- .../sndvol32/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/sndvol32/rsrc.rc | 2 +- .../taskmgr/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/taskmgr/rsrc.rc | 2 +- .../winhlp32/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/applications/winhlp32/rsrc.rc | 2 +- .../setup/reactos/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/setup/reactos/rsrc.rc | 2 +- .../setup/vmwinst/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/setup/vmwinst/rsrc.rc | 2 +- .../setup/welcome/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/setup/welcome/rsrc.rc | 2 +- reactos/base/shell/cmd/cmd.rc | 2 +- .../shell/cmd/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/shell/explorer-new/explorer.rc | 1 + reactos/base/shell/explorer-new/lang/no-NO.rc | 59 +++ .../system/expand/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/system/expand/rsrc.rc | 2 +- .../system/format/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/system/format/rsrc.rc | 2 +- .../regsvr32/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/system/regsvr32/rsrc.rc | 2 +- .../rundll32/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/system/rundll32/rsrc.rc | 2 +- .../userinit/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/system/userinit/rsrc.rc | 2 +- .../winlogon/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/base/system/winlogon/rsrc.rc | 2 +- reactos/boot/freeldr/fdebug/fdebug.rc | 2 +- .../fdebug/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/dll/cpl/access/lang/no-NO.rc | 304 ++++++++++++ reactos/dll/cpl/access/rsrc.rc | 1 + reactos/dll/cpl/appwiz-new/lang/no-NO.rc | 199 ++++++++ reactos/dll/cpl/appwiz-new/rsrc.rc | 1 + reactos/dll/cpl/appwiz/lang/no-NO.rc | 169 +++++++ reactos/dll/cpl/appwiz/rsrc.rc | 1 + reactos/dll/cpl/console/lang/no-NO.rc | 149 ++++++ reactos/dll/cpl/console/rsrc.rc | 1 + reactos/dll/cpl/desk/lang/no-NO.rc | 223 +++++++++ reactos/dll/cpl/desk/rsrc.rc | 1 + reactos/dll/cpl/hdwwiz/lang/no-NO.rc | 7 + reactos/dll/cpl/hdwwiz/rsrc.rc | 1 + reactos/dll/cpl/input/lang/no-NO.rc | 241 ++++++++++ reactos/dll/cpl/input/rsrc.rc | 1 + reactos/dll/cpl/intl/lang/no-NO.rc | 197 ++++++++ reactos/dll/cpl/intl/rsrc.rc | 1 + reactos/dll/cpl/joy/lang/no-NO.rc | 84 ++++ reactos/dll/cpl/joy/rsrc.rc | 1 + reactos/dll/cpl/liccpa/lang/no-NO.rc | 27 ++ reactos/dll/cpl/liccpa/rsrc.rc | 1 + reactos/dll/cpl/main/lang/no-NO.rc | 172 +++++++ reactos/dll/cpl/main/rsrc.rc | 1 + reactos/dll/cpl/mmsys/lang/no-NO.rc | 267 +++++++++++ reactos/dll/cpl/mmsys/rsrc.rc | 1 + reactos/dll/cpl/ncpa/lang/nb-NO.rc | 134 ------ reactos/dll/cpl/ncpa/lang/no-NO.rc | 134 ++++++ reactos/dll/cpl/ncpa/rsrc.rc | 2 +- reactos/dll/cpl/powercfg/lang/no-NO.rc | 166 +++++++ reactos/dll/cpl/powercfg/rsrc.rc | 1 + reactos/dll/cpl/sysdm/lang/no-NO.rc | 275 +++++++++++ reactos/dll/cpl/sysdm/rsrc.rc | 1 + reactos/dll/cpl/timedate/lang/no-NO.rc | 68 +++ reactos/dll/cpl/timedate/rsrc.rc | 1 + reactos/dll/win32/devmgr/devmgr.rc | 1 + reactos/dll/win32/devmgr/lang/no-NO.rc | 171 +++++++ .../win32/msgina/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/dll/win32/msgina/msgina.rc | 2 +- reactos/dll/win32/netid/lang/no-NO.rc | 74 +++ reactos/dll/win32/netid/rsrc.rc | 1 + .../win32/newdev/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/dll/win32/newdev/rsrc.rc | 2 +- .../setupapi/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/dll/win32/setupapi/setupapi.rc | 2 +- .../win32/shell32/lang/{nb-NO.rc => no-NO.rc} | 432 ++++++++---------- reactos/dll/win32/shell32/shell32.rc | 2 +- reactos/dll/win32/shimgvw/lang/de-DE.rc | 17 + reactos/dll/win32/shimgvw/lang/no-NO.rc | 17 + reactos/dll/win32/shimgvw/rsrc.rc | 2 + .../syssetup/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/dll/win32/syssetup/syssetup.rc | 2 +- .../win32/user32/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/dll/win32/user32/user32.rc | 2 +- .../win32/userenv/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/dll/win32/userenv/userenv.rc | 2 +- .../ntvdm/lang/{nb-NO.rc => no-NO.rc} | 0 reactos/subsystems/ntvdm/rsrc.rc | 2 +- 128 files changed, 3410 insertions(+), 436 deletions(-) rename reactos/base/applications/cacls/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/calc/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/charmap/lang/{nb-NO.rc => no-NO.rc} (100%) create mode 100644 reactos/base/applications/cmdutils/find/lang/no-NO.rc create mode 100644 reactos/base/applications/cmdutils/more/lang/no-NO.rc rename reactos/base/applications/dxdiag/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/games/solitaire/lang/{nb-NO.rc => no-NO.rc} (73%) rename reactos/base/applications/games/winemine/lang/{nb-NO.rc => no-NO.rc} (92%) rename reactos/base/applications/kbswitch/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/logoff/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/mmc/lang/{nb_NO.rc => no-NO.rc} (100%) rename reactos/base/applications/msconfig/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/mscutils/devmgmt/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/mscutils/eventvwr/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/mscutils/servman/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/mstsc/lang/{nb-NO.rc => no-NO.rc} (100%) create mode 100644 reactos/base/applications/network/ipconfig/lang/no-NO.rc rename reactos/base/applications/notepad/lang/{nb-NO.rc => no-NO.rc} (90%) rename reactos/base/applications/regedit/clb/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/regedit/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/shutdown/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/sndvol32/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/taskmgr/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/applications/winhlp32/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/setup/reactos/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/setup/vmwinst/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/setup/welcome/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/shell/cmd/lang/{nb-NO.rc => no-NO.rc} (100%) create mode 100644 reactos/base/shell/explorer-new/lang/no-NO.rc rename reactos/base/system/expand/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/system/format/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/system/regsvr32/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/system/rundll32/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/system/userinit/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/base/system/winlogon/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/boot/freeldr/fdebug/lang/{nb-NO.rc => no-NO.rc} (100%) create mode 100644 reactos/dll/cpl/access/lang/no-NO.rc create mode 100644 reactos/dll/cpl/appwiz-new/lang/no-NO.rc create mode 100644 reactos/dll/cpl/appwiz/lang/no-NO.rc create mode 100644 reactos/dll/cpl/console/lang/no-NO.rc create mode 100644 reactos/dll/cpl/desk/lang/no-NO.rc create mode 100644 reactos/dll/cpl/hdwwiz/lang/no-NO.rc create mode 100644 reactos/dll/cpl/input/lang/no-NO.rc create mode 100644 reactos/dll/cpl/intl/lang/no-NO.rc create mode 100644 reactos/dll/cpl/joy/lang/no-NO.rc create mode 100644 reactos/dll/cpl/liccpa/lang/no-NO.rc create mode 100644 reactos/dll/cpl/main/lang/no-NO.rc create mode 100644 reactos/dll/cpl/mmsys/lang/no-NO.rc delete mode 100644 reactos/dll/cpl/ncpa/lang/nb-NO.rc create mode 100644 reactos/dll/cpl/ncpa/lang/no-NO.rc create mode 100644 reactos/dll/cpl/powercfg/lang/no-NO.rc create mode 100644 reactos/dll/cpl/sysdm/lang/no-NO.rc create mode 100644 reactos/dll/cpl/timedate/lang/no-NO.rc create mode 100644 reactos/dll/win32/devmgr/lang/no-NO.rc rename reactos/dll/win32/msgina/lang/{nb-NO.rc => no-NO.rc} (100%) create mode 100644 reactos/dll/win32/netid/lang/no-NO.rc rename reactos/dll/win32/newdev/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/dll/win32/setupapi/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/dll/win32/shell32/lang/{nb-NO.rc => no-NO.rc} (59%) create mode 100644 reactos/dll/win32/shimgvw/lang/de-DE.rc create mode 100644 reactos/dll/win32/shimgvw/lang/no-NO.rc rename reactos/dll/win32/syssetup/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/dll/win32/user32/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/dll/win32/userenv/lang/{nb-NO.rc => no-NO.rc} (100%) rename reactos/subsystems/ntvdm/lang/{nb-NO.rc => no-NO.rc} (100%) diff --git a/reactos/base/applications/cacls/lang/nb-NO.rc b/reactos/base/applications/cacls/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/cacls/lang/nb-NO.rc rename to reactos/base/applications/cacls/lang/no-NO.rc diff --git a/reactos/base/applications/cacls/rsrc.rc b/reactos/base/applications/cacls/rsrc.rc index 76acd37485a..d892f4a1904 100644 --- a/reactos/base/applications/cacls/rsrc.rc +++ b/reactos/base/applications/cacls/rsrc.rc @@ -11,7 +11,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/calc/lang/nb-NO.rc b/reactos/base/applications/calc/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/calc/lang/nb-NO.rc rename to reactos/base/applications/calc/lang/no-NO.rc diff --git a/reactos/base/applications/calc/resource.rc b/reactos/base/applications/calc/resource.rc index 15df7e98c35..b3aac73edd7 100644 --- a/reactos/base/applications/calc/resource.rc +++ b/reactos/base/applications/calc/resource.rc @@ -47,7 +47,7 @@ IDB_BITMAP_ROS BITMAP DISCARDABLE "res/ROS_logo.bmp" #include "lang/es-ES.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/charmap/lang/nb-NO.rc b/reactos/base/applications/charmap/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/charmap/lang/nb-NO.rc rename to reactos/base/applications/charmap/lang/no-NO.rc diff --git a/reactos/base/applications/charmap/rsrc.rc b/reactos/base/applications/charmap/rsrc.rc index d0ff68182e1..14d1406a94a 100644 --- a/reactos/base/applications/charmap/rsrc.rc +++ b/reactos/base/applications/charmap/rsrc.rc @@ -16,7 +16,7 @@ IDI_ICON ICON "res/charmap.ico" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/cmdutils/find/lang/no-NO.rc b/reactos/base/applications/cmdutils/find/lang/no-NO.rc new file mode 100644 index 00000000000..d564684f86f --- /dev/null +++ b/reactos/base/applications/cmdutils/find/lang/no-NO.rc @@ -0,0 +1,17 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + +IDS_USAGE, "FINN: Skriv alle linjene for filen som inneholder en streng.\n\n\ + FIND [ /C ] [ /I ] [ /N ] [ /V ] \"streng\" [ fil... ]\n\ + /C Teller nummer av linjer som inneholder strenger\n\ + /I Ignorere sak\n\ + /N Nummer viste linjer, start med 1\n\ + /V Skriv linjer som ikke inneholder en streng" + +IDS_NO_SUCH_FILE, "FINN: %s: Ingen filer\n" + +IDS_CANNOT_OPEN, "FINN: %s: Kan ikke pne filen\n" + +END diff --git a/reactos/base/applications/cmdutils/find/rsrc.rc b/reactos/base/applications/cmdutils/find/rsrc.rc index d753dc1cd6a..c665efc8b44 100644 --- a/reactos/base/applications/cmdutils/find/rsrc.rc +++ b/reactos/base/applications/cmdutils/find/rsrc.rc @@ -11,6 +11,7 @@ #include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/cmdutils/more/lang/no-NO.rc b/reactos/base/applications/cmdutils/more/lang/no-NO.rc new file mode 100644 index 00000000000..61ccaa5269d --- /dev/null +++ b/reactos/base/applications/cmdutils/more/lang/no-NO.rc @@ -0,0 +1,15 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_USAGE, "Vis data side-etter-side p skjermen.\n\n\ + MORE < [Stasjon:][Mappe]Filnavn\n\ + command | MORE \n\ + MORE [Stasjon:][Mappe]Filenavn\n\n\ + [Stasjon:][Mappe]Filnavn En fil, Velg innhold som skal vises.\n\ + Command\t\t En kommando, Velg output som skal vises.\n\n\ + At the prompt ""-- Fortsett --"" du kan trykke en tast for vise neste side.\n" + + IDS_CONTINUE, " -- Fortsett (100%) -- " + IDS_FILE_ACCESS, "Fr ikke tilgang til filen %s." +END diff --git a/reactos/base/applications/cmdutils/more/rsrc.rc b/reactos/base/applications/cmdutils/more/rsrc.rc index 1a88878e6ee..7ef6cef3090 100644 --- a/reactos/base/applications/cmdutils/more/rsrc.rc +++ b/reactos/base/applications/cmdutils/more/rsrc.rc @@ -11,6 +11,7 @@ #include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/dxdiag/lang/nb-NO.rc b/reactos/base/applications/dxdiag/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/dxdiag/lang/nb-NO.rc rename to reactos/base/applications/dxdiag/lang/no-NO.rc diff --git a/reactos/base/applications/dxdiag/rsrc.rc b/reactos/base/applications/dxdiag/rsrc.rc index 098752cc6a9..8e076dfd33d 100644 --- a/reactos/base/applications/dxdiag/rsrc.rc +++ b/reactos/base/applications/dxdiag/rsrc.rc @@ -9,7 +9,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/en-US.rc" #include "lang/es-ES.rc" #include "lang/fr-FR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/games/solitaire/lang/nb-NO.rc b/reactos/base/applications/games/solitaire/lang/no-NO.rc similarity index 73% rename from reactos/base/applications/games/solitaire/lang/nb-NO.rc rename to reactos/base/applications/games/solitaire/lang/no-NO.rc index 89c2da5771a..8eea320beb7 100644 --- a/reactos/base/applications/games/solitaire/lang/nb-NO.rc +++ b/reactos/base/applications/games/solitaire/lang/no-NO.rc @@ -15,22 +15,22 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL IDD_OPTIONS DIALOGEX DISCARDABLE 0, 0, 186, 118 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT -CAPTION "Options" +CAPTION "Innstillinger" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Cards", -1, 7, 7, 65, 40 - AUTORADIOBUTTON "Draw &One", IDC_OPT_DRAWONE, 14, 19, 52, 10, WS_GROUP | WS_TABSTOP - AUTORADIOBUTTON "Draw &Three", IDC_OPT_DRAWTHREE, 14, 32, 52, 10 + GROUPBOX "Kort", -1, 7, 7, 65, 40 + AUTORADIOBUTTON "Velg &et", IDC_OPT_DRAWONE, 14, 19, 52, 10, WS_GROUP | WS_TABSTOP + AUTORADIOBUTTON "Velg &tre", IDC_OPT_DRAWTHREE, 14, 32, 52, 10 - AUTOCHECKBOX "&Show Time", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP | WS_DISABLED - AUTOCHECKBOX "S&tatus bar", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP + AUTOCHECKBOX "&Vis tid", IDC_OPT_SHOWTIME, 7 ,51 ,65 ,10, WS_TABSTOP | WS_DISABLED + AUTOCHECKBOX "S&tatuslinje", IDC_OPT_STATUSBAR, 7, 66, 64, 10, WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 35, 97, 50, 14 PUSHBUTTON "Avbryt", IDCANCEL, 101, 97, 50, 14 END IDD_CARDBACK DIALOGEX 6, 6, 221, 96 -CAPTION "Select Card Back" +CAPTION "Velg kort" FONT 8, "MS Shell Dlg" STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU | DS_SHELLFONT BEGIN @@ -39,7 +39,7 @@ BEGIN CONTROL "", IDC_CARDBACK3, "Static", SS_NOTIFY, 112, 7, 50, 61 CONTROL "", IDC_CARDBACK4, "Static", SS_NOTIFY, 166, 7, 50, 61 DEFPUSHBUTTON "OK", IDOK, 104, 77, 54, 13 - PUSHBUTTON "Cancel", IDCANCEL, 162, 77, 54, 13 + PUSHBUTTON "Avbryt", IDCANCEL, 162, 77, 54, 13 END @@ -47,10 +47,10 @@ END STRINGTABLE BEGIN - IDS_SOL_NAME "Solitaire" - IDS_SOL_ABOUT "Solitaire by J Brown\n\nCardLib version 1.0." - IDS_SOL_QUIT "Quit the current game?" - IDS_SOL_WIN "Congratulations, you win!!" + IDS_SOL_NAME "Kabal" + IDS_SOL_ABOUT "Kabal av J Brown\n\nCardLib versjon 1.0." + IDS_SOL_QUIT "Slutt nvrende spill?" + IDS_SOL_WIN "Gratulerer, du vant!!" END diff --git a/reactos/base/applications/games/solitaire/rsrc.rc b/reactos/base/applications/games/solitaire/rsrc.rc index 88f2c096a4d..7971eaaad07 100644 --- a/reactos/base/applications/games/solitaire/rsrc.rc +++ b/reactos/base/applications/games/solitaire/rsrc.rc @@ -17,7 +17,7 @@ IDI_SOLITAIRE ICON DISCARDABLE "solitaire.ico" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/games/winemine/lang/nb-NO.rc b/reactos/base/applications/games/winemine/lang/no-NO.rc similarity index 92% rename from reactos/base/applications/games/winemine/lang/nb-NO.rc rename to reactos/base/applications/games/winemine/lang/no-NO.rc index 9ca7ff13306..99620f3b157 100644 --- a/reactos/base/applications/games/winemine/lang/nb-NO.rc +++ b/reactos/base/applications/games/winemine/lang/no-NO.rc @@ -4,14 +4,14 @@ LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL STRINGTABLE BEGIN - IDS_SECONDS, "seconds" + IDS_SECONDS, "Sekunder" IDS_NOBODY, "Ingen" - IDS_ABOUT, "by Joshua Thielen and ReactOS developers" + IDS_ABOUT, "av Joshua Thielen og ReactOS utviklere" END IDM_WINEMINE MENU DISCARDABLE BEGIN - POPUP "&Game" + POPUP "&Spill" BEGIN MENUITEM "&Nytt\tF2", IDM_NEW MENUITEM SEPARATOR @@ -48,12 +48,12 @@ BEGIN LTEXT "", IDC_NAME2, 132, 30, 55, 8 LTEXT "", IDC_NAME3, 132, 40, 55, 8 DEFPUSHBUTTON "OK", IDOK, 127, 57, 50, 15 - PUSHBUTTON "&Reset Scores", IDRESET, 18, 57, 67, 15 + PUSHBUTTON "&Nullstill poeng", IDRESET, 18, 57, 67, 15 END IDD_CONGRATS DIALOGEX DISCARDABLE 0, 0, 160, 60 STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT -CAPTION "gratulerer!" +CAPTION "Gratulerer!" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Skriv inn navnet ditt", IDIGNORE, 25, 10, 150, 10 @@ -63,7 +63,7 @@ END IDD_CUSTOM DIALOGEX DISCARDABLE 0, 0, 139, 80 STYLE DS_MODALFRAME | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_POPUP | DS_SHELLFONT -CAPTION "Custom Game" +CAPTION "Tilpasse spill" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Hyde:", IDNONE, 5, 15, 43, 10 diff --git a/reactos/base/applications/games/winemine/rsrc.rc b/reactos/base/applications/games/winemine/rsrc.rc index 7c05121b4a2..bc9d766cfed 100644 --- a/reactos/base/applications/games/winemine/rsrc.rc +++ b/reactos/base/applications/games/winemine/rsrc.rc @@ -29,7 +29,7 @@ IDB_MINES BITMAP MOVEABLE "rc/mines.bmp" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/kbswitch/lang/nb-NO.rc b/reactos/base/applications/kbswitch/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/kbswitch/lang/nb-NO.rc rename to reactos/base/applications/kbswitch/lang/no-NO.rc diff --git a/reactos/base/applications/kbswitch/rsrc.rc b/reactos/base/applications/kbswitch/rsrc.rc index 4754df4ecc9..b8eb13b6888 100644 --- a/reactos/base/applications/kbswitch/rsrc.rc +++ b/reactos/base/applications/kbswitch/rsrc.rc @@ -5,7 +5,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/logoff/lang/nb-NO.rc b/reactos/base/applications/logoff/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/logoff/lang/nb-NO.rc rename to reactos/base/applications/logoff/lang/no-NO.rc diff --git a/reactos/base/applications/logoff/rsrc.rc b/reactos/base/applications/logoff/rsrc.rc index 3594e0de1b0..57c6e127aec 100644 --- a/reactos/base/applications/logoff/rsrc.rc +++ b/reactos/base/applications/logoff/rsrc.rc @@ -12,7 +12,7 @@ #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/mmc/lang/nb_NO.rc b/reactos/base/applications/mmc/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mmc/lang/nb_NO.rc rename to reactos/base/applications/mmc/lang/no-NO.rc diff --git a/reactos/base/applications/mmc/rsrc.rc b/reactos/base/applications/mmc/rsrc.rc index c369698d59a..7e30904c6fd 100644 --- a/reactos/base/applications/mmc/rsrc.rc +++ b/reactos/base/applications/mmc/rsrc.rc @@ -12,7 +12,7 @@ #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/msconfig/lang/nb-NO.rc b/reactos/base/applications/msconfig/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/msconfig/lang/nb-NO.rc rename to reactos/base/applications/msconfig/lang/no-NO.rc diff --git a/reactos/base/applications/msconfig/rsrc.rc b/reactos/base/applications/msconfig/rsrc.rc index fd535d53d7b..d111a478d42 100644 --- a/reactos/base/applications/msconfig/rsrc.rc +++ b/reactos/base/applications/msconfig/rsrc.rc @@ -21,7 +21,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/mscutils/devmgmt/lang/nb-NO.rc b/reactos/base/applications/mscutils/devmgmt/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/devmgmt/lang/nb-NO.rc rename to reactos/base/applications/mscutils/devmgmt/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/devmgmt/rsrc.rc b/reactos/base/applications/mscutils/devmgmt/rsrc.rc index b07413f81ef..68a036b4d2e 100644 --- a/reactos/base/applications/mscutils/devmgmt/rsrc.rc +++ b/reactos/base/applications/mscutils/devmgmt/rsrc.rc @@ -21,7 +21,7 @@ IDB_EXIT BITMAP DISCARDABLE "res/exit.bmp" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/mscutils/eventvwr/lang/nb-NO.rc b/reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/eventvwr/lang/nb-NO.rc rename to reactos/base/applications/mscutils/eventvwr/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/eventvwr/rsrc.rc b/reactos/base/applications/mscutils/eventvwr/rsrc.rc index d36cc8e9554..f69aaf573e4 100644 --- a/reactos/base/applications/mscutils/eventvwr/rsrc.rc +++ b/reactos/base/applications/mscutils/eventvwr/rsrc.rc @@ -17,7 +17,7 @@ IDI_ERRORICON ICON "res/error.ico" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/mscutils/servman/lang/nb-NO.rc b/reactos/base/applications/mscutils/servman/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mscutils/servman/lang/nb-NO.rc rename to reactos/base/applications/mscutils/servman/lang/no-NO.rc diff --git a/reactos/base/applications/mscutils/servman/rsrc.rc b/reactos/base/applications/mscutils/servman/rsrc.rc index 2498a2394bd..3cfb859fce2 100644 --- a/reactos/base/applications/mscutils/servman/rsrc.rc +++ b/reactos/base/applications/mscutils/servman/rsrc.rc @@ -25,7 +25,7 @@ IDB_RESTART BITMAP DISCARDABLE "res/restart.bmp" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/th-TH.rc" diff --git a/reactos/base/applications/mstsc/lang/nb-NO.rc b/reactos/base/applications/mstsc/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/mstsc/lang/nb-NO.rc rename to reactos/base/applications/mstsc/lang/no-NO.rc diff --git a/reactos/base/applications/mstsc/rsrc.rc b/reactos/base/applications/mstsc/rsrc.rc index dfb32712711..96abeddcfae 100644 --- a/reactos/base/applications/mstsc/rsrc.rc +++ b/reactos/base/applications/mstsc/rsrc.rc @@ -22,7 +22,7 @@ IDB_SPECT BITMAP "res/spectrum.bmp" #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/network/ipconfig/ipconfig.rc b/reactos/base/applications/network/ipconfig/ipconfig.rc index 0b5a5253879..d471073b6f7 100644 --- a/reactos/base/applications/network/ipconfig/ipconfig.rc +++ b/reactos/base/applications/network/ipconfig/ipconfig.rc @@ -14,6 +14,7 @@ #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/network/ipconfig/lang/no-NO.rc b/reactos/base/applications/network/ipconfig/lang/no-NO.rc new file mode 100644 index 00000000000..20320b5e0d6 --- /dev/null +++ b/reactos/base/applications/network/ipconfig/lang/no-NO.rc @@ -0,0 +1,65 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_BCAST "Broadcast" + IDS_P2P "Peer To Peer" + IDS_MIXED "Mikset" + IDS_HYBRID "Hybrid" + IDS_UNKNOWN "Ukjent" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_OTHER "Other Type Of Adapter" + IDS_ETH "Ethernet Adapter" + IDS_TOKEN "Token Ring Adapter" + IDS_FDDI "FDDI Adapter" + IDS_PPP "PPP Adapter" + IDS_LOOP "Loopback Adapter" + IDS_SLIP "SLIP Adapter" +END + +STRINGTABLE DISCARDABLE +BEGIN +/* Please keep the spacing/formatting as per En.rc when translating */ + IDS_USAGE + "\nUSAGE:\n \ + ipconfig [/? | /all | /renew [adapter] | /release [adapter] |\n \ + /flushdns | /displaydns | /registerdns |\n \ + /showclassid adapter |\n \ + /setclassid adapter [classid] ]\n \ + \n \ + where\n \ + adapter Connection name\n \ + (wildcard characters * and ? allowed, see examples)\n \ + \n \ + Eksempler:\n \ + /? Vis denne hjelp meldingen\n \ + /all Vis detaljert informasjon.\n \ + /release Release the IP address for the specified adapter.\n \ + /renew Forny alle IP addresser for alle valgte kort.\n \ + /flushdns Purges the DNS Resolver cache.\n \ + /registerdns Refreshes all DHCP leases and re-registers DNS names.\n \ + /displaydns Display the contents of the DNS Resolver Cache.\n \ + /showclassid Displays all the dhcp class IDs allowed for adapter.\n \ + /setclassid Modifies the dhcp class id.\n \ + \n \ + The default is to display only the IP address, subnet mask and\n \ + default gateway for each adapter bound to TCP/IP.\n \ + \n \ + For Release and Renew, if no adapter name is specified, then the IP address\n \ + leases for all adapters bound to TCP/IP will be released or renewed.\n \ + \n \ + For Setclassid, if no ClassId is specified, then the ClassId is removed.\n \ + \n \ + Examples:\n \ + > ipconfig ... Vis informasjon.\n \ + > ipconfig /all ... Vis detaljert informasjon\n \ + > ipconfig /renew ... Forny alle kort\n \ + > ipconfig /renew EL* ... Forny alle kort med navn som\n \ + begynner med EL\n \ + > ipconfig /release *Til* ... Frigi alle samsvarende tilkoblinger,\n \ + for eksempel ""Lokal tilkobling 1"" or\n \ + ""Lokaltilkobling 2""\n" +END diff --git a/reactos/base/applications/notepad/lang/nb-NO.rc b/reactos/base/applications/notepad/lang/no-NO.rc similarity index 90% rename from reactos/base/applications/notepad/lang/nb-NO.rc rename to reactos/base/applications/notepad/lang/no-NO.rc index b09ae58e152..bd869c31fcd 100644 --- a/reactos/base/applications/notepad/lang/nb-NO.rc +++ b/reactos/base/applications/notepad/lang/no-NO.rc @@ -43,7 +43,7 @@ BEGIN POPUP "&Fil" BEGIN MENUITEM "&Ny...", CMD_NEW - MENUITEM "&?ne\tCtrl+O", CMD_OPEN + MENUITEM "&pne\tCtrl+O", CMD_OPEN MENUITEM "&Lagre\tCtrl+S", CMD_SAVE MENUITEM "Lagre &som...", CMD_SAVE_AS MENUITEM SEPARATOR @@ -65,7 +65,7 @@ BEGIN MENUITEM "&Finn...\tCtrl+F", CMD_SEARCH MENUITEM "Finn &neste\tF3", CMD_SEARCH_NEXT MENUITEM "Erstatt\tCtrl+H", CMD_REPLACE - MENUITEM "G?il...\tCtrl+G", CMD_GOTO + MENUITEM "G til...\tCtrl+G", CMD_GOTO MENUITEM SEPARATOR MENUITEM "Merk &alt\tCtrl+A", CMD_SELECT_ALL MENUITEM "&Klokkeslett/dato\tF5", CMD_TIME_DATE @@ -82,7 +82,7 @@ BEGIN POPUP "&Hjelp" BEGIN MENUITEM "&Emner i hjelp", CMD_HELP_CONTENTS - MENUITEM "&S?", CMD_HELP_SEARCH + MENUITEM "&Sk", CMD_HELP_SEARCH MENUITEM "&Hjelp om hjelp", CMD_HELP_ON_HELP MENUITEM SEPARATOR MENUITEM "&Om" CMD_ABOUT @@ -107,7 +107,7 @@ LTEXT "&Venstre:", 0x145, 20, 55, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_LEFTVALUE,*/ 0x147, 50, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP LTEXT "&Topp:", 0x148, 20, 73, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_TOPVALUE,*/ 0x14A, 50, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP -LTEXT "&H?", 0x14B, 100, 55, 30, 10, WS_CHILD +LTEXT "&Hyre", 0x14B, 100, 55, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_RIGHTVALUE,*/ 0x14D, 130, 55, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP LTEXT "&Bunn:", 0x14E,100, 73, 30, 10, WS_CHILD EDITTEXT /*STRING_PAGESETUP_BOTTOMVALUE,*/ 0x150, 130, 73, 35, 11, WS_CHILD | WS_BORDER | WS_TABSTOP @@ -134,7 +134,7 @@ END DIALOG_GOTO DIALOGEX 0,0,165,50 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU FONT 8, "MS Shell Dlg" -CAPTION "G?l linje" +CAPTION "G til linje" BEGIN EDITTEXT ID_LINENUMBER,54,10,106,12,WS_CHILD | WS_BORDER | WS_TABSTOP LTEXT "Line nummer:",0x155,5,12,41,12,WS_CHILD | WS_TABSTOP | ES_NUMBER @@ -147,10 +147,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU CAPTION "Om ReactOS Notisblokk" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "ReactOS Notisblokk v1.0\r\nCopyright 1997,98 Marcel Baur \r\nCopyright 2000 Mike McCormack \r\nCopyright 2002 Sylvain Petreolle \r\nCopyright 2002 Andriy Palamarchuk\r\n", - -1,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,46,7,232,39 + CONTROL "ReactOS Notisblokk v1.0\r\nenerett 1997,98 Marcel Baur \r\nEnerett 2000 Mike McCormack \r\nEnerett 2002 Sylvain Petreolle \r\nEnerett 2002 Andriy Palamarchuk\r\n", + -1,"Statisk",SS_LEFTNOWORDWRAP | WS_GROUP,46,7,232,39 CONTROL " ", - -1,"Static",0x50000000,8,48,272,11 + -1,"Statisk",0x50000000,8,48,272,11 DEFPUSHBUTTON "Avslutt",IDOK,114,149,44,15,WS_GROUP ICON IDI_NPICON,-1,12,9,20,30 EDITTEXT IDC_LICENSE,8,64,272,81,ES_MULTILINE | @@ -183,15 +183,15 @@ STRING_TEXT_FILES_TXT, "Tekst filer (*.txt)" STRING_TOOLARGE, "Filen '%s' er for stor for notisblokk.\n \ Vennligst bruk en annen editor." -STRING_NOTEXT, "Du utf?ikke innskrivet tekst. \ +STRING_NOTEXT, "Du utfrer innskrivet tekst. \ \nVennligst skriv noe og pr?jen" STRING_DOESNOTEXIST, "Filen '%s'\n eksistere ikke\n\n \ Vil du opprette en ny fil?" STRING_NOTSAVED, "Filen '%s'\nhar ikke blitt lagret\n\n \ Vil du lagre endringen?" STRING_NOTFOUND, "'%s' ble ikke funnet." -STRING_OUT_OF_MEMORY, "Ikke nok minne for ?ullf?enne \ -oppgaven. \nAvslutt en eller mere applikasjoner for ?ke mengden av \nledig \ +STRING_OUT_OF_MEMORY, "Ikke nok minne for pne \ +oppgaven. \nAvslutt en eller mere applikasjoner for ke mengden av \nledig \ minne." STRING_CANNOTFIND "Kan ikke finne '%s'" STRING_ANSI, "ANSI" diff --git a/reactos/base/applications/notepad/rsrc.rc b/reactos/base/applications/notepad/rsrc.rc index 9d811018523..ee169bc15da 100644 --- a/reactos/base/applications/notepad/rsrc.rc +++ b/reactos/base/applications/notepad/rsrc.rc @@ -49,7 +49,7 @@ IDI_NPICON ICON "res/notepad.ico" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-PT.rc" diff --git a/reactos/base/applications/regedit/clb/lang/nb-NO.rc b/reactos/base/applications/regedit/clb/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/regedit/clb/lang/nb-NO.rc rename to reactos/base/applications/regedit/clb/lang/no-NO.rc diff --git a/reactos/base/applications/regedit/clb/rsrc.rc b/reactos/base/applications/regedit/clb/rsrc.rc index d50035426df..b0990837b8d 100644 --- a/reactos/base/applications/regedit/clb/rsrc.rc +++ b/reactos/base/applications/regedit/clb/rsrc.rc @@ -37,7 +37,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/pl-PL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/sk-SK.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" diff --git a/reactos/base/applications/regedit/lang/nb-NO.rc b/reactos/base/applications/regedit/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/regedit/lang/nb-NO.rc rename to reactos/base/applications/regedit/lang/no-NO.rc diff --git a/reactos/base/applications/regedit/rsrc.rc b/reactos/base/applications/regedit/rsrc.rc index 3334a80ceaa..46c0d255986 100644 --- a/reactos/base/applications/regedit/rsrc.rc +++ b/reactos/base/applications/regedit/rsrc.rc @@ -40,7 +40,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/ko-KR.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/shutdown/lang/nb-NO.rc b/reactos/base/applications/shutdown/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/shutdown/lang/nb-NO.rc rename to reactos/base/applications/shutdown/lang/no-NO.rc diff --git a/reactos/base/applications/shutdown/rsrc.rc b/reactos/base/applications/shutdown/rsrc.rc index 223444a1b99..8424e473d5c 100644 --- a/reactos/base/applications/shutdown/rsrc.rc +++ b/reactos/base/applications/shutdown/rsrc.rc @@ -8,7 +8,7 @@ #include "lang/fr-FR.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/sndvol32/lang/nb-NO.rc b/reactos/base/applications/sndvol32/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/sndvol32/lang/nb-NO.rc rename to reactos/base/applications/sndvol32/lang/no-NO.rc diff --git a/reactos/base/applications/sndvol32/rsrc.rc b/reactos/base/applications/sndvol32/rsrc.rc index 9ce7fc5170f..a58d947ba2d 100644 --- a/reactos/base/applications/sndvol32/rsrc.rc +++ b/reactos/base/applications/sndvol32/rsrc.rc @@ -18,7 +18,7 @@ IDI_MAINAPP ICON DISCARDABLE resources/sndvol32.ico #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/applications/taskmgr/lang/nb-NO.rc b/reactos/base/applications/taskmgr/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/taskmgr/lang/nb-NO.rc rename to reactos/base/applications/taskmgr/lang/no-NO.rc diff --git a/reactos/base/applications/taskmgr/rsrc.rc b/reactos/base/applications/taskmgr/rsrc.rc index 116e01552ff..c7f79027bcb 100644 --- a/reactos/base/applications/taskmgr/rsrc.rc +++ b/reactos/base/applications/taskmgr/rsrc.rc @@ -15,7 +15,7 @@ #ifdef __GCC__ #include "lang/ja-JP.rc" #endif -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/applications/winhlp32/lang/nb-NO.rc b/reactos/base/applications/winhlp32/lang/no-NO.rc similarity index 100% rename from reactos/base/applications/winhlp32/lang/nb-NO.rc rename to reactos/base/applications/winhlp32/lang/no-NO.rc diff --git a/reactos/base/applications/winhlp32/rsrc.rc b/reactos/base/applications/winhlp32/rsrc.rc index cc63711f795..484f0e98a6c 100644 --- a/reactos/base/applications/winhlp32/rsrc.rc +++ b/reactos/base/applications/winhlp32/rsrc.rc @@ -42,7 +42,7 @@ IDI_WINHELP ICON DISCARDABLE winhelp.ico #include "lang/ko-KR.rc" // #include "lang/lt-LT.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" // #include "lang/rm-CH.rc" diff --git a/reactos/base/setup/reactos/lang/nb-NO.rc b/reactos/base/setup/reactos/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/reactos/lang/nb-NO.rc rename to reactos/base/setup/reactos/lang/no-NO.rc diff --git a/reactos/base/setup/reactos/rsrc.rc b/reactos/base/setup/reactos/rsrc.rc index f30d6c69cc4..fe24c0e657b 100644 --- a/reactos/base/setup/reactos/rsrc.rc +++ b/reactos/base/setup/reactos/rsrc.rc @@ -15,7 +15,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc"*/ #include "lang/pl-PL.rc" /*#include "lang/pt-BR.rc" diff --git a/reactos/base/setup/vmwinst/lang/nb-NO.rc b/reactos/base/setup/vmwinst/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/vmwinst/lang/nb-NO.rc rename to reactos/base/setup/vmwinst/lang/no-NO.rc diff --git a/reactos/base/setup/vmwinst/rsrc.rc b/reactos/base/setup/vmwinst/rsrc.rc index 21e1663396d..efbb68a5f2c 100644 --- a/reactos/base/setup/vmwinst/rsrc.rc +++ b/reactos/base/setup/vmwinst/rsrc.rc @@ -25,7 +25,7 @@ IDB_HEADER BITMAP "resources/header.bmp" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/base/setup/welcome/lang/nb-NO.rc b/reactos/base/setup/welcome/lang/no-NO.rc similarity index 100% rename from reactos/base/setup/welcome/lang/nb-NO.rc rename to reactos/base/setup/welcome/lang/no-NO.rc diff --git a/reactos/base/setup/welcome/rsrc.rc b/reactos/base/setup/welcome/rsrc.rc index c6fa217c92b..34bf603a040 100644 --- a/reactos/base/setup/welcome/rsrc.rc +++ b/reactos/base/setup/welcome/rsrc.rc @@ -52,7 +52,7 @@ END #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/shell/cmd/cmd.rc b/reactos/base/shell/cmd/cmd.rc index 25f04ade853..5e358d9d9b2 100644 --- a/reactos/base/shell/cmd/cmd.rc +++ b/reactos/base/shell/cmd/cmd.rc @@ -18,7 +18,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/pl-PL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/base/shell/cmd/lang/nb-NO.rc b/reactos/base/shell/cmd/lang/no-NO.rc similarity index 100% rename from reactos/base/shell/cmd/lang/nb-NO.rc rename to reactos/base/shell/cmd/lang/no-NO.rc diff --git a/reactos/base/shell/explorer-new/explorer.rc b/reactos/base/shell/explorer-new/explorer.rc index 0beca08259f..dd86305a808 100644 --- a/reactos/base/shell/explorer-new/explorer.rc +++ b/reactos/base/shell/explorer-new/explorer.rc @@ -19,6 +19,7 @@ IDB_STARTMENU BITMAP DISCARDABLE res/logov.bmp #include "lang/it-IT.rc" #include "lang/ko-KR.rc" #include "lang/lt-LT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/shell/explorer-new/lang/no-NO.rc b/reactos/base/shell/explorer-new/lang/no-NO.rc new file mode 100644 index 00000000000..fc835755520 --- /dev/null +++ b/reactos/base/shell/explorer-new/lang/no-NO.rc @@ -0,0 +1,59 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDM_TRAYWND MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Ls oppgavelinjen", ID_LOCKTASKBAR + MENUITEM "E&genskaper", ID_SHELL_CMD_PROPERTIES + END +END + +IDM_STARTMENU MENUEX DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + POPUP "&Programmer", IDM_PROGRAMS + BEGIN + MENUITEM "(Tom)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "F&avoritter", IDM_FAVORITES + BEGIN + MENUITEM "(Tom)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Dokumenter", IDM_DOCUMENTS + BEGIN + MENUITEM "(Tom)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Innstillinger", IDM_SETTINGS + BEGIN + MENUITEM "&Kontrollpanel", IDM_CONTROLPANEL, MFT_STRING, MFS_GRAYED + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "&Sikkerhet...", IDM_SECURITY, MFT_STRING, MFS_ENABLED + MENUITEM "&Nettverk tilkoblinger", IDM_NETWORKCONNECTIONS, MFT_STRING, MFS_ENABLED + MENUITEM "&Printere og Fakser", IDM_PRINTERSANDFAXES, MFT_STRING, MFS_ENABLED + MENUITEM "&Oppgavelinje og Start meny", IDM_TASKBARANDSTARTMENU, MFT_STRING, MFS_ENABLED + END + POPUP "S&k", IDM_SEARCH + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + END + MENUITEM "&Hjelp og Sttte", IDM_HELPANDSUPPORT, MFT_STRING, MFS_ENABLED + MENUITEM "&Kjr...", IDM_RUN, MFT_STRING, MFS_ENABLED + MENUITEM "", 450, MFT_SEPARATOR, MFS_ENABLED + MENUITEM "S&ynkroniser", IDM_SYNCHRONIZE, MFT_STRING, MFS_ENABLED + MENUITEM "&Logg av %s...", IDM_LOGOFF, MFT_STRING, MFS_ENABLED + MENUITEM "K&oble fra...", IDM_DISCONNECT, MFT_STRING, MFS_ENABLED + MENUITEM "Ls datamaskin&en", IDM_UNDOCKCOMPUTER, MFT_STRING, MFS_ENABLED + MENUITEM "Sl& av...", IDM_SHUTDOWN, MFT_STRING, MFS_ENABLED + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_START "Start" + IDS_PROPERTIES "E&genskaper" + IDS_OPEN_ALL_USERS "&pne alle brukere" + IDS_EXPLORE_ALL_USERS "U&tforsk alle brukere" +END diff --git a/reactos/base/system/expand/lang/nb-NO.rc b/reactos/base/system/expand/lang/no-NO.rc similarity index 100% rename from reactos/base/system/expand/lang/nb-NO.rc rename to reactos/base/system/expand/lang/no-NO.rc diff --git a/reactos/base/system/expand/rsrc.rc b/reactos/base/system/expand/rsrc.rc index 7ef591bbd43..45e22c26596 100644 --- a/reactos/base/system/expand/rsrc.rc +++ b/reactos/base/system/expand/rsrc.rc @@ -15,7 +15,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/system/format/lang/nb-NO.rc b/reactos/base/system/format/lang/no-NO.rc similarity index 100% rename from reactos/base/system/format/lang/nb-NO.rc rename to reactos/base/system/format/lang/no-NO.rc diff --git a/reactos/base/system/format/rsrc.rc b/reactos/base/system/format/rsrc.rc index c74d980c54b..61d06ce3d8d 100644 --- a/reactos/base/system/format/rsrc.rc +++ b/reactos/base/system/format/rsrc.rc @@ -13,7 +13,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/system/regsvr32/lang/nb-NO.rc b/reactos/base/system/regsvr32/lang/no-NO.rc similarity index 100% rename from reactos/base/system/regsvr32/lang/nb-NO.rc rename to reactos/base/system/regsvr32/lang/no-NO.rc diff --git a/reactos/base/system/regsvr32/rsrc.rc b/reactos/base/system/regsvr32/rsrc.rc index 430087b1247..40f5a83dd89 100644 --- a/reactos/base/system/regsvr32/rsrc.rc +++ b/reactos/base/system/regsvr32/rsrc.rc @@ -13,7 +13,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/system/rundll32/lang/nb-NO.rc b/reactos/base/system/rundll32/lang/no-NO.rc similarity index 100% rename from reactos/base/system/rundll32/lang/nb-NO.rc rename to reactos/base/system/rundll32/lang/no-NO.rc diff --git a/reactos/base/system/rundll32/rsrc.rc b/reactos/base/system/rundll32/rsrc.rc index 852c5db861d..d3eed5e4f77 100644 --- a/reactos/base/system/rundll32/rsrc.rc +++ b/reactos/base/system/rundll32/rsrc.rc @@ -14,7 +14,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" diff --git a/reactos/base/system/userinit/lang/nb-NO.rc b/reactos/base/system/userinit/lang/no-NO.rc similarity index 100% rename from reactos/base/system/userinit/lang/nb-NO.rc rename to reactos/base/system/userinit/lang/no-NO.rc diff --git a/reactos/base/system/userinit/rsrc.rc b/reactos/base/system/userinit/rsrc.rc index 1ea1b86e5ed..f6682401068 100644 --- a/reactos/base/system/userinit/rsrc.rc +++ b/reactos/base/system/userinit/rsrc.rc @@ -16,7 +16,7 @@ LANGUAGE LANG_NEUTRAL,SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/base/system/winlogon/lang/nb-NO.rc b/reactos/base/system/winlogon/lang/no-NO.rc similarity index 100% rename from reactos/base/system/winlogon/lang/nb-NO.rc rename to reactos/base/system/winlogon/lang/no-NO.rc diff --git a/reactos/base/system/winlogon/rsrc.rc b/reactos/base/system/winlogon/rsrc.rc index 5b9f3b32e92..858b73c8ced 100644 --- a/reactos/base/system/winlogon/rsrc.rc +++ b/reactos/base/system/winlogon/rsrc.rc @@ -17,7 +17,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/lt-LT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/boot/freeldr/fdebug/fdebug.rc b/reactos/boot/freeldr/fdebug/fdebug.rc index 14fa23248d0..37d349d049c 100644 --- a/reactos/boot/freeldr/fdebug/fdebug.rc +++ b/reactos/boot/freeldr/fdebug/fdebug.rc @@ -15,7 +15,7 @@ IDI_FDEBUG ICON "fdebug.ico" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/boot/freeldr/fdebug/lang/nb-NO.rc b/reactos/boot/freeldr/fdebug/lang/no-NO.rc similarity index 100% rename from reactos/boot/freeldr/fdebug/lang/nb-NO.rc rename to reactos/boot/freeldr/fdebug/lang/no-NO.rc diff --git a/reactos/dll/cpl/access/lang/no-NO.rc b/reactos/dll/cpl/access/lang/no-NO.rc new file mode 100644 index 00000000000..1c2914c47d2 --- /dev/null +++ b/reactos/dll/cpl/access/lang/no-NO.rc @@ -0,0 +1,304 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + + +IDD_PROPPAGEKEYBOARD DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tastatur" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Treige taster",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Bruk treige taster hvis du vil bruke Shift, Ctrl, Alt eller ved trykke bare en om gangen.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk Trege taster",IDC_STICKY_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "&Innstillinger",IDC_STICKY_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14 + + GROUPBOX "Filtertaster",-1,PROPSHEETPADDING(1),LABELLINE(8)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(7)+2 + LTEXT "Bruk filtertaster hvis du vil at Reactos skal ignorere lette eller gjentatte tastetrykk, eller senke repetisjonshastigheten.",-1,PROPSHEETPADDING(2),LABELLINE(10)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk &filtertaster",IDC_FILTER_BOX,PROPSHEETPADDING(2),LABELLINE(13)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "I&nnstillinger",IDC_FILTER_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(13)+2,PROPSHEETPADDING(15),14 + + GROUPBOX "Veksletaster",-1,PROPSHEETPADDING(1),LABELLINE(16)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Bruk vekseltaster hvis du vil hre lydsignaler nr du trykker p Caps Lock, Num Lock, eller Scroll Lock.",-1,PROPSHEETPADDING(2),LABELLINE(18)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + AUTOCHECKBOX "Bruk &Vekseltaster",IDC_TOGGLE_BOX,PROPSHEETPADDING(2),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "Innstill&inger",IDC_TOGGLE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(20)+2,PROPSHEETPADDING(15),14 + + AUTOCHECKBOX "Vi&s ekstra tastatur hjelp i programmer",IDC_KEYBOARD_EXTRA,PROPSHEETPADDING(1),LABELLINE(23)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),14 +END + + +IDD_PROPPAGESOUND DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Lyd" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Skjermsignal",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(10)+PROPSHEETPADDING(1) + LTEXT "Bruk skjermsignal hvis du vil at Reactos skal gi en visuell varsling nr systemet lager lyd.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk &skjermsignal",IDC_SENTRY_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETPADDING(15),14 + LTEXT "Velg flgende varsling:", IDC_SENTRY_TEXT, PROPSHEETPADDING(2),LABELLINE(8)-2,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + COMBOBOX IDC_SENTRY_COMBO, PROPSHEETPADDING(2), LABELLINE(9), PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + GROUPBOX "Lydvisning",-1,PROPSHEETPADDING(1),LABELLINE(12)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(7)+2 + LTEXT "Bruk lydvisning hvis du vil at programmene skal vise en melding nr de snakker eller lager lyder.",-1,PROPSHEETPADDING(2),LABELLINE(14)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk L&ydvisning",IDC_SSHOW_BOX,PROPSHEETPADDING(2),LABELLINE(16)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 +END + + +IDD_PROPPAGEDISPLAY DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Skjerm" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Hykontrast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Velg dette alternativet hvis du vil at Reactos skal bruke farger og skrifter som er laget for gjre det lett leselig.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk hykontrast",IDC_CONTRAST_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "&Innstillinger",IDC_CONTRAST_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14 + + GROUPBOX "Pekealternativer",-1,PROPSHEETPADDING(1),LABELLINE(8)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(13) + LTEXT "Flytt gidebryterne for endre hastigheten markren blinker med (markrblink) og markrens bredde.",-1,PROPSHEETPADDING(2),LABELLINE(9)+5,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + CTEXT "Blinkehastighet:",-1,PROPSHEETPADDING(2),LABELLINE(12)+5,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + LTEXT "Ingen",-1,PROPSHEETPADDING(3),LABELLINE(14)+2,PROPSHEETPADDING(6),LABELLINE(1) + LTEXT "Rask",-1,PROPSHEETWIDTH-PROPSHEETPADDING(9),LABELLINE(14)+2,PROPSHEETPADDING(6),LABELLINE(1) + CONTROL "",IDC_CURSOR_BLINK_TRACK,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,PROPSHEETPADDING(10),LABELLINE(14),PROPSHEETWIDTH-PROPSHEETPADDING(20),LABELLINE(2) + CTEXT "Bredde:",-1,PROPSHEETPADDING(2),LABELLINE(17),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + LTEXT "Smal",-1,PROPSHEETPADDING(3),LABELLINE(18)+7,PROPSHEETPADDING(6),LABELLINE(1) + LTEXT "Bred",-1,PROPSHEETWIDTH-PROPSHEETPADDING(9),LABELLINE(18)+7,PROPSHEETPADDING(6),LABELLINE(1) + CONTROL "",IDC_CURSOR_WIDTH_TRACK,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,PROPSHEETPADDING(10),LABELLINE(18)+5,PROPSHEETWIDTH-PROPSHEETPADDING(20),LABELLINE(2) + LTEXT "",IDC_CURSOR_WIDTH_TEXT,PROPSHEETPADDING(3),LABELLINE(16),PROPSHEETPADDING(4),LABELLINE(1)+5 +END + + +IDD_PROPPAGEMOUSE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Mus" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Musetaster",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Bruk musetaster hvis du vil flytte pekeren ved hjelp av det numeriske tastaturet.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk &Musetaster",IDC_MOUSE_BOX,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "&Innstillinger",IDC_MOUSE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(5)+2,PROPSHEETPADDING(15),14 +END + + +IDD_PROPPAGEGENERAL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Automatisk tilbakestilling",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + AUTOCHECKBOX "&Deaktiver tilgjengelighetsfunksjonene etter inaktivitet i:",IDC_RESET_BOX,PROPSHEETPADDING(2),LABELLINE(2)-2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + COMBOBOX IDC_RESET_COMBO, PROPSHEETPADDING(4), LABELLINE(4), PROPSHEETPADDING(10), LABELLINE(5), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + GROUPBOX "Varsling",-1,PROPSHEETPADDING(1),LABELLINE(7)-2,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + AUTOCHECKBOX "Gi advarsel nr en funksjon aktiveres",IDC_NOTIFICATION_MESSAGE,PROPSHEETPADDING(2),LABELLINE(8)-2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + AUTOCHECKBOX "Gi et lydsignal nr en funksjon aktiveres eller deaktiveres",IDC_NOTIFICATION_SOUND,PROPSHEETPADDING(2),LABELLINE(10)-2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Serielle taster",-1,PROPSHEETPADDING(1),LABELLINE(13)-4,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + LTEXT "Ved hjelp av funkasjonen serielle taster kan du bruke tastaturet og musen p forskjellige mter.",-1,PROPSHEETPADDING(2),LABELLINE(14)-4,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + AUTOCHECKBOX "Bruk &Serielle taster",IDC_SERIAL_BOX,PROPSHEETPADDING(2),LABELLINE(16)-4,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + PUSHBUTTON "I&nnstillinger",IDC_SERIAL_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(16)-4,PROPSHEETPADDING(15),14 + + GROUPBOX "Administrative alternativer",-1,PROPSHEETPADDING(1),LABELLINE(19)-4,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + AUTOCHECKBOX "Bruk alle innstillinger p skrivebordet ved p&logging",IDC_ADMIN_LOGON_BOX,PROPSHEETPADDING(2),LABELLINE(20)-4,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + AUTOCHECKBOX "Bruk alle innstillinger som &standard for nye brukere",IDC_ADMIN_USERS_BOX,PROPSHEETPADDING(2),LABELLINE(22)-4,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 +END + + +IDD_STICKYKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for trege taster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Trykk SHIFT 5 ganger for aktivere hurtigtasten.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "B&ruk hurtigtast",IDC_STICKY_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Alternativ",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1) + AUTOCHECKBOX "&Trykk endringstasten 2 ganger for lse den",IDC_STICKY_LOCK_CHECK,PROPSHEETPADDING(2),LABELLINE(10)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + AUTOCHECKBOX "&Deaktiver trege taster hvis 2 taster trykkes samtidig",IDC_STICKY_UNLOCK_CHECK,PROPSHEETPADDING(2),LABELLINE(12),PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Varsling",-1,PROPSHEETPADDING(1),LABELLINE(15),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1) + AUTOCHECKBOX "&Gi et lydsignal nr endringstasten trykkes",IDC_STICKY_SOUND_CHECK,PROPSHEETPADDING(2),LABELLINE(16)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + AUTOCHECKBOX "&Vis status for trege taster p skjermen",IDC_STICKY_STATUS_CHECK,PROPSHEETPADDING(2),LABELLINE(18),PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_FILTERKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for filtertaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Hurtigtast for filtertaster er: \nHold nede hyre Skift-tast i 8 sekunder.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk hurtigtast",IDC_FILTER_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 + + GROUPBOX "Filteralternativer",-1,PROPSHEETPADDING(1),LABELLINE(8)+5,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(8)+5 + AUTORADIOBUTTON "Ign&orer gjentatte tastetrykk",IDC_FILTER_BOUNCE_RADIO,PROPSHEETPADDING(2),LABELLINE(9)+7,PROPSHEETPADDING(20),LABELLINE(1),WS_GROUP|WS_TABSTOP + AUTORADIOBUTTON "Ign&orer raske tastetrykk og senk repetisjonshastigheten",IDC_FILTER_REPEAT_RADIO,PROPSHEETPADDING(2),LABELLINE(11)+5,PROPSHEETPADDING(20),LABELLINE(2),BS_TOP|BS_MULTILINE + PUSHBUTTON "&Innstillinger",IDC_FILTER_BOUNCE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(9)+5,PROPSHEETPADDING(15),14,WS_GROUP + PUSHBUTTON "I&nnstillinger",IDC_FILTER_REPEAT_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(11)+5,PROPSHEETPADDING(15),14,WS_GROUP + LTEXT "&Klikk og skriv her hvis du vil teste innstillingene for filtertaster:",-1,PROPSHEETPADDING(2),LABELLINE(14)+1,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + EDITTEXT IDC_FILTER_TEST_EDIT,PROPSHEETPADDING(2),LABELLINE(15)+1,PROPSHEETWIDTH-PROPSHEETPADDING(4),14,WS_GROUP|ES_AUTOHSCROLL + + GROUPBOX "Varsling",-1,PROPSHEETPADDING(1),LABELLINE(17)+6,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+3 + AUTOCHECKBOX "&Gi lydsignal nr taster trykkes eller godtas",IDC_FILTER_SOUND_CHECK,PROPSHEETPADDING(2),LABELLINE(19),PROPSHEETWIDTH-PROPSHEETPADDING(4),10 + AUTOCHECKBOX "V&is status for filtertaster p skjermen",IDC_FILTER_STATUS_CHECK,PROPSHEETPADDING(2),LABELLINE(20)+6,PROPSHEETWIDTH-PROPSHEETPADDING(4),10 + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_TOGGLEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for veksletaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Hurtigtasten for veksletaster er: \nHold nede Num Lock-tasten i 5 sekunder.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "Bruk &hurtigtast",IDC_TOGGLE_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_CONTRASTOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for hykontrast" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Hurtigtasten for hykontrast er: \nTrykk .",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk hurtigtast",IDC_CONTRAST_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Utseendeoppsett med hykontrast",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+PROPSHEETPADDING(1) + LTEXT "Gjeldende hykontrastoppsett er:",-1,PROPSHEETPADDING(2),LABELLINE(10)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + COMBOBOX IDC_CONTRAST_COMBO, PROPSHEETPADDING(2), LABELLINE(11)+2, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_MOUSEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for musetaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Hurtigtast",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) + LTEXT "Hurtigtasten for musetaster er: \nTrykk p .",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + AUTOCHECKBOX "&Bruk hurtigtast",IDC_MOUSEKEYS_ACTIVATE_CHECK,PROPSHEETPADDING(2),LABELLINE(5)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + GROUPBOX "Pekehastighet",-1,PROPSHEETPADDING(1),LABELLINE(9),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(9) + + LTEXT "&Maks hastighet:",-1,PROPSHEETPADDING(2),LABELLINE(10)+4,PROPSHEETPADDING(8),LABELLINE(1) + LTEXT "Lav",-1,PROPSHEETPADDING(11),LABELLINE(10)+4,PROPSHEETPADDING(3),LABELLINE(1) + CONTROL "",IDC_MOUSEKEYS_SPEED_TRACK,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,PROPSHEETPADDING(15),LABELLINE(10)+2,PROPSHEETWIDTH-PROPSHEETPADDING(22),LABELLINE(2) + LTEXT "Hyt",-1,PROPSHEETWIDTH-PROPSHEETPADDING(7),LABELLINE(10)+4,PROPSHEETPADDING(3),LABELLINE(1) + + LTEXT "&Akselerasjon:",-1,PROPSHEETPADDING(2),LABELLINE(13)+4,PROPSHEETPADDING(8),LABELLINE(1) + LTEXT "Treg",-1,PROPSHEETPADDING(11),LABELLINE(13)+4,PROPSHEETPADDING(3),LABELLINE(1) + CONTROL "",IDC_MOUSEKEYS_ACCEL_TRACK,"msctls_trackbar32",TBS_AUTOTICKS | WS_TABSTOP,PROPSHEETPADDING(15),LABELLINE(13)+2,PROPSHEETWIDTH-PROPSHEETPADDING(22),LABELLINE(2) + LTEXT "Rask",-1,PROPSHEETWIDTH-PROPSHEETPADDING(7),LABELLINE(13)+4,PROPSHEETPADDING(3),LABELLINE(1) + + AUTOCHECKBOX "&Hold nede Ctrl for raskere og Shift for langsommere",IDC_MOUSEKEYS_SPEED_CHECK,PROPSHEETPADDING(2),LABELLINE(16),PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + LTEXT "Bruk musetaster nr Num Lock er:",-1,PROPSHEETPADDING(1),LABELLINE(18)+7,PROPSHEETPADDING(20),LABELLINE(1) + AUTORADIOBUTTON "P&",IDC_MOUSEKEYS_ON_RADIO,PROPSHEETWIDTH-PROPSHEETPADDING(14),LABELLINE(18)+7,PROPSHEETPADDING(5),LABELLINE(1) + AUTORADIOBUTTON "A&v",IDC_MOUSEKEYS_OFF_RADIO,PROPSHEETWIDTH-PROPSHEETPADDING(8),LABELLINE(18)+7,PROPSHEETPADDING(5),LABELLINE(1) + + AUTOCHECKBOX "&Vis status for musetaster p skjermen",IDC_MOUSEKEYS_STATUS_CHECK,PROPSHEETPADDING(1),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(4),14 + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_BOUNCEKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avanserte innstillinger for filtertaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Bounce Keys",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(5) + LTEXT "&Ignorer tastetrykk som gjentas raskere enn:",-1,PROPSHEETPADDING(2),LABELLINE(2)+1,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + COMBOBOX IDC_BOUNCE_TIME_COMBO, PROPSHEETPADDING(2), LABELLINE(3)+5, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + LTEXT "&Testomrde:",-1,PROPSHEETPADDING(1),LABELLINE(7)+3,PROPSHEETPADDING(8),LABELLINE(1) + EDITTEXT IDC_BOUNCE_TEST_EDIT,PROPSHEETPADDING(10),LABELLINE(7),PROPSHEETWIDTH-PROPSHEETPADDING(11),14,ES_AUTOHSCROLL + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_REPEATKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avanserte innstillinger for filtertaster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Repeat Keys",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(12) + LTEXT "Overstyr innstillingene under tastatur i kontrollpanel:",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + + AUTORADIOBUTTON "&Ingen repetisjon",IDC_REPEAT_NOREPEAT_RADIO,PROPSHEETPADDING(2),LABELLINE(3)+3,78,LABELLINE(1),WS_GROUP + AUTORADIOBUTTON "&Senk repetisjonshastigheten",IDC_REPEAT_REPEAT_RADIO,PROPSHEETPADDING(2),LABELLINE(4)+7,131,LABELLINE(1) + + LTEXT "Repetisjons&forskinkelse:",-1,PROPSHEETPADDING(4),LABELLINE(6)+4,PROPSHEETPADDING(10),LABELLINE(1) + COMBOBOX IDC_REPEAT_DELAY_COMBO, PROPSHEETPADDING(4), LABELLINE(7)+6, PROPSHEETWIDTH-PROPSHEETPADDING(6), LABELLINE(6), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + LTEXT "Repetisjons&hastigheten:",-1,PROPSHEETPADDING(4),LABELLINE(9)+6,PROPSHEETPADDING(10),LABELLINE(1) + COMBOBOX IDC_REPEAT_REPEAT_COMBO, PROPSHEETPADDING(4), LABELLINE(10)+8, PROPSHEETWIDTH-PROPSHEETPADDING(6), LABELLINE(7), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + GROUPBOX "Sene taster",-1,PROPSHEETPADDING(1),LABELLINE(14),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(4)+4 + LTEXT "&Tastene m holdes nede i:",-1,PROPSHEETPADDING(2),LABELLINE(15),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(1) + COMBOBOX IDC_REPEAT_WAIT_COMBO, PROPSHEETPADDING(2), LABELLINE(16)+4, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(8), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + LTEXT "&Testomrde:",-1,PROPSHEETPADDING(1),LABELLINE(20),PROPSHEETPADDING(8),LABELLINE(1) + EDITTEXT IDC_REPEAT_TEST_EDIT,PROPSHEETPADDING(10),LABELLINE(19)+7,PROPSHEETWIDTH-PROPSHEETPADDING(11),14,ES_AUTOHSCROLL + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +IDD_SERIALKEYSOPTIONS DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Innstillinger for serielle taster" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Serielle taster",-1,PROPSHEETPADDING(1),LABELLINE(1),PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(10) + LTEXT "Velg porten der du vil koble til en alternativ innenhet.",-1,PROPSHEETPADDING(2),LABELLINE(2),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + + LTEXT "&Seriell port:",-1,PROPSHEETPADDING(2),LABELLINE(3)+5,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + COMBOBOX IDC_SERIAL_PORT_COMBO, PROPSHEETPADDING(2), LABELLINE(4)+7, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(6), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + LTEXT "&Overfrings-hastighet:",-1,PROPSHEETPADDING(2),LABELLINE(7),PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(2) + COMBOBOX IDC_SERIAL_BAUD_COMBO, PROPSHEETPADDING(2), LABELLINE(8)+2, PROPSHEETWIDTH-PROPSHEETPADDING(4), LABELLINE(8), + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + + DEFPUSHBUTTON "OK", IDOK, PROPSHEETWIDTH-111, PROPSHEETHEIGHT-21, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, PROPSHEETWIDTH-57, PROPSHEETHEIGHT-21, 50, 14 +END + + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Tilgjengelighetsalternativer" + IDS_CPLSYSTEMDESCRIPTION "Tilpass tilgjengelighetsalternativer funksjon for din datamaskin." + + IDS_SENTRY_NONE "[Ingen]" + IDS_SENTRY_TITLE "Flash the titlebar" + IDS_SENTRY_WINDOW "Flash the active window" + IDS_SENTRY_DISPLAY "Flash the desktop" + + IDS_SECONDS "Sekunder" + IDS_MINUTES "Minutter" +END diff --git a/reactos/dll/cpl/access/rsrc.rc b/reactos/dll/cpl/access/rsrc.rc index 96328a4e537..81ecdd62b45 100644 --- a/reactos/dll/cpl/access/rsrc.rc +++ b/reactos/dll/cpl/access/rsrc.rc @@ -13,6 +13,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/appwiz-new/lang/no-NO.rc b/reactos/dll/cpl/appwiz-new/lang/no-NO.rc new file mode 100644 index 00000000000..1f9c89d3c49 --- /dev/null +++ b/reactos/dll/cpl/appwiz-new/lang/no-NO.rc @@ -0,0 +1,199 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Fjern", ID_APP_REMOVE + MENUITEM "&Endre", ID_APP_MODIFY, GRAYED + END +END + +IDD_NETINSTALL DIALOGEX 0, 0, 242, 221 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Nettverk installering" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "&Installering...", IDC_INSTALL, 150, 171, 85, 14 + LTEXT "&Flgende programvare kan bli automatisk installert av ReactOS. For installere et program, velg det fra listen og klikk installer.", IDC_NETTEXT, 40, 6, 195, 32 + LISTBOX IDC_NETPROGLIST, 7, 42, 228, 125, LBS_STANDARD | WS_TABSTOP + ICON IDI_APPICO, IDC_NETICON, 9, 10, 20, 20 +END + +IDD_CREATESHORTCUT DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Opprett snarvei" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "This wizard helps you to create shortcuts to local or network programs, files, folders, computers, or Internet addresses.", -1, 97, 7, 195, 28 + LTEXT "&Type the location of the item:", IDC_LOCATIONITEM, 98, 46, 196, 8 + EDITTEXT IDC_LOCITEMEDIT, 97, 58, 133, 14, ES_AUTOHSCROLL + PUSHBUTTON "B&la gjennom...", IDC_LOCBROWSE, 233, 58, 60, 14 + LTEXT "Klikk p neste for forsette.", -1, 97, 95, 198, 8 +END + +IDD_SELPROGFOLDER DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Velg Program mappe" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Velg en mappe for plassere denne snarveien i:", -1, 100, 7, 193, 10 + CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER | WS_TABSTOP | 0x00000028, 100, 19, 193, 90 + PUSHBUTTON "Ny &mappe...", IDC_NEWFOLDERBTN, 218, 116, 75, 14 + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT +END + +IDD_SELPROGTITLE DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Select a Title for the Program" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Type a name for this shortcut:", -1, 100, 10, 194, 10 + EDITTEXT IDC_NAMESCEDIT, 100, 23, 194, 14, ES_AUTOHSCROLL + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Klikk fullfrt for opprette snarveien.", -1, 100, 61, 194, 8 +END + +IDD_SELPROGICON DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Velg en ikon" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Velg en ikon for snarveien:", -1, 100, 8, 195, 10 + LISTBOX IDC_SELICONLIST, 100, 20, 192, 130, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | LBS_DISABLENOSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT +END + +IDD_INSTFROMCD DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Innstaller program fra diskett eller CD-stasjon" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "", IDC_HEADTEXT, 101, 7, 193, 28 + ICON 0, IDC_INSTFROMCDICON, 100, 60, 18, 20 + LTEXT "", IDC_INSTFROMCDTEXT, 123, 66, 146, 8 +END + +IDD_RUNINSTPROG DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Kjr innstallasjon programmet" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "", IDC_HEADTEXT, 101, 6, 195, 28 + LTEXT "&pne:", IDC_LOCATIONITEM, 100, 53, 195, 8 + EDITTEXT IDC_LOCITEMEDIT, 98, 64, 133, 14, ES_AUTOHSCROLL + PUSHBUTTON "B&la gjennom...", IDC_LOCBROWSE, 234, 64, 60, 14 +END + +IDD_CHANGEUSEROPT DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre bruker valg" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "You have the option to make this new program available to every User.", 1012, 101, 5, 194, 40 + AUTORADIOBUTTON "Installere", IDC_INSTALLRB, 108, 51, 146, 14, BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Kjr", IDC_LOCATIONITEM, 108, 74, 146, 14, BS_MULTILINE | NOT WS_TABSTOP +END + +IDD_FINISHADMINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Finish Admin Install" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Change ini mapping back by clicking Finish.", IDC_HEADTEXT, 98, 7, 196, 40 +END + +IDD_AFTERINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Etter Installasjon" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Vennligst trykk p neste.", IDC_HEADTEXT, 98, 7, 197, 40 +END + +IDD_RUNINSTPROG2 DIALOG 0, 0, 250, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Kjr installasjons program" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Please specify the uninstall program location.", IDC_UNINSTLOCTEXT, 9, 8, 235, 37 + LTEXT "&Command line for the uninstall program:", IDC_LOCATIONITEM, 9, 57, 237, 8 + EDITTEXT IDC_LOCITEMEDIT, 7, 69, 165, 14, ES_AUTOHSCROLL + PUSHBUTTON "B&la gjennom...", IDC_LOCBROWSE, 178, 69, 66, 14 + DEFPUSHBUTTON "OK", IDOK, 118, 100, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 184, 100, 60, 14 +END + +IDD_WARNING DIALOG 20, 20, 255, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Advarsel" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_WARNINGICON, 8, 10, 20, 20 + LTEXT "There are other users logged on to this computer.", -1, 37, 8, 214, 10 + LTEXT "If you uninstall this program while another user is running it, the program might not uninstall completely.", -1, 37, 23, 212, 22 + LTEXT "To properly change or remove this program, switch to and log off each user before you continue.", IDC_WARNINGTEXT, 37, 46, 212, 26 + PUSHBUTTON "&Bytt bruker", IDC_SWITCHUSER, 61, 81, 60, 14 + PUSHBUTTON "&Fortsett", IDOK, 125, 81, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 189, 81, 60, 14 +END + +IDD_REMSHORTCUTS DIALOGEX 20, 20, 220, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Fjern snarveier/mapper" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&To remove an item from the Start menu, select the item and click Remove.", IDC_UNINSTLOCTEXT, 10, 7, 204, 16 + CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER | WS_TABSTOP | 0x00000023, 10, 28, 200, 145 + PUSHBUTTON "&Fjern", IDC_REMOVEBTN, 84, 182, 60, 14 + DEFPUSHBUTTON "Lukk", IDOK, 151, 182, 60, 14 +END + +IDD_ADDLATER DIALOGEX 0, 0, 220, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTERMOUSE | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Legg til senere" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You may choose a date and time when you would like to add this program to your computer. For example, you can schedule this to happen when you are away from your computer.", IDC_UNINSTLOCTEXT, 7, 4, 208, 33 + AUTORADIOBUTTON "&Add program later", IDC_ADDPROGLATER, 7, 47, 207, 10, WS_GROUP + CONTROL "Picker", 12368, "SYSDATETIMEPICK32", WS_BORDER | WS_TABSTOP | 0x0000000C, 29, 62, 107, 14 + AUTORADIOBUTTON "&Do not add program", IDC_NOTADDPROG, 7, 87, 208, 10 + DEFPUSHBUTTON "OK", IDOK, 89, 141, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", IDCANCEL, 154, 141, 60, 14, NOT WS_TABSTOP +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Legg til eller fjern programmer" + IDS_CPLSYSTEMDESCRIPTION "Innstaller eller fjern programmer og ReactOS komponenter." + IDS_UNABLEOPEN_UNINSTKEY "Unable to open Uninstall Key" + IDS_LIST_TITLE "Liste" + IDS_SIZE_TITLE "Strrelse (MB)" + IDS_LAST_USED "Sist bruk" + IDS_PROGANDUPDATES "Programmer & oppdateringer" + IDS_PROGRAMS_ONLY "Bare programmer" + IDS_UPDATES_ONLY "Bare oppdateringer" + IDS_WELCOME_TITLE "Velkommen til assistenten for legg til eller fjerne programmer" + IDS_WELCOME_MSG "Please choose a category on the left or select application on the list for removing or viewing information." + IDS_SEARCH_TEXT "Sk i listen..." + IDS_REMOVE_BTN "&Fjern" + IDS_MODIFY_BTN "&Endre" + IDS_UNABLEREAD_UNINSTSTR "Unable to read UninstallString. This entry is invalid or has been created by an MSI installer." + IDS_INF_REG_OWNER "Registerert eier: " + IDS_INF_PRODUCT_ID "Produkt ID: " + IDS_INF_PUBLISHER "Utgiver: " + IDS_INF_VERSION "Versjon: " + IDS_INF_CONTACT "Kontakt: " + IDS_INF_SUP_INFO "Hjelp informasjon: " + IDS_INF_SUP_PHONE "Hjelp telefon: " + IDS_INF_PRODUCT_UPD "Produkt oppdateringer: " + IDS_INF_README "Readme: " + IDS_INF_COMMENTS "Kommentarer: " + IDS_NO_INFORMATION "Ingen informasjon om dette programmet." +END diff --git a/reactos/dll/cpl/appwiz-new/rsrc.rc b/reactos/dll/cpl/appwiz-new/rsrc.rc index 3d1641754f1..4d16f30468c 100644 --- a/reactos/dll/cpl/appwiz-new/rsrc.rc +++ b/reactos/dll/cpl/appwiz-new/rsrc.rc @@ -7,6 +7,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/cpl/appwiz/lang/no-NO.rc b/reactos/dll/cpl/appwiz/lang/no-NO.rc new file mode 100644 index 00000000000..529a23d67b2 --- /dev/null +++ b/reactos/dll/cpl/appwiz/lang/no-NO.rc @@ -0,0 +1,169 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "Endre/&fjerne",ID_APP_MODIFYREMOVE + MENUITEM "&Informasjon", ID_APP_INFORMATION + END +END + +IDR_POPUP_UPD MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Fjern", ID_UPD_REMOVE + MENUITEM "&Informasjon", ID_UPD_INFORMATION + END +END + +IDD_PROPPAGEINSTALL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Endre eller fjern programmer" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,6,16,16 + LTEXT "Flgende programvare kan bli fjernet automatisk. For fjerne et program eller endre dems innstallerte komponenter, velg de fra listen og klikk Endre/Fjerne.",-1,36,7,PROPSHEETWIDTH-48,22 + LTEXT "Finn:",-1,PROPSHEETPADDING,33,30,8 + EDITTEXT IDC_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + LTEXT "Vis:",-1,250,33,30,8 + COMBOBOX IDC_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + CONTROL "", IDC_SOFTWARELIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "Endre/&Fjerne", IDC_ADDREMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED + PUSHBUTTON "&Informasjon", IDC_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEUPDATES DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Fjern oppdateringer" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_UPDATES,-1,PROPSHEETPADDING,6,16,16 + LTEXT "Flgende oppdateringer kan bli fjernet automatisk. For fjerne oppdateringer, velg de fra listen og klikk Fjerne.",-1,36,7,PROPSHEETWIDTH-48,22 + LTEXT "Finn:",-1,PROPSHEETPADDING,33,30,8 + EDITTEXT IDC_UPD_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + LTEXT "Vis:",-1,250,33,30,8 + COMBOBOX IDC_UPD_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + CONTROL "", IDC_UPDATESLIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "&Fjerne", IDC_UPD_REMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED + PUSHBUTTON "&Informasjon", IDC_UPD_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEADD DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Legg til et nytt program" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,10,32,32 + LTEXT "For innstallere et nytt program, klikk ""Innstallere"".",-1,36,11,PROPSHEETWIDTH-48,8 + PUSHBUTTON "&Innstallere...", IDC_INSTALL, PROPSHEETWIDTH-(90), 46, 80, 14 + LTEXT "", -1, PROPSHEETPADDING, 70, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN + ICON IDI_DOWNLOADICO,-1,PROPSHEETPADDING,80,32,32 + LTEXT "For nedlaste og installere nytt applikasjon, trykk p ""Nedlasting !"".",-1,36,83,PROPSHEETWIDTH-48,17 + PUSHBUTTON "&Nedlasting !", IDC_ADD_DOWNLOAD_BUTTON, PROPSHEETWIDTH-(90), 125, 80, 14, WS_DISABLED + LTEXT "", -1, PROPSHEETPADDING, 150, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN + ICON IDI_APPINETICO,-1,PROPSHEETPADDING,160,32,32 + LTEXT "Trykk p ""Finn p internett"" Knappen for ske for nye applikasjoner som er tilgjengelig ved hjelp av internett forbindelsen.",-1,36,161,PROPSHEETWIDTH-48,17 + PUSHBUTTON "&Egenskaper...", IDC_ADD_PROP_BUTTON, PROPSHEETWIDTH-(175), 205, 80, 14, WS_DISABLED + PUSHBUTTON "&Finn p internett", IDC_ADD_FIND_BUTTON, PROPSHEETWIDTH-(90), 205, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEROSSETUP DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ReactOS Innstallering" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_REACTOS,-1,PROPSHEETPADDING,6,16,16 + LTEXT "",-1,36,7,PROPSHEETWIDTH-48,22 +END + +IDD_FIRSTPAGE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Opprett lenke" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Text1", -1, 115, 15, 160, 24 + LTEXT "Text2", -1, 115, 35, 160, 17 +END + +IDD_SUBMIT_REPORT DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Opprett lenke" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Text1",-1,10,0,225,40 + LTEXT "Text2",-1,10,40,120,20 + LTEXT "Text3",-1,10,55,120,20 +END + +IDD_SHORTCUT_LOCATION DIALOGEX 0, 0, 340, 200 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Opprett snarvei" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "This wizard helps you to create shortcuts to local or\nnetwork programs, files, folders, computers, or Internet\naddresses.", -1, 120, 15, 200, 30 + LTEXT "Type the location of the item:", -1, 120, 50, 120, 10 + EDITTEXT IDC_SHORTCUT_LOCATION, 120, 65, 150, 15, ES_LEFT + PUSHBUTTON "Bla gjennom...", IDC_SHORTCUT_BROWSE, 272, 65, 55, 15, ES_LEFT + LTEXT "Trykk p neste for fortsette.", -1, 120, 97, 162, 10 +END + +IDD_SHORTCUT_FINISH DIALOGEX 0, 0, 340, 200 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Select a Title for the Program" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "&Type a name for this shortcut:", -1, 120, 15, 150, 10 + EDITTEXT IDC_SHORTCUT_NAME, 120, 35, 150, 15, ES_LEFT + LTEXT "Trykk p fullfrt for opprette snarveien.", -1, 118, 97, 178, 17 +END + +IDD_INFORMATION DIALOGEX 5, 100, 269, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Informasjon" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDS_INFO_DISPNAME, PROPSHEETPADDING, 6, 258, 15, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Registerert eier:", -1, PROPSHEETPADDING, 27, 97, 8 + EDITTEXT IDS_INFO_REGOWNER, PROPSHEETPADDING+97, 25, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Produkt ID:", -1, PROPSHEETPADDING, 44, 97, 8 + EDITTEXT IDS_INFO_PRODUCTID, PROPSHEETPADDING+97, 42, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Utgiver:", -1, PROPSHEETPADDING, 61, 97, 8 + EDITTEXT IDS_INFO_PUBLISHER, PROPSHEETPADDING+97, 59, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Versjon:", -1, PROPSHEETPADDING, 78, 97, 8 + EDITTEXT IDS_INFO_VERSION, PROPSHEETPADDING+97, 76, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Kontakt:", -1, PROPSHEETPADDING, 95, 97, 8 + EDITTEXT IDS_INFO_CONTACT, PROPSHEETPADDING+97, 93, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Hjelp informasjon:", -1, PROPSHEETPADDING, 112, 97, 8 + EDITTEXT IDS_INFO_SUPPORTINFO, PROPSHEETPADDING+97, 110, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Hjelp Telefon:", -1, PROPSHEETPADDING, 129, 97, 8 + EDITTEXT IDS_INFO_SUPPORTPHONE, PROPSHEETPADDING+97, 127, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Produkt oppdateringer:", -1, PROPSHEETPADDING, 146, 97, 8 + EDITTEXT IDS_INFO_PRODUCT_UPDATES, PROPSHEETPADDING+97, 144, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Readme:", -1, PROPSHEETPADDING, 163, 97, 8 + EDITTEXT IDS_INFO_README, PROPSHEETPADDING+97, 161, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Kommentarer:", -1, PROPSHEETPADDING, 180, 97, 8 + EDITTEXT IDS_INFO_COMMENTS, PROPSHEETPADDING+97, 178, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&Lukk", IDCANCEL, 212, 198, 50, 14 +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Legg til/Fjern Programmer" + IDS_CPLSYSTEMDESCRIPTION "Sett opp programmer og opprett snarveier." + IDS_ERROR "Feil" + IDS_UNABLEREAD_UNINSTSTR "Unable to read UninstallString. This entry is invalid or has been created by an MSI installer." + IDS_UNABLEOPEN_UNINSTKEY "Ikke mulig pne avinnstallert nkkel" + IDS_APPLIST "Nvrende installerte programmer" + IDS_UPDATESLIST "Nvrende installerte oppdateringer" + IDS_LARGEICONS "Store ikoner" + IDS_LIST "Liste" + IDS_DETAILS "Detailjer" + IDS_CREATE_SHORTCUT "Opprett snarveier" + IDS_ERROR_NOT_FOUND "Filen %s ble ikke funnet." + IDS_UNABLEREAD_INFORMATION "Ikke mulig pne informasjons nkkel" + IDS_NO_INFORMATION "Ingen informasjon" + IDS_NONE_APP "Det er ingen installerte applikasjoner." + IDS_NONE_UPD "Det er ingen installerte oppdateringer." +END diff --git a/reactos/dll/cpl/appwiz/rsrc.rc b/reactos/dll/cpl/appwiz/rsrc.rc index fda7e20a47d..87246447338 100644 --- a/reactos/dll/cpl/appwiz/rsrc.rc +++ b/reactos/dll/cpl/appwiz/rsrc.rc @@ -8,6 +8,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/console/lang/no-NO.rc b/reactos/dll/cpl/console/lang/no-NO.rc new file mode 100644 index 00000000000..a79b244ddd1 --- /dev/null +++ b/reactos/dll/cpl/console/lang/no-NO.rc @@ -0,0 +1,149 @@ +/* $Id: en-US.rc 31950 2008-01-22 19:08:51Z dreimer $ + * + * PROJECT: ReactOS Console Configuration DLL + * LICENSE: GPL - See COPYING in the top level directory + * FILE: dll/win32/console/lang/en-US.rc + * PURPOSE: English resource file + * PROGRAMMERS: Johannes Anderwald (johannes.anderwald@student.tugraz.at) + */ + +#include + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGEOPTIONS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Valg" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Cursor Size", -1, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Sm", IDC_RADIO_SMALL_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 20, 90, 10 + CONTROL "&Middels", IDC_RADIO_MEDIUM_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 40, 90, 10 + CONTROL "&Store", IDC_RADIO_LARGE_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 60, 90, 10 + GROUPBOX "Skjerminnstillinger", -1, 133, 7, 112, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Window", IDC_RADIO_DISPLAY_WINDOW, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 20, 70, 10 + CONTROL "F&ull skjerm", IDC_RADIO_DISPLAY_FULL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 40, 70, 10 + GROUPBOX "Kommando historie", -1, 7, 84, 120, 77, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Buffer Strrelse:", -1, 14, 101, 70, 12 + EDITTEXT IDC_EDIT_BUFFER_SIZE, 90, 97, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_BUFFER_SIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 97, 12, 15 + LTEXT "&Number of Buffers:", -1, 14, 124, 70, 12 + EDITTEXT IDC_EDIT_NUM_BUFFER, 90, 120, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_NUM_BUFFER, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 120, 12, 15 + CHECKBOX "&Discard Old Duplicates", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 + GROUPBOX "Rediger valg", -1, 133, 85, 112, 77, BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP + CHECKBOX "&QuickEdit Mode", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "&Insert Mode", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +IDD_PROPPAGEFONT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Skrift" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Vindu forhndsvisning:", -1, 10, 10, 94, 10 + LTEXT "Strrelse:", -1, 180, 10, 36, 10 + CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 + LISTBOX IDC_LBOX_FONTS, 181, 20, 55, 80, LBS_DISABLENOSCROLL | WS_VSCROLL + LTEXT "&Skrift:", -1, 10, 105, 33, 10 + CHECKBOX "&Bold fonts", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 + LISTBOX IDC_LBOX_TYPE, 10, 120, 110, 40, LBS_DISABLENOSCROLL | WS_VSCROLL + GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 + CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 + LTEXT "Each character is:", -1, 124, 166, 75, 10 + LTEXT "Skjerm piksel bred\nskjerm piksel hy", -1, 136, 180, 101, 20 + LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10 + LTEXT "", IDC_FONT_SIZE_Y, 120, 188, 10, 10 +END + +IDD_PROPPAGELAYOUT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Layout" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Vindu forhndsvisning:", -1, 8, 6, 95, 10 + CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 16, 115, 70 + GROUPBOX "Screen Buffer Size", -1, 130, 12, 115, 50 + LTEXT "&Bredde:", -1, 140, 28, 40, 10 + LTEXT "&Hyde:", -1, 140, 46, 39, 10 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_WIDTH, 203, 25, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 25, 13, 14 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_HEIGHT, 203, 42, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 42, 13, 14 + GROUPBOX "Vindu strrelse", -1, 130, 65, 115, 47 + LTEXT "&B&redde:", -1, 140, 78, 39, 10 + LTEXT "&H&yde:", -1, 140, 95, 37, 10 + EDITTEXT IDC_EDIT_WINDOW_SIZE_WIDTH, 203, 75, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 75, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_SIZE_HEIGHT, 203, 92, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 92, 13, 14 + GROUPBOX "Window Position", -1, 130, 116, 115, 64 + LTEXT "&Venstre:", -1, 140, 132, 38, 10 + LTEXT "&Topp:", -1, 140, 149, 40, 10 + EDITTEXT IDC_EDIT_WINDOW_POS_LEFT, 203, 128, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_LEFT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 128, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_POS_TOP, 203, 146, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_TOP, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 146, 13, 14 + CHECKBOX "Let system &position window", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 +END + +IDD_PROPPAGECOLORS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Farger" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Skjerm &tekst", IDC_RADIO_SCREEN_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 12, 112, 10 + CONTROL "Skjerm &bakgrunn", IDC_RADIO_SCREEN_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 30, 112, 10 + CONTROL "&Popup Text", IDC_RADIO_POPUP_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 48, 112, 10 + CONTROL "Pop&up Background", IDC_RADIO_POPUP_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 67, 112, 10 + GROUPBOX "Selected Color Values", -1, 129, 7, 118, 73 + LTEXT "&Rd:", -1, 140, 25, 48, 10 + EDITTEXT IDC_EDIT_COLOR_RED, 210, 22, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_RED, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 22, 12, 14 + LTEXT "&Grnn:", -1, 140, 42, 48, 10 + EDITTEXT IDC_EDIT_COLOR_GREEN, 210, 39, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_GREEN, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 39, 12, 14 + LTEXT "&Bl:", -1, 140, 60, 48, 10 + EDITTEXT IDC_EDIT_COLOR_BLUE, 210, 56, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_BLUE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 56, 12, 14 + CONTROL "", IDC_STATIC_COLOR1, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 17, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR2, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 31, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR3, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 45, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR4, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 59, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR5, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 73, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR6, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 87, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR7, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 101, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR8, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 115, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR9, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 129, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR10, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 143, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR11, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 157, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR12, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 171, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR13, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 185, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR14, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 199, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR15, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 213, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR16, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 227, 90, 12, 12 + GROUPBOX "Selected Screen Colors", -1, 7, 111, 240, 40 + CONTROL "", IDC_STATIC_SCREEN_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 124, 224, 20 + GROUPBOX "Selected Popup Colors", -1, 7, 162, 240, 40 + CONTROL "", IDC_STATIC_POPUP_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 176, 224, 20 +END + +IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Apply Properties" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "&Apply Properties to current window only", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 + CONTROL "&Save Properties for future windows with same title", IDC_RADIO_APPLY_ALL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 31, 207, 10 + PUSHBUTTON "OK", IDOK, 58, 58, 50, 14, WS_VISIBLE + PUSHBUTTON "Avbryt", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Konsoll" + IDS_CPLDESCRIPTION "Configures console properties." + IDS_APPLY_SHORTCUT_ALL "Modify &shortcut that started this window" + IDS_SCREEN_TEXT "C:\ReactOS> dir\nSYSTEM 10-01-99 5:00\nSYSTEM32 10-01-99 5:00" + IDS_RASTERFONTS "Raster Fonts" +END diff --git a/reactos/dll/cpl/console/rsrc.rc b/reactos/dll/cpl/console/rsrc.rc index 61d9f1b572f..836b52e0c79 100644 --- a/reactos/dll/cpl/console/rsrc.rc +++ b/reactos/dll/cpl/console/rsrc.rc @@ -8,6 +8,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/es-ES.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/desk/lang/no-NO.rc b/reactos/dll/cpl/desk/lang/no-NO.rc new file mode 100644 index 00000000000..a7a1e6d6d2b --- /dev/null +++ b/reactos/dll/cpl/desk/lang/no-NO.rc @@ -0,0 +1,223 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_BACKGROUND DIALOGEX DISCARDABLE 0, 0, 246, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Bakgrunn" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_BACKGROUND_PREVIEW, "Static", SS_OWNERDRAW, + 70, 10, 105, 70,WS_EX_STATICEDGE + CONTROL "",IDC_BACKGROUND_LIST,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | LVS_SHOWSELALWAYS | + WS_BORDER | WS_TABSTOP, 8, 114, 174, 78 + LTEXT "Velg et bilde som du vil bruke som skrivebordbakgrunn:", + IDC_STATIC, 8, 103, 180, 9 + PUSHBUTTON "&Bla gjennom...", IDC_BROWSE_BUTTON, 188, 114, 50, 15 + PUSHBUTTON "&Farger...", IDC_COLOR_BUTTON, 188, 177, 50, 15 + LTEXT "Plassering:", IDC_STATIC, 188, 138, 36, 9 + COMBOBOX IDC_PLACEMENT_COMBO, 188, 149, 50, 54, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP +END + + +IDD_SCREENSAVER DIALOGEX 0, 0, 246, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Skjermsparer" +FONT 8, "MS Shell Dlg", 0, 0 +BEGIN + CONTROL "", IDC_SCREENS_PREVIEW, "Static", SS_OWNERDRAW, + 70, 10, 105, 70, WS_EX_STATICEDGE + GROUPBOX "&Skjermsparer",IDC_SCREENS_DUMMY, 8, 92, 230, 52 + COMBOBOX IDC_SCREENS_LIST, 14, 103, 100, 100, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Inn&stillinger",IDC_SCREENS_SETTINGS, 120, 103, 50, 13, WS_GROUP + PUSHBUTTON "Forhnds&visning ",IDC_SCREENS_TESTSC, 175, 103, 56, 13 + LTEXT "&Vent",IDC_WAITTEXT, 14, 125, 16, 9 + EDITTEXT IDC_SCREENS_TIMEDELAY, 34, 123, 32, 13, ES_RIGHT | WS_GROUP + CONTROL "",IDC_SCREENS_TIME ,UPDOWN_CLASS,UDS_SETBUDDYINT | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | + WS_BORDER | WS_GROUP, 54, 123, 12, 13 + LTEXT "minutter", IDC_MINTEXT, 70, 125, 26, 9 + CONTROL "Spr etter &passord ved gjennopptakelse.",IDC_SCREENS_USEPASSCHK,"button", + BS_AUTOCHECKBOX | WS_TABSTOP, 108, 120, 104, 19 + GROUPBOX "&Strmsparing funksjon", IDC_SCREENS_DUMMY2, 6, 155, 232, 41 + LTEXT "For tilpasse strminnstillingene for din skjerm, klikk p strm innstillingene.", + IDC_STATIC, 14, 166, 146 ,20 + PUSHBUTTON "S&trm...", IDC_SCREENS_POWER_BUTTON, 176, 171, 50, 13 +END + + +IDD_APPEARANCE DIALOGEX DISCARDABLE 0, 0, 246, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Utseende" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass", + WS_VISIBLE | WS_BORDER, 7, 7, 232, 120 + LTEXT "Fargevalg", IDC_STATIC, 7, 140, 64, 7 + COMBOBOX IDC_APPEARANCE_COLORSCHEME, 7, 150, 134, 90 , CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Avansert", IDC_APPEARANCE_ADVANCED, 182, 150, 56, 15 +END + +IDD_ADVAPPEARANCE DIALOGEX DISCARDABLE 0, 0, 250, 239 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +EXSTYLE WS_EX_DLGMODALFRAME | WS_EX_WINDOWEDGE +CAPTION "Avansert utseende" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDC_APPEARANCE_PREVIEW, "PreviewWndClass", + WS_VISIBLE | WS_BORDER, 7, 7, 232, 120 + + LTEXT "Element:", 8, 5, 160, 50, 9 + COMBOBOX IDC_ADVAPPEARANCE_ELEMENT, 5, 170, 130, 90, CBS_DROPDOWNLIST | CBS_HASSTRINGS | CBS_SORT | WS_CHILD | WS_VSCROLL | WS_TABSTOP + + LTEXT "&Strrelse", IDC_ADVAPPEARANCE_SIZE_T, 142, 164, 20, 9 + EDITTEXT IDC_ADVAPPEARANCE_SIZE_E, 142, 170, 38, 13, ES_RIGHT | WS_GROUP + CONTROL "", IDC_ADVAPPEARANCE_SIZE_UD, UPDOWN_CLASS, UDS_AUTOBUDDY | WS_BORDER | WS_GROUP | UDS_ALIGNRIGHT | UDS_ARROWKEYS | UDS_SETBUDDYINT | WS_CHILD | WS_VISIBLE, 172, 170, 10, 13 + + LTEXT "&Farge 1:", IDC_ADVAPPEARANCE_COLOR1_T, 184, 160, 40, 9 + CHECKBOX "-", IDC_ADVAPPEARANCE_COLOR1_B, 184, 170, 28, 13, BS_PUSHLIKE | BS_BITMAP + + LTEXT "&Farge 2:", IDC_ADVAPPEARANCE_COLOR2_T, 216, 160, 40, 9 + CHECKBOX "-", IDC_ADVAPPEARANCE_COLOR2_B, 216, 170, 28, 13, BS_PUSHLIKE | BS_BITMAP + + LTEXT "Skrift:", IDC_ADVAPPEARANCE_FONT_T, 5, 190, 50, 8 + COMBOBOX IDC_ADVAPPEARANCE_FONT_C, 5, 200, 130, 90, CBS_DROPDOWN | CBS_HASSTRINGS | CBS_SORT | WS_VSCROLL | WS_TABSTOP + + LTEXT "Skrift strrelse:", IDC_ADVAPPEARANCE_FONTSIZE_T, 142, 190, 41, 8 + COMBOBOX IDC_ADVAPPEARANCE_FONTSIZE_E, 142, 200, 38, 200, CBS_DROPDOWN | WS_VSCROLL + + LTEXT "Farger:", IDC_ADVAPPEARANCE_FONTCOLOR_T, 184, 194, 20, 9 + CHECKBOX "", IDC_ADVAPPEARANCE_FONTCOLOR_B, 184, 200, 28, 13, BS_PUSHLIKE | BS_BITMAP + + AUTOCHECKBOX "B", IDC_ADVAPPEARANCE_FONTBOLD, 216, 200, 14, 13, BS_PUSHLIKE + AUTOCHECKBOX "I ", IDC_ADVAPPEARANCE_FONTITALIC, 230, 200, 14, 13, BS_PUSHLIKE + + PUSHBUTTON "Avbryt", IDCANCEL, 191, 220, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 137, 220, 50, 14 +END + +IDD_SETTINGS DIALOGEX DISCARDABLE 0, 0, 246, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Dra skjermikonene for tilpasse fysisk til din skjerm.",-1,3,3,240,20 + CONTROL "",IDC_SETTINGS_MONSEL,"MONITORSELWNDCLASS",WS_CHILD|WS_VISIBLE|WS_TABSTOP,3,23,240,82,WS_EX_CLIENTEDGE + LTEXT "&Skjerm:",1820,3,107,30,8 + LTEXT "",IDC_SETTINGS_DEVICE,9,116,224,8 + GROUPBOX "&Skjermomrde",1818,3,127,115,43 + CONTROL "",IDC_SETTINGS_RESOLUTION,"msctls_trackbar32", + TBS_AUTOTICKS | WS_TABSTOP, 30, 137, 58, 17 + LTEXT "Mindre",1815,9,137,15,8,NOT WS_GROUP + LTEXT "Mere",1816,93,137,21,8,NOT WS_GROUP + LTEXT "",IDC_SETTINGS_RESOLUTION_TEXT,10,157,100,10,NOT WS_GROUP | SS_CENTER + GROUPBOX "&Farger",1817,125,127,115,43 + COMBOBOX IDC_SETTINGS_BPP,131,137,103,80,CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | + WS_VSCROLL | WS_TABSTOP + CONTROL "",IDC_SETTINGS_SPECTRUM,"Static",SS_OWNERDRAW | SS_SUNKEN,131,155,103,9 + PUSHBUTTON "A&vansert...",IDC_SETTINGS_ADVANCED,170,174,70,14 +END + +IDD_ADVANCED_GENERAL DIALOGEX DISCARDABLE 0, 0, 253, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Vis", -1, 7, 6, 237, 56, WS_GROUP + LTEXT "Skriftstrrelse:", -1, 14, 20, 222, 8 + COMBOBOX IDC_FONTSIZE_COMBO, 14, 30, 223, 80, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "", IDC_FONTSIZE_COSTOM, 14, 46, 223, 12 + GROUPBOX "Kompatibilitet", -1, 7, 67, 237, 97 + LTEXT "Noen programmer fungerer kanskje ikke skikkelig hvis du ikke starter datamaskinen p nytt etter ha endret skjerminnstillingene.\r\n\nGjr flgende etter at skjerminnstillingene er endret:", -1, 12, 78, 228, 34 + AUTORADIOBUTTON "&Start maskinen p nytt fr de nye skjerminnstillingene tas i bruk.", IDC_RESTART_RB, 14, 116, 224, 10 + AUTORADIOBUTTON "Bruk de nye skjerminnstillingene uten starte p nytt.", IDC_WITHOUTREBOOT_RB, 14, 131, 224, 10 + AUTORADIOBUTTON "Spr fr de nye skjerminnstillingene tas i bruk.", IDC_ASKME_RB, 14, 146, 224, 10 +END + +IDR_PREVIEW_MENU MENU +BEGIN + MENUITEM "Vanlig", ID_MENU_NORMAL + MENUITEM "Deaktivert", ID_MENU_DISABLED + MENUITEM "Valgt", ID_MENU_SELECTED +END + +IDM_MONITOR_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Attached", ID_MENU_ATTACHED + MENUITEM "&Primary", ID_MENU_PRIMARY + MENUITEM SEPARATOR + MENUITEM "&Identify", ID_MENU_IDENTIFY + MENUITEM "P&roperties", ID_MENU_PROPERTIES + END +END + +STRINGTABLE +BEGIN + IDS_MULTIPLEMONITORS "(Sammensatt skjermer)" + IDS_UNKNOWNMONITOR "(Ukjent skjerm)" + IDS_ADVANCEDTITLEFMT "%s og %s" +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Skjerm" + IDS_CPLDESCRIPTION "Tilpass skrivebordskjermen og skjermsparer." + IDS_NONE "(Ingen)" + IDS_CENTER "Midtstill" + IDS_STRETCH "Side ved side" + IDS_TILE "Stukket" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_COLOR_4BIT "16 Farger" + IDS_COLOR_8BIT "256 Farger" + IDS_COLOR_16BIT "Middels farger (16 Bit)" + IDS_COLOR_24BIT "Hyest farger (24 Bit)" + IDS_COLOR_32BIT "Hyest farger (32 Bit)" + IDS_PIXEL "%lux%lu piksler" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_BACKGROUND_COMDLG_FILTER "Bilder (*.bmp;*.dib)\0*.bmp;*.dib\0" + IDS_SUPPORTED_EXT "*.bmp;*.dib" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_INACTWIN "Uaktiv vindu" + IDS_ACTWIN "Aktiv vindu" + IDS_WINTEXT "Vindu tekst" + IDS_MESSBOX "Melding boks" + IDS_MESSTEXT "Melding tekst" + IDS_BUTTEXT "OK" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_ELEMENT_1 "Skrivebord" + IDS_ELEMENT_2 "Caption of inactive windows" + IDS_ELEMENT_3 "Border of inactive windows" + IDS_ELEMENT_4 "Caption of active windows" + IDS_ELEMENT_5 "Border of active windows" + IDS_ELEMENT_6 "Meny" + IDS_ELEMENT_7 "Selected Items" + IDS_ELEMENT_8 "Vindu" + IDS_ELEMENT_9 "Scrollbars" + IDS_ELEMENT_10 "3D objects" + IDS_ELEMENT_11 "Palette title" + IDS_ELEMENT_12 "Symbol title" + IDS_ELEMENT_13 "Captionbar" + IDS_ELEMENT_14 "Deactivated menu elements" + IDS_ELEMENT_15 "Dialog" + IDS_ELEMENT_16 "Scrollbar controls" + IDS_ELEMENT_17 "Application background" + IDS_ELEMENT_18 "Small captionbar" + IDS_ELEMENT_19 "Symbol distance (horizontal)" + IDS_ELEMENT_20 "Symbol distance (vertical)" + IDS_ELEMENT_21 "Quickinfo" + IDS_ELEMENT_22 "Symbol" +END diff --git a/reactos/dll/cpl/desk/rsrc.rc b/reactos/dll/cpl/desk/rsrc.rc index 4b5e995d0d1..b9787c7f10d 100644 --- a/reactos/dll/cpl/desk/rsrc.rc +++ b/reactos/dll/cpl/desk/rsrc.rc @@ -13,6 +13,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/hdwwiz/lang/no-NO.rc b/reactos/dll/cpl/hdwwiz/lang/no-NO.rc new file mode 100644 index 00000000000..d643becd3fd --- /dev/null +++ b/reactos/dll/cpl/hdwwiz/lang/no-NO.rc @@ -0,0 +1,7 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_CPLNAME "Legg til maskinvare" + IDS_CPLDESCRIPTION "Legg til maskinvare for din datamaskin." +END diff --git a/reactos/dll/cpl/hdwwiz/rsrc.rc b/reactos/dll/cpl/hdwwiz/rsrc.rc index a1530481485..78c9e904b41 100644 --- a/reactos/dll/cpl/hdwwiz/rsrc.rc +++ b/reactos/dll/cpl/hdwwiz/rsrc.rc @@ -13,6 +13,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/cpl/input/lang/no-NO.rc b/reactos/dll/cpl/input/lang/no-NO.rc new file mode 100644 index 00000000000..e66e818b73d --- /dev/null +++ b/reactos/dll/cpl/input/lang/no-NO.rc @@ -0,0 +1,241 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGESETTINGS DIALOGEX 0, 0, 254, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Velg tjenesten som du vil ha for hver inndatasprk som er vist i listen.\nBruk legg til og fjern knappen for endre denne listen.", -1, 9, 6, 238, 25 + CONTROL "TEKST", IDC_KEYLAYOUT_LIST, "SYSLISTVIEW32", WS_BORDER | WS_VSCROLL | WS_TABSTOP | LVS_SORTASCENDING | LVS_REPORT | 0x0000808D, 8, 36, 237, 101 + PUSHBUTTON "&Sett Standard", IDC_SET_DEFAULT, 101, 159, 144, 14 + PUSHBUTTON "Le&gg til...", IDC_ADD_BUTTON, 27, 142, 70, 14 + PUSHBUTTON "&Fjern...", IDC_REMOVE_BUTTON, 101, 142, 70, 14 + PUSHBUTTON "&Egenskaper...", IDC_PROP_BUTTON, 175, 142, 70, 14 + GROUPBOX "Innstillinger", -1, 7, 185, 240, 36 + PUSHBUTTON "&Tasteinnstillinger...", IDC_KEY_SET_BTN, 14, 198, 110, 14 +END + +IDD_KEYSETTINGS DIALOGEX 0, 0, 272, 163 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Avanserte tasteinnstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Sl av Caps Lock", -1, 7, 7, 258, 26 + AUTORADIOBUTTON "Trykk CAPS &LOCK nkkel", IDC_PRESS_CL_KEY_RB, 14, 17, 120, 11, WS_GROUP + AUTORADIOBUTTON "Trykk SHI&FT nkkel", IDC_PRESS_SHIFT_KEY_RB, 144, 17, 120, 11, NOT WS_TABSTOP + GROUPBOX "Hurtigtast for inndatasprk", -1, 7, 37, 258, 95 + LTEXT "Valg", -1, 14, 47, 60, 9 + RTEXT "&Tastesekvens", -1, 177, 47, 79, 9 + CONTROL "", IDC_KEY_LISTVIEW, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | LVS_AUTOARRANGE | LVS_SINGLESEL, 14, 57, 244, 52, WS_EX_CLIENTEDGE + PUSHBUTTON "&Endre hurtigtaster...", IDC_CHANGE_KEY_SEQ_BTN, 152, 113, 106, 14, WS_GROUP + DEFPUSHBUTTON "OK", IDOK, 66, 140, 70, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 146, 140, 70, 14 +END + +IDD_ADD DIALOGEX 20, 20, 227, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Teksttjenester og inndatasprk" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Inndatasprk:", -1, 7, 7, 61, 10 + COMBOBOX IDC_INPUT_LANG_COMBO, 7, 17, 212, 150, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "&Tastaturoppsett/IME:", -1, 7, 36, 110, 10 + COMBOBOX IDC_KEYBOARD_LO_COMBO, 7, 47, 212, 150, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + DEFPUSHBUTTON "OK", IDOK, 116, 68, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 169, 68, 50, 14 +END + +IDD_CHANGE_KEY_SEQ DIALOGEX 5, 100, 230, 125 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre tastesekvens" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "", -1, 9, 5, 155, 110 + AUTOCHECKBOX "&Bytt inndatasprk", IDC_SWITCH_INPUT_LANG_CB, 15, 15, 105, 12 + LTEXT "Shift", -1, 73, 37, 27, 12 + CTEXT "+", -1, 62, 37, 8, 9 + AUTORADIOBUTTON "&Ctrl", IDC_CTRL_LANG, 29, 31, 30, 11 + AUTORADIOBUTTON "Venstre &ALT", IDC_LEFT_ALT_LANG, 29, 45, 46, 12 + AUTOCHECKBOX "B&ytt tastaturoppsett", IDC_SWITCH_KBLAYOUTS_CB, 16, 65, 141, 12 + LTEXT "Shift", -1, 74, 87, 27, 12 + CTEXT "+", -1, 63, 87, 8, 9 + AUTORADIOBUTTON "C&trl", IDC_CTRL_LAYOUT, 30, 81, 30, 11 + AUTORADIOBUTTON "Venstre A<", IDC_LEFT_ALT_LAYOUT, 30, 95, 44, 12 + DEFPUSHBUTTON "OK", IDOK, 172, 9, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 172, 27, 50, 14 +END + +IDD_INPUT_LANG_PROP DIALOGEX 20, 20, 227, 75 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Inndatasprk egenskaper" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Inndatasprk:", -1, 7, 7, 61, 8 + LTEXT "", IDC_INPUT_LANG_STR, 73, 7, 129, 8 + LTEXT "&Tastaturoppsett/IME:", -1, 7, 21, 110, 10 + COMBOBOX IDC_KB_LAYOUT_IME_COMBO, 7, 32, 212, 150, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + DEFPUSHBUTTON "OK", IDOK, 116, 53, 52, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 169, 53, 52, 14 +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Teksttjeneste og inndatasprk" + IDS_CPLSYSTEMDESCRIPTION "Tilpass innstillingene for teksttjenester med sprk." + IDS_KEYBOARD "Tastatur" + IDS_NONE "(Ingen)" + IDS_UNKNOWN "(Ukjent)" + IDS_RESTART "Vil du starte datamaskinen p nytt n?" + IDS_WHATS_THIS "Hva er dette?" + IDS_LANGUAGE "Sprk" + IDS_LAYOUT "Tastaturoppsett" + IDS_REM_QUESTION "Vil du fjerne valgte tastaturoppsett?" + IDS_CONFIRMATION "Bekreftelse" + IDS_LAYOUT_EXISTS "Dette oppsettet finnes allerede." + IDS_LAYOUT_EXISTS2 "Dette oppsettet finnes allerede og kan ikke bli lagt til." + IDS_CTRL_SHIFT "Ctrl+Shift" + IDS_LEFT_ALT_SHIFT "Venstre Alt+Shift" + IDS_SWITCH_BET_INLANG "Bytt mellom inndatasprk" +END + +STRINGTABLE +BEGIN + IDS_US_LAYOUT, "US" + IDS_BELGIAN_LAYOUT, "Belgian (Period)" + IDS_BELGIAN_FRENCH_LAYOUT, "Belgian French" + IDS_PORTUGUESE_BRAZILIAN_ABNT_LAYOUT, "Portuguese (Brazilian ABNT)" + IDS_CANADIAN_FRENCH_LAYOUT, "Canadian French" + IDS_CANADIAN_FRENCH_LEGACY_LAYOUT, "Canadian French (Legacy)" + IDS_DANISH_LAYOUT, "Danish" + IDS_DUTCH_LAYOUT, "Dutch" + IDS_FINNISH_LAYOUT, "Finnish" + IDS_FRENCH_LAYOUT, "French" + IDS_GERMAN_LAYOUT, "German" + IDS_GERMAN_IBM_LAYOUT, "German (IBM)" + IDS_ICELANDIC_LAYOUT, "Icelandic" + IDS_IRISH_LAYOUT, "Irish" + IDS_ITALIAN_LAYOUT, "Italian" + IDS_ITALIAN_142_LAYOUT, "Italian (142)" + IDS_LATIN_AMERICAN_LAYOUT, "Latin American" + IDS_NORWEGIAN_LAYOUT, "Norwegian" + IDS_PORTUGUESE_LAYOUT, "Portuguese" + IDS_SPANISH_LAYOUT, "Spanish" + IDS_SPANISH_VARIANTION_LAYOUT, "Spanish Variation" + IDS_SWEDISH_LAYOUT, "Swedish" + IDS_SWISS_FRENCH_LAYOUT, "Swiss French" + IDS_SWISS_GERMAN_LAYOUT, "Swiss German" + IDS_UNITED_KINGDOM_LAYOUT, "United Kingdom" + IDS_UNITED_STATES_INTERNATIONAL_LAYOUT, "United States-International" + IDS_UNITED_STATES_DVORAK_FOR_LEFT_HAND_LAYOUT, "United States-Dvorak for left hand" + IDS_UNITED_STATES_DVORAK_FOR_RIGHT_HAND_LAYOUT, "United States-Dvorak for right hand" + IDS_ALBANIAN_LAYOUT, "Albanian" + IDS_CROATIAN_LAYOUT, "Croatian" + IDS_CZECH_LAYOUT, "Czech" + IDS_CZECH_QWERTY_LAYOUT, "Czech (QWERTY)" + IDS_HUNGARIAN_LAYOUT, "Hungarian" + IDS_HUNGARIAN_101_KEY_LAYOUT, "Hungarian 101-key" + IDS_POLISH_LAYOUT, "Polish (Programmers)" + IDS_POLISH_214_LAYOUT, "Polish (214)" + IDS_ROMANIAN_LAYOUT, "Romanian" + IDS_SERBIAN_LATIN_LAYOUT, "Serbian (Latin)" + IDS_SLOVAK_LAYOUT, "Slovak" + IDS_SLOVAK_QWERTY_LAYOUT, "Slovak (QWERTY)" + IDS_SLOVENIAN_LAYOUT, "Slovenian" + IDS_ESTONIAN_LAYOUT, "Estonian" + IDS_LATVIAN_LAYOUT, "Latvian" + IDS_LATVIAN_QWERTY_LAYOUT, "Latvian (QWERTY)" + IDS_LITHUANIAN_IBM_LAYOUT, "Lithuanian IBM" + IDS_GREEK_LAYOUT, "Greek" + IDS_GREEK_LATIN_LAYOUT, "Greek Latin" + IDS_GREEK_220_LAYOUT, "Greek (220)" + IDS_GREEK_319_LAYOUT, "Greek (319)" + IDS_GREEK_220_LATIN_LAYOUT, "Greek (220) Latin" + IDS_GREEK_319_LATIN_LAYOUT, "Greek (319) Latin" + IDS_BELARUSIAN_LAYOUT, "Belarusian" + IDS_BULGARIAN_LAYOUT, "Bulgarian" + IDS_BULGARIAN_LATIN_LAYOUT, "Bulgarian (Latin)" + IDS_RUSSIAN_LAYOUT, "Russian" + IDS_RUSSIAN_TYPEWRITER_LAYOUT, "Russian (Typewriter)" + IDS_SERBIAN_CYRILLIC_LAYOUT, "Serbian (Cyrillic)" + IDS_UKRAINIAN_LAYOUT, "Ukrainian" + IDS_TURKISH_F_LAYOUT, "Turkish F" + IDS_TURKISH_Q_LAYOUT, "Turkish Q" + IDS_JAPANESE_LAYOUT, "Japanese" + IDS_JAPANESE_INPUT_SYSTEM_MSIME2002_LAYOUT, "Japanese Input System (MS-IME2002)" + IDS_KOREAN_LAYOUT, "Korean" + IDS_KOREAN_INPUT_SYSTEM_MSIME2002_LAYOUT, "Korean Input System (MS-IME2002)" + IDS_CHINESE_TRADITIONAL_USKEYBOARD_LAYOUT, "Chinese (Traditional) - US Keyboard" + IDS_CHINESE_TRADITIONAL_PHONETIC_LAYOUT, "Chinese (Traditional) - Phonetic" + IDS_CHINESE_TRADITIONAL_CHANGJIE_LAYOUT, "Chinese (Traditional) - ChangJie" + IDS_CHINESE_TRADITIONAL_BIG5CODE_LAYOUT, "Chinese (Traditional) - Big5 Code" + IDS_CHINESE_TRADITIONAL_DAYI_LAYOUT, "Chinese (Traditional) - DaYi" + IDS_CHINESE_TRADITIONAL_UNICODE_LAYOUT, "Chinese (Traditional) - Unicode" + IDS_CHINESE_TRADITIONAL_ALPHANUMERIC_LAYOUT, "Chinese (Traditional) - Alphanumeric" + IDS_CHINESE_SIMPLIFIED_USKEYBOARD_LAYOUT, "Chinese (Simplified) - US Keyboard" + IDS_CHINESE_SIMPLIFIED_QUANPIN_LAYOUT, "Chinese (Simplified) - QuanPin" + IDS_CHINESE_SIMPLIFIED_SHUANGPIN_LAYOUT, "Chinese (Simplified) - ShuangPin" + IDS_CHINESE_SIMPLIFIED_ZHENGMA_LAYOUT, "Chinese (Simplified) - ZhengMa" + IDS_CHINESE_SIMPLIFIED_NEIMA_LAYOUT, "Chinese (Simplified) - NeiMa" + IDS_THAI_KEDMANEE_LAYOUT, "Thai Kedmanee" + IDS_THAI_PATTACHOTE_LAYOUT, "Thai Pattachote" + IDS_THAI_KEDMANEE_NONSHIFTLOCK_LAYOUT, "Thai Kedmanee (non-ShiftLock)" + IDS_THAI_PATTACHOTE_NONSHIFTLOCK_LAYOUT, "Thai Pattachote (non-ShiftLock)" + IDS_HEBREW_LAYOUT, "Hebrew" + IDS_ARABIC_101_LAYOUT, "Arabic (101)" + IDS_ARABIC_102_LAYOUT, "Arabic (102)" + IDS_ARABIC_102_AZERTY_LAYOUT, "Arabic (102) AZERTY" + IDS_CZECH_PROGRAMMERS_LAYOUT, "Czech Programmers" + IDS_LITHUANIAN_LAYOUT, "Lithuanian" + IDS_BELGIAN_COMMA_LAYOUT, "Belgian (Comma)" + IDS_CHINESE_TRADITIONAL_NEWPHONETIC_LAYOUT, "Chinese (Traditional) - New Phonetic" + IDS_CHINESE_SIMPLIFIED_MSPINYINIME30_LAYOUT, "Chinese (Simplified) - Microsoft Pinyin IME 3.0" + IDS_UNITED_STATES_DVIRAK_LAYOUT, "United States-Dvorak" + IDS_CHINESE_TRADITIONAL_NEWCHANGJIE_LAYOUT, "Chinese (Traditional) - New ChangJie" + IDS_ASSAMESE_LAYOUT, "Assamese" + IDS_BENGALI_LAYOUT, "Bengali" + IDS_DEVANAGARI_INSCRIPT_LAYOUT, "Devanagari - INSCRIPT" + IDS_GUJARATI_LAYOUT, "Gujarati" + IDS_KANNADA_LAYOUT, "Kannada" + IDS_MALAYALAM_LAYOUT, "Malayalam" + IDS_ORIYA_LAYOUT, "Oriya" + IDS_PUNJABI_LAYOUT, "Punjabi" + IDS_TAMIL_LAYOUT, "Tamil" + IDS_TELUGU_LAYOUT, "Telugu" + IDS_MARATHI_LAYOUT, "Marathi" + IDS_HINDI_TRADITIONAL_LAYOUT, "Hindi Traditional" + IDS_CANTONESE_PHONETIC_LAYOUT, "Cantonese Phonetic" + IDS_FAEROESE_LAYOUT, "Faeroese" + IDS_FYRO_MACEDONIAN_LAYOUT, "FYRO Macedonian" + IDS_CANADIAN_MULTILINGUAL_STD_LAYOUT, "Canadian Multilingual Standard" + IDS_CHINESE_TRADITIONAL_QUICK_LAYOUT, "Chinese (Traditional) - Quick" + IDS_CHINESE_TRADITIONAL_ARRAY_LAYOUT, "Chinese (Traditional) - Array" + IDS_KAZAKH_LAYOUT, "Kazakh" + IDS_UZBEK_CYRILLIC_LAYOUT, "Uzbek Cyrillic" + IDS_AZERI_CYRILLIC_LAYOUT, "Azeri Cyrillic" + IDS_TATAR_LAYOUT, "Tatar" + IDS_AZERI_LATIN_LAYOUT, "Azeri Latin" + IDS_VIETNAMESE_LAYOUT, "Vietnamese" + IDS_GEORGIAN_LAYOUT, "Georgian" + IDS_ARMENIAN_EASTERN_LAYOUT, "Armenian Eastern" + IDS_ARMENIAN_WESTERN_LAYOUT, "Armenian Western" + IDS_GREEK_POLYTONIC_LAYOUT, "Greek Polytonic" + IDS_USENG_TABLE_IBM_ARABIC238L_LAYOUT, "US English Table for IBM Arabic 238_L" + IDS_FARSI_LAYOUT, "Farsi" + IDS_GAELIC_LAYOUT, "Gaelic" + IDS_PORTUGUESE_BRAZIL_ABNT2_LAYOUT, "Portuguese (Brazilian ABNT2)" + IDS_MONGOLIAN_CYRILLIC_LAYOUT, "Mongolian Cyrillic" + IDS_KYRGYZ_CYRILLIC_LAYOUT, "Kyrgyz Cyrillic" + IDS_URDU_LAYOUT, "Urdu" + IDS_SYRIAC_LAYOUT, "Syriac" + IDS_SYRIAC_PHONETIC_LAYOUT, "Syriac Phonetic" + IDS_DIVEHI_PHONETIC_LAYOUT, "Divehi Phonetic" + IDS_DIVEHI_TYPEWRITER_LAYOUT, "Divehi Typewriter" + IDS_BULGARIAN_PHONETIC_CLASSIC_LAYOUT, "Bulgarian Phonetic (Classic)" + IDS_BULGARIAN_PHONETIC_BDS_LAYOUT, "Bulgarian Phonetic (BDS 5237-1978)" + IDS_BULGARIAN_BDS_LAYOUT, "Bulgarian BDS 5237-1978" + IDS_GERMAN_RISTOME_LAYOUT, "German (RISTOME)" + IDS_GERMAN_NEO_11_LAYOUT, "German (NEO-1.1)" + IDS_GERMAN_DE_ERGO_LAYOUT, "German (de_ergo)" + IDS_BURMESE_LAYOUT, "Burmese" + IDS_UKRAINIAN_STUDENT_LAYOUT, "Ukrainian (Student)" +END diff --git a/reactos/dll/cpl/input/rsrc.rc b/reactos/dll/cpl/input/rsrc.rc index 96240e46677..6aef01a197f 100644 --- a/reactos/dll/cpl/input/rsrc.rc +++ b/reactos/dll/cpl/input/rsrc.rc @@ -8,6 +8,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/intl/lang/no-NO.rc b/reactos/dll/cpl/intl/lang/no-NO.rc new file mode 100644 index 00000000000..b08d443f96a --- /dev/null +++ b/reactos/dll/cpl/intl/lang/no-NO.rc @@ -0,0 +1,197 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_GENERALPAGE DIALOGEX 0, 0, 246, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Regionale innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Standarder og format", -1, 5, 5, 234, 162 + LTEXT "Dette valget pvirker hvordan programmer formater tall, valuta, dato, og tid.", -1, 14, 17, 220, 25 + LTEXT "Velg en enhet for tilpasse til egenskaper, eller klikk tilpasning for velge dine egne formater:", -1, 14, 37, 220, 22 + COMBOBOX IDC_LANGUAGELIST, 14, 56, 160, 160, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + PUSHBUTTON "Tilpasni&ng...", IDC_SETUP_BUTTON, 178, 56, 52, 13 + LTEXT "Utvalg", -1, 14, 73, 70, 10 + LTEXT "Tall:", -1, 16, 86, 48, 10 + LTEXT "Valuta:", -1, 16, 101, 48, 10 + LTEXT "Tid:", -1, 16, 116, 48, 10 + LTEXT "Kort dato:", -1, 16, 131, 48, 10 + LTEXT "Lang dato:", -1, 16, 146, 48, 10 + EDITTEXT IDC_NUMSAMPLE_EDIT, 89, 86, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_MONEYSAMPLE_EDIT, 89, 101, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_TIMESAMPLE_EDIT, 89, 116, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_SHORTTIMESAMPLE_EDIT, 89, 131, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + EDITTEXT IDC_FULLTIMESAMPLE_EDIT, 89, 146, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX "Geografisk plassering", -1, 5, 172, 234, 55 + LTEXT "Still din lokalisering s at noen tjenester kan skaffe deg lokal informasjon; som for eksempel, nyheter og vr rapporter.", -1, 14, 184, 210, 24 + COMBOBOX IDC_LOCATION_COMBO, 14, 207, 217, 160, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT +END + +IDD_LANGUAGESPAGE DIALOGEX 0, 0, 246, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Sprk" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Teksttjenester og inndatasprk", IDC_GROUPBOX, 5, 5, 234, 52 + LTEXT "Klikk ""Detaljer..."" for vise eller endre sprkene og metodene du kan bruke for skrive inn tekst.", -1, 12, 15, 220, 18 + PUSHBUTTON "De&taljer...", IDC_DETAIL_BUTTON, 177, 34, 54, 14 + GROUPBOX "Ytterligere sprksttte", IDC_GROUPBOX, 5, 62, 234, 82 + LTEXT "De fleste sprk er innstallert som standard. Merk av i de relevante boksene nedenfor hvis du vil innstallere flere sprk.", -1, 12, 72, 220, 18 + CHECKBOX "I&nnstaller filer for for omfattende skript og hyre-mot-venstre sprk", IDC_INST_FILES_FOR_RTOL_LANG, 12, 92, 215, 22, BS_MULTILINE + CHECKBOX "Inn&staller filer for stasiatiske sprk", IDC_INST_FILES_FOR_ASIAN, 12, 114, 180, 22, BS_MULTILINE +END + +IDD_ADVANCEDPAGE DIALOGEX 0, 0, 246, 230 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Sprk for ikke-Unicode programmer", IDC_GROUPBOX, 5, 5, 234, 90 + COMBOBOX IDC_LANGUAGE_COMBO, 14, 75, 217, 160, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT + LTEXT "Denne systeminnstillingen gjr at programmet som ikke sttter Unicode, viser menyer og dialogbokser p det opprinnlige sprket. Det pvirker ikke Unicode-programmer, men det gjelder for alle brukere p denne datamaskinen.", -1, 14, 18, 223, 33 + LTEXT "Velg et sprk som tilsvarer sprkversjonen av programmet du vil bruke, som ikke er Unicode-programmer:", -1, 14, 55, 223, 18 + GROUPBOX "Konverteringstabeller for tegntabell", -1, 5, 101, 234, 88 + CONTROL "", IDC_CONV_TABLES, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | WS_BORDER | WS_TABSTOP, 14, 114, 217, 70 + GROUPBOX "Standard brukerkonto innstilling", -1, 5, 193, 234, 30 + CHECKBOX "Bruk alle innstillinger p gjeldende brukerkonto og standard brukerprofil", IDC_APPLY_CUR_USER_DEF_PROFILE, 12, 200, 220, 22, BS_MULTILINE +END + +IDD_NUMBERSPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Nummer" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Eksempel", -1, 7, 7, 230, 53, WS_CHILD | WS_VISIBLE + LTEXT "Positiv:", -1, 13, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_NUMBERSPOSSAMPLE, 43, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Negativ:", -1, 120, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_NUMBERSNEGSAMPLE, 154, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Desimaltegn:", -1, 8, 67, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERDSYMBOL, 137, 65, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Antall si&fre etter desimaltegn:", -1, 8, 83, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNDIGDEC, 137, 81, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Grupperings&symbol for sifre:", -1, 8, 100, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDIGITGRSYM, 137, 97, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Siffer&gruppering:", -1, 8, 117, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDGROUPING, 137, 113, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "M&inustegn:", -1, 8, 134, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNSIGNSYM, 137, 129, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Tall&format for negative tall:", -1, 8, 149, 100, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSNNUMFORMAT, 137, 145, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "Vis ledende &nuller:", -1, 8, 166, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSDISPLEADZER, 137, 161, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Listeskilletegn:", -1, 8, 181, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSLSEP, 137, 177, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Mlesystem:", -1, 8, 197, 96, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_NUMBERSMEASSYS, 137, 193, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL +END + + +IDD_CURRENCYPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Valuta" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Eksempel", -1, 7, 7, 230, 33, WS_CHILD | WS_VISIBLE + LTEXT "Positiv:", -1, 13, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_CURRENCYPOSSAMPLE, 43, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Negativ:", -1, 120, 21, 31, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_CURRENCYNEGSAMPLE, 154, 19, 72, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Valutasymbol:", -1, 10, 51, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYSYMBOL, 134, 49, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Positivt valutaformat:", -1, 10, 68, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYPOSVALUE, 134, 66, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Negativ valutaformat:", -1, 10, 85, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYNEGVALUE, 134, 83, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Desimaltegn:", -1, 10, 111, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYDECSEP, 134, 109, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Antall sifre etter desimaltegn:", -1, 10, 128, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYDECNUM, 134, 126, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Grupperingssymbol for sifre:", -1, 10, 156, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYGRPSEP, 134, 154, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + LTEXT "&Siffergruppering:", -1, 10, 173, 121, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_CURRENCYGRPNUM, 134, 171, 100, 83, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL +END + + +IDD_TIMEPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Klokkeslett" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Eksempel", -1, 7, 7, 230, 33, WS_CHILD | WS_VISIBLE + LTEXT "Tid eksempel:", -1, 13, 21, 54, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + EDITTEXT IDC_TIMESAMPLE, 68, 19, 84, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "&Klokkeslettformat:", -1, 13, 52, 130, 10, WS_CHILD |WS_VISIBLE | WS_GROUP + COMBOBOX IDC_TIMEFORMAT, 149, 50, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "Skilletegn &i klokkeslett:", -1, 13, 70, 130, 10, WS_VISIBLE | WS_GROUP + COMBOBOX IDC_TIMESEPARATOR, 149, 68, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "A&M-symbol:", -1, 13, 88, 130, 10, WS_VISIBLE | WS_GROUP + COMBOBOX IDC_TIMEAMSYMBOL, 149, 86, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "&PM-symbol:", -1, 13, 106, 130, 10, WS_VISIBLE | WS_GROUP + COMBOBOX IDC_TIMEPMSYMBOL, 149, 104, 84, 100, CBS_DROPDOWN | WS_CHILD | WS_VISIBLE | WS_TABSTOP + GROUPBOX "", -1, 7, 140, 230, 80, WS_VISIBLE + LTEXT "Klokkeslettformat\n\n\ +t = time m = minutt s = sekund a = am/pm\n\n\ +t = 12 timer T = 24 timer\n\ +tt, mm, ss = ledende null t, m, s = ikke ledende null", + -1, 13, 150, 214, 50, WS_CHILD |WS_VISIBLE | WS_GROUP +END + + +IDD_DATEPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Dato" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Kalender", IDC_GROUPBOX, 7, 7, 230, 74 + LTEXT "Nr et tosifret rstall er angitt, tolk som et r mellom:", -1, 13, 18, 215, 8 + EDITTEXT IDC_FIRSTYEAR_EDIT, 13, 30, 36, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "og", -1, 55, 32, 17, 8 + EDITTEXT IDC_SECONDYEAR_EDIT, 77, 30, 36, 12, ES_LEFT | ES_NUMBER | WS_GROUP + CONTROL "",IDC_SCR_MAX_YEAR, "msctls_updown32", UDS_NOTHOUSANDS | UDS_WRAP | UDS_SETBUDDYINT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_CHILD | WS_VISIBLE, 113, 30, 10, 12 + LTEXT "Kalender type:", -1, 13, 48, 56, 10 + COMBOBOX IDC_CALTYPE_COMBO, 77, 46, 153, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_DISABLED + LTEXT "Muslim kalender:", -1, 13, 65, 60, 12 + COMBOBOX IDC_HIJCHRON_COMBO, 77, 64, 153, 100, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_DISABLED + GROUPBOX "Kort datoformat", IDC_GROUPBOX, 7, 83, 230, 81 + LTEXT "Eksempel p kort dato:", -1, 13, 95, 63, 10 + EDITTEXT IDC_SHRTDATESAMPLE_EDIT, 77, 93, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Eksempel - hyre til venstre:", -1, 13, 109, 60, 16 + EDITTEXT IDC_SHRTDATERTOL_EDIT, 77, 111, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "Kort datoformat:", -1, 13, 131, 60, 10 + COMBOBOX IDC_SHRTDATEFMT_COMBO, 77, 129, 153, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + LTEXT "Datoskilletegn:", -1, 13, 148, 113, 10 + COMBOBOX IDC_SHRTDATESEP_COMBO, 180, 146, 51, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE + GROUPBOX "Lang datoformat", IDC_GROUPBOX, 7, 167, 230, 64 + LTEXT "Eksempel p lang dato:", -1, 13, 179, 61, 10 + EDITTEXT IDC_LONGDATESAMPLE_EDIT, 77, 177, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Eksempel - hyre til venstre:", -1, 13, 193, 61, 16 + EDITTEXT IDC_LONGDATERTOL_EDIT, 77, 195, 153, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP | WS_DISABLED + LTEXT "Lang datoformat:", -1, 13, 215, 60, 10 + COMBOBOX IDC_LONGDATEFMT_COMBO, 77, 213, 153, 100, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | WS_VISIBLE +END + + +IDD_SORTPAGE DIALOGEX 0, 0, 246, 234 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Sortering" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Sortering", -1, 7, 7, 230, 74 + LTEXT "Sorting methods define the sorting order of characters, words, files and folders.", -1, 14, 17, 220, 25 + LTEXT "Select a sorting method for your language:", -1, 14, 37, 220, 22 + COMBOBOX IDC_SORTLIST_COMBO, 14, 56, 217, 83, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL +END + + +STRINGTABLE +BEGIN + IDS_CUSTOMIZE_TITLE "Innstillinger for region og sprk" + IDS_SPAIN "Spanisk (Spain)" +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Regionale innstillinger" + IDS_CPLDESCRIPTION "Velg sprk og nummer format, valuta, tid og dato." +END diff --git a/reactos/dll/cpl/intl/rsrc.rc b/reactos/dll/cpl/intl/rsrc.rc index ad8032734d2..6e85a39bbe0 100644 --- a/reactos/dll/cpl/intl/rsrc.rc +++ b/reactos/dll/cpl/intl/rsrc.rc @@ -7,6 +7,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/joy/lang/no-NO.rc b/reactos/dll/cpl/joy/lang/no-NO.rc new file mode 100644 index 00000000000..3b2bcd89112 --- /dev/null +++ b/reactos/dll/cpl/joy/lang/no-NO.rc @@ -0,0 +1,84 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGEMAIN DIALOGEX 0, 0, 252, 205 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Spillkontroller" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 7, 7, 20, 20 + LTEXT "Disse innstillingene hjelper deg med konfigurere spillkontrollerne som er innstallert p din datamaskin.", -1, 33, 7, 214, 20, NOT WS_GROUP + GROUPBOX "I&nnstallerte spillkontroller", -1, 7, 34, 238, 117 + CONTROL "List1", IDC_CONTROLLER_LIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000808D, 14, 44, 224, 80 + PUSHBUTTON "&Legg til...", IDC_ADD_BUTTON, 35, 129, 65, 14 + PUSHBUTTON "&Fjern", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED + PUSHBUTTON "&Egenskaper", IDC_PROPERTIES_BUTTON, 173, 129, 65, 14, WS_DISABLED + PUSHBUTTON "A&vansert...", IDC_ADVANCED_BUTTON, 111, 157, 65, 14 + PUSHBUTTON "&Feilsk...", IDC_TROUBLESHOOT_BUTTON, 180, 157, 65, 14 + PUSHBUTTON "OK", IDOK, 195, 185, 50, 14 +END + +IDD_ADD DIALOGEX 0, 0, 265, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Legg til spillkontroller" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 8, 7, 20, 20 + LTEXT "Velg en spillkontroll fra denne listen, og s klikk p OK. Hvis ikke spillkontrolleren dukker opp i listen, klikk p tilpass.", -1, 35, 7, 210, 33 + LTEXT "&Spillkontroller:", -1, 8, 45, 126, 8 + LISTBOX IDC_GAME_CONTROLLERS_LIST, 7, 55, 251, 57, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_HSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Aktiver sideror og pedaler", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 100, 10, WS_GROUP + LTEXT "&Spill Port:", -1, 7, 134, 38, 8, NOT WS_VISIBLE + COMBOBOX IDC_GAME_PORT_COMBO, 7, 147, 140, 50, CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE | WS_VSCROLL + PUSHBUTTON "&Tilpass...", IDC_CUSTOM_BUTTON, 208, 147, 50, 14 + CONTROL "", -25525, "STATIC", SS_ETCHEDHORZ, 7, 170, 251, 1 + DEFPUSHBUTTON "OK", IDOK, 155, 179, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 208, 179, 50, 14 +END + +IDD_CUSTOM DIALOGEX 0, 0, 265, 183, 0 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Tilpass spillkontroller" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Spesielle egenskaper", -1, 7, 7, 245, 52 + AUTORADIOBUTTON "&Styrespak", IDC_JOYSTICK_RADIO, 17, 23, 55, 10 + AUTORADIOBUTTON "&Flystikke", IDC_FLIGHT_YOKE_RADIO, 147, 23, 89, 10 + AUTORADIOBUTTON "&Spillkontroll", IDC_GAME_PAD_RADIO, 17, 40, 65, 10 + AUTORADIOBUTTON "&Racerbilkontroller", IDC_RACE_CAR_RADIO, 147, 40, 93, 10 + GROUPBOX "&Akser", -1, 7, 67, 116, 44, WS_GROUP + COMBOBOX IDC_AXES_COMBO, 37, 79, 48, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + AUTORADIOBUTTON "Rudder/Pedaler", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE + AUTORADIOBUTTON "Z Axis", IDC_Z_AXIS_RADIO, 81, 97, 35, 10, NOT WS_VISIBLE + GROUPBOX "&Knapper", -1, 137, 67, 116, 44 + COMBOBOX IDC_BUTTONS_COMBO, 178, 79, 48, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL, WS_EX_CLIENTEDGE + AUTOCHECKBOX "Inkluderer &synsvinkelreguring", IDC_INC_POINT_CHECKBOX, 7, 123, 115, 10 + LTEXT "K&ontrollernavn:", -1, 7, 139, 200, 9 + EDITTEXT IDC_CONTROLLER_NAME_EDIT, 7, 150, 116, 15, ES_AUTOHSCROLL, WS_EX_CLIENTEDGE | WS_EX_STATICEDGE + DEFPUSHBUTTON "OK", IDOK, 137, 150, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 203, 150, 50, 14 +END + +IDD_ADVANCED DIALOGEX 0, 0, 220, 86 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Avanserte innstillinger" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 7, 24, 20, 20 + DEFPUSHBUTTON "OK", IDOK, 106, 65, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 163, 65, 50, 14 + LTEXT "Velg hvilken enhet du vil bruke med eldre programmer.", -1, 7, 7, 208, 10 + LTEXT "&Foretrukket enhet:", -1, 34, 24, 70, 10 + COMBOBOX IDC_PREFERRED_DEV_COMBO, 34, 38, 179, 75, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Spillkontroller" + IDS_CPLSYSTEMDESCRIPTION "Legg til, fjern, og konfigurer spillkontroller maskinvare som styrespak og spillkontroll." + IDS_CONTROLLER "Kontroller" + IDS_STATUS "Status" +END diff --git a/reactos/dll/cpl/joy/rsrc.rc b/reactos/dll/cpl/joy/rsrc.rc index 3b65c650812..ff54dffa36a 100644 --- a/reactos/dll/cpl/joy/rsrc.rc +++ b/reactos/dll/cpl/joy/rsrc.rc @@ -8,6 +8,7 @@ #include "lang/es-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/liccpa/lang/no-NO.rc b/reactos/dll/cpl/liccpa/lang/no-NO.rc new file mode 100644 index 00000000000..14be465ccb9 --- /dev/null +++ b/reactos/dll/cpl/liccpa/lang/no-NO.rc @@ -0,0 +1,27 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGE1 DIALOGEX DISCARDABLE 20, 40, 315, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU +CAPTION "Velg lisens modus" +FONT 8, "Helv" +BEGIN + CONTROL "klient Lisens modus", 100, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 4, 4, 239, 94 + CONTROL "Per enhet eller per bruker", 102, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 79, 107, 12 + CONTROL "Per server. Nummer av nvrende tilkoblinger:", 103, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 38, 163, 9 + CONTROL "Produkt:", 105, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 13, 20, 31, 8 + CONTROL "", 106, "COMBOBOX", CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP, 49, 20, 171, 12 + CONTROL "OK", 107, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 7, 46, 14 + CONTROL "Avbryt", 108, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 27, 46, 14 + CONTROL "Hjelp", 109, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 48, 46, 14 + CONTROL "Reproduksjon...", 110, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 68, 46, 14 + CONTROL "Legg til lisens", 111, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 30, 56, 65, 15 + CONTROL "Fjern lisens", 112, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 112, 56, 61, 16 + CONTROL "", 114, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 187, 39, 32, 12 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME_1 "Lisens Behandler" + IDS_CPLDESCRIPTION_1 "Lisens Behandler" + IDS_REACTOS "ReactOS - Gratis programvare" +END diff --git a/reactos/dll/cpl/liccpa/rsrc.rc b/reactos/dll/cpl/liccpa/rsrc.rc index 8d1333bb3a8..b7d6e422ad2 100644 --- a/reactos/dll/cpl/liccpa/rsrc.rc +++ b/reactos/dll/cpl/liccpa/rsrc.rc @@ -9,6 +9,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/main/lang/no-NO.rc b/reactos/dll/cpl/main/lang/no-NO.rc new file mode 100644 index 00000000000..01432755562 --- /dev/null +++ b/reactos/dll/cpl/main/lang/no-NO.rc @@ -0,0 +1,172 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_KEYBSPEED DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hastighet" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Repetisjonshastighet", -1, 5, 5, 236, 135 + ICON IDI_REPEAT_DELAY, IDC_ICON_REPEAT_DELAY, 13, 18, 15, 15 + LTEXT "Repetisjon&forsinkelse:", -1, 40, 18, 100, 10 + LTEXT "Lang", -1, 40, 33, 20, 10 + LTEXT "Kort", -1, 200, 33, 20, 10 + CONTROL "",IDC_SLIDER_REPEAT_DELAY, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 33, 130, 17 + ICON IDI_REPEAT_RATE, IDC_ICON_REPEAT_RATE, 13, 70, 15, 15 + LTEXT "&Repetisjonshastighet:", -1, 40, 70, 100, 10 + LTEXT "Langsom", -1, 40, 85, 20, 10 + LTEXT "Rask", -1, 200, 85, 20, 10 + CONTROL "",IDC_SLIDER_REPEAT_RATE, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 85, 130, 17 + LTEXT "Klikk her og hold nede en tast for &teste repetisjonshastigheten:", -1, 15, 105, 216, 10 + EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 116, 216, 14, WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX "Markr&blinking:", -1, 5, 145, 236, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 165, 1, 8 + LTEXT "Ingen", -1, 40, 165, 25, 10 + LTEXT "Rask", -1, 200, 165, 30, 10 + CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 165, 130, 17 +END + +IDD_HARDWARE DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Maskinvare" +FONT 8, "MS Shell Dlg" +BEGIN +END + +IDD_CLICK_LOCK DIALOGEX 0, 0, 240, 78 +STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU +CAPTION "Klikkls" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Kort", -1, 50, 35, 27, 10 + LTEXT "Langt", -1, 157, 35, 27, 10 + CONTROL "",IDC_SLIDER_CLICK_LOCK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 78, 35, 70, 17 + PUSHBUTTON "&OK", IDOK, 110, 59, 60, 14 + PUSHBUTTON "&Avbryt", IDCANCEL, 174, 59, 60, 14 + LTEXT "&Adjust how long you need to hold down a mouse or trackball button before your click is locked",-1,37,5,200,27 + ICON IDI_LOOK_KEY, IDC_ICON_CLICK_LOCK, 5, 5, 15, 15 +END + +IDD_PAGE_BUTTON DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Knapper" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Knappekonfigurasjon", -1, 5, 5, 236, 70 + CHECKBOX "&Bytt om primr og sekundrknappen", IDC_SWAP_MOUSE_BUTTONS, 10, 18, 156, 10 + CONTROL "", IDC_IMAGE_SWAP_MOUSE, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 171, 14, 65, 57, WS_EX_STATICEDGE + LTEXT "Merk av i denne avmerkningsboksen for gjre knappen til hyre til den du bruker til primrfunksjoner som velge dra.", -1, 10, 36, 156, 30 + GROUPBOX "Hastighet p dobbeltklikking", -1, 5, 78, 236, 70 + LTEXT "Dobbeltklikk mappen for teste innstillingen. Hvis mappen ikke lukkes eller pnes, kan du prve med en langsommere innstilling.", -1, 10, 90, 156, 28 + LTEXT "Hastig&het: Langsom", -1, 10, 123, 50, 10 + LTEXT "Rask", -1, 136, 123, 24, 10 + CONTROL "",IDC_SLIDER_DOUBLE_CLICK_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 60, 123, 70, 17 + CONTROL "", IDC_IMAGE_DOUBLE_CLICK_SPEED, "Static", SS_ICON | SS_NOTIFY | SS_CENTERIMAGE | WS_VISIBLE, 171, 87, 65, 57, WS_EX_STATICEDGE + GROUPBOX "Klikkls", -1, 5, 150, 236, 70 + CHECKBOX "&Sl p klikkls", IDC_CHECK_CLICK_LOCK, 10, 160, 70, 20 + PUSHBUTTON "&Innstillinger...", IDC_BUTTON_CLICK_LOCK, 172, 161, 60, 14 + LTEXT "Lar deg merke eller dra uten holde nede museknappen.Trykk kort p museknappen hvis du vil aktivere. Klikk museknappen igjen hvis du vil deaktivere.", -1, 10, 180, 224, 30 +END + +IDD_PAGE_POINTER DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Pekere" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Oppsett", -1, 5, 5, 181, 45 + COMBOBOX IDC_COMBO_CURSOR_SCHEME, 12, 15, 167, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "La&gre som...", IDC_BUTTON_SAVEAS_SCHEME, 65, 31, 60, 14 + PUSHBUTTON "&Slett", IDC_BUTTON_DELETE_SCHEME, 128, 31, 50, 14 + CONTROL "", IDC_IMAGE_CURRENT_CURSOR, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 196, 9, 45, 41, WS_EX_STATICEDGE + LTEXT "&Tilpass", -1, 5, 57, 60, 10 + LISTBOX IDC_LISTBOX_CURSOR, 5, 68, 236, 124, WS_VISIBLE | WS_BORDER | WS_TABSTOP | WS_VSCROLL | LBS_OWNERDRAWFIXED | LBS_NOTIFY + CHECKBOX "&Aktiver pekerskygge", IDC_CHECK_DROP_SHADOW, 5, 198, 105, 10 + PUSHBUTTON "Bruk St&andard", IDC_BUTTON_USE_DEFAULT_CURSOR, 117, 196, 65, 14 + PUSHBUTTON "&Bla gjennom...", IDC_BUTTON_BROWSE_CURSOR, 186, 196, 55, 14 +END + +IDD_CURSOR_SCHEME_SAVEAS DIALOGEX 0, 0, 192, 53 +STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU +CAPTION "Lagre Scheme" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Lagre denne cursor scheme som:", -1, 5, 5, 181, 10 + EDITTEXT IDC_EDIT_SCHEME_NAME, 5, 15, 180, 15, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&OK", IDOK, 63, 35, 60, 14 + PUSHBUTTON "&Avbryt", IDCANCEL, 126, 35, 60, 14 +END + + +IDD_PAGE_OPTION DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Pekeralternativer" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Bevegelse", -1, 5, 5, 236, 60 + LTEXT "Ve&lg en pekehastighet:", -1, 52, 15, 110, 10 + LTEXT "Langsomt", -1, 60, 30, 20, 10 + CONTROL "",IDC_SLIDER_MOUSE_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 90, 30, 70, 17 + LTEXT "Rask", -1, 170, 30, 20, 10 + ICON IDI_MOUSE_SPEED, IDC_ICON_MOUSE_SPEED, 18, 20, 32, 32 + CHECKBOX "&Aktiver pekerpresisjon", IDC_CHECK_POINTER_PRECISION, 52, 50, 140, 10 + GROUPBOX "Flytt til standardknapp", -1, 5, 70, 236, 40 + CHECKBOX "Fl&ytt automatisk pekeren til standardknappen i dialogboksene", + IDC_CHECK_SNAP_TO, 52, 84, 183, 20, BS_MULTILINE | BS_TOP + ICON IDI_MOUSE_BUTTON, IDC_ICON_SNAP_TO, 18, 83, 15, 15 + GROUPBOX "Synlighet", -1, 5, 115, 236, 95 + CHECKBOX "&Vis pekerspor:", IDC_CHECK_POINTER_TRAIL, 52, 128, 125, 10 + LTEXT "Kort", IDC_TEXT_TRAIL_SHORT, 54, 143, 25, 10 + LTEXT "Lang", IDC_TEXT_TRAIL_LONG, 157, 143, 30, 10 + ICON IDI_MOUSE_TRAILS, IDC_ICON_POINTER_TRAIL, 20, 128, 15, 15 + CONTROL "", IDC_SLIDER_POINTER_TRAIL ,"msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 80, 143, 70, 17 + CHECKBOX "&Skjul pekeren ved tastetrykk", IDC_CHECK_HIDE_POINTER, 52, 163, 130, 10 + ICON IDI_MOUSE_SPEED, IDC_ICON_HIDE_POINTER, 18, 158, 15, 15 + CHECKBOX "&Vis hvor pekeren er nr Crtl-tasten trykkes", + IDC_CHECK_SHOW_POINTER, 52, 188, 183, 20, BS_MULTILINE | BS_TOP + ICON IDI_MOUSE_POINTER, IDC_ICON_SHOW_POINTER, 18, 183, 15, 15 +END + +IDD_PAGE_WHEEL DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Hjul" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Loddrett rulling", -1, 5, 5, 236, 80 + ICON IDI_MOUSE_WHEEL, IDC_ICON_WHEEL, 20, 20, 32, 32 + LTEXT "Rull hjulet ett hakk for rulle:", -1, 60, 15, 150, 10 + RADIOBUTTON "Flgende &antall linjer om gangen:", IDC_RADIO_WHEEL_SCROLL_LINES, 60, 30, 150, 10, WS_VISIBLE | WS_GROUP | WS_TABSTOP + RADIOBUTTON "&En skjermhyde av gangen", IDC_RADIO_WHEEL_SCROLL_PAGE, 60, 65, 90, 10 + EDITTEXT IDC_EDIT_WHEEL_SCROLL_LINES, 70, 45, 60, 15, ES_RIGHT | WS_VISIBLE | WS_GROUP | WS_TABSTOP + CONTROL "", IDC_UPDOWN_WHEEL_SCROLL_LINES, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER, 125, 45, 12, 12 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME_1 "Mus" + IDS_CPLDESCRIPTION_1 "Endre mus innstillinger." + IDS_CPLNAME_2 "Tastatur" + IDS_CPLDESCRIPTION_2 "Endre tastatur innstillinger." + IDS_ARROW "Vanlig merkering" + IDS_HELP "Hjelp valg" + IDS_APPSTARTING "Arbeider i bakgrunnen" + IDS_WAIT "Busy" + IDS_CROSSHAIR "Precision Select" + IDS_IBEAM "Tekst valgt" + IDS_NWPEN "Handskriving" + IDS_NO "Utilgjengelig" + IDS_SIZENS "Vertical Resize" + IDS_SIZEWE "Horizontal Resize" + IDS_SIZENWSE "Diagonal Resize 1" + IDS_SIZENESW "Diagonal Resize 2" + IDS_SIZEALL "Flytt" + IDS_UPARROW "Alternative Select" + IDS_HAND "Link Select" + IDS_NONE "(Ingen)" + IDS_SYSTEM_SCHEME "(system scheme)" + IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" + IDS_BROWSE_TITLE "Bla gjennom" + IDS_REMOVE_TITLE "Confirm Cursor Scheme Removal" + IDS_REMOVE_TEXT "Are you sure you want to remove the cursor scheme '%s'?" + IDS_OVERWRITE_TITLE "Confirm Cursor Scheme Overwrite" + IDS_OVERWRITE_TEXT "The cursor scheme name you chose is already in use. Do you want to overwrite the existing cursor scheme?" + IDS_ANIMATE_CURSOR "Animated Cursor" +END diff --git a/reactos/dll/cpl/main/rsrc.rc b/reactos/dll/cpl/main/rsrc.rc index 96328a4e537..81ecdd62b45 100644 --- a/reactos/dll/cpl/main/rsrc.rc +++ b/reactos/dll/cpl/main/rsrc.rc @@ -13,6 +13,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/mmsys/lang/no-NO.rc b/reactos/dll/cpl/mmsys/lang/no-NO.rc new file mode 100644 index 00000000000..c184c394d22 --- /dev/null +++ b/reactos/dll/cpl/mmsys/lang/no-NO.rc @@ -0,0 +1,267 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_VOLUME DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Volum" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLICON, IDI_CPLICON, 8,5,32,32 + LTEXT "",IDC_DEVICE_NAME,40,10,194,36 + GROUPBOX "Enhets volum", -1, 7,30,230,100 + CONTROL "", IDC_MUTE_ICON, "Static", SS_ICON | WS_VISIBLE,17,45,32,32 + CONTROL "",IDC_VOLUME_TRACKBAR, "msctls_trackbar32", TBS_AUTOTICKS | TBS_ENABLESELRANGE | TBS_BOTTOM | TBS_HORZ | WS_TABSTOP, 65, 45, 140, 14 + LTEXT "Lavt",-1,62,66,30,17 + LTEXT "Hyt",-1,195,66,30,17 + CHECKBOX "&Demp", IDC_MUTE_CHECKBOX, 50, 78, 140, 10 + CHECKBOX "Plasser volum &ikon i oppgavelinjen", IDC_ICON_IN_TASKBAR, 50, 92, 140, 10 + PUSHBUTTON "A&vansert...", IDC_ADVANCED_BTN, 150,105,75,15 + GROUPBOX "Hytaller innstilling", IDC_SPEAKER_SET_BTN, 7,140,230,80 + CONTROL "", IDC_SPEAKIMG, "Static", SS_OWNERDRAW, 4, 160, 70, 70 + LTEXT "Bruk innstillingen under for endre individuell hytaller volum og andre innstillinger.",-1,70,155,150,36 + PUSHBUTTON "&Hytaller Volum...", IDC_SPEAKER_VOL_BTN, 70,195,75,15 + PUSHBUTTON "A&vansert...", IDC_ADVANCED2_BTN, 150,195,75,15 +END + +IDD_SOUNDS DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Lyder" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Et lydoppsett er et sett med lyder som tilordnes hendelser i ReactOS og programmer. Du kan velge et eksisterende oppsett eller lagre et du har endret p.",-1,8,7,230,40 + LTEXT "Lydo&ppsett :",-1,8,42,150,17 + COMBOBOX IDC_SOUND_SCHEME, 8, 53, 230, 46, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "Lag&re som...", IDC_SAVEAS_BTN, 134,70,50,15 + PUSHBUTTON "&Slett", IDC_DELETE_BTN, 188,70,50,15 + LTEXT "Hvis du vil endre lyder, klikker du p en programhendelse i listen nedenfor, og velger deretter en lyd som skal brukes. Du kan lagre endringer som et nytt lydoppsett.",-1,8,90,230,40 + LTEXT "&Programhendelser:",-1,8,118,150,17 + CONTROL "", IDC_SCHEME_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, 8, 130, 230, 60, WS_EX_CLIENTEDGE + LTEXT "&Lyder:",IDC_TEXT_SOUND,8,194,80,17, WS_DISABLED + COMBOBOX IDC_SOUND_LIST, 8, 205, 155, 146, CBS_DROPDOWNLIST | CBS_DISABLENOSCROLL | CBS_SORT | WS_VSCROLL | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "", IDC_PLAY_SOUND, 168,205,15,15, WS_DISABLED | BS_ICON + PUSHBUTTON "&Bla gjennom...", IDC_BROWSE_SOUND, 188,205,50,15, WS_DISABLED +END + +IDD_AUDIO DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Avspilling" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Lyd avspilling", -1, 7,7,230,60 + ICON IDI_CPLICON, IDI_CPLICON, 15,20,32,32 + LTEXT "&Standard enhet:",-1,50,20,80,17 + COMBOBOX IDC_DEVICE_PLAY_LIST, 50, 30, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "&Volum...", IDC_VOLUME1_BTN, 85,47,70,15 + PUSHBUTTON "Ava&nsert...", IDC_ADV2_BTN, 160,47,70,15 + GROUPBOX "Lyd opptak", -1, 7,75,230,60 + ICON IDI_MICROPHONE_ICON, IDI_MICROPHONE_ICON, 15,88,32,32 + LTEXT "S&tandard enhet:",-1,50,88,80,17 + COMBOBOX IDC_DEVICE_REC_LIST, 50, 98, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "V&olum...", IDC_VOLUME2_BTN, 85,115,70,15 + PUSHBUTTON "Avan&sert...", IDC_ADV1_BTN, 160,115,70,15 + GROUPBOX "MIDI musikk avspilling", -1, 7,145,230,60 + ICON IDI_CPLICON, IDI_CPLICON, 15,158,32,32 + LTEXT "St&andard enhet:",-1,50,158,80,17 + COMBOBOX IDC_DEVICE_MIDI_LIST, 50, 168, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "Volu&m...", IDC_VOLUME3_BTN, 85,185,70,15 + PUSHBUTTON "O&m...", IDC_ADV3_BTN, 160,185,70,15 + CHECKBOX "&Bruk bare standard enheter", IDC_DEFAULT_DEV_CHECKBOX, 7, 212, 140, 10 +END + +IDD_VOICE DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Stemme" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Disse innstillingene kontrollerer volumet og avansert valg for stemme avspilling eller opptak enhet som du valgte.",-1,8,7,230,40 + GROUPBOX "Stemme avspilling", -1, 7,37,230,60 + ICON IDI_CPLICON, IDI_CPLICON, 15,50,32,32 + LTEXT "&Standard enhet:",-1,50,50,80,17 + COMBOBOX IDC_DEVICE_VOICE_LIST, 50, 60, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "&Volum...", IDC_VOLUME4_BTN, 85,77,70,15 + PUSHBUTTON "Ava&nsert...", IDC_ADV4_BTN, 160,77,70,15 + GROUPBOX "Stemme opptak", -1, 7,105,230,60 + ICON IDI_MICROPHONE_ICON, IDI_MICROPHONE_ICON, 15,118,32,32 + LTEXT "S&tandard enhet:",-1,50,118,80,17 + COMBOBOX IDC_DEVICE_VOICE_REC_LIST, 50, 128, 180, 46, CBS_DROPDOWNLIST + PUSHBUTTON "V&olum...", IDC_VOLUME5_BTN, 85,145,70,15 + PUSHBUTTON "Avan&sert...", IDC_ADV5_BTN, 160,145,70,15 + PUSHBUTTON "&Test maskinvare...", IDC_TEST_HARDWARE, 160,175,70,15 +END + +IDD_HARDWARE DIALOGEX 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Maskinvare" +FONT 8, "MS Shell Dlg" +BEGIN + +END + +IDD_SAVE_SCHEME_AS DIALOG 9, 23, 225, 54 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Lagre Scheme som" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Lagre denne lyd scheme som:", -1, 7, 7, 212, 9 + EDITTEXT 8960, 7, 17, 211, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", IDOK, 93, 36, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 157, 36, 60, 14 +END + +IDD_SPEAKERS DIALOG 0, 0, 257, 204 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hytaller" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 4379, -1, 7, 8, 20, 20 + LTEXT "Velg hytaller oppsett som det mest likt oppsett som du har p din datamaskin.", -1, 36, 8, 215, 27 + CONTROL 110, 5376, "STATIC", SS_BITMAP | SS_CENTERIMAGE, 37, 40, 209, 112, WS_EX_TRANSPARENT + LTEXT "H&ytaller oppsett:", 8502, 53, 169, 55, 10 + COMBOBOX 5401, 52, 182, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP +END + +IDD_PERFORMANCE1 DIALOG 0, 0, 257, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ytelse" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Disse innstillingene kontrollere hvordan ReactOS spiller lyd. Denne kan hjelpe deg med feilske lyd-relatert problemer.", 8492, 34, 7, 218, 23 + GROUPBOX "Lyd avspilling", 8494, 7, 32, 243, 152 + ICON 4379, 8512, 8, 8, 20, 20 + LTEXT "&Maskinvare akselerasjon:", 8495, 13, 56, 111, 14 + CONTROL "Slider1", 5395, "MSCTLS_TRACKBAR32", WS_GROUP | WS_TABSTOP | 0x00000401, 150, 54, 62, 18 + LTEXT "&Sample rate conversion quality:", 8496, 13, 123, 103, 14 + CONTROL "Slider1", 5396, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 150, 121, 62, 18 + PUSHBUTTON "&Gjenopprett standard", 5400, 7, 191, 110, 14 + LTEXT "Ingen", 8497, 128, 56, 21, 10 + LTEXT "Full", 8498, 214, 56, 21, 9 + LTEXT "Bra", 8499, 128, 123, 21, 10 + LTEXT "Best", 8500, 214, 123, 23, 9 + LTEXT "This string describes the hardware setting for the capture device", 5399, 13, 145, 227, 21 + LTEXT "This string describes the hardware setting for the render device", 5398, 13, 78, 227, 22 +END + +IDD_PERFORMANCE2 DIALOG 0, 0, 257, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Ytelse" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "These settings control how ReactOS records audio. They can help you troubleshoot audio-related problems.", 8492, 34, 7, 217, 20 + GROUPBOX "Lyd opptak", 8494, 7, 29, 242, 122 + ICON 4380, 8512, 8, 7, 20, 20 + LTEXT "&Maskinvare akselerasjon:", 8495, 13, 46, 103, 17 + CONTROL "Slider1", 5395, "MSCTLS_TRACKBAR32", WS_GROUP | WS_TABSTOP | 0x00000401, 150, 43, 62, 18 + LTEXT "&Sample rate conversion quality:", 8496, 13, 103, 103, 17 + CONTROL "Slider1", 5396, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 150, 101, 62, 18 + PUSHBUTTON "&Gjenopprett standard", 5400, 9, 158, 110, 14 + LTEXT "Ingen", 8497, 125, 46, 24, 10 + LTEXT "Full", 8498, 217, 46, 19, 9 + LTEXT "Bra", 8499, 125, 103, 24, 10 + LTEXT "Best", 8500, 217, 103, 19, 9 + LTEXT "This string describes the hardware setting for the capture device", 5399, 13, 125, 222, 21 + LTEXT "This string describes the hardware setting for the render device", 5398, 13, 68, 218, 24 +END + +IDD_SETUP1 DIALOG 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Oppsett" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "ReactOS lyd", 10243, 7, 5, 213, 192 + ICON 4393, 10241, 26, 26, 20, 20 + LTEXT "This computer cannot play audio because the ReactOS Audio service is not enabled.", 10245, 60, 25, 150, 40 + AUTOCHECKBOX "&Aktiverer ReactOS lyd", 10253, 60, 68, 150, 9 + LTEXT "Notater", 10246, 58, 87, 150, 11 + LTEXT "1. You must be an administrator to enable this service. If you are not logged on as administrator, you will be prompted for an administrator name and password.", 10247, 60, 100, 150, 40 + LTEXT "2. After you enable ReactOS Audio you will have to restart the computer.", 10248, 60, 140, 150, 40 +END + +IDD_MULTICHANNEL DIALOG 0, 0, 227, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Flere kanaler" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Beskrivelse fr du her.", 9506, 8, 4, 212, 24 + LTEXT "Lav", 9473, 65, 31, 14, 8 + LTEXT "", 9472, 5, 31, 55, 8 + CONTROL "Slider1", 9475, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 29, 108, 17 + LTEXT "Hyt", 9474, 202, 31, 17, 8 + LTEXT "Lav", 9477, 65, 50, 14, 8 + LTEXT "", 9476, 5, 50, 55, 8 + CONTROL "Slider1", 9479, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 48, 108, 17 + LTEXT "Hyt", 9478, 202, 50, 17, 8 + LTEXT "Lav", 9481, 65, 69, 14, 8 + LTEXT "", 9480, 5, 69, 55, 8 + CONTROL "Slider1", 9483, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 67, 108, 17 + LTEXT "Hyt", 9482, 202, 69, 17, 8 + LTEXT "Lav", 9485, 65, 88, 14, 8 + LTEXT "", 9484, 5, 88, 55, 8 + CONTROL "Slider1", 9487, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 86, 108, 17 + LTEXT "Hyt", 9486, 202, 88, 17, 8 + LTEXT "Lav", 9489, 65, 107, 14, 8 + LTEXT "", 9488, 5, 107, 55, 8 + CONTROL "Slider1", 9491, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 105, 108, 17 + LTEXT "Hyt", 9490, 202, 107, 17, 8 + LTEXT "Lav", 9493, 65, 126, 14, 8 + LTEXT "", 9492, 5, 126, 55, 8 + CONTROL "Slider1", 9495, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 124, 108, 17 + LTEXT "Hyt", 9494, 202, 126, 17, 8 + LTEXT "Lav", 9497, 65, 145, 14, 8 + LTEXT "", 9496, 5, 145, 55, 8 + CONTROL "Slider1", 9499, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 143, 108, 17 + LTEXT "Hyt", 9498, 202, 145, 17, 8 + LTEXT "Lav", 9501, 65, 164, 14, 8 + LTEXT "", 9500, 5, 164, 55, 8 + CONTROL "Slider1", 9503, "MSCTLS_TRACKBAR32", WS_TABSTOP | 0x00000401, 87, 162, 108, 17 + LTEXT "Hyt", 9502, 202, 164, 17, 8 + AUTOCHECKBOX "&Move all slide indicators at the same time", 9504, 5, 185, 216, 9 + PUSHBUTTON "Gjenopprett &standard", 9505, 110, 199, 110, 14 +END + +IDD_SETUP2 DIALOG 0, 0, 227, 206 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Oppsett" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "ReactOS lyd", 10259, 7, 5, 213, 192 + ICON 4394, 10257, 25, 25, 20, 20 + LTEXT "The ReactOS Audio service is now enabled. However, audio may not function properly until you restart ReactOS. If you want to restart now, first save your work and close all programs.", 10261, 60, 25, 150, 50 + LTEXT "For starte ReactOS p nytt, trykk p OK.", 10262, 60, 75, 150, 20 + LTEXT "Hvis du trykker avbryt, vil du trenge starte p nytt senere for at ReactOS lyd skal fungere riktig.", 10263, 60, 100, 150, 40 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Lyder og lydenheter" + IDS_CPLDESCRIPTION "Changes the sound scheme for your computer, or configure the settings for your speakers and recording devices." + IDS_NO_SOUND "(Ingen)" + + 5825 "Program feil" + 5826 "Avslutt program" + 5827 "Kritisk batteri Alarm" + 5828 "Enhet tilkoblet" + 5829 "Enhet frakoblet" + 5830 "Enhet misslykkes koble seg til" + 5831 "Tm papirkurven" + 5832 "Svakt batteri alarm" + 5833 "Maksimere" + 5834 "Meny kommando" + 5835 "Meny popup" + 5836 "Minimere" + 5837 "Ny e-post beskjed" + 5838 "Start navigasjon" + 5839 "pne program" + 5840 "Utskrift fullfrt" + 5841 "Restore Down" + 5842 "Restore Up" + 5843 "Asterisk" + 5844 "Standard lyd" + 5845 "Exclamation" + 5846 "Avslutt ReactOS" + 5847 "Kritisk Stopp" + 5848 "System Notification" + 5849 "Sprsml" + 5850 "Start ReactOS" + 5851 "Start Meny" + 5852 "ReactOS Logg av" + 5853 "ReactOS Logg p" +END diff --git a/reactos/dll/cpl/mmsys/rsrc.rc b/reactos/dll/cpl/mmsys/rsrc.rc index 8ded3698b79..7ebf3c612f3 100644 --- a/reactos/dll/cpl/mmsys/rsrc.rc +++ b/reactos/dll/cpl/mmsys/rsrc.rc @@ -11,6 +11,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/cpl/ncpa/lang/nb-NO.rc b/reactos/dll/cpl/ncpa/lang/nb-NO.rc deleted file mode 100644 index d28a79f9f49..00000000000 --- a/reactos/dll/cpl/ncpa/lang/nb-NO.rc +++ /dev/null @@ -1,134 +0,0 @@ -LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL - -IDD_PROPPAGENETWORK DIALOGEX DISCARDABLE 0, 0, 246, 228 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Egenskaper for Nettverk" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Network Adapters",-1,9,9,217,8 - LISTBOX IDC_NETCARDLIST,9,21,229,73,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON "&Add",IDC_ADD,9,100,60,14 - PUSHBUTTON "&Remove",IDC_REMOVE,72,100,60,14 - PUSHBUTTON "&Properties",IDC_PROPERTIES,179,100,60,14 -END - -IDD_NETPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "Connect Using:", -1, 9,9,217,8 - EDITTEXT IDC_NETCARDNAME, 9, 21, 230, 12, WS_DISABLED | WS_BORDER | WS_TABSTOP - PUSHBUTTON "&Configure", IDC_CONFIGURE, 189, 38, 50, 14 - LTEXT "Components checked are used by this connection:", -1, 9, 59, 217, 8 - LISTBOX IDC_COMPONENTSLIST, 9, 71, 230, 55, LBS_NOTIFY | WS_VSCROLL | WS_BORDER | LBS_NOINTEGRALHEIGHT - PUSHBUTTON "&Install", IDC_INSTALL, 9, 130, 65, 14, WS_DISABLED | WS_TABSTOP - PUSHBUTTON "&Uninstall", IDC_UNINSTALL, 90, 130, 65, 14, WS_DISABLED | WS_TABSTOP - PUSHBUTTON "&Properties", IDC_PROPERTIES, 174, 130, 65, 14 - GROUPBOX "Description", -1, 9, 153, 230, 46, BS_GROUPBOX - LTEXT "Component Description goes here...", IDC_DESCRIPTION, 15, 165, 217, 28, WS_GROUP - CHECKBOX "Show Icon in taskbar when connected", IDC_SHOWTASKBAR, 9, 206, 230, 12, BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP -END - - -IDD_CARDPROPERTIES DIALOGEX DISCARDABLE 0, 0, 200,180 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX "Connection", -1, 9, 8, 182, 58, BS_GROUPBOX - LTEXT "Status:", -1, 19, 20, 60, 8 - LTEXT "Duration:", -1, 19, 34, 60, 8 - LTEXT "Speed:", -1, 19, 48, 60, 8 - GROUPBOX "Activity", -1, 9, 74, 182, 70, BS_GROUPBOX - RTEXT "Sent", -1, 26, 90, 60, 8 - ICON IDI_HORIZONTAL, -1, 90, 85, 18, 20 - ICON IDI_NETSTAT, -1, 110, 85, 18, 20 - ICON IDI_HORIZONTAL, -1, 130, 85, 18, 20 - LTEXT "Received", -1, 149, 90, 37, 8 - LTEXT "Bytes:", -1, 17, 115, 32, 8 - RTEXT "000.000.000", IDC_SEND, 63, 115, 44, 8 - ICON IDI_VERTICAL, -1, 110, 108, 18, 20 - RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 - PUSHBUTTON "&Properties", IDC_PROPERTIES, 10, 150, 50, 14 - PUSHBUTTON "&Disable", IDC_ENDISABLE, 66, 150, 50, 14 - RTEXT "",IDC_STATUS,83,20,98,8 - RTEXT "",IDC_DURATION,83,34,98,8 - RTEXT "",IDC_SPEED,83,48,98,8 -END - -IDD_CARDSUPPORT DIALOGEX DISCARDABLE 0, 0, 200,180 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Support" -FONT 8, "MS Shell Dlg" -BEGIN - GROUPBOX "Connection Status", -1, 9, 8, 200, 88, BS_GROUPBOX - LTEXT "Adressetype:", -1, 22, 20, 80, 8 - LTEXT "IP adresse:", -1, 22, 34, 80, 8 - LTEXT "Subnet maske:", -1, 22, 48, 80, 8 - LTEXT "Default Gateway:", -1, 22, 62, 80, 8 - - RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8 - RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8 - RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8 - RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8 - - PUSHBUTTON "&Detaljer...", IDC_DETAILS, 22, 76, 62, 14 -END - -IDD_TCPIPPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" -FONT 8, "MS Shell Dlg" -BEGIN - LTEXT "You can get IP settings assigned automatically if your network supports this capability. Otherwise, you need to ask your network administrator for the appropriate IP settings.", -1, 9, 9, 228, 27 - CONTROL "Obtain the IP address automatically", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 43, 210, 12 - GROUPBOX "", -1, 9, 61, 228, 70, BS_GROUPBOX - CONTROL "&Use the following IP address:", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON, 14, 59, 105, 12 - LTEXT "IP address:", -1, 14, 75, 135, 8 - CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP,150,75-2,80,12 - LTEXT "Subnet mask:", -1, 14, 90, 135, 8 - CONTROL "",IDC_SUBNETMASK,"SysIPAddress32",WS_TABSTOP,150,90-2,80,12 - LTEXT "Default gateway:", -1, 14, 105, 135, 8 - CONTROL "",IDC_DEFGATEWAY,"SysIPAddress32",WS_TABSTOP,150,105-2,80,12 - CONTROL "Obtain the DNS server address automatically", IDC_AUTODNS, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 139, 210, 12 - GROUPBOX "", -1, 9, 157, 228, 47, BS_GROUPBOX - CONTROL "&Use the following DNS server addresses", IDC_FIXEDDNS, "BUTTON", BS_AUTORADIOBUTTON, 14, 155, 142, 12 - LTEXT "Preferred DNS server:", -1, 14, 171, 135, 8 - CONTROL "",IDC_DNS1,"SysIPAddress32",WS_TABSTOP,150,171-2,80,12 - LTEXT "Alternate DNS server:", -1, 14, 186, 135, 8 - CONTROL "",IDC_DNS2,"SysIPAddress32",WS_TABSTOP,150,186-2,80,12 - PUSHBUTTON "&Advanced", IDC_ADVANCED, 186, 209, 50, 14, WS_DISABLED | WS_TABSTOP -END - -STRINGTABLE -BEGIN - IDS_CPLSYSTEMNAME "Network Properties" - IDS_CPLSYSTEMDESCRIPTION "Customizes network settings." -END - -STRINGTABLE -BEGIN - IDS_ASSIGNED_DHCP "Tilordnet av DHCP" - IDS_ASSIGNED_MANUAL "Manuelt konfigurert" -END - -STRINGTABLE -BEGIN - IDS_ERROR "Feil" - IDS_ENTER_VALID_IPADDRESS "You must enter a valid IP address" - IDS_ENTER_VALID_SUBNET "You must enter a valid subnet mask" - IDS_CANNOT_LOAD_CONFIG "Unable to load current config data" - IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" - IDS_OUT_OF_MEMORY "Out of memory" - IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" - IDS_STATUS_NON_OPERATIONAL "Non-operational" - IDS_STATUS_UNREACHABLE "No WAN adapter found" - IDS_STATUS_DISCONNECTED "Disconnected" - IDS_STATUS_CONNECTING "Connecting" - IDS_STATUS_CONNECTED "Connected" - IDS_STATUS_OPERATIONAL "Connected" - IDS_SPEED_MBPS "%d Mbps" - IDS_DURATION_DAY "%d day %s" - IDS_DURATION_DAYS "%d days %s" -END diff --git a/reactos/dll/cpl/ncpa/lang/no-NO.rc b/reactos/dll/cpl/ncpa/lang/no-NO.rc new file mode 100644 index 00000000000..0881c10acd2 --- /dev/null +++ b/reactos/dll/cpl/ncpa/lang/no-NO.rc @@ -0,0 +1,134 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGENETWORK DIALOGEX DISCARDABLE 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Egenskaper for Nettverk" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nettverkskort",-1,9,9,217,8 + LISTBOX IDC_NETCARDLIST,9,21,229,73,LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Legg til",IDC_ADD,9,100,60,14 + PUSHBUTTON "&Fjern",IDC_REMOVE,72,100,60,14 + PUSHBUTTON "&Egenskaper",IDC_PROPERTIES,179,100,60,14 +END + +IDD_NETPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Koble til med:", -1, 9,9,217,8 + EDITTEXT IDC_NETCARDNAME, 9, 21, 230, 12, WS_DISABLED | WS_BORDER | WS_TABSTOP + PUSHBUTTON "&Konfigurer", IDC_CONFIGURE, 189, 38, 50, 14 + LTEXT "Komponenter kontrollert er brukt av denne tilkoblingen:", -1, 9, 59, 217, 8 + LISTBOX IDC_COMPONENTSLIST, 9, 71, 230, 55, LBS_NOTIFY | WS_VSCROLL | WS_BORDER | LBS_NOINTEGRALHEIGHT + PUSHBUTTON "&Installler", IDC_INSTALL, 9, 130, 65, 14, WS_DISABLED | WS_TABSTOP + PUSHBUTTON "&Avinnstallere", IDC_UNINSTALL, 90, 130, 65, 14, WS_DISABLED | WS_TABSTOP + PUSHBUTTON "&Egenskaper", IDC_PROPERTIES, 174, 130, 65, 14 + GROUPBOX "Beskrivelse", -1, 9, 153, 230, 46, BS_GROUPBOX + LTEXT "Komponent beskrivelse kan du f her...", IDC_DESCRIPTION, 15, 165, 217, 28, WS_GROUP + CHECKBOX "Vis Ikon i oppgavelinjen nr tilkoblet", IDC_SHOWTASKBAR, 9, 206, 230, 12, BS_AUTOCHECKBOX | WS_DISABLED | WS_TABSTOP +END + + +IDD_CARDPROPERTIES DIALOGEX DISCARDABLE 0, 0, 200,180 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Tilkobling", -1, 9, 8, 182, 58, BS_GROUPBOX + LTEXT "Status:", -1, 19, 20, 60, 8 + LTEXT "Varighet:", -1, 19, 34, 60, 8 + LTEXT "Hastighet:", -1, 19, 48, 60, 8 + GROUPBOX "Aktivitet", -1, 9, 74, 182, 70, BS_GROUPBOX + RTEXT "Sendt", -1, 26, 90, 60, 8 + ICON IDI_HORIZONTAL, -1, 90, 85, 18, 20 + ICON IDI_NETSTAT, -1, 110, 85, 18, 20 + ICON IDI_HORIZONTAL, -1, 130, 85, 18, 20 + LTEXT "Motatt", -1, 149, 90, 37, 8 + LTEXT "Byte:", -1, 17, 115, 32, 8 + RTEXT "000.000.000", IDC_SEND, 63, 115, 44, 8 + ICON IDI_VERTICAL, -1, 110, 108, 18, 20 + RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 + PUSHBUTTON "&Egenskaper", IDC_PROPERTIES, 10, 150, 50, 14 + PUSHBUTTON "&Deaktivert", IDC_ENDISABLE, 66, 150, 50, 14 + RTEXT "",IDC_STATUS,83,20,98,8 + RTEXT "",IDC_DURATION,83,34,98,8 + RTEXT "",IDC_SPEED,83,48,98,8 +END + +IDD_CARDSUPPORT DIALOGEX DISCARDABLE 0, 0, 200,180 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Hjelp" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Tilkoblingsstatus", -1, 9, 8, 200, 88, BS_GROUPBOX + LTEXT "Adressetype:", -1, 22, 20, 80, 8 + LTEXT "IP adresse:", -1, 22, 34, 80, 8 + LTEXT "Subnet maske:", -1, 22, 48, 80, 8 + LTEXT "Standard Gateway:", -1, 22, 62, 80, 8 + + RTEXT "Ikke tilgjengelig", IDC_DETAILSTYPE, 122, 20, 80, 8 + RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8 + RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8 + RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8 + + PUSHBUTTON "&Detaljer...", IDC_DETAILS, 22, 76, 62, 14 +END + +IDD_TCPIPPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Du kan f IP innstillinger automatisk hvis ditt nettverk sttter denne muligheten. Ellers, trenger du sprre din nettverk administrator for f IP innstillingene.", -1, 9, 9, 228, 27 + CONTROL "Motta IP addressen automatisk", IDC_USEDHCP, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 43, 210, 12 + GROUPBOX "", -1, 9, 61, 228, 70, BS_GROUPBOX + CONTROL "&Bruk flgende IP addresse:", IDC_NODHCP, "BUTTON", BS_AUTORADIOBUTTON, 14, 59, 105, 12 + LTEXT "IP address:", -1, 14, 75, 135, 8 + CONTROL "",IDC_IPADDR,"SysIPAddress32",WS_TABSTOP,150,75-2,80,12 + LTEXT "Subnet maske:", -1, 14, 90, 135, 8 + CONTROL "",IDC_SUBNETMASK,"SysIPAddress32",WS_TABSTOP,150,90-2,80,12 + LTEXT "Standard gateway:", -1, 14, 105, 135, 8 + CONTROL "",IDC_DEFGATEWAY,"SysIPAddress32",WS_TABSTOP,150,105-2,80,12 + CONTROL "Motta DNS server addresse automatisk", IDC_AUTODNS, "BUTTON", BS_AUTORADIOBUTTON | WS_GROUP | WS_TABSTOP, 14, 139, 210, 12 + GROUPBOX "", -1, 9, 157, 228, 47, BS_GROUPBOX + CONTROL "&Bruk flgende DNS server addresser", IDC_FIXEDDNS, "BUTTON", BS_AUTORADIOBUTTON, 14, 155, 142, 12 + LTEXT "Forvalgt DNS server:", -1, 14, 171, 135, 8 + CONTROL "",IDC_DNS1,"SysIPAddress32",WS_TABSTOP,150,171-2,80,12 + LTEXT "Alternativ DNS server:", -1, 14, 186, 135, 8 + CONTROL "",IDC_DNS2,"SysIPAddress32",WS_TABSTOP,150,186-2,80,12 + PUSHBUTTON "&Avansert", IDC_ADVANCED, 186, 209, 50, 14, WS_DISABLED | WS_TABSTOP +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Nettverk egenskaper" + IDS_CPLSYSTEMDESCRIPTION "Tilpass nettverk innstillinger." +END + +STRINGTABLE +BEGIN + IDS_ASSIGNED_DHCP "Tilordnet av DHCP" + IDS_ASSIGNED_MANUAL "Manuelt konfigurert" +END + +STRINGTABLE +BEGIN + IDS_ERROR "Feil" + IDS_ENTER_VALID_IPADDRESS "Du m skrive inn en gyldig IP addresse" + IDS_ENTER_VALID_SUBNET "Du m skrive inn en gyldig subnet maske" + IDS_CANNOT_LOAD_CONFIG "Ikke mulig laste nvrende konfigurering data" + IDS_CANNOT_CREATE_PROPSHEET "Ikke mulig opprette egenskap informasjon" + IDS_OUT_OF_MEMORY "Ikke mere tilgjengelig minne" + IDS_CANNOT_SAVE_CHANGES "Ikke mulig lagre endringene du gjorde" + IDS_STATUS_NON_OPERATIONAL "Non-operational" + IDS_STATUS_UNREACHABLE "Ingen trdlse nettverkskort funnet" + IDS_STATUS_DISCONNECTED "Frakoblet" + IDS_STATUS_CONNECTING "Kobler til" + IDS_STATUS_CONNECTED "Tilkoblet" + IDS_STATUS_OPERATIONAL "Tilkoblet" + IDS_SPEED_MBPS "%d Mbps" + IDS_DURATION_DAY "%d dag %s" + IDS_DURATION_DAYS "%d dager %s" +END diff --git a/reactos/dll/cpl/ncpa/rsrc.rc b/reactos/dll/cpl/ncpa/rsrc.rc index d41c582aff9..a984e6d03b4 100644 --- a/reactos/dll/cpl/ncpa/rsrc.rc +++ b/reactos/dll/cpl/ncpa/rsrc.rc @@ -13,7 +13,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/cpl/powercfg/lang/no-NO.rc b/reactos/dll/cpl/powercfg/lang/no-NO.rc new file mode 100644 index 00000000000..c80fbe06512 --- /dev/null +++ b/reactos/dll/cpl/powercfg/lang/no-NO.rc @@ -0,0 +1,166 @@ +// Norwegian (no) resources by LMH1 + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGEPOWERSHEMES DIALOGEX 0, 0, 252, 237 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Strmstyringsplan" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_ACDC, IDI_ACDC, 7, 7, 28, 22 + LTEXT "Velg Strmstyringsplan med den mest passende innstilling for denne datamaskinen. Vr oppmerksom p endre innstillingene under vil forandre valgte plan.", + -1,37, 6, 209, 36 + GROUPBOX "S&trmstyringsplan", -1, 6, 43, 240, 50 + COMBOBOX IDC_ENERGYLIST, 14, 54, 224, 92, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL + PUSHBUTTON "&Lagre som...", IDC_SAVEAS_BTN, 109, 72, 70, 14, WS_DISABLED + PUSHBUTTON "&Slett", IDC_DELETE_BTN, 183, 72, 55, 14, WS_DISABLED + GROUPBOX "Ukjent", IDC_GRPDETAIL, 6, 95, 240, 136 + LTEXT "Mens datamaskinen er:",IDC_SAT, 12, 109, 60, 12 + LTEXT "Koblet til",IDC_SAC, 123, 110, 45, 15 + ICON IDI_AC, IDC_IAC, 97, 108, 21, 20 + LTEXT "Kjrer p batterier",IDC_SDC, 195, 110, 45, 15 + ICON IDI_DC, IDC_IDC, 170, 108, 21, 20 + LTEXT "Sl av &skjermen:",IDC_MONITOR, 13, 148, 84, 10 + COMBOBOX IDC_MONITORACLIST, 100, 145, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_MONITORDCLIST, 173, 145, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Sl av hardd&isker:",IDC_DISK, 13, 171, 84, 10 + COMBOBOX IDC_DISKACLIST, 100, 167, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_DISKDCLIST, 173, 167, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "System h&vilemodus:",IDC_STANDBY, 13, 191, 84, 10 + COMBOBOX IDC_STANDBYACLIST, 100, 188, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_STANDBYDCLIST, 173, 188, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "System &dvalemodus:",IDC_HYBERNATE, 13, 212, 84, 10 + COMBOBOX IDC_HYBERNATEACLIST, 100, 209, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + COMBOBOX IDC_HYBERNATEDCLIST, 173, 209, 65, 150, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +END + +IDD_PROPPAGEALARMS DIALOGEX DISCARDABLE 0, 0, 252, 237 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Alarmer" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Svakt battery alarm",-1, 6, 7, 239, 104 + CONTROL "Aktivere &svakt batteri alarm mens strmnivet passerer:",IDC_ALARM1, + "Knapp",BS_AUTOCHECKBOX | WS_TABSTOP, 15, 17, 190, 15 + LTEXT "ukjent",IDC_ALARMVALUE1, 209, 20, 33, 10 + LTEXT "0%",-1, 28, 43, 15, 10 + CONTROL "Slider1",IDC_ALARMBAR1,"msctls_trackbar32",TBS_HORZ | + TBS_AUTOTICKS | WS_TABSTOP, 42, 45, 170, 15 + LTEXT "100%", -1, 214, 43, 25, 10 + PUSHBUTTON "Alar&m handling...",-1, 17, 69, 70, 14,WS_DISABLED + LTEXT "Varsel:",-1, 95, 71, 57, 10 + LTEXT "Ukjent",IDC_ALARMMSG1, 154, 71, 84, 10 + LTEXT "Handling:",-1, 95, 83, 55, 10 + LTEXT "Ukjent",IDC_ALARMAKTION1, 154, 83, 84, 10 + LTEXT "Kjr Program:",-1, 95, 95, 55, 10 + LTEXT "Ukjent",IDC_ALARMPROG1, 154, 95, 84, 10 + + GROUPBOX "Kritisk batteri alarm",-1, 6, 120, 239, 106 + CONTROL "Aktivere svakt batteri alarm mens strmnivet passerer:",IDC_ALARM2, + "Knapp",BS_AUTOCHECKBOX | WS_TABSTOP, 15, 131, 180, 15 + LTEXT "Ukjent",IDC_ALARMVALUE2, 209, 133, 33, 10 + LTEXT "0%",-1, 28, 154, 15, 10 + CONTROL "Slider1",IDC_ALARMBAR2,"msctls_trackbar32",TBS_HORZ | + TBS_AUTOTICKS | WS_TABSTOP, 42, 158, 170, 15 + LTEXT "100%",-1, 214, 154, 25, 10 + PUSHBUTTON "Alar&m handling...",-1, 17, 183, 70, 14, WS_DISABLED + LTEXT "Handling:",-1, 95, 185, 50, 10 + LTEXT "Ukjent",IDC_ALARMMSG2, 154, 185, 84, 10 + LTEXT "Handling:",-1, 95, 198, 45, 10 + LTEXT "Ukjent",IDC_ALARMAKTION2, 154, 198, 84, 10 + LTEXT "Kjr program:",-1, 95, 211, 50, 10 + LTEXT "Ukjent",IDC_ALARMPROG2, 154, 211, 84, 10 +END + +IDD_PROPPAGEADVANCED DIALOGEX DISCARDABLE 0, 0, 252, 237 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_ACDC,IDI_ACDC, 7, 7, 20, 20 + LTEXT "Velg strm-sparing innstillinger som du vil bruke.",-1, 37, 6, 207, 20 + GROUPBOX "Valg",-1, 6, 30, 240, 65 + CONTROL "Allti&d vis ikon p oppgavelinjen",IDC_SYSTRAYBATTERYMETER,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP, 17, 43, 220, 10 + CONTROL "&Spr etter passord ved gjenopptakelse etter dvalemodus",IDC_PASSWORDLOGON,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP, 17, 60, 220, 10 + CONTROL "&Dim vis nr pcen kjrer p batteri strm",IDC_VIDEODIMDISPLAY,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP, 17, 78, 220, 10 + GROUPBOX "Strmknapper",-1, 6, 101, 240, 127 + LTEXT "&When I close the lid of my portable computer:", IDC_SLIDCLOSE, 15, 115, 222, 10 + COMBOBOX IDC_LIDCLOSE, 15, 127, 220, 90, CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP + LTEXT "Wh&en I press the power button on my computer:", IDC_SPOWERBUTTON, 15, 153, 222, 10 + COMBOBOX IDC_POWERBUTTON, 15, 165, 220, 90, CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP + LTEXT "Whe&n I press the sleep button on my computer:", IDC_SSLEEPBUTTON, 15, 191, 222, 10 + COMBOBOX IDC_SLEEPBUTTON, 15, 203, 220, 90, CBS_DROPDOWNLIST | CBS_SORT | + WS_VSCROLL | WS_TABSTOP +END + +IDD_PROPPAGEHIBERNATE DIALOGEX DISCARDABLE 0, 0, 252, 237 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Dvalemodus" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_HIBERNATE,IDI_HIBERNATE, 7, 7, 20, 20 + LTEXT "Nr din datamaskin gr i dvalemodus, lagres all data i minnet til din harddisk ogs blir pcen sltt av. Nr din datamaskin vkner fra dvalemodus, gjennoppretter den kten til forrige stand. ", + -1, 37, 6, 210, 35 + GROUPBOX "Dvalemodus",-1, 6, 41, 240, 32 + CONTROL "Aktiver &dvalemodus",IDC_HIBERNATEFILE,"Button",BS_AUTOCHECKBOX | + WS_TABSTOP, 17, 55, 210, 10 + GROUPBOX "Ledig plass for dvalemodus",-1, 6, 80, 240, 76 + LTEXT "Ledig plass:",-1, 15, 95, 140, 10 + LTEXT "Ukjent",IDC_FREESPACE, 160, 95, 80, 10 + LTEXT "Ledig plass som trengs for dvalemodus:",-1, 15, 115, 140, 10 + LTEXT "Ukjent",IDC_SPACEFORHIBERNATEFILE, 160, 115, 80, 10 + LTEXT "Du trenger ledig plass fr din datamaskin kan g i dvalemodus. ",IDC_TOLESSFREESPACE, 15, 135, 224, 20 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME_1 "Strmvalg" + IDS_CPLDESCRIPTION_1 "Konfigurere energi-sparing innstillinger for din datamaskin." + IDS_PROCENT "%i%%" + IDS_SOUND "Lyd" + IDS_TEXT "Tekst" + IDS_CONFIG1 "Innstillinger for %1 strmplan" + IDS_CONFIG2 "Avanserte innstillinger for %1" + + IDS_SIZEBYTS "%i byte" + IDS_SIZEMB "%i MB" + + IDS_NOACTION "Ikke gjr noe" + + IDS_PowerActionNone1 "Ingen handling" + IDS_PowerActionUnknown "Ukjent" + IDS_PowerActionSleep "Ventemodus" + IDS_PowerActionHibernate "Dvalemodus" + IDS_PowerActionShutdown "Sl av" + IDS_PowerActionRestart "Start p nytt" + IDS_PowerActionShutdownOff "Sl av og sl av strmmen" + IDS_PowerActionWarmEject "Spr meg hva som skal gjres" + IDS_PowerActionNone2 "Ingen" + + IDS_TIMEOUT1 "Etter 1 min" + IDS_TIMEOUT2 "Etter 2 min" + IDS_TIMEOUT3 "Etter 3 min" + IDS_TIMEOUT4 "Etter 5 min" + IDS_TIMEOUT5 "Etter 10 min" + IDS_TIMEOUT6 "Etter 15 min" + IDS_TIMEOUT7 "Etter 20 min" + IDS_TIMEOUT8 "Etter 25 min" + IDS_TIMEOUT9 "Etter 30 min" + IDS_TIMEOUT10 "Etter 45 min" + IDS_TIMEOUT11 "Etter 1 time" + IDS_TIMEOUT12 "Etter 2 timer" + IDS_TIMEOUT13 "Etter 3 timer" + IDS_TIMEOUT14 "Etter 4 timer" + IDS_TIMEOUT15 "Etter 5 timer" + IDS_TIMEOUT16 "Aldri" + + IDS_DEL_SCHEME "Er du sikker p at du vil slette strmplanen?" + IDS_DEL_SCHEME_TITLE "Slett planen" +END + + diff --git a/reactos/dll/cpl/powercfg/rsrc.rc b/reactos/dll/cpl/powercfg/rsrc.rc index 576d732a74d..dcc6fb1377a 100644 --- a/reactos/dll/cpl/powercfg/rsrc.rc +++ b/reactos/dll/cpl/powercfg/rsrc.rc @@ -11,6 +11,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/sysdm/lang/no-NO.rc b/reactos/dll/cpl/sysdm/lang/no-NO.rc new file mode 100644 index 00000000000..b28e44c1db4 --- /dev/null +++ b/reactos/dll/cpl/sysdm/lang/no-NO.rc @@ -0,0 +1,275 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGEGENERAL DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + CONTROL "", IDC_ROSIMG, "Static", SS_OWNERDRAW, 4, 5, 248, 111 + LTEXT "System:", IDC_STATIC, 4, 132, 32, 9 + LTEXT REACTOS_STR_PRODUCT_NAME, IDC_STATIC, 10, 144, 116, 9 + LTEXT "Versjon ", IDC_STATIC, 10, 153, 25, 9 + LTEXT REACTOS_STR_PRODUCT_VERSION, IDC_STATIC, 35, 153, 91, 9 + LTEXT REACTOS_STR_PRODUCT_BUILD, IDC_STATIC, 10, 162, 60, 9 + LTEXT "Maskin:", IDC_STATIC, 124, 132, 34, 9 + LTEXT "", IDC_MACHINELINE1, 130, 144, 118, 9 + LTEXT "", IDC_MACHINELINE2, 130, 153, 118, 9 + LTEXT "", IDC_MACHINELINE3, 130, 162, 118, 9 + LTEXT "", IDC_MACHINELINE4, 130, 171, 118, 9 + LTEXT "", IDC_MACHINELINE5, 130, 180, 118, 9 + CONTROL "Besk ReactOS Hjemmesiden", IDC_ROSHOMEPAGE_LINK, "SysLink", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 20, 200, 140, 8 + PUSHBUTTON "Vis &lisensen...", IDC_LICENCE, 170, 199, 78, 13 +END + + +IDD_PROPPAGEHARDWARE DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Maskinvare" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Enhetsbehandler", IDC_STATIC, 6, 7, 244, 61 + ICON IDI_DEVMGR, IDC_STATIC, 12, 18, 23, 21, SS_ICON + LTEXT "Enhetsbehandler viser alt av maskinvare enheter som er innstallert p din datamaskin. Bruk enhetsbehandleren for endre egenskapene for alle enhetene.", IDC_STATIC, 42, 18, 204, 24 + PUSHBUTTON "&Enhetsbehandler...", IDC_HARDWARE_DEVICE_MANAGER, 154, 48, 90, 15 + + GROUPBOX "Maskinvare veiviser", IDC_STATIC, 6, 79, 244, 61 + ICON IDI_DEVMGR, IDC_STATIC, 12, 90, 23, 21, SS_ICON + LTEXT "Maskinvare veiviseren hjelper deg installere, avinnstallere, reparere, koble fra, utlse, og konfigurere din maskinvare.", IDC_STATIC, 42, 90, 204, 24 + PUSHBUTTON "&Maskinvare veiviser...", IDC_HARDWARE_WIZARD, 154, 120, 90, 15 + + GROUPBOX "Maskinvare profiler", IDC_STATIC, 6, 149, 244, 61 + ICON IDI_HARDPROF, IDC_STATIC, 12, 160, 23, 21, SS_ICON + LTEXT "Maskinvare profiler hjelper deg sette opp og lagre forskjellige maskinvare konfigurasjon.", IDC_STATIC, 42, 160, 204, 24 + PUSHBUTTON "Maskin&vare profiler...", IDC_HARDWARE_PROFILE, 154, 190, 90, 15 +END + + +IDD_PROPPAGEADVANCED DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Du m vre logget p som administrator for kunne endre de fleste av disse innstillingene.", IDC_STATIC, 12, 5, 236, 8 + GROUPBOX "Ytelse", IDC_STATIC, 6, 18, 244, 50 + LTEXT "Visuelle effekter, prosesorplanlegging, minnebruk og virtuelt minne.", IDC_STATIC, 16, 29, 228, 17 + PUSHBUTTON "Innstillinger", IDC_PERFOR, 194, 48, 50, 15 + + GROUPBOX "Brukerprofiler", IDC_STATIC, 6,75,244,48 + LTEXT "Skrivebordinnstillinger som er relatert til din plogging", IDC_STATIC, 16, 88, 228, 20 + PUSHBUTTON "Innstillinger", IDC_USERPROFILE, 194, 103, 50, 15 + + GROUPBOX "Oppstart og gjenoppretting", IDC_STATIC, 6, 131, 244, 52 + LTEXT "Oppstart og gjenoppretting forteller hvordan man kan f startet og hva som lagde problemet med din datamaskin.", IDC_STATIC, 16, 144, 228, 19 + PUSHBUTTON "Innstillinger", IDC_STAREC, 194, 162, 50, 15 + + PUSHBUTTON "Miljvariabler", IDC_ENVVAR, 84, 192, 80, 15 + PUSHBUTTON "Feil rapporteringer", IDC_ERRORREPORT, 170, 192, 80, 15 +END + + +IDD_HARDWAREPROFILES DIALOGEX 6, 18, 254, 234 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Maskinvare profiler" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_HARDPROF, IDC_STATIC, 8, 11, 18, 20, SS_ICON + LTEXT "Du kan sette opp maskinvareprofiler for forskjellige maskinvarekonfigurasjoner. Ved oppstart, kan du velge hvilken profil du vil bruke.", IDC_STATIC, 46, 11, 188, 25 + LTEXT "Tilgjengelige maskinvareprofiler:", IDC_STATIC, 8, 41, 120, 8 + LISTBOX IDC_HRDPROFLSTBOX, 8, 52, 215, 54, LBS_NOTIFY + PUSHBUTTON "", IDC_HRDPROFUP, 232, 59, 15, 14, BS_ICON + PUSHBUTTON "", IDC_HRDPROFDWN, 232, 79, 15, 14, BS_ICON + PUSHBUTTON "&Egenskaper", IDC_HRDPROFPROP, 8, 106, 50, 14 + PUSHBUTTON "&Kopier", IDC_HRDPROFCOPY, 63, 106, 50, 14 + PUSHBUTTON "&Endre navn", IDC_HRDPROFRENAME, 118, 106, 50, 14 + PUSHBUTTON "&Slett", IDC_HRDPROFDEL, 173, 106, 50, 14 + + GROUPBOX "Valg av maskinvareprofil", IDC_STATIC, 7, 130, 240, 75 + LTEXT "Nr ReactOS starter:", IDC_STATIC, 14, 142, 210, 8 + AUTORADIOBUTTON "&Vent til jeg velger en maskinvareprofil", IDC_HRDPROFWAIT, 14, 158, 133, 8, WS_GROUP + AUTORADIOBUTTON "&Velg frste profil i listen ovenfor hvis jeg ikke velger profil innen", IDC_HRDPROFSELECT, 14, 173, 190, 8 + LTEXT "sekunder", IDC_STATIC, 65, 187, 35, 8 + EDITTEXT IDC_HRDPROFEDIT, 25, 185, 35, 12 + CONTROL "", IDC_HRDPROFUPDWN, "msctls_updown32", UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 25, 185, 7, 10 + + DEFPUSHBUTTON "OK", IDOK, 143, 213, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 197, 213, 50, 14 +END + + +IDD_RENAMEPROFILE DIALOGEX 12, 26, 256, 52 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Endre Profil navn" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Fra:", IDC_STATIC, 5, 10, 20, 8 + LTEXT "", IDC_RENPROFEDITFROM, 30, 10, 160, 10 + LTEXT "Til:", IDC_STATIC, 5, 30, 20, 8 + EDITTEXT IDC_RENPROFEDITTO, 30, 30, 160, 12 + + DEFPUSHBUTTON "OK", IDOK, 199, 9, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 199, 30, 50, 14 +END + + +IDD_USERPROFILE DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | DS_SETFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Brukerprofil" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_USERPROF, IDC_STATIC, 6, 11, 16, 16, SS_ICON + LTEXT "Brukerprofilene lagrer innstillinger for skrivebord og annen informasjon tilknyttet brukerkontoen din. Du kan opprette seperate profiler for hver datamaskin du bruker, eller du kan velge en sentral profil som er den samme p alle maskinene.", + IDC_STATIC, 40, 11, 211, 35 + LTEXT "Profiler som er lagret p denne maskinen:", IDC_STATIC, 16, 51, 204, 9 + CONTROL "", IDC_USERPROFILE_LIST, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | WS_BORDER | WS_TABSTOP, + 6, 66, 244, 85, WS_EX_CLIENTEDGE + PUSHBUTTON "Endre type", IDC_USERPROFILE_CHANGE, 90, 156, 50, 13 + PUSHBUTTON "Slett", IDC_USERPROFILE_DELETE, 145, 156, 50, 13 + PUSHBUTTON "Kopier til", IDC_USERPROFILE_COPY, 200, 156, 50, 13 + + CONTROL "pne Brukerkontoer i Kontrollpanel for opprette nye brukerkontoer.", IDC_USERACCOUNT_LINK, "SysLink", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 175, 245, 18 + + DEFPUSHBUTTON "OK", IDOK, 134, 200, 54, 13 + PUSHBUTTON "Avbryt", IDCANCEL, 196, 200, 54, 13 +END + + +IDD_STARTUPRECOVERY DIALOGEX 6, 18, 252, 280 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Oppstart og gjenoppretting" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Systemoppstart", IDC_STATIC, 7, 12, 238, 95 + LTEXT "Standard operativ&system:", IDC_STATIC, 14, 26, 100, 8 + COMBOBOX IDC_STRECOSCOMBO, 14, 37, 224, 46, CBS_DROPDOWNLIST + AUTOCHECKBOX "&Tiden operativsystemlisten skal vises:", IDC_STRECLIST, 14, 56, 160, 8 + EDITTEXT IDC_STRRECLISTEDIT, 185, 54, 30, 12 + CONTROL "", IDC_STRRECLISTUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13 + LTEXT "sek.", IDC_STATIC, 223, 56, 18, 8 + AUTOCHECKBOX "Tiden &gjenopprettingsalternativene skal vises:", IDC_STRRECREC, 14, 70, 170, 8 + EDITTEXT IDC_STRRECRECEDIT, 185, 68, 30, 12 + CONTROL "", IDC_STRRECRECUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13 + LTEXT "sek.", IDC_STATIC, 223, 70, 18, 8 + LTEXT "Klikk p rediger for redigere oppstartsalternativfilen.", IDC_STATIC, 14, 89, 187, 8 + PUSHBUTTON "&Rediger", IDC_STRRECEDIT, 188, 87, 50, 14 + + GROUPBOX "Systemfeil", IDC_STATIC, 7, 111, 238, 140 + AUTOCHECKBOX "&Skriv en heldelse til systemloggen", IDC_STRRECWRITEEVENT, 14, 124, 148, 10 + AUTOCHECKBOX "Se&nd et administrativt varsel", IDC_STRRECSENDALERT, 14, 138, 148, 10 + AUTOCHECKBOX "Start p nytt &automatisk", IDC_STRRECRESTART, 14, 152, 145, 10 + + GROUPBOX "Skriv feilskingsinformasjon", IDC_STATIC, 12, 167, 227, 76 + COMBOBOX IDC_STRRECDEBUGCOMBO, 17, 182, 151, 49, CBS_DROPDOWNLIST + LTEXT "Dump &fil:", IDC_STATIC, 17, 202, 150, 8 + EDITTEXT IDC_STRRECDUMPFILE, 17, 210, 153, 12 + AUTOCHECKBOX "&Overskriv eksisterende filer", IDC_STRRECOVERWRITE, 17, 228, 125, 10 + + DEFPUSHBUTTON "OK", IDOK, 141, 259, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 195, 259, 50, 14 +END + + +IDD_VIRTMEM DIALOGEX 6, 6, 223, 248 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Virtuell minne" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Stasjon [Volumnavn]", IDC_STATIC, 12, 5, 96, 9 + LTEXT "Sidevekslingsfilstrrelse (MB)", IDC_STATIC, 115, 5, 96, 9 + LISTBOX IDC_PAGEFILELIST, 10, 16, 204, 52, LBS_NOTIFY | LBS_USETABSTOPS + GROUPBOX "Sidevekslingsfilstrrelse for valgte enhet", IDC_DRIVEGROUP, 10, 70, 204, 104 + LTEXT "Stasjon:", IDC_STATIC, 20, 80, 20, 8 + LTEXT "", IDC_DRIVE, 88, 81, 100, 9 + LTEXT "Tilgjengelig ledig plass:", IDC_STATIC, 20, 92, 56, 9 + LTEXT "", IDC_SPACEAVAIL, 88, 92, 104, 9 + LTEXT "&Startstrrelse (MB):", -1, 22, 118, 75, 9 + LTEXT "Ma&ksimalt strrelse (MB):", -1, 22, 131, 75, 9 + AUTORADIOBUTTON "&Tilpass strrelse", IDC_CUSTOM, 20, 105, 54, 9, WS_GROUP + AUTORADIOBUTTON "S&ystem styrt strrelse", IDC_SYSMANSIZE, 20, 145, 88, 9 + AUTORADIOBUTTON "&Ingen sidevekslingsfil", IDC_NOPAGEFILE, 20, 158, 78,9 + EDITTEXT IDC_INITIALSIZE, 100, 114, 44, 13, NOT WS_BORDER, WS_EX_CLIENTEDGE + EDITTEXT IDC_MAXSIZE, 100, 129, 44, 13, NOT WS_BORDER, WS_EX_CLIENTEDGE + PUSHBUTTON "Still", IDC_SET, 158, 155, 50, 13 + + GROUPBOX "Total strrelse p sidevekslingsfil for alle enheter", IDC_TOTALGROUP, 10, 177, 204, 46 + LTEXT "Minste tilatte:", IDC_STATIC, 18, 188, 58, 9 + LTEXT "", IDC_MINIMUM, 88, 188, 100, 9 + LTEXT "Anbefalt:", IDC_STATIC, 18, 199, 52, 9 + LTEXT "", IDC_RECOMMENDED, 88, 199, 100, 9 + LTEXT "Tildelt n:", IDC_STATIC, 18, 210, 66, 9 + LTEXT "", IDC_CURRENT, 88, 210, 100, 9 + + DEFPUSHBUTTON "OK", IDOK, 114, 232, 48, 13 + PUSHBUTTON "Avbryt", IDCANCEL, 168, 232, 48, 13 +END + + +IDD_ENVIRONMENT_VARIABLES DIALOGEX 6, 18, 252, 245 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Miljvariabel" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Brukervariabeler", IDC_STATIC, 7, 12, 238, 100 + + CONTROL "", IDC_USER_VARIABLE_LIST, "SysListView32", + LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOSORTHEADER | + WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 14, 25, 224, 58, WS_EX_CLIENTEDGE + PUSHBUTTON "&Ny...", IDC_USER_VARIABLE_NEW, 80, 90, 50, 14 + PUSHBUTTON "&Rediger...", IDC_USER_VARIABLE_EDIT, 134, 90, 50, 14 + PUSHBUTTON "&Slett", IDC_USER_VARIABLE_DELETE, 188, 90, 50, 14 + GROUPBOX "System variabeler", IDC_STATIC, 7, 116, 238, 100 + + CONTROL "", IDC_SYSTEM_VARIABLE_LIST, "SysListView32", + LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOSORTHEADER | + WS_VSCROLL | WS_HSCROLL | WS_TABSTOP, 14, 129, 224, 58, WS_EX_CLIENTEDGE + PUSHBUTTON "N&y...", IDC_SYSTEM_VARIABLE_NEW, 80, 194, 50, 14 + PUSHBUTTON "Re&diger...", IDC_SYSTEM_VARIABLE_EDIT, 134, 194, 50, 14 + PUSHBUTTON "S&lett", IDC_SYSTEM_VARIABLE_DELETE, 188, 194, 50, 14 + DEFPUSHBUTTON "OK", IDOK, 141, 224, 50, 14, WS_GROUP + PUSHBUTTON "Avbryt", IDCANCEL, 195, 224, 50, 14 +END + + +IDD_EDIT_VARIABLE DIALOGEX 10, 15, 227, 71 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Rediger variabel" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Variabel &Navn:", IDC_STATIC, 7, 14, 50, 8 + EDITTEXT IDC_VARIABLE_NAME, 75, 12, 145, 12, ES_AUTOHSCROLL + LTEXT "Variabel &Verdi:", IDC_STATIC, 7, 32, 50, 8 + EDITTEXT IDC_VARIABLE_VALUE, 75, 30, 145, 12, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", IDOK, 116, 50, 50, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 170, 50, 50, 14 +END + + +IDD_LICENCE DIALOGEX 6, 5, 267, 159 +CAPTION "Lisens" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +STYLE DS_SHELLFONT | WS_BORDER | WS_THICKFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +BEGIN + EDITTEXT IDC_LICENCEEDIT, 6, 3, 255, 131, WS_VSCROLL | ES_READONLY | ES_MULTILINE + DEFPUSHBUTTON "OK", IDOK, 106, 142, 54, 13 +END + + +STRINGTABLE DISCARDABLE +BEGIN + IDS_CPLSYSTEMNAME "System" + IDS_CPLSYSTEMDESCRIPTION "See information about your computer and change various system and hardware settings." + IDS_MEGABYTE "MB Systemminne" + IDS_GIGABYTE "GB Systemminne" + IDS_TERABYTE "TB Systemminne" + IDS_PETABYTE "PB Systemminne" + IDS_VARIABLE "Variable" + IDS_VALUE "Verdi" + IDS_NO_DUMP "(Ingen)" + IDS_MINI_DUMP "Minidump(64KB)" + IDS_KERNEL_DUMP "Kernel dump" + IDS_FULL_DUMP "Fullstendig dump" + IDS_USERPROFILE_NAME "Navn" + IDS_USERPROFILE_SIZE "Strrelse" + IDS_USERPROFILE_TYPE "Type" + IDS_USERPROFILE_STATUS "Status" + IDS_USERPROFILE_MODIFIED "Modifisert" +END diff --git a/reactos/dll/cpl/sysdm/rsrc.rc b/reactos/dll/cpl/sysdm/rsrc.rc index ff4d00714bd..f17e7960924 100644 --- a/reactos/dll/cpl/sysdm/rsrc.rc +++ b/reactos/dll/cpl/sysdm/rsrc.rc @@ -10,6 +10,7 @@ #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/cpl/timedate/lang/no-NO.rc b/reactos/dll/cpl/timedate/lang/no-NO.rc new file mode 100644 index 00000000000..958f168f50f --- /dev/null +++ b/reactos/dll/cpl/timedate/lang/no-NO.rc @@ -0,0 +1,68 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_DATETIMEPAGE DIALOGEX 0, 0, 252, 146 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Dato && Tid" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "&Dato", -1, 4, 2, 122, 125 + COMBOBOX IDC_MONTHCB, 11, 17, 50, 120, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + EDITTEXT IDC_YEARTEXT,65, 17, 55, 12, ES_LEFT | WS_GROUP | ES_READONLY + CONTROL "", IDC_YEAR, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_NOTHOUSANDS | + UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | + WS_BORDER | WS_GROUP, 120, 17, 50, 12 + + CONTROL "", IDC_MONTHCALENDAR, "MonthCalWnd", + WS_CHILD | WS_VISIBLE | WS_TABSTOP, + 11, 37, 108, 80, WS_EX_CLIENTEDGE + GROUPBOX "&Tid", -1, 132, 2, 113, 125 + CONTROL "", IDC_TIMEPICKER, "SysDateTimePick32", + DTS_TIMEFORMAT | WS_CHILD | WS_VISIBLE | WS_TABSTOP, + 144, 105, 90, 12 + LTEXT "", IDC_TIMEZONE, 6, 132, 242, 11 + CONTROL "", IDC_CLOCKWND, "ClockWndClass", + WS_CHILD | WS_VISIBLE, 138, 12, 102, 89 +END + + +IDD_TIMEZONEPAGE DIALOGEX 0, 0, 252, 146 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Tidssone" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + COMBOBOX IDC_TIMEZONELIST, 5, 4, 241, 136, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP + CONTROL "", IDC_WORLD_BACKGROUND, "Static", SS_OWNERDRAW, 5, 20, 240, 110, WS_EX_STATICEDGE + AUTOCHECKBOX "Still klokken automatisk for &sommertid", + IDC_AUTODAYLIGHT, 6, 132, 242, 11, WS_VISIBLE | WS_GROUP | WS_TABSTOP +END + + +IDD_INETTIMEPAGE DIALOGEX 0, 0, 252, 146 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Internett tid" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + COMBOBOX IDC_SERVERLIST, 65, 22, 117, 136, CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "Automatisk sykroniser klokken med internett tid serveren", IDC_AUTOSYNC, + 11 ,7, 241, 10, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP + LTEXT "Server:", IDC_SERVERTEXT, 34, 22, 28, 13 + PUSHBUTTON "Oppdater n", IDC_UPDATEBUTTON, 187, 22, 49, 14 + LTEXT "", IDC_SUCSYNC, 12, 54, 214, 23 + LTEXT "", IDC_NEXTSYNC, 12, 96, 137, 12 + LTEXT "Synkronisering kan bare brukes n din datamaskin er koblet til internett.", -1, 12, 114, 225, 25 +END + + +STRINGTABLE +BEGIN + IDS_CPLNAME "Dato/Tid" + IDS_CPLDESCRIPTION "Endre dato, tid og tidsone informajon." + IDS_TIMEZONETEXT "Gjeldende tidssone: %s" + IDS_TIMEZONEINVALID "Ugyldig" + IDS_TIMEZONEUNKNOWN "Ukjent" + IDS_INETTIMESUCSYNC "Tiden har blitt velykket synkronisert med %s p %s med %s" + IDS_INETTIMENEXTSYNC "Neste synkonisering: %s med %s" + IDS_INETTIMESYNCING "Vennligst vent mens ReactOS sykroniserer tiden med %s" + IDS_INETTIMEERROR "En feil har oppstatt mens ReactOS ble sykronisert med %s" +END diff --git a/reactos/dll/cpl/timedate/rsrc.rc b/reactos/dll/cpl/timedate/rsrc.rc index edda9ad0c49..22644e8bb7f 100644 --- a/reactos/dll/cpl/timedate/rsrc.rc +++ b/reactos/dll/cpl/timedate/rsrc.rc @@ -14,6 +14,7 @@ #include "lang/it-IT.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/devmgr/devmgr.rc b/reactos/dll/win32/devmgr/devmgr.rc index a8f054fb24c..7cb64ebddb9 100644 --- a/reactos/dll/win32/devmgr/devmgr.rc +++ b/reactos/dll/win32/devmgr/devmgr.rc @@ -21,6 +21,7 @@ IDI_DEVMGR ICON "resources/devmgr.ico" #include "lang/hu-HU.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/win32/devmgr/lang/no-NO.rc b/reactos/dll/win32/devmgr/lang/no-NO.rc new file mode 100644 index 00000000000..899ea070755 --- /dev/null +++ b/reactos/dll/win32/devmgr/lang/no-NO.rc @@ -0,0 +1,171 @@ +// Norwegain language resource file (Sebastian Gasiorek, 2005-11-13) + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_NAME "Navn" + IDS_TYPE "Type" + IDS_MANUFACTURER "Fabrikant: %1" + IDS_LOCATION "Plassering: %1" + IDS_STATUS "Enhetsstatus: %1" + IDS_UNKNOWN "Ukjent" + IDS_LOCATIONSTR "Plassering %1!u! (%2)" + IDS_DEVCODE " (Kode %1!u!)" + IDS_DEVCODE2 " (Kode %2!u!)" + IDS_ENABLEDEVICE "Bruk denne enheten (aktiver)" + IDS_DISABLEDEVICE "Ikke bruk denne enheten (deaktiver)" + IDS_UNKNOWNDEVICE "Ukjent enhet" + IDS_NODRIVERLOADED "Ingen drivere er installert for denne enheten." + IDS_DEVONPARENT "p %1" + IDS_TROUBLESHOOTDEV "&Feilsking..." + IDS_ENABLEDEV "A&ktiver enhet" + IDS_REINSTALLDRV "Re&install Driver" + IDS_PROPERTIES "E&genskaper" + IDS_UPDATEDRV "O&ppdater driveren..." + IDS_REBOOT "Restart &datamaskinen..." + IDS_NOTAVAILABLE "Ikke tilgjengelig" + IDS_NOTDIGITALLYSIGNED "ikke digital signert" + IDS_NODRIVERS " Ingen driver filer trengs eller har blitt lastet for denne enheten." +END + +/* error messages, source: http://www.z123.org/techsupport/medm.htm */ +STRINGTABLE +BEGIN + IDS_DEV_NO_PROBLEM "Denne enheten fungerer som den skal." + IDS_DEV_NOT_CONFIGURED "Denne enheten er ikke riktig konfigurert." + IDS_DEV_DEVLOADER_FAILED "ReactOS could not load the driver for this device because the computer is reporting two $1 bus types." + IDS_DEV_DEVLOADER_FAILED2 "The $1 device loader(s) for this device could not load the device driver." + IDS_DEV_OUT_OF_MEMORY "The driver for this device may be bad, or your system may be running low on memory or other resources." + IDS_DEV_ENTRY_IS_WRONG_TYPE "This device is not working properly because one of its drivers may be bad, or your registry may be bad." + IDS_DEV_LACKED_ARBITRATOR "The driver for this device requested a resource that ReactOS does not know how to handle." + IDS_DEV_BOOT_CONFIG_CONFLICT "Another device is using the resources this device needs." + IDS_DEV_FAILED_FILTER "The drivers for this device need to be reinstalled." + IDS_DEV_DEVLOADER_NOT_FOUND "This device is not working properly because ReactOS cannot load the file $1 that loads the drivers for the device." + IDS_DEV_DEVLOADER_NOT_FOUND2 "This device is not working properly because the file $1 that loads the drivers for this device is bad." + IDS_DEV_DEVLOADER_NOT_FOUND3 "Device failure: Try changing the driver for this device. If that doesn\'t work, see your hardware documentation." + IDS_DEV_INVALID_DATA "This device is not working properly because the BIOS in your computer is reporting the resources for the device incorrectly." + IDS_DEV_INVALID_DATA2 "This device is not working properly because the BIOS in the device is reporting the resources for the device incorrectly. " + IDS_DEV_FAILED_START "This device is either not present, not working properly, or does not have all the drivers installed." + IDS_DEV_LIAR "ReactOS stopped responding while attempting to start this device, and therefore will never attempt to start this device again." + IDS_DEV_NORMAL_CONFLICT "This device cannot find any free $1 resources to use." + IDS_DEV_NOT_VERIFIED "This device is either not present, not working properly, or does not have all the drivers installed." + IDS_DEV_NEED_RESTART "This device cannot work properly until you restart your computer." + IDS_DEV_REENUMERATION "This device is causing a resource conflict." + IDS_DEV_PARTIAL_LOG_CONF "ReactOS could not identify all the resources this device uses." + IDS_DEV_UNKNOWN_RESOURCE "The driver information file $1 is telling this child device to use a resource that the parent device does not have or recognize." + IDS_DEV_REINSTALL "The drivers for this device need to be reinstalled." + IDS_DEV_REGISTRY "Det kan vre noe feil med registeret." + IDS_DEV_WILL_BE_REMOVED "ReactOS fjerner denne enheten." + IDS_DEV_DISABLED "Denne enheten er ikke startet." + IDS_DEV_DISABLED2 "Denne enheten er deaktivert." + IDS_DEV_DEVLOADER_NOT_READY "The loaders for this device cannot load the required drivers." + IDS_DEV_DEVLOADER_NOT_READY2 "This display adapter is functioning correctly." + IDS_DEV_DEVLOADER_NOT_READY3 "The loaders for this device cannot load the required drivers." + IDS_DEV_DEVICE_NOT_THERE "This device is either not present, not working properly, or does not have all the drivers installed." + IDS_DEV_MOVED "ReactOS is in the process of setting up this device." + IDS_DEV_TOO_EARLY "ReactOS is in the process of setting up this device." + IDS_DEV_NO_VALID_LOG_CONF "ReactOS can\'t specify the resources for this device." + IDS_DEV_FAILED_INSTALL "The drivers for this device are not installed." + IDS_DEV_HARDWARE_DISABLED "This device is disabled because the BIOS for the device did not give it any resources." + IDS_DEV_CANT_SHARE_IRQ "This device is using an Interrupt Request (IRQ) resource that is in use by another device and cannot be shared.\nYou must change the conflicting setting or remove the real-mode driver causing the conflict." + IDS_DEV_FAILED_ADD "This device is not working properly because $1 is not working properly." + IDS_DEV_DISABLED_SERVICE "ReactOS cannot install the drivers for this device because it cannot access the drive or network location that has the setup files on it." + IDS_DEV_TRANSLATION_FAILED "This device isn\'t responding to its driver." + IDS_DEV_NO_SOFTCONFIG "ReactOS cannot determine the settings for this device. Consult the documentation that came with this device and use the Resource tab to set the configuration." + IDS_DEV_BIOS_TABLE "Your computer\'s system firmware does not include enough information to properly configure and use this device. \nTo use this device, contact your computer manufacturer to obtain a firmware or BIOS update." + IDS_DEV_IRQ_TRANSLATION_FAILED "This device is requesting a PCI interrupt but is configured for an ISA interrupt (or vice versa). \nPlease use the computer\'s system setup program to reconfigure the interrupt for this device." + IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS cannot initialize the device driver for this hardware." + IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS cannot load the device driver for this hardware because a previous instance of the device driver is still in memory." + IDS_DEV_DRIVER_FAILED_LOAD "ReactOS cannot load the device driver for this hardware. The driver may be corrupted or missing." + IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS cannot access this hardware because its service key information in the registry is missing or recorded incorrectly." + IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS successfully loaded the device driver for this hardware but cannot find the hardware device." + IDS_DEV_DUPLICATE_DEVICE "ReactOS cannot load the device driver for this hardware because there is a duplicate device already running in the system." + IDS_DEV_FAILED_POST_START "ReactOS has stopped this device because it has reported problems." + IDS_DEV_HALTED "An application or service has shut down this hardware device." + IDS_DEV_PHANTOM "Currently, this hardware device is not connected to the computer." + IDS_DEV_SYSTEM_SHUTDOWN "ReactOS cannot gain access to this hardware device because the operating system is in the process of shutting down." + IDS_DEV_HELD_FOR_EJECT "ReactOS cannot use this hardware device because it has been prepared for safe removal, but it has not been removed from the computer" + IDS_DEV_DRIVER_BLOCKED "The software for this device has been blocked from starting because it is known to have problems with ReactOS. Contact the hardware vendor for a new driver." + IDS_DEV_REGISTRY_TOO_LARGE "ReactOS cannot start new hardware devices because the system hive is too large (exceeds the Registry Size Limit)." + IDS_DEV_SETPROPERTIES_FAILED "ReactOS wasn\'t able to change the settings of this device." +END + +IDD_HARDWARE DIALOGEX DISCARDABLE 0, 0, 300, 400 +STYLE DS_CONTROL | WS_CHILD | WS_VISIBLE | WS_CAPTION | DS_SHELLFONT +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Enheter:",IDC_DEVICES,7,6,196,10 + CONTROL "",IDC_LV_DEVICES,"SysListView32",LVS_REPORT | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | + LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP,7,16,196,50 + GROUPBOX "Enhets egenskaper",IDC_PROPERTIESGROUP,7,76,196,105 + LTEXT "",IDC_MANUFACTURER,14,88,183,10,SS_ENDELLIPSIS + LTEXT "",IDC_LOCATION,14,100,183,10,SS_ENDELLIPSIS + LTEXT "",IDC_STATUS,14,112,183,30 + PUSHBUTTON "&Feilsking...",IDC_TROUBLESHOOT,85,140,54,14, + BS_PUSHBUTTON | WS_CHILD | WS_DISABLED | WS_TABSTOP + PUSHBUTTON "E&genskaper",IDC_PROPERTIES,146,140,50,14 +END + +IDD_DEVICEGENERAL DIALOGEX DISCARDABLE 0, 0, 252, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_DEVICON, 7, 7, 20, 20 + LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX + LTEXT "Enhetstype:", -1, 37, 39, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DEVTYPE, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Fabrikant:", -1, 37, 53, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DEVMANUFACTURER, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Plassering:", -1, 37, 67, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DEVLOCATION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + GROUPBOX "Enhetsstatus", IDC_DEVSTATUSGROUP, 7, 83, 238, 100 + EDITTEXT IDC_DEVSTATUS, 14, 96, 224, 61, NOT WS_TABSTOP | ES_MULTILINE | ES_AUTOVSCROLL | ES_READONLY | WS_VSCROLL + PUSHBUTTON "&Feilsking...", IDC_DEVPROBLEM, 148, 163, 90, 15 + LTEXT "&Enhets bruk:", IDC_DEVUSAGELABEL, 7, 188, 222, 8, WS_DISABLED + COMBOBOX IDC_DEVUSAGE, 7, 198, 239, 40, CBS_DROPDOWNLIST | WS_VSCROLL | WS_DISABLED +END + +IDD_DEVICEDRIVER DIALOGEX DISCARDABLE 0, 0, 252, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Driver" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_DEVICON, 7, 7, 20, 20 + LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX + LTEXT "Driver produsent:", -1, 37, 39, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DRVPROVIDER, 100, 39, 146, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Driver dato:", -1, 37, 53, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DRVDATE, 100, 53, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Driver versjon:", -1, 37, 67, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DRVVERSION, 100, 67, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + LTEXT "Digital signert:", -1, 37, 81, 60, 8, SS_NOPREFIX + EDITTEXT IDC_DIGITALSIGNER, 100, 81, 145, 12, NOT WS_TABSTOP | NOT WS_BORDER | ES_AUTOHSCROLL | ES_READONLY + PUSHBUTTON "&Driver detaljer...", IDC_DRIVERDETAILS, 7, 106, 70, 15 + LTEXT "For vise detaljer om driver filene.", -1, 91, 110, 154, 17, SS_NOPREFIX +END + +IDD_DRIVERDETAILS DIALOGEX DISCARDABLE 0, 0, 224, 250 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME +CAPTION "Driver fil detaljer" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_DEVICON, 7, 7, 20, 20 + LTEXT "", IDC_DEVNAME, 37, 9, 174, 16, SS_NOPREFIX + LTEXT "&Driver filer:", -1, 7, 36, 204, 8 + CONTROL "", IDC_DRIVERFILES, "SysListView32", LVS_REPORT | LVS_NOCOLUMNHEADER | + LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SHAREIMAGELISTS | LVS_SORTASCENDING | + LVS_NOSORTHEADER | WS_BORDER | WS_TABSTOP, 7, 46, 209, 80 + LTEXT "Produsent:", -1, 14, 134, 50, 8 + LTEXT "", IDC_FILEPROVIDER, 66, 134, 155, 8 + LTEXT "Filversjon:", -1, 14, 150, 50, 8 + LTEXT "", IDC_FILEVERSION, 66, 150, 155, 8 + LTEXT "Opphavsrett:", -1, 14, 166, 50, 8 + LTEXT "", IDC_FILECOPYRIGHT, 66, 166, 155, 8 + LTEXT "Digital signert:", -1, 14, 182, 50, 8 + LTEXT "", IDC_DIGITALSIGNER, 66, 182, 155, 8 + PUSHBUTTON "OK", IDOK, 167, 228, 50, 14 +END + diff --git a/reactos/dll/win32/msgina/lang/nb-NO.rc b/reactos/dll/win32/msgina/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/msgina/lang/nb-NO.rc rename to reactos/dll/win32/msgina/lang/no-NO.rc diff --git a/reactos/dll/win32/msgina/msgina.rc b/reactos/dll/win32/msgina/msgina.rc index 142bc89ace2..030fef4ca14 100644 --- a/reactos/dll/win32/msgina/msgina.rc +++ b/reactos/dll/win32/msgina/msgina.rc @@ -16,7 +16,7 @@ IDI_ROSLOGO BITMAP "resources/reactos.bmp" #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/netid/lang/no-NO.rc b/reactos/dll/win32/netid/lang/no-NO.rc new file mode 100644 index 00000000000..ec17355510f --- /dev/null +++ b/reactos/dll/win32/netid/lang/no-NO.rc @@ -0,0 +1,74 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_PROPPAGECOMPUTER DIALOGEX 0, 0, 256, 218 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Datamaskinnavn" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_COMPNAME, IDC_STATIC, 4, 3, 26, 24, SS_ICON + LTEXT "ReactOS bruker flgende informasjon for identifisere datamaskinen p nettverket.", IDC_STATIC, 40, 5, 204, 20 + LTEXT "Beskrivelse av datamaskinen:", IDC_STATIC, 6, 40, 90, 9 + EDITTEXT IDC_COMPDESC, 98, 38, 146, 13, WS_CHILD | WS_VISIBLE | WS_TABSTOP + LTEXT "Fullt datamaskinnavn:", IDC_STATIC, 6, 68, 85, 9 + LTEXT "(Standard)", IDC_COMPUTERNAME, 98, 68, 144, 11 + LTEXT "Arbeidsgruppe:", IDC_WORKGROUPDOMAIN, 6, 84, 64, 9 + LTEXT "(Tom)", IDC_WORKGROUPDOMAIN_NAME, 98, 84, 144, 9 + LTEXT "Klikk nettverks-ID for bruke veiviseren for nettverksidentifikasjon til bli med i et domene og opprette en lokal brukerkonto.", IDC_STATIC, 6, 113, 172, 24 + PUSHBUTTON "&Nettverk-ID...", IDC_NETWORK_ID, 190, 114, 58, 15 + LTEXT "Klikk Endre for gi datamaskinen et nytt navn eller bli med i et domenet.", IDC_STATIC, 6, 149, 170, 17 + PUSHBUTTON "&Endre...",IDC_NETWORK_PROPERTY, 190, 149, 58, 15 + LTEXT "OBS: Bare Administratorer kan endre disse innstillingene p denne datamaskinen.", IDC_STATIC, 6, 179, 300, 9 +END + +IDD_PROPPAGECOMPNAMECHENGE DIALOGEX 0, 0, 232, 222 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Endring i datamaskinnavn" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "(message goes here)", 1017, 7, 5, 218, 30 + LTEXT "&Datamaskinnavn:", -1, 7, 41, 219, 8 + EDITTEXT 1002, 7, 53, 218, 14, ES_AUTOHSCROLL | ES_OEMCONVERT + LTEXT "Fullt datamaskinnavn:", 1016, 7, 72, 218, 10 + EDITTEXT 1001, 7, 82, 219, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP + PUSHBUTTON "&Mer...", 1003, 150, 102, 75, 14 + GROUPBOX "Medlem av", 1018, 7, 119, 219, 73 + AUTORADIOBUTTON "&Domene:", 1008, 17, 132, 192, 10, WS_GROUP + AUTORADIOBUTTON "&Arbeidsgruppe:", 1004, 17, 161, 191, 10 + EDITTEXT 116, 28, 144, 181, 14, ES_AUTOHSCROLL | WS_GROUP + PUSHBUTTON "&Finn min domene", 1010, 7, 203, 109, 14, NOT WS_VISIBLE | WS_DISABLED + EDITTEXT 1007, 28, 172, 181, 14, ES_UPPERCASE | ES_AUTOHSCROLL | ES_OEMCONVERT + DEFPUSHBUTTON "OK", 1, 121, 203, 50, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 176, 203, 50, 14 +END + +IDD_PROPPAGEDNSANDNETBIOS DIALOGEX 0, 0, 266, 125 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "DNS-suffiks og NetBIOS-datamaskinnavn" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Primrt DNS-suffiks for denne datamaskinen:", -1, 7, 5, 253, 8 + EDITTEXT 1011, 7, 17, 252, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "&Endre primrt DNS-suffiks nr domenemedlemskap endres", 115, 11, 39, 250, 10 + LTEXT "&NetBIOS-datamaskinnavn:", -1, 7, 57, 148, 8 + EDITTEXT 1013, 7, 69, 150, 14, ES_UPPERCASE | ES_AUTOHSCROLL | ES_READONLY + DEFPUSHBUTTON "OK", 1, 153, 104, 50, 14 + PUSHBUTTON "Avbryt", 2, 209, 104, 50, 14 + LTEXT "Dette navnet brukes for interoperabilitet med eldre datamaskiner og tjenester.", 13, 7, 88, 253, 8 +END + +STRINGTABLE +BEGIN + 1 "* Ukjent *" + 2 "ARBEIDSGRUPPE" + 3 "The following error occurred while attempting to read domain membership information:" + 4 "Endring i datamaskinnavn" + 5 "Arbeidsgruppe:" + 6 "Domene:" + 22 "Velkommen til %1 arbeidsgruppen." + 23 "Velkommen til %1 domene." + 24 "Du m starte denne datamaskinen p nytt for at endringene skal tre i kraft." + 1021 "Note: Only Administrators can change the identification of this computer." + 1022 "Note: The identification of the computer cannot be changed because:" + 3210 "&Detaljer >>" + 3220 "<< &Detaljer" +END diff --git a/reactos/dll/win32/netid/rsrc.rc b/reactos/dll/win32/netid/rsrc.rc index 795afbc2de0..b4e6945271f 100644 --- a/reactos/dll/win32/netid/rsrc.rc +++ b/reactos/dll/win32/netid/rsrc.rc @@ -10,6 +10,7 @@ #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/newdev/lang/nb-NO.rc b/reactos/dll/win32/newdev/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/newdev/lang/nb-NO.rc rename to reactos/dll/win32/newdev/lang/no-NO.rc diff --git a/reactos/dll/win32/newdev/rsrc.rc b/reactos/dll/win32/newdev/rsrc.rc index 607b3343487..897e4a5dcb7 100644 --- a/reactos/dll/win32/newdev/rsrc.rc +++ b/reactos/dll/win32/newdev/rsrc.rc @@ -16,7 +16,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/hu-HU.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/setupapi/lang/nb-NO.rc b/reactos/dll/win32/setupapi/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/setupapi/lang/nb-NO.rc rename to reactos/dll/win32/setupapi/lang/no-NO.rc diff --git a/reactos/dll/win32/setupapi/setupapi.rc b/reactos/dll/win32/setupapi/setupapi.rc index 3dc453b4ab6..f6328364f8a 100644 --- a/reactos/dll/win32/setupapi/setupapi.rc +++ b/reactos/dll/win32/setupapi/setupapi.rc @@ -37,7 +37,7 @@ #include "lang/ja-JP.rc" #include "lang/ko-KR.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/win32/shell32/lang/nb-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc similarity index 59% rename from reactos/dll/win32/shell32/lang/nb-NO.rc rename to reactos/dll/win32/shell32/lang/no-NO.rc index af8e2d3fb46..e514e4eb1f3 100644 --- a/reactos/dll/win32/shell32/lang/nb-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -92,17 +92,17 @@ END SHNEWBRSFORFOLDER_MSGBOX DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 15, 40, 218, 196 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Browse for Folder" +CAPTION "Bla etter mappe" FONT 8, "MS Shell Dlg" BEGIN LTEXT "", IDD_TITLE, 10, 8, 198, 24 LTEXT "", IDD_STATUS, 10, 25, 198, 12 - LTEXT "Folder:", IDD_FOLDER, 10, 152, 40, 12 + LTEXT "Mappe:", IDD_FOLDER, 10, 152, 40, 12 CONTROL "", IDD_TREEVIEW, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | WS_BORDER | WS_TABSTOP, 12, 38, 194, 105 EDITTEXT IDD_FOLDERTEXT, 46, 150, 160, 14, WS_BORDER | WS_GROUP | WS_TABSTOP - PUSHBUTTON "&Make New Folder", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "&Lag en ny mappe", IDD_MAKENEWFOLDER, 12, 174, 77, 14, WS_GROUP | WS_TABSTOP DEFPUSHBUTTON "OK", IDOK, 102, 174, 50, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP - PUSHBUTTON "Cancel", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 156, 174, 50, 14, WS_GROUP | WS_TABSTOP END SHELL_YESTOALL_MSGBOX DIALOGEX 200, 100, 280, 90 @@ -125,14 +125,14 @@ FONT 8, "MS Shell Dlg" BEGIN ICON "", IDC_SHELL_ABOUT_ICON, 7, 55, 21, 20 LTEXT "", IDC_SHELL_ABOUT_APPNAME, 35, 55, 200, 10 - LTEXT "Version " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 + LTEXT "Versjon " KERNEL_VERSION_STR " (" KERNEL_VERSION_BUILD_STR ")", IDC_STATIC, 35, 65, 235, 10 LTEXT REACTOS_DEFAULT_STR_LEGAL_COPYRIGHT, IDC_STATIC, 35, 75, 210, 10 LTEXT "", IDC_SHELL_ABOUT_OTHERSTUFF, 35, 90, 180, 20 - LTEXT "This ReactOS version is registered to:", IDC_STATIC, 35, 115, 180, 10 + LTEXT "Denne ReactOS versjonen er registert til:", IDC_STATIC, 35, 115, 180, 10 LTEXT "", IDC_SHELL_ABOUT_REG_USERNAME, 45, 125, 180, 10 LTEXT "", IDC_SHELL_ABOUT_REG_ORGNAME, 45, 135, 180, 10 LTEXT "", IDC_STATIC, 35, 147, 235, 1, SS_ETCHEDHORZ - LTEXT "Installed physical memory:", IDC_STATIC, 35, 152, 130, 10 + LTEXT "Fysisk minne tilgjengelig:", IDC_STATIC, 35, 152, 130, 10 LTEXT "", IDC_SHELL_ABOUT_PHYSMEM, 167, 152, 88, 10 DEFPUSHBUTTON "OK", IDOK, 220, 178, 50, 14 @@ -143,7 +143,7 @@ IDD_SHELL_ABOUT_AUTHORS DIALOGEX MOVEABLE DISCARDABLE 35, 90, 235, 85 STYLE DS_SHELLFONT | WS_CHILD FONT 8, "MS Shell Dlg" BEGIN - LTEXT "ReactOS was brought to you by:", IDC_STATIC, 0, 0, 180, 10 + LTEXT "ReactOS ble laget av:", IDC_STATIC, 0, 0, 180, 10 LISTBOX IDC_SHELL_ABOUT_AUTHORS_LISTBOX, 0, 10, 165, 75 END @@ -158,318 +158,297 @@ BEGIN CONTROL "", 12298, "COMBOBOX", WS_TABSTOP | WS_GROUP | WS_VSCROLL | WS_VISIBLE | CBS_DISABLENOSCROLL | CBS_AUTOHSCROLL | CBS_DROPDOWN, 36, 37, 183, 100 DEFPUSHBUTTON "OK", IDOK, 62, 63, 50, 14, WS_TABSTOP PUSHBUTTON "Avbryt", IDCANCEL, 116, 63, 50, 14, WS_TABSTOP - PUSHBUTTON "&Bla . . .", 12288, 170, 63, 50, 14, WS_TABSTOP + PUSHBUTTON "&Bla gjennom .", 12288, 170, 63, 54, 14, WS_TABSTOP END SHELL_GENERAL_SHORTCUT_DLG DIALOGEX 0, 0, 240, 130 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Shortcut" +CAPTION "Snarvei" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 5, 30, 30, WS_VISIBLE LTEXT "Target type:", 14004, 10, 30, 50, 10 LTEXT "", 14005, 70, 30, 150, 10 - LTEXT "Target location:", 14006, 10, 40, 70, 10 + LTEXT "Target sted:", 14006, 10, 40, 70, 10 LTEXT "", 14007, 70, 40, 150, 10 LTEXT "Target:", 14008, 10, 55, 45, 10 EDITTEXT 14009, 70, 55, 150, 10, ES_LEFT | ES_AUTOHSCROLL - LTEXT "&Start in:",14010, 10, 65, 57, 10 + LTEXT "&Start i:",14010, 10, 65, 57, 10 EDITTEXT 14011, 70, 65, 150, 10, ES_LEFT | ES_AUTOHSCROLL - LTEXT "Shortcut &key:", 14014, 10, 80, 57, 10 + LTEXT "Snarvei &nkkel:", 14014, 10, 80, 57, 10 EDITTEXT 14015, 70, 80, 150, 10, ES_LEFT - LTEXT "Run:", 14016, 10, 90, 57, 10 + LTEXT "Kjr:", 14016, 10, 90, 57, 10 EDITTEXT 14017, 70, 90, 150, 10, ES_AUTOHSCROLL - LTEXT "C&omment:", 14018, 10, 100, 57, 10 + LTEXT "K&ommentar:", 14018, 10, 100, 57, 10 EDITTEXT 14019, 70, 100, 150, 10, ES_LEFT | ES_AUTOHSCROLL - PUSHBUTTON "&Find Target...", 14020, 10, 115, 63, 14, ES_LEFT - PUSHBUTTON "&Change Icon...", 14021, 83, 115, 63, 14, ES_LEFT - PUSHBUTTON "A&dvanced...", 14022, 156, 115, 63, 14, ES_LEFT + PUSHBUTTON "&Finn ml...", 14020, 10, 115, 63, 14, ES_LEFT + PUSHBUTTON "&Endre ikon...", 14021, 83, 115, 63, 14, ES_LEFT + PUSHBUTTON "A&vansert...", 14022, 156, 115, 63, 14, ES_LEFT END SHELL_EXTENDED_SHORTCUT_DLG DIALOGEX 0, 0, 230, 150 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Extended Properties" +CAPTION "Utvidet Egenskaper" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Choose the advanced properties you want for this shortcut.", -1, 5, 30, 210, 10 - CHECKBOX "Run with different credentials", 14000, 25, 50, 150, 10 - LTEXT "This option can allow you to run the this shortcut as another user, or continue as yourself while protecting your computer and data from unauthorized program activity.", -1, 50, 60, 175, 40 - CHECKBOX "Run in seperate memory space", 14001, 25, 100, 90, 10, WS_DISABLED + LTEXT "Velg avansert egenskaper som du vil for denne snarveien.", -1, 5, 30, 210, 10 + CHECKBOX "Kjr med forskjellig credentials", 14000, 25, 50, 150, 10 + LTEXT "Dette valget vil godta deg kjre denne snarveien med en annen bruker, eller fortsette som deg selv mens du beskytter din datamaskin og data fra uautorisert program aktivitet.", -1, 50, 60, 175, 40 + CHECKBOX "Kjr i seperat ledig minne plass", 14001, 25, 100, 90, 10, WS_DISABLED PUSHBUTTON "OK", IDOK, 25, 120, 50, 15, WS_VISIBLE - PUSHBUTTON "Abort", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE -END - -SHELL_FOLDER_GENERAL_DLG DIALOGEX 0, 0, 240, 205 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" -FONT 8, "MS Shell Dlg", 0, 0, 0x0 -BEGIN - ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE - EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type of file:", 14004, 8, 35, 50, 10 - LTEXT "Folder", 14005, 68, 35, 160, 10 - LTEXT "Location:", 14006, 8, 53, 50, 10 - LTEXT "", 14007, 68, 53, 315, 10 - LTEXT "Size:", 14008, 8, 72, 45, 10 - LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Contains:", 14010, 8, 93, 45, 10 - LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Created:", 14014, 8, 118, 45, 10 - LTEXT "", 14015, 68, 118, 160, 10 - AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 - AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 + PUSHBUTTON "Avbryt", IDCANCEL, 120, 120, 50, 15, WS_VISIBLE END SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" +CAPTION "Generielt" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type of file:", 14004, 8, 35, 50, 10 - LTEXT "File", 14005, 68, 35, 160, 10 - LTEXT "Opens with:", 14006, 8, 53, 50, 10 + LTEXT "Filtype:", 14004, 8, 35, 50, 10 + LTEXT "Fil", 14005, 68, 35, 160, 10 + LTEXT "pne med:", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 160, 10 - LTEXT "Location:", 14008, 8, 72, 45, 10 + LTEXT "Lokalisjon:", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Size:", 14010, 8, 93, 45, 10 + LTEXT "Strrelse:", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "Opprettet:", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - LTEXT "Modified:", 14016, 8, 140, 45, 10 + LTEXT "Modifisert:", 14016, 8, 140, 45, 10 LTEXT "", 14017, 68, 140, 160, 10 - LTEXT "Accessed:", 14018, 8, 160, 45, 10 + LTEXT "pnet:", 14018, 8, 160, 45, 10 LTEXT "", 14019, 68, 160, 160, 10 - LTEXT "Attributes:", 14020, 8, 189, 45, 10 - CHECKBOX "&Read-only", 14021, 58, 189, 67, 10 - CHECKBOX "&Hidden", 14022, 126, 189, 50, 10 - CHECKBOX "&Archive", 14023, 181, 189, 49, 10 + LTEXT "Rettigheter:", 14020, 8, 189, 45, 10 + CHECKBOX "&Bare-lesbar", 14021, 58, 189, 67, 10 + CHECKBOX "&Skjult", 14022, 126, 189, 50, 10 + CHECKBOX "&Arkiv", 14023, 181, 189, 49, 10 END SHELL_FILE_VERSION_DLG DIALOGEX 0, 0, 235, 215 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Version" +CAPTION "Versjon" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "File version: ", 14000, 10, 10, 55, 10 + LTEXT "Filversjon: ", 14000, 10, 10, 55, 10 LTEXT "", 14001, 77, 10, 152, 10 - LTEXT "Description: ", 14002, 10, 27, 45, 10 + LTEXT "Beskrivelse: ", 14002, 10, 27, 45, 10 LTEXT "", 14003, 77, 27, 152, 10 - LTEXT "Copyright: ", 14004, 10, 46, 66, 10 + LTEXT "Enerett: ", 14004, 10, 46, 66, 10 LTEXT "", 14005, 77, 46, 152, 10 GROUPBOX "Other version information: ", 14006, 6, 70, 222, 115 - LTEXT "Item name: ", 14007, 13, 82, 50, 10 - LTEXT "Value: ", 14008, 112, 82, 45, 10 + LTEXT "Enhetsnavn: ", 14007, 13, 82, 50, 10 + LTEXT "Verdi: ", 14008, 112, 82, 45, 10 LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY END DRIVE_GENERAL_DLG DIALOGEX 0, 0, 240, 230 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "General" +CAPTION "Generielt" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN EDITTEXT 14001, 40, 20, 190, 14, ES_LEFT|WS_BORDER|WS_GROUP LTEXT "Type:", -1, 15, 55, 40, 10 LTEXT "", 14002, 110, 55, 100, 10 - LTEXT "File system:", -1, 15, 70, 100, 10 + LTEXT "Filsystem:", -1, 15, 70, 100, 10 LTEXT "", 14003, 110, 70, 100, 10 CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 - LTEXT "Used space:", -1, 25, 90, 120, 10 + LTEXT "Brukt plass:", -1, 25, 90, 120, 10 LTEXT "", 14004, 110, 90, 120, 10 LTEXT "", 14005, 200, 90, 40, 10 CONTROL "", 14014, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 105, 10, 10 - LTEXT "Free space:", -1, 25, 105, 70, 10 + LTEXT "Ledig plass:", -1, 25, 105, 70, 10 LTEXT "", 14006, 110, 105, 120, 10 LTEXT "", 14007, 200, 105, 40, 10 - LTEXT "Capacity:", -1, 25, 125, 80, 10 + LTEXT "Kapasitet:", -1, 25, 125, 80, 10 LTEXT "", 14008, 110, 125, 120, 10 LTEXT "", 14009, 200, 125, 40, 10 CONTROL "", 14015, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 20, 140, 200, 20 - LTEXT "Drive %s", 14010, 100, 170, 40, 10 - PUSHBUTTON "Disk Cleanup", 14011, 180, 175, 50, 15, WS_TABSTOP - CHECKBOX "Compress drive to save disk space", 14012, 15, 205, 180, 10, WS_DISABLED - CHECKBOX "Allow Indexing Service to index this disk for fast file searching", 14012, 15, 220, 200, 10, WS_DISABLED + LTEXT "Stasjon %s", 14010, 100, 170, 40, 10 + PUSHBUTTON "Diskoppryding", 14011, 180, 175, 50, 15, WS_TABSTOP + CHECKBOX "Komprimer denne stasjonen for frigjre diskplass", 14012, 15, 205, 180, 10, WS_DISABLED + CHECKBOX "Indekser denne stasjonen for raskere sking", 14012, 15, 220, 200, 10, WS_DISABLED END DRIVE_EXTRA_DLG DIALOGEX 0, 0, 240, 230 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Tools" +CAPTION "Verkty" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - GROUPBOX "Error-checking", -1, 5, 5, 230, 60 - LTEXT "This option will check the volume for\nerrors.", -1, 40, 25, 160, 20 - PUSHBUTTON "Check Now...", 14000, 130, 45, 90, 15, WS_TABSTOP - GROUPBOX "Defragmentation", -1, 5, 65, 230, 60 - LTEXT "This option will defragment files on the volume", -1, 40, 85, 160, 20 - PUSHBUTTON "Defragment Now...", 14001, 130, 105, 90, 15, WS_TABSTOP - GROUPBOX "Backup", -1, 5, 130, 230, 60 - LTEXT "This option will back up files on the volume.", -1, 40, 150, 160, 20 - PUSHBUTTON "Backup Now...", 14002, 130, 170, 90, 15, WS_TABSTOP + GROUPBOX "Feilsking", -1, 5, 5, 230, 60 + LTEXT "Dette alternativet vil kontrollere volumet for \nfeil.", -1, 40, 25, 160, 20 + PUSHBUTTON "Kontroller n...", 14000, 130, 45, 90, 15, WS_TABSTOP + GROUPBOX "Defragmentering", -1, 5, 65, 230, 60 + LTEXT "Dette alternativet defragmenterer filene p volumet.", -1, 40, 85, 160, 20 + PUSHBUTTON "Defragmenter N...", 14001, 130, 105, 90, 15, WS_TABSTOP + GROUPBOX "Sikkerhetskopi", -1, 5, 130, 230, 60 + LTEXT "Dette alternativet tar sikkerhetskopi av filene p volumet.", -1, 40, 150, 160, 20 + PUSHBUTTON "Ta sikkerhetskopi...", 14002, 130, 170, 90, 15, WS_TABSTOP END DRIVE_HARDWARE_DLG DIALOGEX 0, 0, 240, 230 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Hardware" +CAPTION "Maskinvare" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN END RUN_AS_DIALOG DIALOGEX 0, 0, 240, 190 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Run As" +CAPTION "Kjr som" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Which user account do you want to use to run this program?", -1, 10, 20, 220, 20 + LTEXT "Hvilken brukerkonto vil du bruke for kjre dette programmet?", -1, 10, 20, 220, 20 CHECKBOX "Current User %s", 14000, 10, 45, 150, 10 - LTEXT "Protect my computer and data from unauthorized program activity", -1, 25, 57, 200, 10, WS_DISABLED - CHECKBOX "This option can prevent computer viruses from harming your computer or personal data, but selecting it might cause the program to function improperly.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE - CHECKBOX "The following user:", 14002, 10, 100, 90, 10 - LTEXT "User name:", -1, 20, 118, 54, 10 + LTEXT "Beskytt min datamaskin og data fra uautorisert program aktivitet", -1, 25, 57, 200, 10, WS_DISABLED + CHECKBOX "Dette valget kan forebygge data virus fra uskadeliggjre din datamaskin eller personlige data, men utvelging det skulle kanskje forrsake program til funksjon formatfeil.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE + CHECKBOX "Flgende bruker:", 14002, 10, 100, 90, 10 + LTEXT "Brukernavn:", -1, 20, 118, 54, 10 COMBOBOX 14003, 75, 115, 100, 15, CBS_DROPDOWNLIST | WS_VSCROLL | WS_VISIBLE | WS_TABSTOP PUSHBUTTON "...", 14004, 180, 115, 30, 14, WS_TABSTOP - LTEXT "Password:", -1, 20, 143, 53, 10 + LTEXT "Passord:", -1, 20, 143, 53, 10 EDITTEXT 14005, 74, 140, 100, 14, ES_LEFT | WS_BORDER | WS_GROUP PUSHBUTTON "...", 14006, 180, 140, 30, 14, WS_TABSTOP PUSHBUTTON "OK", 14007, 57, 170, 60, 14, WS_TABSTOP - PUSHBUTTON "Cancel", 14008, 122, 170, 60, 14, WS_TABSTOP + PUSHBUTTON "Avbryt", 14008, 122, 170, 60, 14, WS_TABSTOP END BITBUCKET_PROPERTIES_DLG DIALOGEX 0, 0, 240, 190 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Recycle Bin Properties" +CAPTION "Papirkurv egenskaper" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 10, 10, 220, 50 - GROUPBOX "Settings for selected location", -1, 10, 72, 220, 70 - RADIOBUTTON "&Custom size:", 14001, 20, 90, 80, 10, WS_TABSTOP + GROUPBOX "Innstilling for valgte sted", -1, 10, 72, 220, 70 + RADIOBUTTON "&Tilpasse strrelse:", 14001, 20, 90, 80, 10, WS_TABSTOP EDITTEXT 14002, 106, 87, 50, 14, WS_TABSTOP | ES_NUMBER - LTEXT "M&aximum size(MB):", -1, 20, 105, 70, 10 - RADIOBUTTON "Do not move files to the &Recycle Bin. Remove files immediately when deleted.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP - AUTOCHECKBOX "&Display delete confirmation dialog", 14004, 20, 155, 140, 10, WS_TABSTOP + LTEXT "M&aksimalt strrelse (MB):", -1, 20, 105, 70, 10 + RADIOBUTTON "Ikke flytt filer til &Papirkurven. Slett filene umiddelbart nr de slettes.", 14003, 20, 117, 170, 20, BS_MULTILINE | WS_TABSTOP + AUTOCHECKBOX "&Vis slettet bekreftelse dialog", 14004, 20, 155, 140, 10, WS_TABSTOP END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Open With" +CAPTION "pne med" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 - LTEXT "Choose the program you want to use to open this file:", -1, 44, 12, 211, 10 - LTEXT "File: ", 14001, 44, 25, 188, 10 - GROUPBOX "&Programs", -1, 7, 42, 249, 187 + LTEXT "Velg programmet du vil bruke for pne denne filen:", -1, 44, 12, 211, 10 + LTEXT "Fil: ", 14001, 44, 25, 188, 10 + GROUPBOX "&Program", -1, 7, 42, 249, 187 LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE - AUTOCHECKBOX "&Always use the selected program to open this kind of file", 14003, 20, 193, 225, 10 - PUSHBUTTON "&Browse...", 14004, 198, 207, 50, 14 + AUTOCHECKBOX "&Alltid bruk valgte program for pne denne filtypen", 14003, 20, 193, 225, 10 + PUSHBUTTON "&Utforsk...", 14004, 198, 207, 50, 14 PUSHBUTTON "OK", 14005, 150, 236, 50, 14 - PUSHBUTTON "Cancel", 14006, 206, 236, 50, 14 + PUSHBUTTON "Avbryt", 14006, 206, 236, 50, 14 END FOLDER_OPTIONS_GENERAL_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "General" +CAPTION "Generielt" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN -GROUPBOX "Tasks", -1, 7, 10, 249, 45 +GROUPBOX "Oppgaver", -1, 7, 10, 249, 45 //ICON -AUTORADIOBUTTON "Show common tasks in &folders", 14001, 40, 25, 120, 10, WS_TABSTOP -AUTORADIOBUTTON "Use ReactOS class&ic folders", 14002, 40, 37, 120, 10, WS_TABSTOP -GROUPBOX "Browse folders", -1, 7, 60, 249, 45, WS_TABSTOP +AUTORADIOBUTTON "Vis felles oppgaver i &mapper", 14001, 40, 25, 120, 10, WS_TABSTOP +AUTORADIOBUTTON "Bruk ReactOS klass&isk mapper", 14002, 40, 37, 120, 10, WS_TABSTOP +GROUPBOX "Utforsk mapper", -1, 7, 60, 249, 45, WS_TABSTOP //ICON -AUTORADIOBUTTON "Open each folder in the sa&me window", 14004, 40, 70, 140, 10, WS_TABSTOP -AUTORADIOBUTTON "Open each folder in its own &window", 14005, 40, 82, 140, 10, WS_TABSTOP -GROUPBOX "Click items as follows", -1, 7, 110, 249, 60 +AUTORADIOBUTTON "pne hver mapper i sa&mme vindu", 14004, 40, 70, 140, 10, WS_TABSTOP +AUTORADIOBUTTON "pne hver mapper i sitt egen &vindu", 14005, 40, 82, 140, 10, WS_TABSTOP +GROUPBOX "Klikk enheter som flgende", -1, 7, 110, 249, 60 //ICON -AUTORADIOBUTTON "&Single-click to open an item (point to select)", 14007, 40, 120, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "Underline icon titles consistent with my &browser", 14008, 50, 132, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "Underline icon titles only when I &point at them", 14009, 50, 144, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "&Double-click to open an item (single-click to select)", 14010, 40, 156, 170, 10, WS_TABSTOP -PUSHBUTTON "&Restore Defaults", 14011, 180, 180, 60, 14, WS_TABSTOP +AUTORADIOBUTTON "&Enkelt-klikk for pne en enhet (peker for velge)", 14007, 40, 120, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "Utheve ikon titteler konsekvent med min &utforsker", 14008, 50, 132, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "UUtheve ikon titteler bare mens jeg &peker p de", 14009, 50, 144, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "&Dobbelt klikk for pne enheten (Enkelt-klikk for velge)", 14010, 40, 156, 170, 10, WS_TABSTOP +PUSHBUTTON "&Gjenopprette standard", 14011, 180, 180, 60, 14, WS_TABSTOP END FOLDER_OPTIONS_VIEW_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "View" +CAPTION "Vis" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN -GROUPBOX "Folder views", -1, 7, 10, 249, 60 +GROUPBOX "Mappe visning", -1, 7, 10, 249, 60 //ICON -LTEXT "You can apply the view(such as Details or Tiles) that\nyou are using for this folder to all folders.", -1, 60, 20, 180, 20 -PUSHBUTTON "Apply to A&ll Folders", 14001, 60, 50, 80, 14, WS_TABSTOP -PUSHBUTTON "&Reset All Folders", 14002, 150, 50, 80, 14, WS_TABSTOP -LTEXT "Advanced settings:", -1, 7, 80, 100, 10 +LTEXT "Du kan bruke visning (slik som detalj eller Tiles) som\ndu bruker for denne mappen til alle mappene.", -1, 60, 20, 180, 20 +PUSHBUTTON "Bruk til a&lle mappene", 14001, 60, 50, 80, 14, WS_TABSTOP +PUSHBUTTON "&Gjenopprett alle mapper", 14002, 150, 50, 80, 14, WS_TABSTOP +LTEXT "Avanserte innstillinger:", -1, 7, 80, 100, 10 CONTROL "", 14003, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_NOCOLUMNHEADER | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 90, 249, 120 -PUSHBUTTON "Restore &Defaults", 14004, 180, 210, 80, 14, WS_TABSTOP +PUSHBUTTON "Gjenopprett &standard", 14004, 180, 210, 80, 14, WS_TABSTOP END FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "File Types" +CAPTION "Filtyper" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN -LTEXT "Registered file &types:", -1, 7, 10, 70, 10 +LTEXT "Registerert fil&typer:", -1, 7, 10, 70, 10 CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 -PUSHBUTTON "&New", 14001, 120, 110, 50, 14, WS_TABSTOP -PUSHBUTTON "&Delete", 14002, 180, 110, 50, 14, WS_TABSTOP -GROUPBOX "Details for '%s' extension", 14003, 7, 130, 249, 70 -LTEXT "Opens with:", -1, 12, 140, 40, 10 +PUSHBUTTON "&Ny", 14001, 120, 110, 50, 14, WS_TABSTOP +PUSHBUTTON "&Slett", 14002, 180, 110, 50, 14, WS_TABSTOP +GROUPBOX "Detailjer for '%s' utvidelser", 14003, 7, 130, 249, 70 +LTEXT "pne med:", -1, 12, 140, 40, 10 //ICON LTEXT "Appname", 14005, 100, 140, 40, 10 -PUSHBUTTON "&Change...", 14006, 180, 140, 50, 14, WS_TABSTOP -LTEXT "Files with extension '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 -PUSHBUTTON "Ad&vanced", 14008, 180, 175, 50, 14, WS_TABSTOP +PUSHBUTTON "&Endre...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Filer med utvidelser '%s' are of type '%s'. To\nchange settings that affect all '%s' files, click\nAdvanced.", 14007, 12, 155, 160, 30 +PUSHBUTTON "Av&ansert", 14008, 180, 175, 50, 14, WS_TABSTOP END CONFIRM_FILE_REPLACE_DLG DIALOGEX 0, 0, 282, 143 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Confirm File Replace" +CAPTION "Bekrefte fil erstattning" FONT 8, "MS Shell Dlg" BEGIN - DEFPUSHBUTTON "&Yes", IDYES, 20, 122, 60, 14 - PUSHBUTTON "Yes to &All", 12807, 85, 122, 60, 14 - PUSHBUTTON "&No", IDNO, 150, 122, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 215, 122, 60, 14 + DEFPUSHBUTTON "&Ja", IDYES, 20, 122, 60, 14 + PUSHBUTTON "Ja for &Alt", 12807, 85, 122, 60, 14 + PUSHBUTTON "&Nei", IDNO, 150, 122, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 215, 122, 60, 14 ICON 146, -1, 11, 10, 21, 20, SS_REALSIZECONTROL - LTEXT "This folder already contains a file named '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX - LTEXT "This folder already contains a read-only file named '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX - LTEXT "This folder already contains a system file named '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX - LTEXT "Would you like to replace the existing file", -1, 44, 35, 228, 10, SS_NOPREFIX - LTEXT "(unknown date and size)", 12302, 79, 51, 198, 20, SS_NOPREFIX + LTEXT "Denne mappen inneholder allerede en fil som heter '%2'.", 12291, 44, 10, 231, 22, SS_NOPREFIX + LTEXT "Denne mappen inneholder allerede en bare-lesbar fil som heter '%2'.", 12292, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Denne mappen inneholder allerede en systemfil som heter '%2'.", 12293, 41, 10, 222, 22, SS_NOPREFIX + LTEXT "Vil du overskrive eksisterende fil", -1, 44, 35, 228, 10, SS_NOPREFIX + LTEXT "(ukjent dato og strrelse)", 12302, 79, 51, 198, 20, SS_NOPREFIX ICON "", 12300, 50, 49, 21, 20, SS_REALSIZECONTROL - LTEXT "with this one?", -1, 44, 75, 228, 10, SS_NOPREFIX - LTEXT "(unknown date and size)", 12303, 79, 91, 198, 20, SS_NOPREFIX + LTEXT "med denne ene?", -1, 44, 75, 228, 10, SS_NOPREFIX + LTEXT "(ukjent dato og strrelse)", 12303, 79, 91, 198, 20, SS_NOPREFIX ICON "", 12301, 50, 89, 21, 20, SS_REALSIZECONTROL END LOGOFF_DLG DIALOGEX 0, 0, 190, 60 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Log Off ReactOS" +CAPTION "Logg av ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 45, 14344, 10, 10, 21, 20, SS_REALSIZECONTROL - LTEXT "Are you sure you want to log off?", -1, 43, 11, 140, 22 + LTEXT "Er du sikker p at du vil logge av?", -1, 43, 11, 140, 22 DEFPUSHBUTTON "&Log Off", IDOK, 57, 40, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 122, 40, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 122, 40, 60, 14 END DISCONNECT_DLG DIALOGEX 0, 0, 190, 60 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Disconnect ReactOS" +CAPTION "Koble fra ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 49, 14346, 10, 10, 21, 20, SS_REALSIZECONTROL - LTEXT "Are you sure you want to disconnect?", -1, 49, 12, 137, 23 - DEFPUSHBUTTON "&Disconnect", IDOK, 57, 40, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 123, 40, 60, 14 + LTEXT "Er du sikker p du vil koble fra?", -1, 49, 12, 137, 23 + DEFPUSHBUTTON "&Koble fra", IDOK, 57, 40, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 123, 40, 60, 14 END AUTOPLAY1_DLG DIALOGEX 0, 0, 227, 218 @@ -479,11 +458,11 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "&Select a content type, then choose an action for ReactOS to perform automatically when that type is used in this device:", 1000, 7, 7, 215, 20 CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 - GROUPBOX "Actions", -1, 7, 45, 212, 146 - AUTORADIOBUTTON "Select an action to &perform:", 1005, 14, 54, 202, 10, WS_GROUP + GROUPBOX "Handlinger", -1, 7, 45, 212, 146 + AUTORADIOBUTTON "Velg en handling for &utfre:", 1005, 14, 54, 202, 10, WS_GROUP CONTROL "LIST2", 1002, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 22, 66, 192, 107 AUTORADIOBUTTON "Prompt me each time to &choose an action", 1006, 14, 177, 202, 10 - PUSHBUTTON "&Restore Defaults", 1008, 108, 197, 110, 14, WS_DISABLED + PUSHBUTTON "&Gjenopprett standard", 1008, 108, 197, 110, 14, WS_DISABLED END MIXED_CONTENT1_DLG DIALOGEX 0, 0, 227, 207 @@ -492,11 +471,11 @@ CAPTION "Mixed Content" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "This disk or device contains more than one type of content.", 1001, 32, 7, 191, 20 - LTEXT "What do you want ReactOS to do?", 1002, 32, 31, 188, 8 + LTEXT "Denne disken eller enheten inneholder mere enn en type med innhold.", 1001, 32, 7, 191, 20 + LTEXT "Hva vil du at ReactOS skal gjre?", 1002, 32, 31, 188, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 160, 186, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 160, 186, 60, 14 END MIXED_CONTENT2_DLG DIALOGEX 0, 0, 227, 206 @@ -505,14 +484,14 @@ CAPTION "Mixed Content" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "ReactOS can perform the same action each time you insert a disk or connect a device with this kind of file:", 1001, 30, 7, 193, 20 + LTEXT "ReactOS kan gjre den samme handlingen hver gang du setter inn en disk eller kobler til en enhet med denne filtypen:", 1001, 30, 7, 193, 20 ICON "", 1005, 32, 27, 11, 10, SS_REALSIZECONTROL EDITTEXT 1006, 49, 28, 177, 14, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER | NOT WS_TABSTOP - LTEXT "What do you want ReactOS to do?", 1002, 32, 41, 190, 8 + LTEXT "Hva vil du at ReactOS skal gjre?", 1002, 32, 41, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 55, 188, 112 - AUTOCHECKBOX "Always do the selected action.", 1004, 32, 171, 190, 10 + AUTOCHECKBOX "Gjr alltid den valgte handlingen.", 1004, 32, 171, 190, 10 DEFPUSHBUTTON "OK", IDOK, 96, 185, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 160, 185, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 160, 185, 60, 14 END AUTOPLAY2_DLG DIALOGEX 0, 0, 227, 181 @@ -521,26 +500,26 @@ CAPTION "Autoplay" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "ReactOS can perform the same action each time you connect this device.", 1001, 32, 7, 190, 22 - LTEXT "&What do you want ReactOS to do?", 1002, 32, 31, 190, 8 + LTEXT "ReactOS kan gjre den samme handlingen hver gang du kobler til en enhet.", 1001, 32, 7, 190, 22 + LTEXT "&Hva vil du at ReactOS skal gjre?", 1002, 32, 31, 190, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 187, 96 - AUTOCHECKBOX "&Always perform the selected action", 1004, 32, 143, 190, 8 + AUTOCHECKBOX "&Alltid utfr den valgte handlingen", 1004, 32, 143, 190, 8 DEFPUSHBUTTON "OK", IDOK, 94, 160, 60, 14 - PUSHBUTTON "Cancel", IDCANCEL, 159, 160, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 159, 160, 60, 14 END SHUTDOWN_DLG DIALOGEX 0, 0, 211, 103 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION -CAPTION "Shut Down ReactOS" +CAPTION "Sl av ReactOS" FONT 8, "MS Shell Dlg" BEGIN ICON 8240, -1, 6, 6, 21, 20, SS_REALSIZECONTROL | WS_GROUP - LTEXT "What do you want the computer to do?", -1, 39, 7, 167, 10 + LTEXT "Hva vil du at datamaskinen skal gjre?", -1, 39, 7, 167, 10 COMBOBOX 8224, 39, 20, 165, 200, CBS_DROPDOWNLIST | WS_VSCROLL LTEXT "Maintains your session, keeping the computer running on low power with data still in memory. The computer wakes up when you press a key or move the mouse.", 8225, 39, 40, 167, 37 DEFPUSHBUTTON "OK", 1, 7, 82, 60, 14, WS_GROUP - PUSHBUTTON "Cancel", IDCANCEL, 75, 82, 60, 14 - PUSHBUTTON "&Help", IDHELP, 144, 82, 60, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 75, 82, 60, 14 + PUSHBUTTON "&Hjelp", IDHELP, 144, 82, 60, 14 END FORMAT_DLG DIALOGEX 50, 50, 184, 218 @@ -549,33 +528,33 @@ CAPTION "Format" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Start", IDOK, 53, 198, 60, 14 - PUSHBUTTON "&Close", IDCANCEL, 118, 198, 60, 14 - LTEXT "Ca&pacity:", -1, 7, 6, 169, 9 + PUSHBUTTON "&Lukk", IDCANCEL, 118, 198, 60, 14 + LTEXT "Ka&pasitet:", -1, 7, 6, 169, 9 COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP - LTEXT "&File system", -1, 7, 35, 170, 9 + LTEXT "&Filsystem", -1, 7, 35, 170, 9 COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 LTEXT "&Allocation unit size", -1, 7, 64, 170, 9 COMBOBOX 28680, 7, 75, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP - LTEXT "Volume &label", -1, 7, 93, 170, 9 + LTEXT "Volum &label", -1, 7, 93, 170, 9 EDITTEXT 28679, 7, 103, 170, 13, ES_AUTOHSCROLL - GROUPBOX "Format &options", 4610, 7, 121, 170, 49 - AUTOCHECKBOX "&Quick Format", 28674, 16, 135, 155, 10 - AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 + GROUPBOX "Formatterings &valg", 4610, 7, 121, 170, 49 + AUTOCHECKBOX "&Rask formattering", 28674, 16, 135, 155, 10 + AUTOCHECKBOX "&Utfr komprimering", 28675, 16, 152, 155, 10 END IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Change Icon" +CAPTION "Endre Ikon" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN LTEXT "Filename:", -1, 7, 14, 208, 10 - PUSHBUTTON "Browse...",IDC_BUTTON_PATH, 148, 24,67,14 + PUSHBUTTON "Utforsk...",IDC_BUTTON_PATH, 148, 24,67,14 EDITTEXT IDC_EDIT_PATH, 6, 24, 135, 15, ES_AUTOHSCROLL LTEXT "Icons:", -1, 7, 47, 208, 10 LISTBOX IDC_PICKICON_LIST,7,57,208,119,LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | WS_VSCROLL | WS_HSCROLL | WS_TABSTOP,WS_EX_STATICEDGE DEFPUSHBUTTON "OK",IDOK, 107, 181,50, 14 - PUSHBUTTON "Cancel",IDCANCEL, 167, 181, 50, 14 + PUSHBUTTON "Avbryt",IDCANCEL, 167, 181, 50, 14 END STRINGTABLE DISCARDABLE @@ -599,7 +578,7 @@ BEGIN IDS_DESKTOP "Skrivebord" IDS_MYCOMPUTER "Min datamaskin" IDS_RECYCLEBIN_FOLDER_NAME "Papirkurv" - IDS_CONTROLPANEL "Control Panel" + IDS_CONTROLPANEL "Kontrollpanel" /* context menus */ IDS_VIEW_LARGE "&Store ikoner" @@ -620,18 +599,18 @@ BEGIN IDS_TRASHFOLDER_TEXT "Virkelig legge %1 og alt innholdet i papirkurven?" IDS_TRASHMULTIPLE_TEXT "Virkelig legge disse %1 valgte elementene i papirkurven?" IDS_CANTTRASH_TEXT "Elementet %1 kan ikke legges i papirkurven. Vil du slette det i stedet?" - IDS_OVERWRITEFILE_TEXT "This folder already contains a file called '%1'.\n\nDo you want to replace it?" + IDS_OVERWRITEFILE_TEXT "Denne mapppen innholder allerede en fil som heter '%1'.\n\nVil du overskrive denne?" IDS_OVERWRITEFILE_CAPTION "Bekreft overskriving av fil" - IDS_OVERWRITEFOLDER_TEXT "This folder already contains a folder named '%1'.\n\n"\ - "If the files in the destination folder have the same names as files in the\n"\ - "selected folder they will be replaced. Do you still want to move or copy\n"\ - "the folder?" + IDS_OVERWRITEFOLDER_TEXT "Denne mappen inneholder allerede en mappe som heter '%1'.\n\n"\ + "Hvis filene i destinasjon mappen har samme navn filer i \n"\ + "valgte mapper her vil bli overskrevet. nsker du fortsatt flytte eller kopiere \n"\ + "denne mappen?" /* message box strings */ IDS_RESTART_TITLE "Starte p nytt" - IDS_RESTART_PROMPT "Vil du simulere en omstart av Windows?" + IDS_RESTART_PROMPT "Vil du starte datamaskinen p nytt?" IDS_SHUTDOWN_TITLE "Avslutt" - IDS_SHUTDOWN_PROMPT "Vil du avslutte Wine-kten?" + IDS_SHUTDOWN_PROMPT "Vil du sl av datamaskinen?" /* shell folder path default values */ IDS_PROGRAMS "Start-meny\\Programmer" @@ -639,7 +618,7 @@ BEGIN IDS_FAVORITES "Favoritter" IDS_STARTUP "Start-meny\\Programmer\\Oppstart" IDS_RECENT "Siste" - IDS_SENDTO "SendTo" + IDS_SENDTO "SendTil" IDS_STARTMENU "Start-meny" IDS_MYMUSIC "Min musikk" IDS_MYVIDEO "Mine videoklipp" @@ -649,8 +628,8 @@ BEGIN IDS_APPDATA "Programdata" IDS_PRINTHOOD "Skrivere" IDS_LOCAL_APPDATA "Lokale innstillinger\\Programdata" - IDS_INTERNET_CACHE "Lokale innstillinger\\Temporary Internet Files" - IDS_COOKIES "Cookies" + IDS_INTERNET_CACHE "Lokale innstillinger\\Midligtidig internett filer" + IDS_COOKIES "Informasjonskapsel" IDS_HISTORY "Lokale innstillinger\\Logg" IDS_PROGRAM_FILES "Programfiler" IDS_MYPICTURES "Mine bilder" @@ -661,53 +640,42 @@ BEGIN IDS_COMMON_PICTURES "Dokumenter\\Mine bilder" IDS_COMMON_VIDEO "Dokumenter\\Mine videoklipp" IDS_CDBURN_AREA "Lokale innstillinger\\Programdata\\Microsoft\\CD Burning" - IDS_NETWORKPLACE "My Network Places" + IDS_NETWORKPLACE "Mine nettverkssteder" IDS_NEWFOLDER "Ny mappe" - IDS_DRIVE_FIXED "Local Disk" + IDS_DRIVE_FIXED "Lokal Disk" IDS_DRIVE_CDROM "CDROM" - IDS_DRIVE_NETWORK "Network Disk" + IDS_DRIVE_NETWORK "Nettverk disk" - IDS_OPEN_WITH "Open With" - IDS_OPEN_WITH_CHOOSE "Choose Program..." + IDS_OPEN_WITH "pne med" + IDS_OPEN_WITH_CHOOSE "Velg program..." - IDS_SHELL_ABOUT_AUTHORS "&Authors" - IDS_SHELL_ABOUT_BACK "< &Back" + IDS_SHELL_ABOUT_AUTHORS "&Forfatter" + IDS_SHELL_ABOUT_BACK "< &Tilbake" FCIDM_SHVIEW_NEW "Ny" FCIDM_SHVIEW_NEWFOLDER "Ny &mappe" FCIDM_SHVIEW_NEWLINK "Ny &snarvei" - IDS_FOLDER_OPTIONS "Folder Options" - IDS_RECYCLEBIN_LOCATION "Recycle Bin Location" - IDS_RECYCLEBIN_DISKSPACE "Space Available" - IDS_EMPTY_BITBUCKET "Empty Recycle Bin" - IDS_PICK_ICON_TITLE "Choose Icon" - IDS_PICK_ICON_FILTER "Icon Files(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" - IDS_OPEN_WITH_FILTER "Executable Files\0*.exe\0" - IDS_DIRECTORY "Folder" - IDS_VIRTUAL_DRIVER "Virtual Device Driver" - IDS_BAT_FILE "ReactOS Batch File" - IDS_CMD_FILE "ReactOS Command Script" - IDS_COM_FILE "Dos Application" - IDS_CPL_FILE "Control Panel Item" - IDS_CUR_FILE "Cursor" - IDS_DLL_FILE "Application Extension" - IDS_DRV_FILE "Device Driver" - IDS_EXE_FILE "Application" - IDS_FON_FILE "Font file" - IDS_TTF_FILE "TrueType Font file" - IDS_HLP_FILE "Help File" - IDS_INI_FILE "Configuration Settings" - IDS_LNK_FILE "Shortcut" - IDS_SYS_FILE "System file" - - IDS_OPEN_VERB "Open" - IDS_RUNAS_VERB "Run as " - IDS_EDIT_VERB "Edit" - IDS_FIND_VERB "Find" - IDS_PRINT_VERB "Print" - IDS_PLAY_VERB "Play" - IDS_PREVIEW_VERB "Preview" - - IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_FOLDER_OPTIONS "Mappe valg" + IDS_RECYCLEBIN_LOCATION "Papirkurv localtion" + IDS_RECYCLEBIN_DISKSPACE "Ledig plass" + IDS_PICK_ICON_TITLE "Velg Ikon" + IDS_PICK_ICON_FILTER "Ikon Fil(*.ico, *.icl, *.exe, *.dll)\0*.ico;*.icl;*.exe;*.dll\0" + IDS_OPEN_WITH_FILTER "Kjrbare filer\0*.exe\0" + IDS_DIRECTORY "Mappe" + IDS_VIRTUAL_DRIVER "Virtuell enhet driver" + IDS_BAT_FILE "ReactOS Batch fil" + IDS_CMD_FILE "ReactOS Kommando skript" + IDS_COM_FILE "Dos applikasjon" + IDS_CPL_FILE "Kontrollpanel enhet" + IDS_CUR_FILE "Markr" + IDS_DLL_FILE "Applikasjon utvidelse" + IDS_DRV_FILE "Enhet driver" + IDS_EXE_FILE "Applikasjon" + IDS_FON_FILE "Skrift fil" + IDS_TTF_FILE "TrueType skrift fil" + IDS_HLP_FILE "Hjelp fil" + IDS_INI_FILE "Konfigurasjon innstilling" + IDS_LNK_FILE "Snarvei" + IDS_SYS_FILE "Systemfil" END diff --git a/reactos/dll/win32/shell32/shell32.rc b/reactos/dll/win32/shell32/shell32.rc index a6318e2c88f..ac7834b0f25 100644 --- a/reactos/dll/win32/shell32/shell32.rc +++ b/reactos/dll/win32/shell32/shell32.rc @@ -63,7 +63,7 @@ END #include "lang/ja-JP.rc" #include "lang/ko-KR.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/pt-BR.rc" #include "lang/pt-PT.rc" diff --git a/reactos/dll/win32/shimgvw/lang/de-DE.rc b/reactos/dll/win32/shimgvw/lang/de-DE.rc new file mode 100644 index 00000000000..7cf930eec19 --- /dev/null +++ b/reactos/dll/win32/shimgvw/lang/de-DE.rc @@ -0,0 +1,17 @@ +LANGUAGE LANG_GERMAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_APPTITLE "ReactOS Picture und Fax Viewer" + IDS_SETASDESKBG "Als Desktop Hintergrund einstellen" + + /* Tooltips */ + IDS_TOOLTIP_NEXT_PIC "Nchstes Bild" + IDS_TOOLTIP_PREV_PIC "Vorheriges Bild" + IDS_TOOLTIP_ZOOM_IN "Zoom In (+)" + IDS_TOOLTIP_ZOOM_OUT "Zoom Out (-)" + IDS_TOOLTIP_ROT_CLOCKW "Drehen im Uhrzeigersinn (Strg+K)" + IDS_TOOLTIP_ROT_COUNCW "Drehen gegen den Uhrzeigersinn (Strg+L)" + IDS_TOOLTIP_PRINT "Drucken (Strg+P)" + IDS_TOOLTIP_SAVEAS "Speichern unter... (Strg+S)" +END diff --git a/reactos/dll/win32/shimgvw/lang/no-NO.rc b/reactos/dll/win32/shimgvw/lang/no-NO.rc new file mode 100644 index 00000000000..5acffadc7a5 --- /dev/null +++ b/reactos/dll/win32/shimgvw/lang/no-NO.rc @@ -0,0 +1,17 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE +BEGIN + IDS_APPTITLE "ReactOS bilde og Faks Viser" + IDS_SETASDESKBG "Sett som skrivebord bakgrunn" + + /* Tooltips */ + IDS_TOOLTIP_NEXT_PIC "Neste bilde" + IDS_TOOLTIP_PREV_PIC "Forrige bilde" + IDS_TOOLTIP_ZOOM_IN "Forstrre (+)" + IDS_TOOLTIP_ZOOM_OUT "Forminske (-)" + IDS_TOOLTIP_ROT_CLOCKW "Med urviseren (Ctrl+K)" + IDS_TOOLTIP_ROT_COUNCW "Dreie mot urviseren (Ctrl+L)" + IDS_TOOLTIP_PRINT "Skriv ut (Ctrl+P)" + IDS_TOOLTIP_SAVEAS "Lagre som... (Ctrl+S)" +END diff --git a/reactos/dll/win32/shimgvw/rsrc.rc b/reactos/dll/win32/shimgvw/rsrc.rc index 07af2f81a6a..83ce5c9d9bd 100644 --- a/reactos/dll/win32/shimgvw/rsrc.rc +++ b/reactos/dll/win32/shimgvw/rsrc.rc @@ -2,8 +2,10 @@ #include "resource.h" #include "lang/cs-CZ.rc" +#include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" +#include "lang/no-NO.rc" #include "lang/lt-LT.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/syssetup/lang/nb-NO.rc b/reactos/dll/win32/syssetup/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/syssetup/lang/nb-NO.rc rename to reactos/dll/win32/syssetup/lang/no-NO.rc diff --git a/reactos/dll/win32/syssetup/syssetup.rc b/reactos/dll/win32/syssetup/syssetup.rc index 7a415d663d1..a7bcbe4ed3d 100644 --- a/reactos/dll/win32/syssetup/syssetup.rc +++ b/reactos/dll/win32/syssetup/syssetup.rc @@ -52,7 +52,7 @@ IDR_GPL RT_TEXT "COPYING" #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/user32/lang/nb-NO.rc b/reactos/dll/win32/user32/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/user32/lang/nb-NO.rc rename to reactos/dll/win32/user32/lang/no-NO.rc diff --git a/reactos/dll/win32/user32/user32.rc b/reactos/dll/win32/user32/user32.rc index 76735b68b9a..230c7f96f18 100644 --- a/reactos/dll/win32/user32/user32.rc +++ b/reactos/dll/win32/user32/user32.rc @@ -94,7 +94,7 @@ OBM_MNARROW BITMAP "resources/obm_mnarrow.bmp" #include "lang/id-ID.rc" #include "lang/ja-JP.rc" #include "lang/nl-NL.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/userenv/lang/nb-NO.rc b/reactos/dll/win32/userenv/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/userenv/lang/nb-NO.rc rename to reactos/dll/win32/userenv/lang/no-NO.rc diff --git a/reactos/dll/win32/userenv/userenv.rc b/reactos/dll/win32/userenv/userenv.rc index a05ff2a0b4e..2f64786b6fb 100644 --- a/reactos/dll/win32/userenv/userenv.rc +++ b/reactos/dll/win32/userenv/userenv.rc @@ -48,7 +48,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/nl-NL.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/subsystems/ntvdm/lang/nb-NO.rc b/reactos/subsystems/ntvdm/lang/no-NO.rc similarity index 100% rename from reactos/subsystems/ntvdm/lang/nb-NO.rc rename to reactos/subsystems/ntvdm/lang/no-NO.rc diff --git a/reactos/subsystems/ntvdm/rsrc.rc b/reactos/subsystems/ntvdm/rsrc.rc index 54fa9c08bc4..e5d40760788 100644 --- a/reactos/subsystems/ntvdm/rsrc.rc +++ b/reactos/subsystems/ntvdm/rsrc.rc @@ -12,7 +12,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/ja-JP.rc" -#include "lang/nb-NO.rc" +#include "lang/no-NO.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" #include "lang/pl-PL.rc" From 5c39323e08effe98ebd4a425e5ee9252eec57769 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 14:12:32 +0000 Subject: [PATCH 063/304] - Minor coding style improvement svn path=/trunk/; revision=35005 --- reactos/dll/win32/kernel32/synch/event.c | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/reactos/dll/win32/kernel32/synch/event.c b/reactos/dll/win32/kernel32/synch/event.c index 6a02b469cc1..0563d0738b5 100644 --- a/reactos/dll/win32/kernel32/synch/event.c +++ b/reactos/dll/win32/kernel32/synch/event.c @@ -9,7 +9,6 @@ /* INCLUDES *****************************************************************/ #include - #define NDEBUG #include @@ -73,13 +72,16 @@ CreateEventExW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, /* Now check if we got a name */ if (lpName) RtlInitUnicodeString(&ObjectName, lpName); + /* Check for invalid flags */ if (dwFlags & ~(CREATE_EVENT_INITIAL_SET | CREATE_EVENT_MANUAL_RESET)) { + /* Fail */ SetLastError(ERROR_INVALID_PARAMETER); return NULL; } - InitialState = (dwFlags & CREATE_EVENT_INITIAL_SET) != 0; + /* Set initial state and event type */ + InitialState = (dwFlags & CREATE_EVENT_INITIAL_SET) ? TRUE : FALSE; EventType = (dwFlags & CREATE_EVENT_MANUAL_RESET) ? NotificationEvent : SynchronizationEvent; /* Now convert the object attributes */ @@ -128,12 +130,11 @@ CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, { DWORD dwFlags = 0; - if (bManualReset) - dwFlags |= CREATE_EVENT_MANUAL_RESET; - - if (bInitialState) - dwFlags |= CREATE_EVENT_INITIAL_SET; + /* Set new flags */ + if (bManualReset) dwFlags |= CREATE_EVENT_MANUAL_RESET; + if (bInitialState) dwFlags |= CREATE_EVENT_INITIAL_SET; + /* Call the newer API */ return CreateEventExA(lpEventAttributes, lpName, dwFlags, @@ -149,12 +150,11 @@ CreateEventW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, { DWORD dwFlags = 0; - if (bManualReset) - dwFlags |= CREATE_EVENT_MANUAL_RESET; - - if (bInitialState) - dwFlags |= CREATE_EVENT_INITIAL_SET; + /* Set new flags */ + if (bManualReset) dwFlags |= CREATE_EVENT_MANUAL_RESET; + if (bInitialState) dwFlags |= CREATE_EVENT_INITIAL_SET; + /* Call the newer API */ return CreateEventExW(lpEventAttributes, lpName, dwFlags, From ad456a2ec45c308a78fc6b4e707af2eee5a33663 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 14:18:52 +0000 Subject: [PATCH 064/304] - Fix my broken indentation svn path=/trunk/; revision=35006 --- reactos/dll/win32/kernel32/synch/event.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/kernel32/synch/event.c b/reactos/dll/win32/kernel32/synch/event.c index 0563d0738b5..d39c0aaccc5 100644 --- a/reactos/dll/win32/kernel32/synch/event.c +++ b/reactos/dll/win32/kernel32/synch/event.c @@ -80,7 +80,7 @@ CreateEventExW(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, return NULL; } - /* Set initial state and event type */ + /* Set initial state and event type */ InitialState = (dwFlags & CREATE_EVENT_INITIAL_SET) ? TRUE : FALSE; EventType = (dwFlags & CREATE_EVENT_MANUAL_RESET) ? NotificationEvent : SynchronizationEvent; @@ -130,11 +130,11 @@ CreateEventA(IN LPSECURITY_ATTRIBUTES lpEventAttributes OPTIONAL, { DWORD dwFlags = 0; - /* Set new flags */ + /* Set new flags */ if (bManualReset) dwFlags |= CREATE_EVENT_MANUAL_RESET; if (bInitialState) dwFlags |= CREATE_EVENT_INITIAL_SET; - /* Call the newer API */ + /* Call the newer API */ return CreateEventExA(lpEventAttributes, lpName, dwFlags, From 82b0b0ee03b732fc860444fbf65b4a2f01512a11 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 14:19:05 +0000 Subject: [PATCH 065/304] - Fix 2 warnings svn path=/trunk/; revision=35007 --- reactos/dll/win32/dbghelp/pe_module.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/dbghelp/pe_module.c b/reactos/dll/win32/dbghelp/pe_module.c index 3027f5ba00c..6d5f85e998e 100644 --- a/reactos/dll/win32/dbghelp/pe_module.c +++ b/reactos/dll/win32/dbghelp/pe_module.c @@ -138,7 +138,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, else WINE_ERR("-Unable to peruse .DBG file %s (%s)\n", dbg_name, debugstr_a(tmp)); - if (dbg_mapping) UnmapViewOfFile(dbg_mapping); + if (dbg_mapping) UnmapViewOfFile((PVOID)dbg_mapping); if (hMap) CloseHandle(hMap); if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); return ret; @@ -266,7 +266,7 @@ static BOOL pe_load_export_debug_info(const struct process* pcs, for (j = 0; j < exports->NumberOfNames; j++) if ((ordinals[j] == i) && names[j]) break; if (j < exports->NumberOfNames) continue; - snprintf(buffer, sizeof(buffer), "%d", i + exports->Base); + snprintf(buffer, sizeof(buffer), "%lu", i + exports->Base); symt_new_public(module, NULL, buffer, base + (DWORD)functions[i], 1, TRUE /* FIXME */, TRUE /* FIXME */); } From 6a232666352ef56028901df6cc9f19c549dcfca9 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 14:27:43 +0000 Subject: [PATCH 066/304] - PCHify Acledit, Beepmidi, Cards, Crtdll, Dhcpsvc, Lpk, Lsasrv, uext2, ufat, untfs, ws2help, wshtcpip, and wsock32 svn path=/trunk/; revision=35008 --- reactos/dll/win32/acledit/acledit.c | 3 +-- reactos/dll/win32/acledit/acledit.rbuild | 1 + reactos/dll/win32/acledit/acledit.rc | 3 +-- reactos/dll/win32/acledit/acleditint.h | 4 ++++ reactos/dll/win32/acledit/resource.h | 8 -------- reactos/dll/win32/acledit/stubs.c | 2 +- reactos/dll/win32/beepmidi/beepmidi.c | 11 +---------- reactos/dll/win32/beepmidi/beepmidi.h | 15 +++++++++++++++ reactos/dll/win32/beepmidi/beepmidi.rbuild | 1 + reactos/dll/win32/cards/cards.c | 3 --- reactos/dll/win32/cards/cards.h | 3 +++ reactos/dll/win32/cards/cards.rbuild | 1 + reactos/dll/win32/cards/cards.rc | 2 +- reactos/dll/win32/crtdll/dllmain.c | 5 ----- reactos/dll/win32/crtdll/precomp.h | 6 ++++++ reactos/dll/win32/dhcpcsvc/dhcpcsvc.c | 6 +----- reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild | 1 + reactos/dll/win32/dhcpcsvc/dhcpsvc.h | 10 ++++++++++ reactos/dll/win32/lpk/lpk.rbuild | 2 +- reactos/dll/win32/lsasrv/lsarpc.c | 9 +-------- reactos/dll/win32/lsasrv/lsasrv.c | 6 +----- reactos/dll/win32/lsasrv/lsasrv.rbuild | 1 + reactos/dll/win32/lsasrv/precomp.h | 7 +++++++ reactos/dll/win32/uext2/precomp.h | 5 +++++ reactos/dll/win32/uext2/uext2.c | 6 +----- reactos/dll/win32/uext2/uext2.rbuild | 1 + reactos/dll/win32/ufat/precomp.h | 5 +++++ reactos/dll/win32/ufat/ufat.c | 6 +----- reactos/dll/win32/ufat/ufat.rbuild | 1 + reactos/dll/win32/untfs/precomp.h | 5 +++++ reactos/dll/win32/untfs/untfs.c | 6 +----- reactos/dll/win32/untfs/untfs.rbuild | 1 + reactos/dll/win32/ws2help/ws2help.rbuild | 1 + reactos/dll/win32/wshirda/wshirda.rbuild | 1 + reactos/dll/win32/wshtcpip/wshtcpip.rbuild | 1 + reactos/dll/win32/wsock32/stubs.c | 8 +++----- reactos/dll/win32/wsock32/wsock32.h | 2 ++ reactos/dll/win32/wsock32/wsock32.rbuild | 1 + 38 files changed, 89 insertions(+), 71 deletions(-) delete mode 100644 reactos/dll/win32/acledit/resource.h create mode 100644 reactos/dll/win32/beepmidi/beepmidi.h create mode 100644 reactos/dll/win32/dhcpcsvc/dhcpsvc.h create mode 100644 reactos/dll/win32/lsasrv/precomp.h create mode 100644 reactos/dll/win32/uext2/precomp.h create mode 100644 reactos/dll/win32/ufat/precomp.h create mode 100644 reactos/dll/win32/untfs/precomp.h create mode 100644 reactos/dll/win32/wsock32/wsock32.h diff --git a/reactos/dll/win32/acledit/acledit.c b/reactos/dll/win32/acledit/acledit.c index 94119f0f36f..64367c4df05 100644 --- a/reactos/dll/win32/acledit/acledit.c +++ b/reactos/dll/win32/acledit/acledit.c @@ -29,9 +29,8 @@ * UPDATE HISTORY: * 07/09/2004 Created */ -#include + #include "acleditint.h" -#include "resource.h" HINSTANCE hDllInstance; diff --git a/reactos/dll/win32/acledit/acledit.rbuild b/reactos/dll/win32/acledit/acledit.rbuild index e71a8ee9ccc..ea15f9f04c9 100644 --- a/reactos/dll/win32/acledit/acledit.rbuild +++ b/reactos/dll/win32/acledit/acledit.rbuild @@ -8,6 +8,7 @@ kernel32 advapi32 user32 + acleditint.h acledit.c stubs.c acledit.rc diff --git a/reactos/dll/win32/acledit/acledit.rc b/reactos/dll/win32/acledit/acledit.rc index 85623bed8bc..d1b0ec23a20 100644 --- a/reactos/dll/win32/acledit/acledit.rc +++ b/reactos/dll/win32/acledit/acledit.rc @@ -1,5 +1,4 @@ -#include -#include "resource.h" +#include "acleditint.h" #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Access Control Editor\0" diff --git a/reactos/dll/win32/acledit/acleditint.h b/reactos/dll/win32/acledit/acleditint.h index 3b10fa5f4f3..298265a4016 100644 --- a/reactos/dll/win32/acledit/acleditint.h +++ b/reactos/dll/win32/acledit/acleditint.h @@ -1,6 +1,10 @@ #ifndef __ACLEDITINT_H #define __ACLEDITINT_H +#include + +#define IDI_DEVMGR 100 + extern HINSTANCE hDllInstance; typedef struct _ACL_HELP_CONTROL diff --git a/reactos/dll/win32/acledit/resource.h b/reactos/dll/win32/acledit/resource.h deleted file mode 100644 index 89c5d02b7cf..00000000000 --- a/reactos/dll/win32/acledit/resource.h +++ /dev/null @@ -1,8 +0,0 @@ -#ifndef __DEVMGR_RESOURCE_H -#define __DEVMGR_RESOURCE_H - -#define IDI_DEVMGR 100 - -#endif /* __DEVMGR_RESOURCE_H */ - -/* EOF */ diff --git a/reactos/dll/win32/acledit/stubs.c b/reactos/dll/win32/acledit/stubs.c index b679c6036aa..90dd94563a7 100644 --- a/reactos/dll/win32/acledit/stubs.c +++ b/reactos/dll/win32/acledit/stubs.c @@ -13,7 +13,7 @@ * UPDATE HISTORY: * 07/09/2004 Created */ -#include + #include "acleditint.h" ULONG DbgPrint(PCH Format,...); diff --git a/reactos/dll/win32/beepmidi/beepmidi.c b/reactos/dll/win32/beepmidi/beepmidi.c index 8665bec17d4..a80c78eab16 100644 --- a/reactos/dll/win32/beepmidi/beepmidi.c +++ b/reactos/dll/win32/beepmidi/beepmidi.c @@ -40,16 +40,7 @@ */ #define CONTINUOUS_NOTES -#define WIN32_NO_STATUS -#define NTOS_MODE_USER -#include -#include -#include -#include -#include - -#include -#include +#include /*#define DPRINT printf*/ #define DPRINT FakePrintf diff --git a/reactos/dll/win32/beepmidi/beepmidi.h b/reactos/dll/win32/beepmidi/beepmidi.h new file mode 100644 index 00000000000..fa144532f92 --- /dev/null +++ b/reactos/dll/win32/beepmidi/beepmidi.h @@ -0,0 +1,15 @@ +#ifndef _BEEPMIDI_H_ +#define _BEEPMIDI_H_ + +#define WIN32_NO_STATUS +#define NTOS_MODE_USER +#include +#include +#include +#include +#include + +#include +#include + +#endif diff --git a/reactos/dll/win32/beepmidi/beepmidi.rbuild b/reactos/dll/win32/beepmidi/beepmidi.rbuild index 156d95cba4f..7485183661d 100644 --- a/reactos/dll/win32/beepmidi/beepmidi.rbuild +++ b/reactos/dll/win32/beepmidi/beepmidi.rbuild @@ -5,5 +5,6 @@ kernel32 user32 winmm + beepmidi.h beepmidi.c diff --git a/reactos/dll/win32/cards/cards.c b/reactos/dll/win32/cards/cards.c index eed5ce0d673..a1e8bf3ea9d 100644 --- a/reactos/dll/win32/cards/cards.c +++ b/reactos/dll/win32/cards/cards.c @@ -18,9 +18,6 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include - -#include "windows.h" #include "cards.h" HBITMAP g_CardBitmaps[MAX_CARD_BITMAPS]; diff --git a/reactos/dll/win32/cards/cards.h b/reactos/dll/win32/cards/cards.h index 92b33d61a64..7b1e4b7d977 100644 --- a/reactos/dll/win32/cards/cards.h +++ b/reactos/dll/win32/cards/cards.h @@ -21,6 +21,9 @@ #ifndef _CARDS_H #define _CARDS_H +#include +#include "windows.h" + /* * 52 card faces + * 12 card backs + diff --git a/reactos/dll/win32/cards/cards.rbuild b/reactos/dll/win32/cards/cards.rbuild index cab5fdb975d..d9d66145fa0 100644 --- a/reactos/dll/win32/cards/cards.rbuild +++ b/reactos/dll/win32/cards/cards.rbuild @@ -8,6 +8,7 @@ kernel32 gdi32 user32 + cards.h cards.c cards.rc diff --git a/reactos/dll/win32/cards/cards.rc b/reactos/dll/win32/cards/cards.rc index b17613f783a..10858471304 100644 --- a/reactos/dll/win32/cards/cards.rc +++ b/reactos/dll/win32/cards/cards.rc @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include +#include "cards.h" #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "Cardplaying Helper DLL\0" diff --git a/reactos/dll/win32/crtdll/dllmain.c b/reactos/dll/win32/crtdll/dllmain.c index a97de0cc312..9af025af63b 100644 --- a/reactos/dll/win32/crtdll/dllmain.c +++ b/reactos/dll/win32/crtdll/dllmain.c @@ -17,12 +17,7 @@ */ #include -#include -#include -#include -#include -#include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(crtdll); diff --git a/reactos/dll/win32/crtdll/precomp.h b/reactos/dll/win32/crtdll/precomp.h index d30dfa7109e..97479189de9 100644 --- a/reactos/dll/win32/crtdll/precomp.h +++ b/reactos/dll/win32/crtdll/precomp.h @@ -5,5 +5,11 @@ #include #include #include +#include +#include +#include +#include + +#include "wine/debug.h" #endif /* _CRT_PRECOMP_H */ diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c index cf382b94751..1c35b35c7dd 100644 --- a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c +++ b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c @@ -6,11 +6,7 @@ * COPYRIGHT: Copyright 2005 Art Yerkes */ -#include -#include -#include -#include -#include +#include #define NDEBUG #include diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild index 6964d56c0a9..c88b3bfbef5 100644 --- a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild +++ b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild @@ -8,6 +8,7 @@ msvcrt ws2_32 iphlpapi + dhcpsvc.h dhcpcsvc.c dhcpcsvc.rc dhcpcsvc.spec diff --git a/reactos/dll/win32/dhcpcsvc/dhcpsvc.h b/reactos/dll/win32/dhcpcsvc/dhcpsvc.h new file mode 100644 index 00000000000..d2293075aab --- /dev/null +++ b/reactos/dll/win32/dhcpcsvc/dhcpsvc.h @@ -0,0 +1,10 @@ +#ifndef _DHCPSVC_H_ +#define _DHCPSVC_H_ + +#include +#include +#include +#include +#include + +#endif diff --git a/reactos/dll/win32/lpk/lpk.rbuild b/reactos/dll/win32/lpk/lpk.rbuild index fe83c7ec489..efe21000a90 100644 --- a/reactos/dll/win32/lpk/lpk.rbuild +++ b/reactos/dll/win32/lpk/lpk.rbuild @@ -9,7 +9,7 @@ kernel32 user32 usp10 - + ros_lpk.h dllmain.c stub.c diff --git a/reactos/dll/win32/lsasrv/lsarpc.c b/reactos/dll/win32/lsasrv/lsarpc.c index 97b7535eab1..e3639814947 100644 --- a/reactos/dll/win32/lsasrv/lsarpc.c +++ b/reactos/dll/win32/lsasrv/lsarpc.c @@ -1,13 +1,6 @@ /* INCLUDES ****************************************************************/ -#define WIN32_NO_STATUS -#include -#include -#define NTOS_MODE_USER -#include - -#include "lsa_s.h" - +#include "precomp.h" #define NDEBUG #include diff --git a/reactos/dll/win32/lsasrv/lsasrv.c b/reactos/dll/win32/lsasrv/lsasrv.c index 94d643bb41c..de4e15fe71e 100644 --- a/reactos/dll/win32/lsasrv/lsasrv.c +++ b/reactos/dll/win32/lsasrv/lsasrv.c @@ -1,8 +1,4 @@ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include - +#include "precomp.h" #define NDEBUG #include diff --git a/reactos/dll/win32/lsasrv/lsasrv.rbuild b/reactos/dll/win32/lsasrv/lsasrv.rbuild index b87a23a0681..966f1b0d6c1 100644 --- a/reactos/dll/win32/lsasrv/lsasrv.rbuild +++ b/reactos/dll/win32/lsasrv/lsasrv.rbuild @@ -9,6 +9,7 @@ kernel32 rpcrt4 pseh + precomp.h lsarpc.c lsasrv.c lsasrv.rc diff --git a/reactos/dll/win32/lsasrv/precomp.h b/reactos/dll/win32/lsasrv/precomp.h new file mode 100644 index 00000000000..271ad967428 --- /dev/null +++ b/reactos/dll/win32/lsasrv/precomp.h @@ -0,0 +1,7 @@ +#define WIN32_NO_STATUS +#include +#include +#define NTOS_MODE_USER +#include + +#include "lsa_s.h" diff --git a/reactos/dll/win32/uext2/precomp.h b/reactos/dll/win32/uext2/precomp.h new file mode 100644 index 00000000000..d869f1f6355 --- /dev/null +++ b/reactos/dll/win32/uext2/precomp.h @@ -0,0 +1,5 @@ +#define WIN32_NO_STATUS +#include +#define NTOS_MODE_USER +#include +#include diff --git a/reactos/dll/win32/uext2/uext2.c b/reactos/dll/win32/uext2/uext2.c index 2e3ecfe0367..c211231ecdf 100644 --- a/reactos/dll/win32/uext2/uext2.c +++ b/reactos/dll/win32/uext2/uext2.c @@ -7,11 +7,7 @@ * PROGRAMMERS: Pierre Schweitzer */ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include +#include "precomp.h" INT WINAPI DllMain( diff --git a/reactos/dll/win32/uext2/uext2.rbuild b/reactos/dll/win32/uext2/uext2.rbuild index 5725bb4aff1..8cbb9bd5d83 100644 --- a/reactos/dll/win32/uext2/uext2.rbuild +++ b/reactos/dll/win32/uext2/uext2.rbuild @@ -5,6 +5,7 @@ 0x0600 ext2lib ntdll + precomp.h uext2.c uext2.rc diff --git a/reactos/dll/win32/ufat/precomp.h b/reactos/dll/win32/ufat/precomp.h new file mode 100644 index 00000000000..d869f1f6355 --- /dev/null +++ b/reactos/dll/win32/ufat/precomp.h @@ -0,0 +1,5 @@ +#define WIN32_NO_STATUS +#include +#define NTOS_MODE_USER +#include +#include diff --git a/reactos/dll/win32/ufat/ufat.c b/reactos/dll/win32/ufat/ufat.c index 8a876a29ab3..9bd65ad49db 100644 --- a/reactos/dll/win32/ufat/ufat.c +++ b/reactos/dll/win32/ufat/ufat.c @@ -7,11 +7,7 @@ * PROGRAMMERS: Herv Poussineau (hpoussin@reactos.org) */ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include +#include "precomp.h" INT WINAPI DllMain( diff --git a/reactos/dll/win32/ufat/ufat.rbuild b/reactos/dll/win32/ufat/ufat.rbuild index 6ecbaab768d..cbd96abca36 100644 --- a/reactos/dll/win32/ufat/ufat.rbuild +++ b/reactos/dll/win32/ufat/ufat.rbuild @@ -5,6 +5,7 @@ 0x0600 vfatlib ntdll + precomp.h ufat.c ufat.rc diff --git a/reactos/dll/win32/untfs/precomp.h b/reactos/dll/win32/untfs/precomp.h new file mode 100644 index 00000000000..d869f1f6355 --- /dev/null +++ b/reactos/dll/win32/untfs/precomp.h @@ -0,0 +1,5 @@ +#define WIN32_NO_STATUS +#include +#define NTOS_MODE_USER +#include +#include diff --git a/reactos/dll/win32/untfs/untfs.c b/reactos/dll/win32/untfs/untfs.c index f359e5f90e6..7a2531ddf60 100644 --- a/reactos/dll/win32/untfs/untfs.c +++ b/reactos/dll/win32/untfs/untfs.c @@ -7,11 +7,7 @@ * PROGRAMMERS: Pierre Schweitzer */ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include +#include "precomp.h" INT WINAPI DllMain( diff --git a/reactos/dll/win32/untfs/untfs.rbuild b/reactos/dll/win32/untfs/untfs.rbuild index 7652bd6ec11..3e2b400545f 100644 --- a/reactos/dll/win32/untfs/untfs.rbuild +++ b/reactos/dll/win32/untfs/untfs.rbuild @@ -5,6 +5,7 @@ 0x0600 ntfslib ntdll + precomp.h untfs.c untfs.rc diff --git a/reactos/dll/win32/ws2help/ws2help.rbuild b/reactos/dll/win32/ws2help/ws2help.rbuild index 6f3a0a69dc1..314d05a8587 100644 --- a/reactos/dll/win32/ws2help/ws2help.rbuild +++ b/reactos/dll/win32/ws2help/ws2help.rbuild @@ -5,6 +5,7 @@ ntdll kernel32 ws2_32 + ws2help.h ws2help.c ws2help.rc diff --git a/reactos/dll/win32/wshirda/wshirda.rbuild b/reactos/dll/win32/wshirda/wshirda.rbuild index 5704b4bbb0f..7cc4ecb8fe0 100644 --- a/reactos/dll/win32/wshirda/wshirda.rbuild +++ b/reactos/dll/win32/wshirda/wshirda.rbuild @@ -5,6 +5,7 @@ ntdll kernel32 ws2_32 + wshirda.h wshirda.c wshirda.rc diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild index 0fd9a7d9eb6..a3d8f6d162a 100644 --- a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild +++ b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild @@ -6,6 +6,7 @@ ntdll kernel32 ws2_32 + wshtcpip.h wshtcpip.c wshtcpip.rc diff --git a/reactos/dll/win32/wsock32/stubs.c b/reactos/dll/win32/wsock32/stubs.c index 930eb44e751..15c1bffc168 100644 --- a/reactos/dll/win32/wsock32/stubs.c +++ b/reactos/dll/win32/wsock32/stubs.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS WinSock DLL * FILE: stubs.c @@ -7,9 +6,8 @@ * PROGRAMMERS: Ge van Geldorp (ge@gse.nl) * REVISIONS: */ -#include -#include -//#include + +#include "wsock32.h" /* * @unimplemented diff --git a/reactos/dll/win32/wsock32/wsock32.h b/reactos/dll/win32/wsock32/wsock32.h new file mode 100644 index 00000000000..b0ec32c857a --- /dev/null +++ b/reactos/dll/win32/wsock32/wsock32.h @@ -0,0 +1,2 @@ +#include +#include diff --git a/reactos/dll/win32/wsock32/wsock32.rbuild b/reactos/dll/win32/wsock32/wsock32.rbuild index 757702b4547..299cdc0d51b 100644 --- a/reactos/dll/win32/wsock32/wsock32.rbuild +++ b/reactos/dll/win32/wsock32/wsock32.rbuild @@ -4,6 +4,7 @@ ntdll kernel32 ws2_32 + wsock32.h stubs.c wsock32.rc From 0ebeef15a1e4e8fc430fc50646b13c66e09059cc Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 14:54:19 +0000 Subject: [PATCH 067/304] - Fix broken VideoPortSignalDmaComplete definition - Cleanup and reformat dma.c and add missing functions (not yet exported) svn path=/trunk/; revision=35009 --- reactos/drivers/video/videoprt/dma.c | 337 +++++++++++++++++++-------- reactos/include/ddk/video.h | 2 +- 2 files changed, 235 insertions(+), 104 deletions(-) diff --git a/reactos/drivers/video/videoprt/dma.c b/reactos/drivers/video/videoprt/dma.c index ffc19d386aa..9986050cb61 100644 --- a/reactos/drivers/video/videoprt/dma.c +++ b/reactos/drivers/video/videoprt/dma.c @@ -1,143 +1,274 @@ /* - * VideoPort driver - * - * Copyright (C) 2002, 2003, 2004 ReactOS Team - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; see the file COPYING.LIB. - * If not, write to the Free Software Foundation, - * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * + * PROJECT: ReactOS Videoport + * LICENSE: GPL - See COPYING in the top level directory + * FILE: drivers/video/videoprt/dma.c + * PURPOSE: Videoport Direct Memory Access Support + * PROGRAMMERS: ... */ -#include "videoprt.h" +/* INCLUDES ******************************************************************/ + +#include +#define NDEBUG +#include /* PUBLIC FUNCTIONS ***********************************************************/ /* * @implemented */ - -PVOID NTAPI -VideoPortAllocateCommonBuffer( - IN PVOID HwDeviceExtension, - IN PVP_DMA_ADAPTER VpDmaAdapter, - IN ULONG DesiredLength, - OUT PPHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled, - PVOID Reserved) +PVOID +NTAPI +VideoPortAllocateCommonBuffer(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter, + IN ULONG DesiredLength, + OUT PPHYSICAL_ADDRESS LogicalAddress, + IN BOOLEAN CacheEnabled, + PVOID Reserved) { - return HalAllocateCommonBuffer( - (PADAPTER_OBJECT)VpDmaAdapter, - DesiredLength, - LogicalAddress, - CacheEnabled); + /* Forward to HAL */ + return HalAllocateCommonBuffer((PADAPTER_OBJECT)VpDmaAdapter, + DesiredLength, + LogicalAddress, + CacheEnabled); } /* * @implemented */ - -VOID NTAPI -VideoPortReleaseCommonBuffer( - IN PVOID HwDeviceExtension, - IN PVP_DMA_ADAPTER VpDmaAdapter, - IN ULONG Length, - IN PHYSICAL_ADDRESS LogicalAddress, - IN PVOID VirtualAddress, - IN BOOLEAN CacheEnabled) +VOID +NTAPI +VideoPortReleaseCommonBuffer(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter, + IN ULONG Length, + IN PHYSICAL_ADDRESS LogicalAddress, + IN PVOID VirtualAddress, + IN BOOLEAN CacheEnabled) { - HalFreeCommonBuffer( - (PADAPTER_OBJECT)VpDmaAdapter, - Length, - LogicalAddress, - VirtualAddress, - CacheEnabled); + /* Forward to HAL */ + HalFreeCommonBuffer((PADAPTER_OBJECT)VpDmaAdapter, + Length, + LogicalAddress, + VirtualAddress, + CacheEnabled); } /* * @unimplemented */ - -VOID NTAPI -VideoPortPutDmaAdapter( - IN PVOID HwDeviceExtension, - IN PVP_DMA_ADAPTER VpDmaAdapter) +VOID +NTAPI +VideoPortPutDmaAdapter(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter) { UNIMPLEMENTED; } /* - * @unimplemented + * @implemented */ - -PVP_DMA_ADAPTER NTAPI -VideoPortGetDmaAdapter( - IN PVOID HwDeviceExtension, - IN PVP_DEVICE_DESCRIPTION VpDeviceExtension) +PVP_DMA_ADAPTER +NTAPI +VideoPortGetDmaAdapter(IN PVOID HwDeviceExtension, + IN PVP_DEVICE_DESCRIPTION VpDeviceExtension) { - DEVICE_DESCRIPTION DeviceDescription; - PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension; - ULONG NumberOfMapRegisters; - PVP_DMA_ADAPTER Adapter; + DEVICE_DESCRIPTION DeviceDescription; + PVIDEO_PORT_DEVICE_EXTENSION DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension); + ULONG NumberOfMapRegisters; - DeviceExtension = VIDEO_PORT_GET_DEVICE_EXTENSION(HwDeviceExtension); + /* Zero the structure */ + RtlZeroMemory(&DeviceDescription, + sizeof(DEVICE_DESCRIPTION)); - TRACE_(VIDEOPRT, "VideoPortGetDmaAdapter\n"); + /* Initialize the structure */ + DeviceDescription.Version = DEVICE_DESCRIPTION_VERSION; + DeviceDescription.Master = TRUE /* ?? */; + DeviceDescription.DmaWidth = Width8Bits; + DeviceDescription.DmaSpeed = Compatible; - DeviceDescription.Version = DEVICE_DESCRIPTION_VERSION; - DeviceDescription.Master = TRUE /* ?? */; - DeviceDescription.ScatterGather = VpDeviceExtension->ScatterGather; - DeviceDescription.DemandMode = FALSE /* ?? */; - DeviceDescription.AutoInitialize = FALSE /* ?? */; - DeviceDescription.Dma32BitAddresses = VpDeviceExtension->Dma32BitAddresses; - DeviceDescription.IgnoreCount = FALSE /* ?? */; - DeviceDescription.Reserved1 = FALSE; - DeviceDescription.BusNumber = DeviceExtension->SystemIoBusNumber; - DeviceDescription.DmaChannel = 0 /* ?? */; - DeviceDescription.InterfaceType = DeviceExtension->AdapterInterfaceType; - DeviceDescription.DmaWidth = Width8Bits; - DeviceDescription.DmaSpeed = Compatible; - DeviceDescription.MaximumLength = VpDeviceExtension->MaximumLength; - DeviceDescription.DmaPort = 0; + /* Copy data from caller's device extension */ + DeviceDescription.ScatterGather = VpDeviceExtension->ScatterGather; + DeviceDescription.Dma32BitAddresses = VpDeviceExtension->Dma32BitAddresses; + DeviceDescription.Dma64BitAddresses = VpDeviceExtension->Dma64BitAddresses; + DeviceDescription.MaximumLength = VpDeviceExtension->MaximumLength; - Adapter = - (PVP_DMA_ADAPTER)HalGetAdapter(&DeviceDescription, &NumberOfMapRegisters); - INFO_(VIDEOPRT, "Adapter %p\n", Adapter); - return(Adapter); + /* Copy data from the internal device extension */ + DeviceDescription.BusNumber = DeviceExtension->SystemIoBusNumber; + DeviceDescription.InterfaceType = DeviceExtension->AdapterInterfaceType; + + return (PVP_DMA_ADAPTER)HalGetAdapter(&DeviceDescription, + &NumberOfMapRegisters); } /* * @implemented */ -VOID NTAPI -VideoPortFreeCommonBuffer( IN PVOID HwDeviceExtension, - IN ULONG Length, - IN PVOID VirtualAddress, - IN PHYSICAL_ADDRESS LogicalAddress, - IN BOOLEAN CacheEnabled) +VOID +NTAPI +VideoPortFreeCommonBuffer(IN PVOID HwDeviceExtension, + IN ULONG Length, + IN PVOID VirtualAddress, + IN PHYSICAL_ADDRESS LogicalAddress, + IN BOOLEAN CacheEnabled) { - DEVICE_DESCRIPTION DeviceDescription; - PVP_DMA_ADAPTER VpDmaAdapter; + DEVICE_DESCRIPTION DeviceDescription; + PVP_DMA_ADAPTER VpDmaAdapter; - VpDmaAdapter = VideoPortGetDmaAdapter( - HwDeviceExtension, - (PVP_DEVICE_DESCRIPTION)&DeviceDescription); - - HalFreeCommonBuffer( - (PADAPTER_OBJECT)VpDmaAdapter, - Length, - LogicalAddress, - VirtualAddress, - CacheEnabled); + /* FIXME: Broken code*/ + VpDmaAdapter = VideoPortGetDmaAdapter(HwDeviceExtension, + (PVP_DEVICE_DESCRIPTION)&DeviceDescription); + HalFreeCommonBuffer((PADAPTER_OBJECT)VpDmaAdapter, + Length, + LogicalAddress, + VirtualAddress, + CacheEnabled); +} + +/* + * @unimplemented + */ +PVOID +NTAPI +VideoPortGetCommonBuffer(IN PVOID HwDeviceExtension, + IN ULONG DesiredLength, + IN ULONG Alignment, + OUT PPHYSICAL_ADDRESS LogicalAddress, + OUT PULONG pActualLength, + IN BOOLEAN CacheEnabled) +{ + UNIMPLEMENTED; + return NULL; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +VideoPortUnmapDmaMemory( + PVOID HwDeviceExtension, + PVOID VirtualAddress, + HANDLE ProcessHandle, + PDMA BoardMemoryHandle) +{ + /* Deprecated */ + return FALSE; +} + +/* + * @implemented + */ +PDMA +NTAPI +VideoPortMapDmaMemory(IN PVOID HwDeviceExtension, + IN PVIDEO_REQUEST_PACKET pVrp, + IN PHYSICAL_ADDRESS BoardAddress, + IN PULONG Length, + IN PULONG InIoSpace, + IN PVOID MappedUserEvent, + IN PVOID DisplayDriverEvent, + IN OUT PVOID *VirtualAddress) +{ + /* Deprecated */ + return NULL; +} + +/* + * @implemented + */ +VOID +NTAPI +VideoPortSetDmaContext(IN PVOID HwDeviceExtension, + OUT PDMA pDma, + IN PVOID InstanceContext) +{ + /* Deprecated */ + return; +} + +/* + * @implemented + */ +BOOLEAN +NTAPI +VideoPortSignalDmaComplete(IN PVOID HwDeviceExtension, + IN PDMA pDmaHandle) +{ + /* Deprecated */ + return FALSE; +} + +/* + * @unimplemented + */ +VP_STATUS +NTAPI +VideoPortStartDma(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter, + IN PVOID Mdl, + IN ULONG Offset, + IN OUT PULONG pLength, + IN PEXECUTE_DMA ExecuteDmaRoutine, + IN PVOID Context, + IN BOOLEAN WriteToDevice) +{ + UNIMPLEMENTED; + + /* Lie and return success */ + return NO_ERROR; +} + +/* + * @implemented + */ +PVOID +NTAPI +VideoPortGetDmaContext(IN PVOID HwDeviceExtension, + IN PDMA pDma) +{ + /* Deprecated */ + return NULL; +} + +/* + * @implemented + */ +PDMA +NTAPI +VideoPortDoDma(IN PVOID HwDeviceExtension, + IN PDMA pDma, + IN DMA_FLAGS DmaFlags) +{ + /* Deprecated */ + return NULL; +} + +/* + * @unimplemented + */ +PDMA +NTAPI +VideoPortAssociateEventsWithDmaHandle(IN PVOID HwDeviceExtension, + IN OUT PVIDEO_REQUEST_PACKET pVrp, + IN PVOID MappedUserEvent, + IN PVOID DisplayDriverEvent) +{ + UNIMPLEMENTED; + return NULL; +} + +/* + * @unimplemented + */ +VP_STATUS +NTAPI +VideoPortCompleteDma(IN PVOID HwDeviceExtension, + IN PVP_DMA_ADAPTER VpDmaAdapter, + IN PVP_SCATTER_GATHER_LIST VpScatterGather, + IN BOOLEAN WriteToDevice) +{ + UNIMPLEMENTED; + + /* Lie and return success */ + return NO_ERROR; } diff --git a/reactos/include/ddk/video.h b/reactos/include/ddk/video.h index e618718fe88..bfb1e24c383 100644 --- a/reactos/include/ddk/video.h +++ b/reactos/include/ddk/video.h @@ -1348,7 +1348,7 @@ BOOLEAN DDKAPI VideoPortSignalDmaComplete( IN PVOID HwDeviceExtension, - IN PVOID pDmaHandle); + IN PDMA pDmaHandle); VPAPI VOID From e5aa7fccf61a4a5685ea74597e2f8434898c2049 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 16:03:49 +0000 Subject: [PATCH 068/304] - Get rid of a confusing goto and call KiUnwaitThread directly. This was a remnant of some code refactoring. svn path=/trunk/; revision=35010 --- reactos/ntoskrnl/ke/apc.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/apc.c b/reactos/ntoskrnl/ke/apc.c index d3e4fefa9dd..688585526e8 100644 --- a/reactos/ntoskrnl/ke/apc.c +++ b/reactos/ntoskrnl/ke/apc.c @@ -207,7 +207,6 @@ KiInsertQueueApc(IN PKAPC Apc, Status = STATUS_KERNEL_APC; /* Wake up the thread */ -Unwait: KiUnwaitThread(Thread, Status, PriorityBoost); } else if (Thread->State == GateWait) @@ -240,7 +239,9 @@ Unwait: /* Set user-mode APC pending */ Thread->ApcState.UserApcPending = TRUE; Status = STATUS_USER_APC; - goto Unwait; + + /* Wake up the thread */ + KiUnwaitThread(Thread, Status, PriorityBoost); } /* Release dispatcher lock */ From 50560726e9a3deb2ad3a97fed2de61d4110aa32a Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 16:29:40 +0000 Subject: [PATCH 069/304] - Revert 35008 svn path=/trunk/; revision=35011 --- reactos/dll/win32/acledit/acledit.c | 3 ++- reactos/dll/win32/acledit/acledit.rbuild | 1 - reactos/dll/win32/acledit/acledit.rc | 3 ++- reactos/dll/win32/acledit/acleditint.h | 4 ---- reactos/dll/win32/acledit/resource.h | 8 ++++++++ reactos/dll/win32/acledit/stubs.c | 2 +- reactos/dll/win32/beepmidi/beepmidi.c | 11 ++++++++++- reactos/dll/win32/beepmidi/beepmidi.h | 15 --------------- reactos/dll/win32/beepmidi/beepmidi.rbuild | 1 - reactos/dll/win32/cards/cards.c | 3 +++ reactos/dll/win32/cards/cards.h | 3 --- reactos/dll/win32/cards/cards.rbuild | 1 - reactos/dll/win32/cards/cards.rc | 2 +- reactos/dll/win32/crtdll/dllmain.c | 5 +++++ reactos/dll/win32/crtdll/precomp.h | 6 ------ reactos/dll/win32/dbghelp/pe_module.c | 4 ++-- reactos/dll/win32/dhcpcsvc/dhcpcsvc.c | 6 +++++- reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild | 1 - reactos/dll/win32/dhcpcsvc/dhcpsvc.h | 10 ---------- reactos/dll/win32/lpk/lpk.rbuild | 2 +- reactos/dll/win32/lsasrv/lsarpc.c | 9 ++++++++- reactos/dll/win32/lsasrv/lsasrv.c | 6 +++++- reactos/dll/win32/lsasrv/lsasrv.rbuild | 1 - reactos/dll/win32/lsasrv/precomp.h | 7 ------- reactos/dll/win32/uext2/precomp.h | 5 ----- reactos/dll/win32/uext2/uext2.c | 6 +++++- reactos/dll/win32/uext2/uext2.rbuild | 1 - reactos/dll/win32/ufat/precomp.h | 5 ----- reactos/dll/win32/ufat/ufat.c | 6 +++++- reactos/dll/win32/ufat/ufat.rbuild | 1 - reactos/dll/win32/untfs/precomp.h | 5 ----- reactos/dll/win32/untfs/untfs.c | 6 +++++- reactos/dll/win32/untfs/untfs.rbuild | 1 - reactos/dll/win32/ws2help/ws2help.rbuild | 1 - reactos/dll/win32/wshirda/wshirda.rbuild | 1 - reactos/dll/win32/wshtcpip/wshtcpip.rbuild | 1 - reactos/dll/win32/wsock32/stubs.c | 8 +++++--- reactos/dll/win32/wsock32/wsock32.h | 2 -- reactos/dll/win32/wsock32/wsock32.rbuild | 1 - 39 files changed, 73 insertions(+), 91 deletions(-) create mode 100644 reactos/dll/win32/acledit/resource.h delete mode 100644 reactos/dll/win32/beepmidi/beepmidi.h delete mode 100644 reactos/dll/win32/dhcpcsvc/dhcpsvc.h delete mode 100644 reactos/dll/win32/lsasrv/precomp.h delete mode 100644 reactos/dll/win32/uext2/precomp.h delete mode 100644 reactos/dll/win32/ufat/precomp.h delete mode 100644 reactos/dll/win32/untfs/precomp.h delete mode 100644 reactos/dll/win32/wsock32/wsock32.h diff --git a/reactos/dll/win32/acledit/acledit.c b/reactos/dll/win32/acledit/acledit.c index 64367c4df05..94119f0f36f 100644 --- a/reactos/dll/win32/acledit/acledit.c +++ b/reactos/dll/win32/acledit/acledit.c @@ -29,8 +29,9 @@ * UPDATE HISTORY: * 07/09/2004 Created */ - +#include #include "acleditint.h" +#include "resource.h" HINSTANCE hDllInstance; diff --git a/reactos/dll/win32/acledit/acledit.rbuild b/reactos/dll/win32/acledit/acledit.rbuild index ea15f9f04c9..e71a8ee9ccc 100644 --- a/reactos/dll/win32/acledit/acledit.rbuild +++ b/reactos/dll/win32/acledit/acledit.rbuild @@ -8,7 +8,6 @@ kernel32 advapi32 user32 - acleditint.h acledit.c stubs.c acledit.rc diff --git a/reactos/dll/win32/acledit/acledit.rc b/reactos/dll/win32/acledit/acledit.rc index d1b0ec23a20..85623bed8bc 100644 --- a/reactos/dll/win32/acledit/acledit.rc +++ b/reactos/dll/win32/acledit/acledit.rc @@ -1,4 +1,5 @@ -#include "acleditint.h" +#include +#include "resource.h" #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Access Control Editor\0" diff --git a/reactos/dll/win32/acledit/acleditint.h b/reactos/dll/win32/acledit/acleditint.h index 298265a4016..3b10fa5f4f3 100644 --- a/reactos/dll/win32/acledit/acleditint.h +++ b/reactos/dll/win32/acledit/acleditint.h @@ -1,10 +1,6 @@ #ifndef __ACLEDITINT_H #define __ACLEDITINT_H -#include - -#define IDI_DEVMGR 100 - extern HINSTANCE hDllInstance; typedef struct _ACL_HELP_CONTROL diff --git a/reactos/dll/win32/acledit/resource.h b/reactos/dll/win32/acledit/resource.h new file mode 100644 index 00000000000..89c5d02b7cf --- /dev/null +++ b/reactos/dll/win32/acledit/resource.h @@ -0,0 +1,8 @@ +#ifndef __DEVMGR_RESOURCE_H +#define __DEVMGR_RESOURCE_H + +#define IDI_DEVMGR 100 + +#endif /* __DEVMGR_RESOURCE_H */ + +/* EOF */ diff --git a/reactos/dll/win32/acledit/stubs.c b/reactos/dll/win32/acledit/stubs.c index 90dd94563a7..b679c6036aa 100644 --- a/reactos/dll/win32/acledit/stubs.c +++ b/reactos/dll/win32/acledit/stubs.c @@ -13,7 +13,7 @@ * UPDATE HISTORY: * 07/09/2004 Created */ - +#include #include "acleditint.h" ULONG DbgPrint(PCH Format,...); diff --git a/reactos/dll/win32/beepmidi/beepmidi.c b/reactos/dll/win32/beepmidi/beepmidi.c index a80c78eab16..8665bec17d4 100644 --- a/reactos/dll/win32/beepmidi/beepmidi.c +++ b/reactos/dll/win32/beepmidi/beepmidi.c @@ -40,7 +40,16 @@ */ #define CONTINUOUS_NOTES -#include +#define WIN32_NO_STATUS +#define NTOS_MODE_USER +#include +#include +#include +#include +#include + +#include +#include /*#define DPRINT printf*/ #define DPRINT FakePrintf diff --git a/reactos/dll/win32/beepmidi/beepmidi.h b/reactos/dll/win32/beepmidi/beepmidi.h deleted file mode 100644 index fa144532f92..00000000000 --- a/reactos/dll/win32/beepmidi/beepmidi.h +++ /dev/null @@ -1,15 +0,0 @@ -#ifndef _BEEPMIDI_H_ -#define _BEEPMIDI_H_ - -#define WIN32_NO_STATUS -#define NTOS_MODE_USER -#include -#include -#include -#include -#include - -#include -#include - -#endif diff --git a/reactos/dll/win32/beepmidi/beepmidi.rbuild b/reactos/dll/win32/beepmidi/beepmidi.rbuild index 7485183661d..156d95cba4f 100644 --- a/reactos/dll/win32/beepmidi/beepmidi.rbuild +++ b/reactos/dll/win32/beepmidi/beepmidi.rbuild @@ -5,6 +5,5 @@ kernel32 user32 winmm - beepmidi.h beepmidi.c diff --git a/reactos/dll/win32/cards/cards.c b/reactos/dll/win32/cards/cards.c index a1e8bf3ea9d..eed5ce0d673 100644 --- a/reactos/dll/win32/cards/cards.c +++ b/reactos/dll/win32/cards/cards.c @@ -18,6 +18,9 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ +#include + +#include "windows.h" #include "cards.h" HBITMAP g_CardBitmaps[MAX_CARD_BITMAPS]; diff --git a/reactos/dll/win32/cards/cards.h b/reactos/dll/win32/cards/cards.h index 7b1e4b7d977..92b33d61a64 100644 --- a/reactos/dll/win32/cards/cards.h +++ b/reactos/dll/win32/cards/cards.h @@ -21,9 +21,6 @@ #ifndef _CARDS_H #define _CARDS_H -#include -#include "windows.h" - /* * 52 card faces + * 12 card backs + diff --git a/reactos/dll/win32/cards/cards.rbuild b/reactos/dll/win32/cards/cards.rbuild index d9d66145fa0..cab5fdb975d 100644 --- a/reactos/dll/win32/cards/cards.rbuild +++ b/reactos/dll/win32/cards/cards.rbuild @@ -8,7 +8,6 @@ kernel32 gdi32 user32 - cards.h cards.c cards.rc diff --git a/reactos/dll/win32/cards/cards.rc b/reactos/dll/win32/cards/cards.rc index 10858471304..b17613f783a 100644 --- a/reactos/dll/win32/cards/cards.rc +++ b/reactos/dll/win32/cards/cards.rc @@ -18,7 +18,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "cards.h" +#include #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "Cardplaying Helper DLL\0" diff --git a/reactos/dll/win32/crtdll/dllmain.c b/reactos/dll/win32/crtdll/dllmain.c index 9af025af63b..a97de0cc312 100644 --- a/reactos/dll/win32/crtdll/dllmain.c +++ b/reactos/dll/win32/crtdll/dllmain.c @@ -17,7 +17,12 @@ */ #include +#include +#include +#include +#include +#include "wine/debug.h" WINE_DEFAULT_DEBUG_CHANNEL(crtdll); diff --git a/reactos/dll/win32/crtdll/precomp.h b/reactos/dll/win32/crtdll/precomp.h index 97479189de9..d30dfa7109e 100644 --- a/reactos/dll/win32/crtdll/precomp.h +++ b/reactos/dll/win32/crtdll/precomp.h @@ -5,11 +5,5 @@ #include #include #include -#include -#include -#include -#include - -#include "wine/debug.h" #endif /* _CRT_PRECOMP_H */ diff --git a/reactos/dll/win32/dbghelp/pe_module.c b/reactos/dll/win32/dbghelp/pe_module.c index 6d5f85e998e..3027f5ba00c 100644 --- a/reactos/dll/win32/dbghelp/pe_module.c +++ b/reactos/dll/win32/dbghelp/pe_module.c @@ -138,7 +138,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, else WINE_ERR("-Unable to peruse .DBG file %s (%s)\n", dbg_name, debugstr_a(tmp)); - if (dbg_mapping) UnmapViewOfFile((PVOID)dbg_mapping); + if (dbg_mapping) UnmapViewOfFile(dbg_mapping); if (hMap) CloseHandle(hMap); if (hFile != INVALID_HANDLE_VALUE) CloseHandle(hFile); return ret; @@ -266,7 +266,7 @@ static BOOL pe_load_export_debug_info(const struct process* pcs, for (j = 0; j < exports->NumberOfNames; j++) if ((ordinals[j] == i) && names[j]) break; if (j < exports->NumberOfNames) continue; - snprintf(buffer, sizeof(buffer), "%lu", i + exports->Base); + snprintf(buffer, sizeof(buffer), "%d", i + exports->Base); symt_new_public(module, NULL, buffer, base + (DWORD)functions[i], 1, TRUE /* FIXME */, TRUE /* FIXME */); } diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c index 1c35b35c7dd..cf382b94751 100644 --- a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c +++ b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.c @@ -6,7 +6,11 @@ * COPYRIGHT: Copyright 2005 Art Yerkes */ -#include +#include +#include +#include +#include +#include #define NDEBUG #include diff --git a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild index c88b3bfbef5..6964d56c0a9 100644 --- a/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild +++ b/reactos/dll/win32/dhcpcsvc/dhcpcsvc.rbuild @@ -8,7 +8,6 @@ msvcrt ws2_32 iphlpapi - dhcpsvc.h dhcpcsvc.c dhcpcsvc.rc dhcpcsvc.spec diff --git a/reactos/dll/win32/dhcpcsvc/dhcpsvc.h b/reactos/dll/win32/dhcpcsvc/dhcpsvc.h deleted file mode 100644 index d2293075aab..00000000000 --- a/reactos/dll/win32/dhcpcsvc/dhcpsvc.h +++ /dev/null @@ -1,10 +0,0 @@ -#ifndef _DHCPSVC_H_ -#define _DHCPSVC_H_ - -#include -#include -#include -#include -#include - -#endif diff --git a/reactos/dll/win32/lpk/lpk.rbuild b/reactos/dll/win32/lpk/lpk.rbuild index efe21000a90..fe83c7ec489 100644 --- a/reactos/dll/win32/lpk/lpk.rbuild +++ b/reactos/dll/win32/lpk/lpk.rbuild @@ -9,7 +9,7 @@ kernel32 user32 usp10 - ros_lpk.h + dllmain.c stub.c diff --git a/reactos/dll/win32/lsasrv/lsarpc.c b/reactos/dll/win32/lsasrv/lsarpc.c index e3639814947..97b7535eab1 100644 --- a/reactos/dll/win32/lsasrv/lsarpc.c +++ b/reactos/dll/win32/lsasrv/lsarpc.c @@ -1,6 +1,13 @@ /* INCLUDES ****************************************************************/ -#include "precomp.h" +#define WIN32_NO_STATUS +#include +#include +#define NTOS_MODE_USER +#include + +#include "lsa_s.h" + #define NDEBUG #include diff --git a/reactos/dll/win32/lsasrv/lsasrv.c b/reactos/dll/win32/lsasrv/lsasrv.c index de4e15fe71e..94d643bb41c 100644 --- a/reactos/dll/win32/lsasrv/lsasrv.c +++ b/reactos/dll/win32/lsasrv/lsasrv.c @@ -1,4 +1,8 @@ -#include "precomp.h" +#define WIN32_NO_STATUS +#include +#define NTOS_MODE_USER +#include + #define NDEBUG #include diff --git a/reactos/dll/win32/lsasrv/lsasrv.rbuild b/reactos/dll/win32/lsasrv/lsasrv.rbuild index 966f1b0d6c1..b87a23a0681 100644 --- a/reactos/dll/win32/lsasrv/lsasrv.rbuild +++ b/reactos/dll/win32/lsasrv/lsasrv.rbuild @@ -9,7 +9,6 @@ kernel32 rpcrt4 pseh - precomp.h lsarpc.c lsasrv.c lsasrv.rc diff --git a/reactos/dll/win32/lsasrv/precomp.h b/reactos/dll/win32/lsasrv/precomp.h deleted file mode 100644 index 271ad967428..00000000000 --- a/reactos/dll/win32/lsasrv/precomp.h +++ /dev/null @@ -1,7 +0,0 @@ -#define WIN32_NO_STATUS -#include -#include -#define NTOS_MODE_USER -#include - -#include "lsa_s.h" diff --git a/reactos/dll/win32/uext2/precomp.h b/reactos/dll/win32/uext2/precomp.h deleted file mode 100644 index d869f1f6355..00000000000 --- a/reactos/dll/win32/uext2/precomp.h +++ /dev/null @@ -1,5 +0,0 @@ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include diff --git a/reactos/dll/win32/uext2/uext2.c b/reactos/dll/win32/uext2/uext2.c index c211231ecdf..2e3ecfe0367 100644 --- a/reactos/dll/win32/uext2/uext2.c +++ b/reactos/dll/win32/uext2/uext2.c @@ -7,7 +7,11 @@ * PROGRAMMERS: Pierre Schweitzer */ -#include "precomp.h" +#define WIN32_NO_STATUS +#include +#define NTOS_MODE_USER +#include +#include INT WINAPI DllMain( diff --git a/reactos/dll/win32/uext2/uext2.rbuild b/reactos/dll/win32/uext2/uext2.rbuild index 8cbb9bd5d83..5725bb4aff1 100644 --- a/reactos/dll/win32/uext2/uext2.rbuild +++ b/reactos/dll/win32/uext2/uext2.rbuild @@ -5,7 +5,6 @@ 0x0600 ext2lib ntdll - precomp.h uext2.c uext2.rc diff --git a/reactos/dll/win32/ufat/precomp.h b/reactos/dll/win32/ufat/precomp.h deleted file mode 100644 index d869f1f6355..00000000000 --- a/reactos/dll/win32/ufat/precomp.h +++ /dev/null @@ -1,5 +0,0 @@ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include diff --git a/reactos/dll/win32/ufat/ufat.c b/reactos/dll/win32/ufat/ufat.c index 9bd65ad49db..8a876a29ab3 100644 --- a/reactos/dll/win32/ufat/ufat.c +++ b/reactos/dll/win32/ufat/ufat.c @@ -7,7 +7,11 @@ * PROGRAMMERS: Herv Poussineau (hpoussin@reactos.org) */ -#include "precomp.h" +#define WIN32_NO_STATUS +#include +#define NTOS_MODE_USER +#include +#include INT WINAPI DllMain( diff --git a/reactos/dll/win32/ufat/ufat.rbuild b/reactos/dll/win32/ufat/ufat.rbuild index cbd96abca36..6ecbaab768d 100644 --- a/reactos/dll/win32/ufat/ufat.rbuild +++ b/reactos/dll/win32/ufat/ufat.rbuild @@ -5,7 +5,6 @@ 0x0600 vfatlib ntdll - precomp.h ufat.c ufat.rc diff --git a/reactos/dll/win32/untfs/precomp.h b/reactos/dll/win32/untfs/precomp.h deleted file mode 100644 index d869f1f6355..00000000000 --- a/reactos/dll/win32/untfs/precomp.h +++ /dev/null @@ -1,5 +0,0 @@ -#define WIN32_NO_STATUS -#include -#define NTOS_MODE_USER -#include -#include diff --git a/reactos/dll/win32/untfs/untfs.c b/reactos/dll/win32/untfs/untfs.c index 7a2531ddf60..f359e5f90e6 100644 --- a/reactos/dll/win32/untfs/untfs.c +++ b/reactos/dll/win32/untfs/untfs.c @@ -7,7 +7,11 @@ * PROGRAMMERS: Pierre Schweitzer */ -#include "precomp.h" +#define WIN32_NO_STATUS +#include +#define NTOS_MODE_USER +#include +#include INT WINAPI DllMain( diff --git a/reactos/dll/win32/untfs/untfs.rbuild b/reactos/dll/win32/untfs/untfs.rbuild index 3e2b400545f..7652bd6ec11 100644 --- a/reactos/dll/win32/untfs/untfs.rbuild +++ b/reactos/dll/win32/untfs/untfs.rbuild @@ -5,7 +5,6 @@ 0x0600 ntfslib ntdll - precomp.h untfs.c untfs.rc diff --git a/reactos/dll/win32/ws2help/ws2help.rbuild b/reactos/dll/win32/ws2help/ws2help.rbuild index 314d05a8587..6f3a0a69dc1 100644 --- a/reactos/dll/win32/ws2help/ws2help.rbuild +++ b/reactos/dll/win32/ws2help/ws2help.rbuild @@ -5,7 +5,6 @@ ntdll kernel32 ws2_32 - ws2help.h ws2help.c ws2help.rc diff --git a/reactos/dll/win32/wshirda/wshirda.rbuild b/reactos/dll/win32/wshirda/wshirda.rbuild index 7cc4ecb8fe0..5704b4bbb0f 100644 --- a/reactos/dll/win32/wshirda/wshirda.rbuild +++ b/reactos/dll/win32/wshirda/wshirda.rbuild @@ -5,7 +5,6 @@ ntdll kernel32 ws2_32 - wshirda.h wshirda.c wshirda.rc diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild index a3d8f6d162a..0fd9a7d9eb6 100644 --- a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild +++ b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild @@ -6,7 +6,6 @@ ntdll kernel32 ws2_32 - wshtcpip.h wshtcpip.c wshtcpip.rc diff --git a/reactos/dll/win32/wsock32/stubs.c b/reactos/dll/win32/wsock32/stubs.c index 15c1bffc168..930eb44e751 100644 --- a/reactos/dll/win32/wsock32/stubs.c +++ b/reactos/dll/win32/wsock32/stubs.c @@ -1,4 +1,5 @@ -/* +/* $Id$ + * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS WinSock DLL * FILE: stubs.c @@ -6,8 +7,9 @@ * PROGRAMMERS: Ge van Geldorp (ge@gse.nl) * REVISIONS: */ - -#include "wsock32.h" +#include +#include +//#include /* * @unimplemented diff --git a/reactos/dll/win32/wsock32/wsock32.h b/reactos/dll/win32/wsock32/wsock32.h deleted file mode 100644 index b0ec32c857a..00000000000 --- a/reactos/dll/win32/wsock32/wsock32.h +++ /dev/null @@ -1,2 +0,0 @@ -#include -#include diff --git a/reactos/dll/win32/wsock32/wsock32.rbuild b/reactos/dll/win32/wsock32/wsock32.rbuild index 299cdc0d51b..757702b4547 100644 --- a/reactos/dll/win32/wsock32/wsock32.rbuild +++ b/reactos/dll/win32/wsock32/wsock32.rbuild @@ -4,7 +4,6 @@ ntdll kernel32 ws2_32 - wsock32.h stubs.c wsock32.rc From f0ae9e7e83ab0d0a5761c815fc0284b1f155f087 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 16:47:17 +0000 Subject: [PATCH 070/304] - Use macros instead of magic "1" and "2" for Setup Loader Block Flags - Initialize AcpiTableDetected to FALSE - Misc header fixes svn path=/trunk/; revision=35012 --- reactos/include/reactos/arc/arc.h | 5 +++-- reactos/include/reactos/arc/setupblk.h | 6 ++++++ reactos/ntoskrnl/ex/init.c | 4 ++-- reactos/ntoskrnl/ke/freeldr.c | 4 ++-- 4 files changed, 13 insertions(+), 6 deletions(-) diff --git a/reactos/include/reactos/arc/arc.h b/reactos/include/reactos/arc/arc.h index f1401bf76ec..b57001bae81 100644 --- a/reactos/include/reactos/arc/arc.h +++ b/reactos/include/reactos/arc/arc.h @@ -412,7 +412,8 @@ typedef struct _FIRMWARE_INFORMATION_LOADER_BLOCK { ULONG FirmwareTypeEfi:1; ULONG Reserved:31; - union { + union + { EFI_FIRMWARE_INFORMATION EfiInformation; PCAT_FIRMWARE_INFORMATION PcatInformation; } u; @@ -447,7 +448,7 @@ typedef struct _LOADER_PARAMETER_BLOCK { I386_LOADER_BLOCK I386; ALPHA_LOADER_BLOCK Alpha; - IA64_LOADER_BLOCK Ia64; + IA64_LOADER_BLOCK IA64; PPC_LOADER_BLOCK PowerPC; ARM_LOADER_BLOCK Arm; } u; diff --git a/reactos/include/reactos/arc/setupblk.h b/reactos/include/reactos/arc/setupblk.h index 7edc13e04c6..4ee17414787 100644 --- a/reactos/include/reactos/arc/setupblk.h +++ b/reactos/include/reactos/arc/setupblk.h @@ -1,6 +1,12 @@ #ifndef _SETUPBLK_ #define _SETUPBLK_ +// +// Setup Flags +// +#define SETUPLDR_TEXT_MODE 0x1 +#define SETUPLDR_REMOTE_BOOT 0x2 + // // Type of file described in DETECTED_DEVICE_FILE // diff --git a/reactos/ntoskrnl/ex/init.c b/reactos/ntoskrnl/ex/init.c index c9243ff9d4a..89f09f0bbce 100644 --- a/reactos/ntoskrnl/ex/init.c +++ b/reactos/ntoskrnl/ex/init.c @@ -869,10 +869,10 @@ ExpInitializeExecutive(IN ULONG Cpu, if (LoaderBlock->SetupLdrBlock) { /* Check if this is text-mode setup */ - if (LoaderBlock->SetupLdrBlock->Flags & 1) ExpInTextModeSetup = TRUE; + if (LoaderBlock->SetupLdrBlock->Flags & SETUPLDR_TEXT_MODE) ExpInTextModeSetup = TRUE; /* Check if this is network boot */ - if (LoaderBlock->SetupLdrBlock->Flags & 2) + if (LoaderBlock->SetupLdrBlock->Flags & SETUPLDR_REMOTE_BOOT) { /* Set variable */ IoRemoteBootClient = TRUE; diff --git a/reactos/ntoskrnl/ke/freeldr.c b/reactos/ntoskrnl/ke/freeldr.c index ce70a634c0c..8c406bbbd78 100644 --- a/reactos/ntoskrnl/ke/freeldr.c +++ b/reactos/ntoskrnl/ke/freeldr.c @@ -31,7 +31,7 @@ typedef struct _BIOS_MEMORY_DESCRIPTOR /* FreeLDR Loader Data */ PROS_LOADER_PARAMETER_BLOCK KeRosLoaderBlock; -BOOLEAN AcpiTableDetected; +BOOLEAN AcpiTableDetected = FALSE; ADDRESS_RANGE KeMemoryMap[64]; ULONG KeMemoryMapRangeCount; @@ -1187,7 +1187,7 @@ KiRosFrldrLpbToNtLpb(IN PROS_LOADER_PARAMETER_BLOCK RosLoaderBlock, if (LoaderBlock->SetupLdrBlock) { /* All we'll setup right now is the flag for text-mode setup */ - LoaderBlock->SetupLdrBlock->Flags = 1; + LoaderBlock->SetupLdrBlock->Flags = SETUPLDR_TEXT_MODE; } /* Make a copy of the command line */ From ec8d6842153222105ad2516758a46b97e796fb18 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Fri, 1 Aug 2008 16:54:14 +0000 Subject: [PATCH 071/304] - PspSetPrimaryToken: Fix some incorrect object dereferencing. - WlxStartApplication: Fix handle leaks. - Make userinit.exe exit when it's done everything. No need to wait for explorer to exit first. svn path=/trunk/; revision=35013 --- reactos/base/system/userinit/userinit.c | 1 - reactos/dll/win32/msgina/msgina.c | 2 ++ reactos/ntoskrnl/ps/security.c | 7 ++----- 3 files changed, 4 insertions(+), 6 deletions(-) diff --git a/reactos/base/system/userinit/userinit.c b/reactos/base/system/userinit/userinit.c index d339ee3cbde..6b81fe38bfa 100644 --- a/reactos/base/system/userinit/userinit.c +++ b/reactos/base/system/userinit/userinit.c @@ -263,7 +263,6 @@ TryToStartShell( StartAutoApplications(CSIDL_STARTUP); StartAutoApplications(CSIDL_COMMON_STARTUP); - WaitForSingleObject(pi.hProcess, INFINITE); CloseHandle(pi.hProcess); CloseHandle(pi.hThread); return TRUE; diff --git a/reactos/dll/win32/msgina/msgina.c b/reactos/dll/win32/msgina/msgina.c index c3de530092a..d017f6430b9 100644 --- a/reactos/dll/win32/msgina/msgina.c +++ b/reactos/dll/win32/msgina/msgina.c @@ -247,6 +247,8 @@ WlxStartApplication( CurrentDirectory, &StartupInfo, &ProcessInformation); + CloseHandle(ProcessInformation.hProcess); + CloseHandle(ProcessInformation.hThread); CloseHandle(hAppToken); if (!ret) WARN("CreateProcessAsUserW() failed with error %lu\n", GetLastError()); diff --git a/reactos/ntoskrnl/ps/security.c b/reactos/ntoskrnl/ps/security.c index 12b4cf1482a..525b130c076 100644 --- a/reactos/ntoskrnl/ps/security.c +++ b/reactos/ntoskrnl/ps/security.c @@ -255,7 +255,7 @@ PspSetPrimaryToken(IN PEPROCESS Process, PreviousMode)) { /* Failed, dereference */ - if (TokenHandle) ObDereferenceObject(Token); + if (TokenHandle) ObDereferenceObject(NewToken); return STATUS_PRIVILEGE_NOT_HELD; } } @@ -311,13 +311,10 @@ PspSetPrimaryToken(IN PEPROCESS Process, STANDARD_RIGHTS_ALL | PROCESS_SET_QUOTA); } - - /* Dereference the process */ - ObDereferenceObject(Process); } /* Dereference the token */ - if (Token) ObDereferenceObject(NewToken); + if (TokenHandle) ObDereferenceObject(NewToken); return Status; } From 5f881718647d452ffab5644efd74642936f1d75d Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Fri, 1 Aug 2008 17:40:56 +0000 Subject: [PATCH 072/304] - IntRemoveMenuItem: Fix bug involving deleting item from submenu. (Bug 3292) - IntFreeMenuItem: Remove code for removing item from list - the only caller that "used" this was IntRemoveMenuItem, which actually removes the item itself. - IntInsertMenuItemToList, IntEnableMenuItem, IntCheckMenuItem, IntHiliteMenuItem: Simplify some more redundant code. svn path=/trunk/; revision=35015 --- .../subsystems/win32/win32k/include/menu.h | 3 +- reactos/subsystems/win32/win32k/ntuser/menu.c | 126 ++++-------------- 2 files changed, 30 insertions(+), 99 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/menu.h b/reactos/subsystems/win32/win32k/include/menu.h index 1efef0ad8e8..117404a5736 100644 --- a/reactos/subsystems/win32/win32k/include/menu.h +++ b/reactos/subsystems/win32/win32k/include/menu.h @@ -50,8 +50,7 @@ IntGetMenuObject(HMENU hMenu); UserDereferenceObject(MenuObj) BOOL FASTCALL -IntFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, - BOOL RemoveFromList, BOOL bRecurse); +IntFreeMenuItem(PMENU_OBJECT MenuObject, PMENU_ITEM MenuItem, BOOL bRecurse); BOOL FASTCALL IntRemoveMenuItem(PMENU_OBJECT MenuObject, UINT uPosition, UINT uFlags, diff --git a/reactos/subsystems/win32/win32k/ntuser/menu.c b/reactos/subsystems/win32/win32k/ntuser/menu.c index 21e8f3586be..f4acf5fab98 100644 --- a/reactos/subsystems/win32/win32k/ntuser/menu.c +++ b/reactos/subsystems/win32/win32k/ntuser/menu.c @@ -206,27 +206,9 @@ IntGetMenuObject(HMENU hMenu) } BOOL FASTCALL -IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, - BOOL RemoveFromList, BOOL bRecurse) +IntFreeMenuItem(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, BOOL bRecurse) { FreeMenuText(MenuItem); - if(RemoveFromList) - { - PMENU_ITEM CurItem = Menu->MenuItemList; - while(CurItem) - { - if (CurItem->Next == MenuItem) - { - CurItem->Next = MenuItem->Next; - break; - } - else - { - CurItem = CurItem->Next; - } - } - Menu->MenuInfo.MenuItemCount--; - } if(bRecurse && MenuItem->hSubMenu) { PMENU_OBJECT SubMenu; @@ -249,7 +231,7 @@ IntRemoveMenuItem(PMENU_OBJECT Menu, UINT uPosition, UINT uFlags, BOOL bRecurse) { PMENU_ITEM PrevMenuItem, MenuItem; - if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, NULL, &MenuItem, + if(IntGetMenuItemByFlag(Menu, uPosition, uFlags, &Menu, &MenuItem, &PrevMenuItem) > -1) { if(MenuItem) @@ -260,7 +242,8 @@ IntRemoveMenuItem(PMENU_OBJECT Menu, UINT uPosition, UINT uFlags, { Menu->MenuItemList = MenuItem->Next; } - return IntFreeMenuItem(Menu, MenuItem, TRUE, bRecurse); + Menu->MenuInfo.MenuItemCount--; + return IntFreeMenuItem(Menu, MenuItem, bRecurse); } } return FALSE; @@ -275,7 +258,7 @@ IntDeleteMenuItems(PMENU_OBJECT Menu, BOOL bRecurse) while(CurItem) { NextItem = CurItem->Next; - IntFreeMenuItem(Menu, CurItem, FALSE, bRecurse); + IntFreeMenuItem(Menu, CurItem, bRecurse); CurItem = NextItem; res++; } @@ -651,56 +634,25 @@ IntInsertMenuItemToList(PMENU_OBJECT Menu, PMENU_ITEM MenuItem, int pos) UINT npos = 0; CurItem = Menu->MenuItemList; - if(pos <= -1) + while(CurItem && (pos != 0)) { - while(CurItem) - { - LastItem = CurItem; - CurItem = CurItem->Next; - npos++; - } - } - else - { - while(CurItem && (pos > 0)) - { - LastItem = CurItem; - CurItem = CurItem->Next; - pos--; - npos++; - } + LastItem = CurItem; + CurItem = CurItem->Next; + pos--; + npos++; } - if(CurItem) + if(LastItem) { - if(LastItem) - { - /* insert the item before CurItem */ - MenuItem->Next = LastItem->Next; - LastItem->Next = MenuItem; - } - else - { - /* insert at the beginning */ - Menu->MenuItemList = MenuItem; - MenuItem->Next = CurItem; - } + /* insert the item after LastItem */ + LastItem->Next = MenuItem; } else { - if(LastItem) - { - /* append item */ - LastItem->Next = MenuItem; - MenuItem->Next = NULL; - } - else - { - /* insert first item */ - Menu->MenuItemList = MenuItem; - MenuItem->Next = NULL; - } + /* insert at the beginning */ + Menu->MenuItemList = MenuItem; } + MenuItem->Next = CurItem; Menu->MenuInfo.MenuItemCount++; return npos; @@ -1011,29 +963,18 @@ IntEnableMenuItem(PMENU_OBJECT MenuObject, UINT uIDEnableItem, UINT uEnable) if(uEnable & MF_DISABLED) { - if(!(MenuItem->fState & MF_DISABLED)) - MenuItem->fState |= MF_DISABLED; - if(uEnable & MF_GRAYED) - { - if(!(MenuItem->fState & MF_GRAYED)) - MenuItem->fState |= MF_GRAYED; - } + MenuItem->fState |= MF_DISABLED; + MenuItem->fState |= uEnable & MF_GRAYED; } else { if(uEnable & MF_GRAYED) { - if(!(MenuItem->fState & MF_GRAYED)) - MenuItem->fState |= MF_GRAYED; - if(!(MenuItem->fState & MF_DISABLED)) - MenuItem->fState |= MF_DISABLED; + MenuItem->fState |= (MF_GRAYED | MF_DISABLED); } else { - if(MenuItem->fState & MF_DISABLED) - MenuItem->fState ^= MF_DISABLED; - if(MenuItem->fState & MF_GRAYED) - MenuItem->fState ^= MF_GRAYED; + MenuItem->fState &= ~(MF_DISABLED | MF_GRAYED); } } @@ -1155,13 +1096,11 @@ IntCheckMenuItem(PMENU_OBJECT MenuObject, UINT uIDCheckItem, UINT uCheck) res = (DWORD)(MenuItem->fState & MF_CHECKED); if(uCheck & MF_CHECKED) { - if(!(MenuItem->fState & MF_CHECKED)) - MenuItem->fState |= MF_CHECKED; + MenuItem->fState |= MF_CHECKED; } else { - if(MenuItem->fState & MF_CHECKED) - MenuItem->fState ^= MF_CHECKED; + MenuItem->fState &= ~MF_CHECKED; } return (DWORD)res; @@ -1180,13 +1119,11 @@ IntHiliteMenuItem(PWINDOW_OBJECT WindowObject, PMENU_OBJECT MenuObject, if(uHilite & MF_HILITE) { - if(!(MenuItem->fState & MF_HILITE)) - MenuItem->fState |= MF_HILITE; + MenuItem->fState |= MF_HILITE; } else { - if(MenuItem->fState & MF_HILITE) - MenuItem->fState ^= MF_HILITE; + MenuItem->fState &= ~MF_HILITE; } /* FIXME - update the window's menu */ @@ -1204,8 +1141,7 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos) { while(MenuItem) { - if(MenuItem->fState & MFS_DEFAULT) - MenuItem->fState ^= MFS_DEFAULT; + MenuItem->fState &= ~MFS_DEFAULT; MenuItem = MenuItem->Next; } return TRUE; @@ -1218,14 +1154,12 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos) { if(pos == uItem) { - if(!(MenuItem->fState & MFS_DEFAULT)) - MenuItem->fState |= MFS_DEFAULT; + MenuItem->fState |= MFS_DEFAULT; ret = TRUE; } else { - if(MenuItem->fState & MFS_DEFAULT) - MenuItem->fState ^= MFS_DEFAULT; + MenuItem->fState &= ~MFS_DEFAULT; } pos++; MenuItem = MenuItem->Next; @@ -1237,14 +1171,12 @@ UserSetMenuDefaultItem(PMENU_OBJECT MenuObject, UINT uItem, UINT fByPos) { if(!ret && (MenuItem->wID == uItem)) { - if(!(MenuItem->fState & MFS_DEFAULT)) - MenuItem->fState |= MFS_DEFAULT; + MenuItem->fState |= MFS_DEFAULT; ret = TRUE; } else { - if(MenuItem->fState & MFS_DEFAULT) - MenuItem->fState ^= MFS_DEFAULT; + MenuItem->fState &= ~MFS_DEFAULT; } MenuItem = MenuItem->Next; } From f724943d404dcf73b4661d25332fff9e02443f0e Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Fri, 1 Aug 2008 17:43:53 +0000 Subject: [PATCH 073/304] - extended range for calendar view for years 1900-9999, each selectable year/month combination creates a correct month view - special case september 1752 partly prepared, but disabled as long as unneeded ;-) - enable via #define WITH_1752 svn path=/trunk/; revision=35016 --- reactos/dll/cpl/timedate/monthcal.c | 26 +++++++++++++++++++++++--- 1 file changed, 23 insertions(+), 3 deletions(-) diff --git a/reactos/dll/cpl/timedate/monthcal.c b/reactos/dll/cpl/timedate/monthcal.c index c764c120101..d07b13c810b 100644 --- a/reactos/dll/cpl/timedate/monthcal.c +++ b/reactos/dll/cpl/timedate/monthcal.c @@ -75,6 +75,19 @@ MonthCalNotifyControlParent(IN PMONTHCALWND infoPtr, return Ret; } +/* + * for the year range 1..9999 + * return 1 if is leap year otherwise 0 + */ +static WORD LeapYear(IN WORD Year) +{ + return +#ifdef WITH_1752 + (Year <= 1752) ? !(Year % 4) : +#endif + !(Year % 4) && ((Year % 100) || !(Year % 400)); +} + static WORD MonthCalMonthLength(IN WORD Month, IN WORD Year) @@ -82,9 +95,16 @@ MonthCalMonthLength(IN WORD Month, const BYTE MonthDays[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 0}; if(Month == 2) - return MonthDays[Month - 1] + ((Year % 400 == 0) ? 1 : ((Year % 100 != 0) && (Year % 4 == 0)) ? 1 : 0); + return MonthDays[Month - 1] + LeapYear(Year); else - return MonthDays[Month - 1]; + { +#ifdef WITH_1752 + if ((Year == 1752) && (Month == 9)) + return 19; // special case: September 1752 has no 3rd-13th + else +#endif + return MonthDays[Month - 1]; + } } static WORD @@ -134,7 +154,7 @@ MonthCalValidDate(IN WORD Day, if (Month < 1 || Month > 12 || Day == 0 || Day > MonthCalMonthLength(Month, Year) || - Year < 1980 || Year > 2099) + Year < 1899 || Year > 9999) { return FALSE; } From f81b3e63d25557ec8f816461db8fb5066b209d9f Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 1 Aug 2008 17:50:17 +0000 Subject: [PATCH 074/304] - Use MmAllocateMemoryWithType instead of deprecated MmAllocateMemory for the ARM Shared Heap allocation - Use heap routines in i386 and powerpc branches for temporary memory svn path=/trunk/; revision=35017 --- reactos/boot/freeldr/freeldr/arch/arm/loader.c | 2 +- reactos/boot/freeldr/freeldr/arch/i386/hwpci.c | 16 ++++++++-------- reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c | 14 +++++++------- .../boot/freeldr/freeldr/arch/powerpc/mboot.c | 12 ++++++------ 4 files changed, 22 insertions(+), 22 deletions(-) diff --git a/reactos/boot/freeldr/freeldr/arch/arm/loader.c b/reactos/boot/freeldr/freeldr/arch/arm/loader.c index 0287de5efe2..06bf7ca281b 100644 --- a/reactos/boot/freeldr/freeldr/arch/arm/loader.c +++ b/reactos/boot/freeldr/freeldr/arch/arm/loader.c @@ -1052,7 +1052,7 @@ ArmPrepareForReactOS(IN BOOLEAN Setup) // // Allocate the ARM Shared Heap // - ArmSharedHeap = MmAllocateMemory(PAGE_SIZE); + ArmSharedHeap = MmAllocateMemoryWithType(PAGE_SIZE, LoaderOsloaderHeap); ArmSharedHeapSize = 0; if (!ArmSharedHeap) return; diff --git a/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c b/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c index f8e609e32cf..b31e8975329 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c +++ b/reactos/boot/freeldr/freeldr/arch/i386/hwpci.c @@ -173,7 +173,7 @@ DetectPciIrqRoutingTable(PCONFIGURATION_COMPONENT_DATA BusKey) /* Set 'Configuration Data' value */ Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors) + 2 * sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + Table->Size; - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -203,7 +203,7 @@ DetectPciIrqRoutingTable(PCONFIGURATION_COMPONENT_DATA BusKey) /* Set 'Configuration Data' value */ FldrSetConfigurationData(TableKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); } } @@ -246,7 +246,7 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -259,7 +259,7 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ FldrSetConfigurationData(BiosKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); DetectPciIrqRoutingTable(BiosKey); @@ -288,7 +288,7 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) PartialDescriptors) + sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR) + sizeof(PCI_REGISTRY_INFO); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (!PartialResourceList) { DbgPrint((DPRINT_HWDETECT, @@ -311,14 +311,14 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ FldrSetConfigurationData(BusKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); } else { /* Set 'Configuration Data' value */ Size = FIELD_OFFSET(CM_PARTIAL_RESOURCE_LIST, PartialDescriptors); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (!PartialResourceList) { DbgPrint((DPRINT_HWDETECT, @@ -331,7 +331,7 @@ DetectPciBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ FldrSetConfigurationData(BusKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); } /* Increment bus number */ diff --git a/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c b/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c index 0708aea1fb8..c4dc6d5057e 100644 --- a/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c +++ b/reactos/boot/freeldr/freeldr/arch/i386/xboxhw.c @@ -42,7 +42,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey, /* Set 'Configuration Data' value */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + sizeof(CM_DISK_GEOMETRY_DEVICE_DATA); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -77,7 +77,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey, else { DbgPrint((DPRINT_HWDETECT, "Reading disk geometry failed\n")); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); return; } DbgPrint((DPRINT_HWDETECT, @@ -89,7 +89,7 @@ SetHarddiskConfigurationData(PCONFIGURATION_COMPONENT_DATA DiskKey, DiskGeometry->BytesPerSector)); FldrSetConfigurationData(DiskKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); } @@ -225,7 +225,7 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, /* Allocate resource descriptor */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) + sizeof(CM_INT13_DRIVE_PARAMETER) * DiskCount; - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -268,7 +268,7 @@ DetectBiosDisks(PCONFIGURATION_COMPONENT_DATA SystemKey, /* Set 'Configuration Data' value */ FldrSetConfigurationData(SystemKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); /* Create and fill subkey for each harddisk */ for (i = 0; i < DiskCount; i++) @@ -323,7 +323,7 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ Size = sizeof(CM_PARTIAL_RESOURCE_LIST) - sizeof(CM_PARTIAL_RESOURCE_DESCRIPTOR); - PartialResourceList = MmAllocateMemory(Size); + PartialResourceList = MmHeapAlloc(Size); if (PartialResourceList == NULL) { DbgPrint((DPRINT_HWDETECT, @@ -339,7 +339,7 @@ DetectIsaBios(PCONFIGURATION_COMPONENT_DATA SystemKey, ULONG *BusNumber) /* Set 'Configuration Data' value */ FldrSetConfigurationData(BusKey, PartialResourceList, Size); - MmFreeMemory(PartialResourceList); + MmHeapFree(PartialResourceList); /* Detect ISA/BIOS devices */ diff --git a/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c b/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c index 7e1ccd2f13a..feef98a59d3 100644 --- a/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c +++ b/reactos/boot/freeldr/freeldr/arch/powerpc/mboot.c @@ -459,7 +459,7 @@ FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG Kern phnum = ehdr.e_phnum; shsize = ehdr.e_shentsize; shnum = ehdr.e_shnum; - sptr = (PCHAR)MmAllocateMemory(shnum * shsize); + sptr = (PCHAR)MmHeapAlloc(shnum * shsize); /* Read section headers */ FsSetFilePointer(KernelImage, ehdr.e_shoff); @@ -560,14 +560,14 @@ FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG Kern if (!ELF_SECTION(targetSection)->sh_addr) continue; - RelocSection = MmAllocateMemory(shdr->sh_size); + RelocSection = MmHeapAlloc(shdr->sh_size); FsSetFilePointer(KernelImage, relstart); FsReadFile(KernelImage, shdr->sh_size, NULL, RelocSection); /* Get the symbol section */ shdr = ELF_SECTION(shdr->sh_link); - SymbolSection = MmAllocateMemory(shdr->sh_size); + SymbolSection = MmHeapAlloc(shdr->sh_size); FsSetFilePointer(KernelImage, shdr->sh_offset); FsReadFile(KernelImage, shdr->sh_size, NULL, SymbolSection); @@ -642,11 +642,11 @@ FrLdrMapModule(FILE *KernelImage, PCHAR ImageName, PCHAR MemLoadAddr, ULONG Kern #endif } - MmFreeMemory(SymbolSection); - MmFreeMemory(RelocSection); + MmHeapFree(SymbolSection); + MmHeapFree(RelocSection); } - MmFreeMemory(sptr); + MmHeapFree(sptr); ModuleData->ModStart = (ULONG)MemLoadAddr; /* Increase the next Load Base */ From 160a7614dd1888924a9ae44039e1639ab8bced6c Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Fri, 1 Aug 2008 19:43:18 +0000 Subject: [PATCH 075/304] =?UTF-8?q?Changes=20by=20Herv=C3=A9=20Poussineau:?= =?UTF-8?q?=20-=20Simplified=20code=20for=20WriteText=20which=20avoids=20i?= =?UTF-8?q?nfinite=20loops=20and=20fixes=20EOLN=20conversion.=20This=20fix?= =?UTF-8?q?es=20bug=203551=20Changes=20by=20Pierre=20Schweitzer=20-=20Remo?= =?UTF-8?q?ved=20some=20non-understandable=20unicode=20code=20in=20WriteTe?= =?UTF-8?q?xt=20-=20Added=20a=20check=20to=20prevent=20crash=20when=20tryi?= =?UTF-8?q?ng=20to=20create=20an=20empty=20file=20-=20Fixed=20formatting?= =?UTF-8?q?=20for=20WriteText=20See=20issue=20#3551=20for=20more=20details?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=35018 --- reactos/base/applications/notepad/dialog.c | 11 +- reactos/base/applications/notepad/text.c | 126 ++++++++++----------- 2 files changed, 67 insertions(+), 70 deletions(-) diff --git a/reactos/base/applications/notepad/dialog.c b/reactos/base/applications/notepad/dialog.c index 4385f99b8c9..93be73edd65 100644 --- a/reactos/base/applications/notepad/dialog.c +++ b/reactos/base/applications/notepad/dialog.c @@ -235,10 +235,13 @@ static VOID DoSaveFile(VOID) } #endif - if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.iEncoding, Globals.iEoln)) - ShowLastError(); - else - SendMessage(Globals.hEdit, EM_SETMODIFY, FALSE, 0); + if (size) + { + if (!WriteText(hFile, (LPWSTR)pTemp, size, Globals.iEncoding, Globals.iEoln)) + ShowLastError(); + else + SendMessage(Globals.hEdit, EM_SETMODIFY, FALSE, 0); + } CloseHandle(hFile); HeapFree(GetProcessHeap(), 0, pTemp); diff --git a/reactos/base/applications/notepad/text.c b/reactos/base/applications/notepad/text.c index f99420f91ba..3b6fe23e3fa 100644 --- a/reactos/base/applications/notepad/text.c +++ b/reactos/base/applications/notepad/text.c @@ -316,79 +316,73 @@ done: BOOL WriteText(HANDLE hFile, LPCWSTR pszText, DWORD dwTextLen, int iEncoding, int iEoln) { - WCHAR wcBom; - WCHAR wcEoln; - BYTE bEoln; - LPBYTE pbEoln = NULL; - DWORD dwDummy, dwPos, dwNext, dwEolnSize = 0; + WCHAR wcBom; + BYTE bEoln[1]; + LPBYTE pbEoln = NULL; + DWORD dwDummy, dwPos, dwNext, dwEolnSize = 0; - /* Write the proper byte order marks if not ANSI */ - if (iEncoding != ENCODING_ANSI) - { - wcBom = 0xFEFF; - if (!WriteEncodedText(hFile, &wcBom, 1, iEncoding)) - return FALSE; - } + /* Write the proper byte order marks if not ANSI */ + if (iEncoding != ENCODING_ANSI) + { + wcBom = 0xFEFF; + if (!WriteEncodedText(hFile, &wcBom, 1, iEncoding)) + return FALSE; + } - /* Identify the proper eoln to use */ - switch(iEoln) - { - case EOLN_LF: - bEoln = '\n'; - pbEoln = &bEoln; - dwEolnSize = sizeof(bEoln); - break; - case EOLN_CR: - bEoln = '\r'; - pbEoln = &bEoln; - dwEolnSize = sizeof(bEoln); - break; - } + /* Identify the proper eoln to use */ + switch(iEoln) + { + case EOLN_LF: + bEoln[0] = '\n'; + pbEoln = (LPBYTE) &bEoln; + dwEolnSize = 1; + break; + case EOLN_CR: + bEoln[0] = '\r'; + pbEoln = (LPBYTE) &bEoln; + dwEolnSize = 1; + break; + case EOLN_CRLF: + bEoln[0] = '\r'; + bEoln[1] = '\n'; + pbEoln = (LPBYTE) &bEoln; + dwEolnSize = 2; + break; + default: + return FALSE; + } - /* If we have an eoln, make sure it is of the proper encoding */ - if (pbEoln && ((iEncoding == ENCODING_UNICODE) || (iEncoding == ENCODING_UNICODE_BE))) - { - wcEoln = bEoln; - pbEoln = (LPBYTE) &wcEoln; - dwEolnSize = sizeof(wcEoln); - } + dwPos = 0; - dwPos = 0; + /* pszText eoln are always \r\n */ - while(dwPos < dwTextLen) - { - if (pbEoln) - { - /* Find the next eoln */ - dwNext = dwPos; - while(dwNext < dwTextLen-1) - { - if ((pszText[dwNext] == '\r') && (pszText[dwNext+1] == '\n')) - break; - dwNext++; - } - } - else - { - /* No eoln conversion is necessary */ - dwNext = dwTextLen; - } + do + { + /* Find the next eoln */ + dwNext = dwPos; + while(dwNext < dwTextLen) + { + if (pszText[dwNext] == '\r' && pszText[dwNext + 1] == '\n') + break; + dwNext++; + } - if (!WriteEncodedText(hFile, &pszText[dwPos], dwNext - dwPos, iEncoding)) - return FALSE; - dwPos = dwNext; + /* Write text (without eoln) */ + if (!WriteEncodedText(hFile, &pszText[dwPos], dwNext - dwPos, iEncoding)) + return FALSE; - /* are we at an eoln? */ - while ((dwPos < dwTextLen-1) && - ((pszText[dwPos] == '\r') && (pszText[dwPos+1] == '\n'))) - { - if (!WriteFile(hFile, pbEoln, dwEolnSize, &dwDummy, NULL)) - return FALSE; - dwPos += 2; - } - } - while(dwPos < dwTextLen); + /* Write eoln */ + if (dwNext != dwTextLen) + { + if (!WriteFile(hFile, pbEoln, dwEolnSize, &dwDummy, NULL)) + return FALSE; + } - return TRUE; + /* Skip \r\n */ + dwPos = dwNext + 2; + } + while (dwPos < dwTextLen); + + return TRUE; } From ca26e8cac7116ac66015bc6dd5e2095b68bb7da0 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Fri, 1 Aug 2008 21:07:09 +0000 Subject: [PATCH 076/304] Merge aicom-network-fixes up to r35014 | cgutman | 2008-08-01 10:21:52 -0700 (Fri, 01 Aug 2008) | 2 lines - These should no longer be needed now that TDI doesn't give back invalid IRPs - I'll look into the canceling issue later svn path=/trunk/; revision=35019 --- reactos/dll/win32/msafd/misc/dllmain.c | 8 ++--- reactos/drivers/network/afd/afd/bind.c | 8 ++--- reactos/drivers/network/afd/afd/connect.c | 13 ++++---- reactos/drivers/network/afd/afd/context.c | 8 ++--- reactos/drivers/network/afd/afd/info.c | 10 +++--- reactos/drivers/network/afd/afd/listen.c | 12 +++---- reactos/drivers/network/afd/afd/lock.c | 15 +++------ reactos/drivers/network/afd/afd/main.c | 8 ++--- reactos/drivers/network/afd/afd/read.c | 38 +++++++++------------ reactos/drivers/network/afd/afd/select.c | 12 +++---- reactos/drivers/network/afd/afd/write.c | 40 +++++++++-------------- reactos/drivers/network/afd/include/afd.h | 5 ++- 12 files changed, 77 insertions(+), 100 deletions(-) diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/reactos/dll/win32/msafd/misc/dllmain.c index 72f6fd8a8a3..ba148c8b462 100644 --- a/reactos/dll/win32/msafd/misc/dllmain.c +++ b/reactos/dll/win32/msafd/misc/dllmain.c @@ -279,17 +279,17 @@ DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received, if( Errno ) { switch (Status) { case STATUS_CANT_WAIT: *Errno = WSAEWOULDBLOCK; break; - case STATUS_TIMEOUT: + case STATUS_TIMEOUT: *Errno = WSAETIMEDOUT; break; case STATUS_SUCCESS: /* Return Number of bytes Read */ if( ReturnedBytes ) *ReturnedBytes = Received; break; - case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; *ReturnedBytes = 0; break; + case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; break; case STATUS_PENDING: *Errno = WSA_IO_PENDING; break; case STATUS_BUFFER_OVERFLOW: *Errno = WSAEMSGSIZE; break; - default: { + case STATUS_INVALID_CONNECTION: *Errno = WSAEAFNOSUPPORT; break; + default: DbgPrint("MSAFD: Error %x is unknown\n", Status); *Errno = WSAEINVAL; break; - } break; } } diff --git a/reactos/drivers/network/afd/afd/bind.c b/reactos/drivers/network/afd/afd/bind.c index d11c2a9fa27..73bb6a617ab 100644 --- a/reactos/drivers/network/afd/afd/bind.c +++ b/reactos/drivers/network/afd/afd/bind.c @@ -48,10 +48,10 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called\n")); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !(BindReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); FCB->LocalAddress = TaCopyTransportAddress( &BindReq->Address ); @@ -61,7 +61,7 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( NT_SUCCESS(Status) ) FCB->State = SOCKET_STATE_BOUND; - else return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + else return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); AFD_DbgPrint(MID_TRACE,("FCB->Flags %x\n", FCB->Flags)); @@ -87,6 +87,6 @@ AfdBindSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS; } - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } diff --git a/reactos/drivers/network/afd/afd/connect.c b/reactos/drivers/network/afd/afd/connect.c index a93aa6a847d..b451afb172d 100644 --- a/reactos/drivers/network/afd/afd/connect.c +++ b/reactos/drivers/network/afd/afd/connect.c @@ -71,7 +71,7 @@ static NTSTATUS NTAPI StreamSocketConnectComplete /* I was wrong about this before as we can have pending writes to a not * yet connected socket */ - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); AFD_DbgPrint(MID_TRACE,("Irp->IoStatus.Status = %x\n", Irp->IoStatus.Status)); @@ -137,10 +137,10 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, PAFD_CONNECT_INFO ConnectReq; AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !(ConnectReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, - 0, NULL, FALSE ); + 0, NULL ); AFD_DbgPrint(MID_TRACE,("Connect request:\n")); #if 0 @@ -177,11 +177,10 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( NT_SUCCESS(Status) ) FCB->State = SOCKET_STATE_BOUND; else - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, - TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } else return UnlockAndMaybeComplete - ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL, TRUE ); + ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL ); } /* Drop through to SOCKET_STATE_BOUND */ case SOCKET_STATE_BOUND: @@ -228,5 +227,5 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, break; } - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } diff --git a/reactos/drivers/network/afd/afd/context.c b/reactos/drivers/network/afd/afd/context.c index 2c9055f7408..18744884ed0 100644 --- a/reactos/drivers/network/afd/afd/context.c +++ b/reactos/drivers/network/afd/afd/context.c @@ -20,7 +20,7 @@ AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, PAFD_FCB FCB = FileObject->FsContext; UINT ContextSize = IrpSp->Parameters.DeviceIoControl.OutputBufferLength; - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( FCB->ContextSize < ContextSize ) ContextSize = FCB->ContextSize; @@ -33,7 +33,7 @@ AfdGetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } NTSTATUS STDCALL @@ -43,7 +43,7 @@ AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, PFILE_OBJECT FileObject = IrpSp->FileObject; PAFD_FCB FCB = FileObject->FsContext; - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( FCB->ContextSize < IrpSp->Parameters.DeviceIoControl.InputBufferLength ) { @@ -64,5 +64,5 @@ AfdSetContext( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } diff --git a/reactos/drivers/network/afd/afd/info.c b/reactos/drivers/network/afd/afd/info.c index 7e3d5e8d44a..9a3ead68093 100644 --- a/reactos/drivers/network/afd/afd/info.c +++ b/reactos/drivers/network/afd/afd/info.c @@ -26,7 +26,7 @@ AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp, _SEH_TRY { if( !SocketAcquireStateLock( FCB ) ) { - Status = LostSocket( Irp, FALSE ); + Status = LostSocket( Irp ); _SEH_YIELD(return Status); } @@ -69,7 +69,7 @@ AfdGetInfo( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } NTSTATUS STDCALL @@ -84,11 +84,11 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( FCB->AddressFile.Object == NULL) { return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, Irp, 0, - NULL, FALSE ); + NULL ); } Mdl = IoAllocateMdl @@ -159,5 +159,5 @@ AfdGetSockOrPeerName( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } diff --git a/reactos/drivers/network/afd/afd/listen.c b/reactos/drivers/network/afd/afd/listen.c index f00c686cf17..166e2a6f912 100644 --- a/reactos/drivers/network/afd/afd/listen.c +++ b/reactos/drivers/network/afd/afd/listen.c @@ -157,16 +157,16 @@ NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !(ListenReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, - 0, NULL, FALSE ); + 0, NULL ); if( FCB->State != SOCKET_STATE_BOUND ) { Status = STATUS_UNSUCCESSFUL; AFD_DbgPrint(MID_TRACE,("Could not listen an unbound socket\n")); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } FCB->DelayedAccept = ListenReq->UseDelayedAcceptance; @@ -198,7 +198,7 @@ NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, Status = STATUS_SUCCESS; AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, @@ -209,7 +209,7 @@ NTSTATUS AfdWaitForListen( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called\n")); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !IsListEmpty( &FCB->PendingConnections ) ) { PLIST_ENTRY PendingConn = FCB->PendingConnections.Flink; @@ -246,7 +246,7 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called\n")); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); FCB->EventsFired &= ~AFD_EVENT_ACCEPT; diff --git a/reactos/drivers/network/afd/afd/lock.c b/reactos/drivers/network/afd/afd/lock.c index b9da3224a99..6ecd4f202d3 100644 --- a/reactos/drivers/network/afd/afd/lock.c +++ b/reactos/drivers/network/afd/afd/lock.c @@ -235,8 +235,7 @@ VOID SocketStateUnlock( PAFD_FCB FCB ) { NTSTATUS NTAPI UnlockAndMaybeComplete ( PAFD_FCB FCB, NTSTATUS Status, PIRP Irp, UINT Information, - PIO_COMPLETION_ROUTINE Completion, - BOOL ShouldUnlock ) { + PIO_COMPLETION_ROUTINE Completion ) { if( Status == STATUS_PENDING ) { /* We should firstly mark this IRP as pending, because @@ -244,29 +243,25 @@ NTSTATUS NTAPI UnlockAndMaybeComplete before we return from SocketStateUnlock(). */ IoMarkIrpPending( Irp ); SocketStateUnlock( FCB ); - if( ShouldUnlock ) - UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); } else { + if ( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); SocketStateUnlock( FCB ); Irp->IoStatus.Status = Status; Irp->IoStatus.Information = Information; if( Completion ) Completion( FCB->DeviceExt->DeviceObject, Irp, FCB ); - if( ShouldUnlock ) - UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); } return Status; } -NTSTATUS LostSocket( PIRP Irp, BOOL ShouldUnlockIrp ) { +NTSTATUS LostSocket( PIRP Irp ) { NTSTATUS Status = STATUS_INVALID_PARAMETER; AFD_DbgPrint(MIN_TRACE,("Called.\n")); Irp->IoStatus.Information = 0; Irp->IoStatus.Status = Status; - if( ShouldUnlockIrp ) - UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); + if ( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); IoCompleteRequest( Irp, IO_NO_INCREMENT ); return Status; } @@ -274,7 +269,7 @@ NTSTATUS LostSocket( PIRP Irp, BOOL ShouldUnlockIrp ) { NTSTATUS LeaveIrpUntilLater( PAFD_FCB FCB, PIRP Irp, UINT Function ) { InsertTailList( &FCB->PendingIrpList[Function], &Irp->Tail.Overlay.ListEntry ); - return UnlockAndMaybeComplete( FCB, STATUS_PENDING, Irp, 0, NULL, FALSE ); + return UnlockAndMaybeComplete( FCB, STATUS_PENDING, Irp, 0, NULL ); } VOID SocketCalloutEnter( PAFD_FCB FCB ) { diff --git a/reactos/drivers/network/afd/afd/main.c b/reactos/drivers/network/afd/afd/main.c index ab57ab6e409..0270c4bede4 100644 --- a/reactos/drivers/network/afd/afd/main.c +++ b/reactos/drivers/network/afd/afd/main.c @@ -257,11 +257,11 @@ AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, NTSTATUS Status; USHORT Flags = 0; - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( !(DisReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); if (NULL == FCB->RemoteAddress) { @@ -274,7 +274,7 @@ AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( !NT_SUCCESS(Status) || !ConnInfo ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, - Irp, 0, NULL, TRUE ); + Irp, 0, NULL ); } if( DisReq->DisconnectType & AFD_DISCONNECT_SEND ) @@ -294,7 +294,7 @@ AfdDisconnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, if (ConnInfo) ExFreePool( ConnInfo ); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } static NTSTATUS STDCALL diff --git a/reactos/drivers/network/afd/afd/read.c b/reactos/drivers/network/afd/afd/read.c index 48091aefe7b..fbe347f6538 100644 --- a/reactos/drivers/network/afd/afd/read.c +++ b/reactos/drivers/network/afd/afd/read.c @@ -227,11 +227,6 @@ NTSTATUS NTAPI ReceiveComplete ASSERT_IRQL(APC_LEVEL); - if (Irp->Cancel) { - FCB->ReceiveIrp.InFlightRequest = NULL; - return STATUS_SUCCESS; - } - if( !SocketAcquireStateLock( FCB ) ) return Status; FCB->ReceiveIrp.InFlightRequest = NULL; @@ -273,21 +268,21 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); if( FCB->State != SOCKET_STATE_CONNECTED && FCB->State != SOCKET_STATE_CONNECTING ) { AFD_DbgPrint(MID_TRACE,("Called recv on wrong kind of socket (s%x)\n", FCB->State)); return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); } if( FCB->Flags & AFD_ENDPOINT_CONNECTIONLESS ) { AFD_DbgPrint(MID_TRACE,("Receive on connection-less sockets not implemented\n")); return UnlockAndMaybeComplete( FCB, STATUS_NOT_IMPLEMENTED, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); } FCB->EventsFired &= ~AFD_EVENT_RECEIVE; @@ -295,7 +290,7 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( !(RecvReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, - Irp, 0, NULL, FALSE ); + Irp, 0, NULL ); AFD_DbgPrint(MID_TRACE,("Recv flags %x\n", RecvReq->AfdFlags)); @@ -306,7 +301,7 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( !RecvReq->BufferArray ) { return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION, - Irp, 0, NULL, TRUE ); + Irp, 0, NULL ); } Irp->IoStatus.Status = STATUS_PENDING; @@ -326,7 +321,7 @@ AfdConnectedSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, RemoveEntryList( &Irp->Tail.Overlay.ListEntry ); UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, FALSE ); return UnlockAndMaybeComplete( FCB, Status, Irp, - TotalBytesCopied, NULL, TRUE ); + TotalBytesCopied, NULL ); } else if( Status == STATUS_PENDING ) { AFD_DbgPrint(MID_TRACE,("Leaving read irp\n")); IoMarkIrpPending( Irp ); @@ -448,11 +443,6 @@ PacketSocketRecvComplete( AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if (Irp->Cancel) { - FCB->ReceiveIrp.InFlightRequest = NULL; - return STATUS_SUCCESS; - } - if( !SocketAcquireStateLock( FCB ) ) return STATUS_UNSUCCESSFUL; FCB->ReceiveIrp.InFlightRequest = NULL; @@ -501,6 +491,7 @@ PacketSocketRecvComplete( Status = NextIrp->IoStatus.Status = STATUS_BUFFER_TOO_SMALL; NextIrp->IoStatus.Information = DatagramRecv->Len; UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE ); + if ( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } else { AFD_DbgPrint(MID_TRACE,("Satisfying\n")); @@ -509,6 +500,7 @@ PacketSocketRecvComplete( (PUINT)&NextIrp->IoStatus.Information ); AFD_DbgPrint(MID_TRACE,("Unlocking\n")); UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE ); + if ( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); AFD_DbgPrint(MID_TRACE,("Completing\n")); IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } @@ -557,17 +549,17 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); FCB->EventsFired &= ~AFD_EVENT_RECEIVE; /* Check that the socket is bound */ if( FCB->State != SOCKET_STATE_BOUND ) return UnlockAndMaybeComplete - ( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL ); if( !(RecvReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete - ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL ); AFD_DbgPrint(MID_TRACE,("Recv flags %x\n", RecvReq->AfdFlags)); @@ -579,7 +571,7 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( !RecvReq->BufferArray ) { /* access violation in userspace */ return UnlockAndMaybeComplete - ( FCB, STATUS_ACCESS_VIOLATION, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_ACCESS_VIOLATION, Irp, 0, NULL ); } if( !IsListEmpty( &FCB->DatagramList ) ) { @@ -601,7 +593,7 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PollReeval( FCB->DeviceExt, FCB->FileObject ); return UnlockAndMaybeComplete - ( FCB, Status, Irp, RecvReq->BufferArray[0].len, NULL, TRUE ); + ( FCB, Status, Irp, RecvReq->BufferArray[0].len, NULL ); } else { Status = SatisfyPacketRecvRequest ( FCB, Irp, DatagramRecv, @@ -615,13 +607,13 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PollReeval( FCB->DeviceExt, FCB->FileObject ); return UnlockAndMaybeComplete - ( FCB, Status, Irp, Irp->IoStatus.Information, NULL, TRUE ); + ( FCB, Status, Irp, Irp->IoStatus.Information, NULL ); } } else if( RecvReq->AfdFlags & AFD_IMMEDIATE ) { AFD_DbgPrint(MID_TRACE,("Nonblocking\n")); Status = STATUS_CANT_WAIT; PollReeval( FCB->DeviceExt, FCB->FileObject ); - return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL, TRUE ); + return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); } else { PollReeval( FCB->DeviceExt, FCB->FileObject ); return LeaveIrpUntilLater( FCB, Irp, FUNCTION_RECV ); diff --git a/reactos/drivers/network/afd/afd/select.c b/reactos/drivers/network/afd/afd/select.c index 6d506bf4b01..3f00167b134 100644 --- a/reactos/drivers/network/afd/afd/select.c +++ b/reactos/drivers/network/afd/afd/select.c @@ -276,14 +276,14 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp, if ( !EventSelectInfo ) { return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, - 0, NULL, FALSE ); + 0, NULL ); } AFD_DbgPrint(MID_TRACE,("Called (Event %x Triggers %x)\n", EventSelectInfo->EventObject, EventSelectInfo->Events)); if( !SocketAcquireStateLock( FCB ) ) { - return LostSocket( Irp, TRUE ); + return LostSocket( Irp ); } FCB->EventSelectTriggers = FCB->EventsFired = 0; @@ -309,7 +309,7 @@ AfdEventSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); return UnlockAndMaybeComplete( FCB, STATUS_SUCCESS, Irp, - 0, NULL, TRUE ); + 0, NULL ); } NTSTATUS STDCALL @@ -324,18 +324,18 @@ AfdEnumEvents( PDEVICE_OBJECT DeviceObject, PIRP Irp, if ( !EnumReq ) { return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, - 0, NULL, FALSE ); + 0, NULL ); } if( !SocketAcquireStateLock( FCB ) ) { - return LostSocket( Irp, TRUE ); + return LostSocket( Irp ); } EnumReq->PollEvents = FCB->PollState; RtlZeroMemory( EnumReq->EventStatus, sizeof(EnumReq->EventStatus) ); return UnlockAndMaybeComplete( FCB, STATUS_SUCCESS, Irp, - 0, NULL, TRUE ); + 0, NULL ); } /* * * NOTE ALWAYS CALLED AT DISPATCH_LEVEL * * */ diff --git a/reactos/drivers/network/afd/afd/write.c b/reactos/drivers/network/afd/afd/write.c index 5236a8c551b..df9d3894c48 100644 --- a/reactos/drivers/network/afd/afd/write.c +++ b/reactos/drivers/network/afd/afd/write.c @@ -40,11 +40,6 @@ static NTSTATUS NTAPI SendComplete ASSERT_IRQL(APC_LEVEL); - if (Irp->Cancel) { - FCB->SendIrp.InFlightRequest = NULL; - return STATUS_SUCCESS; - } - if( !SocketAcquireStateLock( FCB ) ) return Status; FCB->SendIrp.InFlightRequest = NULL; @@ -74,6 +69,8 @@ static NTSTATUS NTAPI SendComplete NextIrp->IoStatus.Status = Status; NextIrp->IoStatus.Information = 0; + if ( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); + IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } @@ -151,7 +148,7 @@ static NTSTATUS NTAPI SendComplete AFD_DbgPrint(MID_TRACE,("Dismissing request: %x\n", Status)); return UnlockAndMaybeComplete( FCB, Status, NextIrp, TotalBytesCopied, - NULL, TRUE ); + NULL ); } else if( NextIrp ) { AFD_DbgPrint(MID_TRACE,("Could not do any more with Irp %x\n", NextIrp)); @@ -174,11 +171,6 @@ static NTSTATUS NTAPI PacketSocketSendComplete Irp->IoStatus.Status, Irp->IoStatus.Information)); - if (Irp->Cancel) { - FCB->SendIrp.InFlightRequest = NULL; - return STATUS_SUCCESS; - } - /* It's ok if the FCB already died */ if( !SocketAcquireStateLock( FCB ) ) return STATUS_SUCCESS; @@ -211,7 +203,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); FCB->EventsFired &= ~AFD_EVENT_SEND; @@ -223,11 +215,11 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, /* Check that the socket is bound */ if( FCB->State != SOCKET_STATE_BOUND ) return UnlockAndMaybeComplete( FCB, STATUS_UNSUCCESSFUL, Irp, - 0, NULL, FALSE ); + 0, NULL ); if( !(SendReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete( FCB, STATUS_NO_MEMORY, Irp, 0, - NULL, FALSE ); + NULL ); /* Must lock buffers before handing off user data */ SendReq->BufferArray = LockBuffers( SendReq->BufferArray, @@ -259,12 +251,12 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, return UnlockAndMaybeComplete( FCB, Status, Irp, SendReq->BufferArray[0].len, - NULL, TRUE ); + NULL ); } if( !(SendReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete - ( FCB, STATUS_NO_MEMORY, Irp, TotalBytesCopied, NULL, FALSE ); + ( FCB, STATUS_NO_MEMORY, Irp, TotalBytesCopied, NULL ); AFD_DbgPrint(MID_TRACE,("Socket state %d\n", FCB->State)); @@ -272,7 +264,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, if( SendReq->AfdFlags & AFD_IMMEDIATE ) { AFD_DbgPrint(MID_TRACE,("Nonblocking\n")); return UnlockAndMaybeComplete - ( FCB, STATUS_CANT_WAIT, Irp, 0, NULL, TRUE ); + ( FCB, STATUS_CANT_WAIT, Irp, 0, NULL ); } else { AFD_DbgPrint(MID_TRACE,("Queuing request\n")); return LeaveIrpUntilLater( FCB, Irp, FUNCTION_SEND ); @@ -323,7 +315,7 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Empty send\n")); return UnlockAndMaybeComplete - ( FCB, Status, Irp, TotalBytesCopied, NULL, TRUE ); + ( FCB, Status, Irp, TotalBytesCopied, NULL ); } AFD_DbgPrint(MID_TRACE,("Completed %d bytes\n", TotalBytesCopied)); @@ -353,14 +345,14 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, Status, TotalBytesCopied)); return UnlockAndMaybeComplete - ( FCB, Status, Irp, TotalBytesCopied, NULL, TRUE ); + ( FCB, Status, Irp, TotalBytesCopied, NULL ); } } if( SendReq->AfdFlags & AFD_IMMEDIATE ) { AFD_DbgPrint(MID_TRACE,("Nonblocking\n")); return UnlockAndMaybeComplete - ( FCB, STATUS_CANT_WAIT, Irp, 0, NULL, TRUE ); + ( FCB, STATUS_CANT_WAIT, Irp, 0, NULL ); } else { AFD_DbgPrint(MID_TRACE,("Queuing request\n")); return LeaveIrpUntilLater( FCB, Irp, FUNCTION_SEND ); @@ -378,7 +370,7 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Called on %x\n", FCB)); - if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp, FALSE ); + if( !SocketAcquireStateLock( FCB ) ) return LostSocket( Irp ); FCB->EventsFired &= ~AFD_EVENT_SEND; FCB->PollState &= ~AFD_EVENT_SEND; @@ -386,10 +378,10 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, /* Check that the socket is bound */ if( FCB->State != SOCKET_STATE_BOUND ) return UnlockAndMaybeComplete - ( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_UNSUCCESSFUL, Irp, 0, NULL ); if( !(SendReq = LockRequest( Irp, IrpSp )) ) return UnlockAndMaybeComplete - ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL, FALSE ); + ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL ); AFD_DbgPrint (MID_TRACE,("RemoteAddress #%d Type %d\n", @@ -426,6 +418,6 @@ AfdPacketSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Dismissing request: %x\n", Status)); return UnlockAndMaybeComplete - ( FCB, Status, Irp, SendReq->BufferArray[0].len, NULL, TRUE ); + ( FCB, Status, Irp, SendReq->BufferArray[0].len, NULL ); } diff --git a/reactos/drivers/network/afd/include/afd.h b/reactos/drivers/network/afd/include/afd.h index 02a5fa11b60..285907a60af 100644 --- a/reactos/drivers/network/afd/include/afd.h +++ b/reactos/drivers/network/afd/include/afd.h @@ -206,10 +206,9 @@ UINT SocketAcquireStateLock( PAFD_FCB FCB ); NTSTATUS NTAPI UnlockAndMaybeComplete ( PAFD_FCB FCB, NTSTATUS Status, PIRP Irp, UINT Information, - PIO_COMPLETION_ROUTINE Completion, - BOOL ShouldUnlockIrp ); + PIO_COMPLETION_ROUTINE Completion ); VOID SocketStateUnlock( PAFD_FCB FCB ); -NTSTATUS LostSocket( PIRP Irp, BOOL ShouldUnlockIrp ); +NTSTATUS LostSocket( PIRP Irp ); PAFD_HANDLE LockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ); VOID UnlockHandles( PAFD_HANDLE HandleArray, UINT HandleCount ); PVOID LockRequest( PIRP Irp, PIO_STACK_LOCATION IrpSp ); From 4509402aa99e177ea2e4189311fa8e6dec6ce164 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Fri, 1 Aug 2008 21:48:54 +0000 Subject: [PATCH 077/304] In rsym, allow a stabs entry to be longer than 256 characters, so that ROS may be compiled with -feliminate-unused-debug-symbols which reduces the needed disk space a lot. svn path=/trunk/; revision=35020 --- reactos/tools/rsym.c | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/reactos/tools/rsym.c b/reactos/tools/rsym.c index 38c0b7e3c95..0ae8fb8ea46 100644 --- a/reactos/tools/rsym.c +++ b/reactos/tools/rsym.c @@ -143,6 +143,7 @@ ConvertStabs(ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase, ULONG_PTR Address, LastFunctionAddress; int First = 1; char *Name; + ULONG NameLen; char FuncName[256]; PROSSYM_ENTRY Current; @@ -220,18 +221,16 @@ ConvertStabs(ULONG *SymbolsCount, PROSSYM_ENTRY *SymbolsBase, Current->Address = Address; Current->FileOffset = Current[-1].FileOffset; } - if (sizeof(FuncName) <= strlen((char *) StabStringsBase + StabEntry[i].n_strx)) + Name = (char *) StabStringsBase + StabEntry[i].n_strx; + NameLen = strcspn(Name, ":"); + if (sizeof(FuncName) <= NameLen) { free(*SymbolsBase); fprintf(stderr, "Function name too long\n"); return 1; } - strcpy(FuncName, (char *) StabStringsBase + StabEntry[i].n_strx); - Name = strchr(FuncName, ':'); - if (NULL != Name) - { - *Name = '\0'; - } + memcpy(FuncName, Name, NameLen); + FuncName[NameLen] = '\0'; Current->FunctionOffset = FindOrAddString(FuncName, StringsLength, StringsBase); From 6d4ff1a0c03695e6da1c9d71de6b27814101ce30 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sat, 2 Aug 2008 00:38:01 +0000 Subject: [PATCH 078/304] - Implemented NotifyWinEvent, SetWinEventHook and UnhookWinEvent. - I only enables test_winevents(), test_set_hook() and all related with wine Msg tests. The test takes a while to run due to the IsWinEventHookInstalled check. I optimized our mask set to take this into account. The results are, the test is slow and our code is fast. - We pass all Event and Local Hook tests. Will research the problem with global hooks and finish it up. svn path=/trunk/; revision=35022 --- .../subsystems/win32/win32k/include/window.h | 2 + .../subsystems/win32/win32k/ntuser/event.c | 296 ++++++++++-------- reactos/subsystems/win32/win32k/ntuser/hook.c | 15 +- .../subsystems/win32/win32k/ntuser/window.c | 2 +- 4 files changed, 179 insertions(+), 136 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/window.h b/reactos/subsystems/win32/win32k/include/window.h index 3358d31c48f..d501ff757bf 100644 --- a/reactos/subsystems/win32/win32k/include/window.h +++ b/reactos/subsystems/win32/win32k/include/window.h @@ -167,6 +167,8 @@ IntShowOwnedPopups( PWINDOW_OBJECT owner, BOOL fShow ); LRESULT FASTCALL IntDefWindowProc( PWINDOW_OBJECT Window, UINT Msg, WPARAM wParam, LPARAM lParam, BOOL Ansi); +VOID FASTCALL IntNotifyWinEvent(DWORD, PWINDOW_OBJECT, LONG, LONG); + #endif /* _WIN32K_WINDOW_H */ /* EOF */ diff --git a/reactos/subsystems/win32/win32k/ntuser/event.c b/reactos/subsystems/win32/win32k/ntuser/event.c index 821e5b842aa..7559422dda1 100644 --- a/reactos/subsystems/win32/win32k/ntuser/event.c +++ b/reactos/subsystems/win32/win32k/ntuser/event.c @@ -4,9 +4,14 @@ #define NDEBUG #include +typedef struct _EVENTPACK +{ + PEVENTHOOK pEH; + LONG idObject; + LONG idChild; +} EVENTPACK, *PEVENTPACK; + static PEVENTTABLE GlobalEvents = NULL; -static ULONG EventSys[EVENT_SYSTEM_MINIMIZEEND+1] = {0}; -static ULONG EventObj[( EVENT_OBJECT_ACCELERATORCHANGE - EVENT_OBJECT_CREATE) +1] = {0}; /* PRIVATE FUNCTIONS *********************************************************/ @@ -47,92 +52,38 @@ GetMaskFromEvent(DWORD Event) static VOID FASTCALL -IntEventUpCount(ULONG eventMin, ULONG eventMax) +IntSetSrvEventMask( UINT EventMin, UINT EventMax) { - INT i, Min, Max; - - if ( eventMin >= EVENT_SYSTEM_SOUND && eventMax <= EVENT_SYSTEM_MINIMIZEEND) + UINT event; + DPRINT("SetSrvEventMask 1\n"); + for ( event = EventMin; event <= EventMax; event++) { - for (i = eventMin; i < eventMax; i++) + if ((event >= EVENT_SYSTEM_SOUND && event <= EVENT_SYSTEM_MINIMIZEEND) || + (event >= EVENT_CONSOLE_CARET && event <= EVENT_CONSOLE_END_APPLICATION) || + (event >= EVENT_OBJECT_CREATE && event <= EVENT_OBJECT_ACCELERATORCHANGE)) { - gpsi->SrvEventActivity |= GetMaskFromEvent(i); - EventSys[i]++; + gpsi->SrvEventActivity |= GetMaskFromEvent(event); } + if (event > EVENT_SYSTEM_MINIMIZEEND && event < EVENT_CONSOLE_CARET) + { + event = EVENT_CONSOLE_CARET-1; + gpsi->SrvEventActivity |= GetMaskFromEvent(event); + } + if (event > EVENT_CONSOLE_END_APPLICATION && event < EVENT_OBJECT_CREATE ) + { + event = EVENT_OBJECT_CREATE-1; + gpsi->SrvEventActivity |= GetMaskFromEvent(event); + } + if (event > EVENT_OBJECT_ACCELERATORCHANGE && event < EVENT_MAX) + { + event = EVENT_MAX-1; + gpsi->SrvEventActivity |= GetMaskFromEvent(event); + break; + } } - if ( eventMin >= EVENT_OBJECT_CREATE && eventMax <= EVENT_OBJECT_ACCELERATORCHANGE) - { - for (i = eventMin; i < eventMax; i++) - { - gpsi->SrvEventActivity |= GetMaskFromEvent(i); - EventObj[i - EVENT_OBJECT_CREATE]++; - } - } - if ( eventMin >= EVENT_SYSTEM_SOUND && eventMax <= EVENT_OBJECT_ACCELERATORCHANGE) - { - Max = EVENT_SYSTEM_MINIMIZEEND; - for (i = eventMin; i < Max; i++) - { - gpsi->SrvEventActivity |= GetMaskFromEvent(i); - EventSys[i]++; - } - Min = EVENT_OBJECT_CREATE; - for (i = Min; i < eventMax; i++) - { - gpsi->SrvEventActivity |= GetMaskFromEvent(i); - EventObj[i - EVENT_OBJECT_CREATE]++; - } - } -} - -static -VOID -FASTCALL -IntEventDownCount(ULONG eventMin, ULONG eventMax) -{ - INT i, Min, Max; - - if ( eventMin >= EVENT_SYSTEM_SOUND && eventMax <= EVENT_SYSTEM_MINIMIZEEND) - { - for (i = eventMin; i < eventMax; i++) - { - EventSys[i]--; - if (!EventSys[i]) gpsi->SrvEventActivity &= ~GetMaskFromEvent(i); - } - } - if ( eventMin >= EVENT_OBJECT_CREATE && eventMax <= EVENT_OBJECT_ACCELERATORCHANGE) - { - for (i = eventMin; i < eventMax; i++) - { - EventObj[i - EVENT_OBJECT_CREATE]--; - if (!EventObj[i - EVENT_OBJECT_CREATE]) - gpsi->SrvEventActivity &= ~GetMaskFromEvent(i); - } - } - if ( eventMin >= EVENT_SYSTEM_SOUND && eventMax <= EVENT_OBJECT_ACCELERATORCHANGE) - { - Max = EVENT_SYSTEM_MINIMIZEEND; - for (i = eventMin; i < Max; i++) - { - EventSys[i]--; - if (!EventSys[i]) gpsi->SrvEventActivity &= ~GetMaskFromEvent(i); - } - Min = EVENT_OBJECT_CREATE; - for (i = Min; i < eventMax; i++) - { - EventObj[i - EVENT_OBJECT_CREATE]--; - if (!EventObj[i - EVENT_OBJECT_CREATE]) - gpsi->SrvEventActivity &= ~GetMaskFromEvent(i); - } - } -} - - -static -DWORD -FASTCALL -TimeStamp(VOID) -{ - return (DWORD)((ULONGLONG)SharedUserData->TickCountLowDeprecated * SharedUserData->TickCountMultiplier / 16777216); + if (!gpsi->SrvEventActivity) + gpsi->SrvEventActivity |= SRV_EVENT_RUNNING; // Set something. + DPRINT("SetSrvEventMask 2 : %x\n", gpsi->SrvEventActivity); } static @@ -146,14 +97,19 @@ IntCallLowLevelEvent( PEVENTHOOK pEH, { NTSTATUS Status; ULONG_PTR uResult; + EVENTPACK EP; + + EP.pEH = pEH; + EP.idObject = idObject; + EP.idChild = idChild; /* FIXME should get timeout from * HKEY_CURRENT_USER\Control Panel\Desktop\LowLevelHooksTimeout */ Status = co_MsqSendMessage(((PW32THREAD)pEH->Thread->Tcb.Win32Thread)->MessageQueue, hwnd, event, - idObject, - idChild, + 0, + (LPARAM)&EP, 5000, TRUE, MSQ_ISEVENT, @@ -162,6 +118,7 @@ IntCallLowLevelEvent( PEVENTHOOK pEH, return NT_SUCCESS(Status) ? uResult : 0; } + static BOOL FASTCALL @@ -171,6 +128,7 @@ IntRemoveEvent(PEVENTHOOK pEH) { RemoveEntryList(&pEH->Chain); GlobalEvents->Counts--; + if (!GlobalEvents->Counts) gpsi->SrvEventActivity = 0; UserDeleteObject(pEH->Self, otEvent); return TRUE; } @@ -186,30 +144,73 @@ co_EVENT_CallEvents( DWORD event, LONG idObject, LONG idChild) { + PEVENTHOOK pEH; + LRESULT Result; + PEVENTPACK pEP = (PEVENTPACK)idChild; - PEVENTHOOK pEH = UserHeapAlloc(sizeof(EVENTHOOK)); - - if ((gpsi->SrvEventActivity & GetMaskFromEvent(event))) return 0; // No events to run. - - - if ((pEH->Thread != PsGetCurrentThread()) && (pEH->Thread != NULL)) - { - // Post it in message queue. - return IntCallLowLevelEvent(pEH, event, hwnd, idObject, idChild); - } - - - LRESULT Result = co_IntCallEventProc(pEH->Self, - event, - hwnd, - idObject, - idChild, - (DWORD)(NtCurrentTeb()->Cid).UniqueThread, - TimeStamp(), - pEH->Proc); + pEH = pEP->pEH; + + Result = co_IntCallEventProc( pEH->Self, + event, + hwnd, + pEP->idObject, + pEP->idChild, + (DWORD)(NtCurrentTeb()->Cid).UniqueThread, + (DWORD)EngGetTickCount(), + pEH->Proc); return Result; } +VOID +FASTCALL +IntNotifyWinEvent( + DWORD Event, + PWINDOW_OBJECT Window, + LONG idObject, + LONG idChild) +{ + PEVENTHOOK pEH; + LRESULT Result; + + if (!GlobalEvents->Counts) return; + + pEH = (PEVENTHOOK)GlobalEvents->Events.Flink; + + do + { + UserReferenceObject(pEH); + // Must be inside the event window. + if ( (pEH->eventMin <= Event) && (pEH->eventMax >= Event)) + { + if ((pEH->Thread != PsGetCurrentThread()) && (pEH->Thread != NULL)) + { // if all process || all thread || other thread same process + if (!(pEH->idProcess) || !(pEH->idThread) || + ((DWORD)(NtCurrentTeb()->Cid).UniqueProcess == pEH->idProcess)) + { + Result = IntCallLowLevelEvent(pEH, Event, Window->hSelf, idObject, idChild); + } + }// if ^skip own thread && ((Pid && CPid == Pid && ^skip own process) || all process) + else if ( !(pEH->Flags & WINEVENT_SKIPOWNTHREAD) && + ( ((pEH->idProcess && + (DWORD)(NtCurrentTeb()->Cid).UniqueProcess == pEH->idProcess) && + !(pEH->Flags & WINEVENT_SKIPOWNPROCESS)) || + !pEH->idProcess ) ) + { + Result = co_IntCallEventProc( pEH->Self, + Event, + Window->hSelf, + idObject, + idChild, + (DWORD)(NtCurrentTeb()->Cid).UniqueThread, + (DWORD)EngGetTickCount(), + pEH->Proc); + } + } + UserDereferenceObject(pEH); + + pEH = (PEVENTHOOK)pEH->Chain.Flink; + } while (pEH != (PEVENTHOOK)&GlobalEvents->Events.Flink); +} VOID STDCALL @@ -219,8 +220,22 @@ NtUserNotifyWinEvent( LONG idObject, LONG idChild) { + PWINDOW_OBJECT Window = NULL; + USER_REFERENCE_ENTRY Ref; UserEnterExclusive(); - UNIMPLEMENTED + + /* Validate input */ + if (hWnd && (hWnd != INVALID_HANDLE_VALUE) && !(Window = UserGetWindowObject(hWnd))) + { + return; + } + + if (gpsi->SrvEventActivity & GetMaskFromEvent(Event)) + { + UserRefObjectCo(Window, &Ref); + IntNotifyWinEvent( Event, Window, idObject, idChild); + UserDerefObjectCo(Window); + } UserLeave(); } @@ -241,11 +256,10 @@ NtUserSetWinEventHook( UNICODE_STRING ModuleName; NTSTATUS Status; HANDLE Handle; + PETHREAD Thread = NULL; UserEnterExclusive(); - DPRINT1("WARNING! Use at your own risk! Function is UNIMPLEMENTED!\n"); - if ( !GlobalEvents ) { GlobalEvents = ExAllocatePoolWithTag(PagedPool, sizeof(EVENTTABLE), TAG_HOOK); @@ -253,6 +267,34 @@ NtUserSetWinEventHook( InitializeListHead(&GlobalEvents->Events); } + if (eventMin > eventMax) + { + SetLastWin32Error(ERROR_INVALID_HOOK_FILTER); + goto SetEventExit; + } + + if (!lpfnWinEventProc) + { + SetLastWin32Error(ERROR_INVALID_FILTER_PROC); + goto SetEventExit; + } + + if ((dwflags & WINEVENT_INCONTEXT) && !hmodWinEventProc) + { + SetLastWin32Error(ERROR_HOOK_NEEDS_HMOD); + goto SetEventExit; + } + + if (idThread) + { + Status = PsLookupThreadByThreadId((HANDLE)(DWORD_PTR)idThread, &Thread); + if (!NT_SUCCESS(Status)) + { + SetLastWin32Error(ERROR_INVALID_THREAD_ID); + goto SetEventExit; + } + } + pEH = UserCreateObject(gHandleTable, &Handle, otEvent, sizeof(EVENTHOOK)); if (pEH) { @@ -260,7 +302,10 @@ NtUserSetWinEventHook( GlobalEvents->Counts++; pEH->Self = Handle; - pEH->Thread = PsGetCurrentThread(); + if (Thread) + pEH->Thread = Thread; + else + pEH->Thread = PsGetCurrentThread(); pEH->eventMin = eventMin; pEH->eventMax = eventMax; pEH->idProcess = idProcess; @@ -268,21 +313,13 @@ NtUserSetWinEventHook( pEH->Ansi = FALSE; pEH->Flags = dwflags; - if ((dwflags & WINEVENT_INCONTEXT) && !hmodWinEventProc) - { - SetLastWin32Error(ERROR_HOOK_NEEDS_HMOD); - goto SetEventExit; - } - - if (eventMin > eventMax) - { - SetLastWin32Error(ERROR_INVALID_HOOK_FILTER); - goto SetEventExit; - } if (NULL != hmodWinEventProc) { - Status = MmCopyFromCaller(&ModuleName, puString, sizeof(UNICODE_STRING)); + Status = MmCopyFromCaller(&ModuleName, + puString, + sizeof(UNICODE_STRING)); + if (! NT_SUCCESS(Status)) { UserDereferenceObject(pEH); @@ -290,9 +327,11 @@ NtUserSetWinEventHook( SetLastNtError(Status); goto SetEventExit; } + pEH->ModuleName.Buffer = ExAllocatePoolWithTag(PagedPool, ModuleName.MaximumLength, TAG_HOOK); + if (NULL == pEH->ModuleName.Buffer) { UserDereferenceObject(pEH); @@ -300,10 +339,13 @@ NtUserSetWinEventHook( SetLastWin32Error(ERROR_NOT_ENOUGH_MEMORY); goto SetEventExit; } + pEH->ModuleName.MaximumLength = ModuleName.MaximumLength; + Status = MmCopyFromCaller(pEH->ModuleName.Buffer, ModuleName.Buffer, ModuleName.MaximumLength); + if (! NT_SUCCESS(Status)) { ExFreePool(pEH->ModuleName.Buffer); @@ -312,25 +354,24 @@ NtUserSetWinEventHook( SetLastNtError(Status); goto SetEventExit; } + pEH->ModuleName.Length = ModuleName.Length; + pEH->Proc = (void *)((char *)lpfnWinEventProc - (char *)hmodWinEventProc); } else pEH->Proc = lpfnWinEventProc; Ret = Handle; - /* - Now we are good, set the Events and counts. - */ - IntEventUpCount(eventMin, eventMax); + IntSetSrvEventMask( eventMin, eventMax); } SetEventExit: + if (Thread) ObDereferenceObject(Thread); UserLeave(); return Ret; } - BOOL STDCALL NtUserUnhookWinEvent( @@ -341,12 +382,9 @@ NtUserUnhookWinEvent( UserEnterExclusive(); - DPRINT1("WARNING! Use at your own risk! Function is UNIMPLEMENTED!\n"); - pEH = (PEVENTHOOK)UserGetObject(gHandleTable, hWinEventHook, otEvent); if (pEH) { - IntEventDownCount(pEH->eventMin, pEH->eventMax); Ret = IntRemoveEvent(pEH); } diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index 52c4a4b2819..134e974f4c4 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -974,12 +974,18 @@ NtUserSetWindowsHookEx( DPRINT("Enter NtUserSetWindowsHookEx\n"); UserEnterExclusive(); - if (HookId < WH_MINHOOK || WH_MAXHOOK < HookId || NULL == HookProc) + if (HookId < WH_MINHOOK || WH_MAXHOOK < HookId ) { SetLastWin32Error(ERROR_INVALID_PARAMETER); RETURN( NULL); } + if (!HookProc) + { + SetLastWin32Error(ERROR_INVALID_FILTER_PROC); + RETURN( NULL); + } + ClientInfo = GetWin32ClientInfo(); if (ThreadId) /* thread-local hook */ @@ -1029,7 +1035,7 @@ NtUserSetWindowsHookEx( } else if (NULL == Mod) { - SetLastWin32Error(ERROR_INVALID_PARAMETER); + SetLastWin32Error(ERROR_HOOK_NEEDS_HMOD); RETURN( NULL); } else @@ -1039,10 +1045,7 @@ NtUserSetWindowsHookEx( Global = TRUE; } - /* We only (partially) support local WH_CBT hooks and - * WH_KEYBOARD_LL, WH_MOUSE_LL and WH_GETMESSAGE hooks for now - */ - if (Global || + if ( Global || WH_DEBUG == HookId || WH_JOURNALPLAYBACK == HookId || WH_JOURNALRECORD == HookId) diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index bc1a7ac23bb..6dfd8424a4d 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -2059,7 +2059,7 @@ AllocErr: RETURN((HWND)0); } #if 0 - Result = co_EVENT_CallEvents(EVENT_OBJECT_CREATE, Window->hSelf, OBJID_WINDOW, 0); + Result = IntNotifyWinEvent(EVENT_OBJECT_CREATE, Window, OBJID_WINDOW, 0); if (Result == (LRESULT)-1) { From de7b0d6e38c634d346999b7329aa9341f61c6343 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Sat, 2 Aug 2008 06:21:55 +0000 Subject: [PATCH 079/304] - Dereference pointer to event and fix module check in hooks. svn path=/trunk/; revision=35025 --- reactos/subsystems/win32/win32k/ntuser/event.c | 2 ++ reactos/subsystems/win32/win32k/ntuser/hook.c | 5 ++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/event.c b/reactos/subsystems/win32/win32k/ntuser/event.c index 7559422dda1..5c379685435 100644 --- a/reactos/subsystems/win32/win32k/ntuser/event.c +++ b/reactos/subsystems/win32/win32k/ntuser/event.c @@ -362,6 +362,8 @@ NtUserSetWinEventHook( else pEH->Proc = lpfnWinEventProc; + UserDereferenceObject(pEH); + Ret = Handle; IntSetSrvEventMask( eventMin, eventMax); } diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index 134e974f4c4..acddc1c3779 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -1143,10 +1143,9 @@ NtUserSetWindowsHookEx( RETURN( NULL); } Hook->ModuleName.Length = ModuleName.Length; + /* make proc relative to the module base */ + Hook->Proc = (void *)((char *)HookProc - (char *)Mod); } - - if (Mod) /* make proc relative to the module base */ - Hook->Proc = (void *)((char *)HookProc - (char *)Mod); else Hook->Proc = HookProc; From f7db1083a47251a86d0899757ee58f702ad95ff0 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sat, 2 Aug 2008 09:29:16 +0000 Subject: [PATCH 080/304] - Fix broken UnmapViewOfFile definition svn path=/trunk/; revision=35027 --- reactos/dll/win32/kernel32/mem/section.c | 4 ++-- reactos/include/psdk/winbase.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/kernel32/mem/section.c b/reactos/dll/win32/kernel32/mem/section.c index 68c397c4359..7829ba153e5 100644 --- a/reactos/dll/win32/kernel32/mem/section.c +++ b/reactos/dll/win32/kernel32/mem/section.c @@ -240,12 +240,12 @@ MapViewOfFile(HANDLE hFileMappingObject, */ BOOL NTAPI -UnmapViewOfFile(LPVOID lpBaseAddress) +UnmapViewOfFile(LPCVOID lpBaseAddress) { NTSTATUS Status; /* Unmap the section */ - Status = NtUnmapViewOfSection(NtCurrentProcess(), lpBaseAddress); + Status = NtUnmapViewOfSection(NtCurrentProcess(), (PVOID)lpBaseAddress); if (!NT_SUCCESS(Status)) { /* We failed */ diff --git a/reactos/include/psdk/winbase.h b/reactos/include/psdk/winbase.h index 4448fa66829..4da67ada16e 100644 --- a/reactos/include/psdk/winbase.h +++ b/reactos/include/psdk/winbase.h @@ -2046,7 +2046,7 @@ BOOL WINAPI UnlockFile(HANDLE,DWORD,DWORD,DWORD,DWORD); BOOL WINAPI UnlockFileEx(HANDLE,DWORD,DWORD,DWORD,LPOVERLAPPED); #define UnlockResource(h) (h) #define UnlockSegment(w) GlobalUnfix((HANDLE)(w)) /* Obsolete: Has no effect. */ -BOOL WINAPI UnmapViewOfFile(PVOID); +BOOL WINAPI UnmapViewOfFile(LPCVOID); #if (_WIN32_WINNT >= 0x0500) BOOL WINAPI UnregisterWait(HANDLE); BOOL WINAPI UnregisterWaitEx(HANDLE,HANDLE); From 253f4ee284db2dc73c18d6a17d23f4fdff3ca8da Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 2 Aug 2008 10:55:56 +0000 Subject: [PATCH 081/304] - Remove unneeded code, which would have its 10 years anniversary in ~20 days (committed originally by Rex back in August, 1998, revision number 8(!), and coded by David Welch, never touched since then). svn path=/trunk/; revision=35030 --- reactos/ntoskrnl/ntoskrnl-generic.rbuild | 1 - reactos/ntoskrnl/rtl/strtok.c | 109 ----------------------- 2 files changed, 110 deletions(-) delete mode 100644 reactos/ntoskrnl/rtl/strtok.c diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index fd1aa231725..5e0a14b2b58 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -443,7 +443,6 @@ libsupp.c misc.c - strtok.c access.c diff --git a/reactos/ntoskrnl/rtl/strtok.c b/reactos/ntoskrnl/rtl/strtok.c deleted file mode 100644 index 98ed06b0881..00000000000 --- a/reactos/ntoskrnl/rtl/strtok.c +++ /dev/null @@ -1,109 +0,0 @@ -/* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel - * FILE: ntoskrnl/rtl/strtok.c - * PURPOSE: Unicode and thread safe implementation of strtok - * - * PROGRAMMERS: David Welch (welch@mcmail.com) - */ - -/* INCLUDES *****************************************************************/ - -#include -#include - - -/* FUNCTIONS *****************************************************************/ - -char* __cdecl strtok(char *s, const char *delim) -{ - const char *spanp; - int c, sc; - char *tok; - static char *last; - - if (s == NULL && (s = last) == NULL) - return (NULL); - - /* - * Skip (span) leading delimiters (s += strspn(s, delim), sort of). - */ - cont: - c = *s++; - for (spanp = delim; (sc = *spanp++) != 0;) { - if (c == sc) - goto cont; - } - - if (c == 0) { /* no non-delimiter characters */ - last = NULL; - return (NULL); - } - tok = s - 1; - - /* - * Scan token (scan for delimiters: s += strcspn(s, delim), sort of). - * Note that delim must have one NUL; we stop if we see that, too. - */ - for (;;) { - c = *s++; - spanp = delim; - do { - if ((sc = *spanp++) == c) { - if (c == 0) - s = NULL; - else - s[-1] = 0; - last = s; - return (tok); - } - } while (sc != 0); - } - /* NOTREACHED */ -} - -PWSTR RtlStrtok(PUNICODE_STRING _string, PWSTR _sep, - PWSTR* temp) -/* - * FUNCTION: Splits a string into tokens - * ARGUMENTS: - * string = string to operate on - * if NULL then continue with previous string - * sep = Token deliminators - * temp = Tempory storage provided by the caller - * ARGUMENTS: Returns the beginning of the next token - */ -{ - PWSTR string; - PWSTR sep; - PWSTR start; - - if (_string!=NULL) - { - string = _string->Buffer; - } - else - { - string = *temp; - } - - start = string; - - while ((*string)!=0) - { - sep = _sep; - while ((*sep)!=0) - { - if ((*string)==(*sep)) - { - *string=0; - *temp=string+1; - return(start); - } - sep++; - } - string++; - } - *temp=NULL; - return(start); -} From 006de1d85f8f69cafae48ac131fe50f79ae533e1 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sat, 2 Aug 2008 12:46:02 +0000 Subject: [PATCH 082/304] - Clean up ntdll a bit svn path=/trunk/; revision=35032 --- reactos/dll/ntdll/csr/capture.c | 2 +- .../ntdll/{main => dispatch}/arm/stubs_asm.s | 0 .../dll/ntdll/{main => dispatch}/dispatch.c | 5 +++-- .../ntdll/{main => dispatch}/i386/dispatch.S | 2 +- reactos/dll/ntdll/{inc => include}/ntdll.h | 2 +- reactos/dll/ntdll/{inc => include}/ntdllp.h | 2 +- reactos/dll/ntdll/ldr/elf.c | 4 +--- reactos/dll/ntdll/ldr/startup.c | 3 +-- reactos/dll/ntdll/ldr/utils.c | 3 +-- reactos/dll/ntdll/ntdll.rbuild | 20 +++++++++---------- reactos/dll/ntdll/rtl/version.c | 3 +-- 11 files changed, 21 insertions(+), 25 deletions(-) rename reactos/dll/ntdll/{main => dispatch}/arm/stubs_asm.s (100%) rename reactos/dll/ntdll/{main => dispatch}/dispatch.c (92%) rename reactos/dll/ntdll/{main => dispatch}/i386/dispatch.S (95%) rename reactos/dll/ntdll/{inc => include}/ntdll.h (94%) rename reactos/dll/ntdll/{inc => include}/ntdllp.h (95%) diff --git a/reactos/dll/ntdll/csr/capture.c b/reactos/dll/ntdll/csr/capture.c index fd48ed49e76..3418123f7c7 100644 --- a/reactos/dll/ntdll/csr/capture.c +++ b/reactos/dll/ntdll/csr/capture.c @@ -2,7 +2,7 @@ * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: lib/ntdll/csr/capture.c - * PURPOSE: routines for probing and capturing CSR API Messages + * PURPOSE: Routines for probing and capturing CSR API Messages * PROGRAMMER: Alex Ionescu (alex@relsoft.net) */ diff --git a/reactos/dll/ntdll/main/arm/stubs_asm.s b/reactos/dll/ntdll/dispatch/arm/stubs_asm.s similarity index 100% rename from reactos/dll/ntdll/main/arm/stubs_asm.s rename to reactos/dll/ntdll/dispatch/arm/stubs_asm.s diff --git a/reactos/dll/ntdll/main/dispatch.c b/reactos/dll/ntdll/dispatch/dispatch.c similarity index 92% rename from reactos/dll/ntdll/main/dispatch.c rename to reactos/dll/ntdll/dispatch/dispatch.c index babb174cd96..6fd4f70024f 100644 --- a/reactos/dll/ntdll/main/dispatch.c +++ b/reactos/dll/ntdll/dispatch/dispatch.c @@ -1,6 +1,7 @@ -/* COPYRIGHT: See COPYING in the top level directory +/* + * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS NT Library - * FILE: lib/ntdll/main/dispatch.c + * FILE: dll/ntdll/dispatch/dispatch.c * PURPOSE: User-Mode NT Dispatchers * PROGRAMERS: Alex Ionescu (alex@relsoft.net) * David Welch diff --git a/reactos/dll/ntdll/main/i386/dispatch.S b/reactos/dll/ntdll/dispatch/i386/dispatch.S similarity index 95% rename from reactos/dll/ntdll/main/i386/dispatch.S rename to reactos/dll/ntdll/dispatch/i386/dispatch.S index ff15c626c12..526e5b8f189 100644 --- a/reactos/dll/ntdll/main/i386/dispatch.S +++ b/reactos/dll/ntdll/dispatch/i386/dispatch.S @@ -1,7 +1,7 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS NT Library - * FILE: lib/ntdll/main/i386/dispatch.S + * FILE: dl/ntdll/dispatch/i386/dispatch.S * PURPOSE: User-Mode NT Dispatchers * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) */ diff --git a/reactos/dll/ntdll/inc/ntdll.h b/reactos/dll/ntdll/include/ntdll.h similarity index 94% rename from reactos/dll/ntdll/inc/ntdll.h rename to reactos/dll/ntdll/include/ntdll.h index a78550bf761..cb8f21cd134 100644 --- a/reactos/dll/ntdll/inc/ntdll.h +++ b/reactos/dll/ntdll/include/ntdll.h @@ -1,7 +1,7 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS System Libraries - * FILE: lib/ntdll/inc/ntdll.h + * FILE: dll/ntdll/include/ntdll.h * PURPOSE: Native Libary Header * PROGRAMMER: Alex Ionescu (alex@relsoft.net) */ diff --git a/reactos/dll/ntdll/inc/ntdllp.h b/reactos/dll/ntdll/include/ntdllp.h similarity index 95% rename from reactos/dll/ntdll/inc/ntdllp.h rename to reactos/dll/ntdll/include/ntdllp.h index 5e9265f1957..903c15e028c 100644 --- a/reactos/dll/ntdll/inc/ntdllp.h +++ b/reactos/dll/ntdll/include/ntdllp.h @@ -1,7 +1,7 @@ /* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS System Libraries - * FILE: lib/ntdll/inc/ntdllp.h + * FILE: dll/ntdll/include/ntdllp.h * PURPOSE: Native Libary Internal Header * PROGRAMMER: Alex Ionescu (alex@relsoft.net) */ diff --git a/reactos/dll/ntdll/ldr/elf.c b/reactos/dll/ntdll/ldr/elf.c index 0996481c22e..ecc82ce0c5d 100644 --- a/reactos/dll/ntdll/ldr/elf.c +++ b/reactos/dll/ntdll/ldr/elf.c @@ -1,6 +1,3 @@ -/* $Id$ -*/ - /* * REACTOS ELF LOADER * @@ -36,6 +33,7 @@ * $FreeBSD: src/libexec/rtld-elf/rtld.c,v 1.101 2004/11/02 09:42:21 ssouhlal Exp $ */ + /* * Dynamic linker for ELF. * diff --git a/reactos/dll/ntdll/ldr/startup.c b/reactos/dll/ntdll/ldr/startup.c index c0ec4f55ea2..350d9447fc2 100644 --- a/reactos/dll/ntdll/ldr/startup.c +++ b/reactos/dll/ntdll/ldr/startup.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: lib/ntdll/ldr/startup.c diff --git a/reactos/dll/ntdll/ldr/utils.c b/reactos/dll/ntdll/ldr/utils.c index 862115d09db..2eef1a6e292 100644 --- a/reactos/dll/ntdll/ldr/utils.c +++ b/reactos/dll/ntdll/ldr/utils.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * FILE: lib/ntdll/ldr/utils.c diff --git a/reactos/dll/ntdll/ntdll.rbuild b/reactos/dll/ntdll/ntdll.rbuild index 69f9720f422..06759b12e99 100644 --- a/reactos/dll/ntdll/ntdll.rbuild +++ b/reactos/dll/ntdll/ntdll.rbuild @@ -4,8 +4,8 @@ - inc - def + include + include/reactos/subsys @@ -25,11 +25,7 @@ dbgui.c - - startup.c - utils.c - - + dispatch.S @@ -44,6 +40,13 @@ dispatch.c + + ntdll.h + + + startup.c + utils.c + libsupp.c version.c @@ -51,8 +54,5 @@ ntdll.rc - - ntdll.h - \ No newline at end of file diff --git a/reactos/dll/ntdll/rtl/version.c b/reactos/dll/ntdll/rtl/version.c index 6150c8933ba..88cadb21d70 100644 --- a/reactos/dll/ntdll/rtl/version.c +++ b/reactos/dll/ntdll/rtl/version.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS system libraries * FILE: lib/ntdll/rtl/process.c From 06e654d8a135fe85efd12e2ce38255a5b6054336 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 2 Aug 2008 14:11:48 +0000 Subject: [PATCH 083/304] Support GetObjectW() failure Reformat code svn path=/trunk/; revision=35036 --- reactos/dll/cpl/desk/settings.c | 318 ++++++++++++++++---------------- 1 file changed, 162 insertions(+), 156 deletions(-) diff --git a/reactos/dll/cpl/desk/settings.c b/reactos/dll/cpl/desk/settings.c index 17540404d5d..5887fc37b37 100644 --- a/reactos/dll/cpl/desk/settings.c +++ b/reactos/dll/cpl/desk/settings.c @@ -57,8 +57,7 @@ GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD* pSettingsCount, OUT PSETTI HDC hDC; PSETTINGS_ENTRY Current; DWORD bpp, xres, yres, checkbpp; - DWORD curDispFreq; - + DWORD curDispFreq; /* Get current settings */ *CurrentSettings = NULL; @@ -80,12 +79,12 @@ GetPossibleSettings(IN LPCTSTR DeviceName, OUT DWORD* pSettingsCount, OUT PSETTI while (EnumDisplaySettingsEx(DeviceName, iMode, &devmode, dwFlags)) { - if ((devmode.dmBitsPerPel==4 || - devmode.dmBitsPerPel==8 || - devmode.dmBitsPerPel==16 || - devmode.dmBitsPerPel==24 || - devmode.dmBitsPerPel==32) && - devmode.dmDisplayFrequency==curDispFreq) + if ((devmode.dmBitsPerPel == 4 || + devmode.dmBitsPerPel == 8 || + devmode.dmBitsPerPel == 16 || + devmode.dmBitsPerPel == 24 || + devmode.dmBitsPerPel == 32) && + devmode.dmDisplayFrequency == curDispFreq) { checkbpp=1; } @@ -286,7 +285,7 @@ OnInitDialog(IN HWND hwndDlg) BITMAP bitmap; DWORD Result = 0; DWORD iDevNum = 0; - INT i; + INT i; DISPLAY_DEVICE displayDevice; PGLOBAL_DATA pGlobalData; @@ -365,44 +364,52 @@ OnInitDialog(IN HWND hwndDlg) } /* Initialize the color spectrum bitmaps */ - for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) - { - pGlobalData->hSpectrumBitmaps[i] = LoadImageW(hApplet, MAKEINTRESOURCEW(IDB_SPECTRUM_4 + i), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); + for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) + { + pGlobalData->hSpectrumBitmaps[i] = LoadImageW(hApplet, MAKEINTRESOURCEW(IDB_SPECTRUM_4 + i), IMAGE_BITMAP, 0, 0, LR_DEFAULTCOLOR); - if (pGlobalData->hSpectrumBitmaps[i] != NULL) - { - GetObjectW(pGlobalData->hSpectrumBitmaps[i], sizeof(BITMAP), &bitmap); - - pGlobalData->cxSource[i] = bitmap.bmWidth; - pGlobalData->cySource[i] = bitmap.bmHeight; - } - } + if (pGlobalData->hSpectrumBitmaps[i] != NULL) + { + if (GetObjectW(pGlobalData->hSpectrumBitmaps[i], sizeof(BITMAP), &bitmap) != 0) + { + pGlobalData->cxSource[i] = bitmap.bmWidth; + pGlobalData->cySource[i] = bitmap.bmHeight; + } + else + { + pGlobalData->cxSource[i] = 0; + pGlobalData->cySource[i] = 0; + } + } + } } /* Get the ID for GLOBAL_DATA::hSpectrumBitmaps */ static VOID ShowColorSpectrum(IN HDC hDC, IN LPRECT client, IN DWORD BitsPerPel, IN PGLOBAL_DATA pGlobalData) { - HDC hdcMem; - hdcMem = CreateCompatibleDC(hDC); + HDC hdcMem; + INT iBitmap; - if (hdcMem) - { - INT iBitmap; + hdcMem = CreateCompatibleDC(hDC); - switch(BitsPerPel) - { - case 4: iBitmap = 0; break; - case 8: iBitmap = 1; break; - default: iBitmap = 2; - } + if (!hdcMem) + return; - SelectObject(hdcMem, pGlobalData->hSpectrumBitmaps[iBitmap]); - StretchBlt(hDC, client->left, client->top, client->right - client->left, - client->bottom - client->top, hdcMem, 0, 0, - pGlobalData->cxSource[iBitmap], pGlobalData->cySource[iBitmap], SRCCOPY); - DeleteDC(hdcMem); - } + switch(BitsPerPel) + { + case 4: iBitmap = 0; break; + case 8: iBitmap = 1; break; + default: iBitmap = 2; + } + + SelectObject(hdcMem, pGlobalData->hSpectrumBitmaps[iBitmap]); + StretchBlt(hDC, + client->left, client->top, client->right - client->left, client->bottom - client->top, + hdcMem, 0, 0, + pGlobalData->cxSource[iBitmap], + pGlobalData->cySource[iBitmap], SRCCOPY); + DeleteDC(hdcMem); } static VOID @@ -415,18 +422,18 @@ OnBPPChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData) PSETTINGS_ENTRY Current; DWORD dmNewBitsPerPel; DWORD index; - HDC hSpectrumDC; - HWND hSpectrumControl; - RECT client; + HDC hSpectrumDC; + HWND hSpectrumControl; + RECT client; index = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_GETCURSEL, 0, 0); dmNewBitsPerPel = (DWORD) SendDlgItemMessage(hwndDlg, IDC_SETTINGS_BPP, CB_GETITEMDATA, index, 0); - /* Show a new spectrum bitmap */ - hSpectrumControl = GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM); - hSpectrumDC = GetDC(hSpectrumControl); - GetClientRect(hSpectrumControl, &client); - ShowColorSpectrum(hSpectrumDC, &client, dmNewBitsPerPel, pGlobalData); + /* Show a new spectrum bitmap */ + hSpectrumControl = GetDlgItem(hwndDlg, IDC_SETTINGS_SPECTRUM); + hSpectrumDC = GetDC(hSpectrumControl); + GetClientRect(hSpectrumControl, &client); + ShowColorSpectrum(hSpectrumDC, &client, dmNewBitsPerPel, pGlobalData); /* find if new parameters are valid */ Current = pGlobalData->CurrentDisplayDevice->CurrentSettings; @@ -588,20 +595,20 @@ OnResolutionChanged(IN HWND hwndDlg, IN PGLOBAL_DATA pGlobalData, IN DWORD NewPo UINT CALLBACK SettingsPageCallbackProc(HWND hwnd, UINT uMsg, LPPROPSHEETPAGE ppsp) { - UINT Ret = 0; + UINT Ret = 0; - switch (uMsg) - { - case PSPCB_CREATE: - Ret = RegisterMonitorSelectionControl(hApplet); - break; + switch (uMsg) + { + case PSPCB_CREATE: + Ret = RegisterMonitorSelectionControl(hApplet); + break; - case PSPCB_RELEASE: - UnregisterMonitorSelectionControl(hApplet); - break; - } + case PSPCB_RELEASE: + UnregisterMonitorSelectionControl(hApplet); + break; + } - return Ret; + return Ret; } /* Property page dialog callback */ @@ -612,7 +619,6 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar pGlobalData = (PGLOBAL_DATA)GetWindowLongPtr(hwndDlg, DWLP_USER); - switch(uMsg) { case WM_INITDIALOG: @@ -625,8 +631,8 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar LPDRAWITEMSTRUCT lpDrawItem; lpDrawItem = (LPDRAWITEMSTRUCT) lParam; - if(lpDrawItem->CtlID == IDC_SETTINGS_SPECTRUM) - ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pGlobalData); + if (lpDrawItem->CtlID == IDC_SETTINGS_SPECTRUM) + ShowColorSpectrum(lpDrawItem->hDC, &lpDrawItem->rcItem, pGlobalData->CurrentDisplayDevice->CurrentSettings->dmBitsPerPel, pGlobalData); break; } @@ -711,111 +717,111 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar break; } - case WM_CONTEXTMENU: - { - HWND hwndMonSel; - HMENU hPopup; - UINT uiCmd; - POINT pt, ptClient; - INT Index; + case WM_CONTEXTMENU: + { + HWND hwndMonSel; + HMENU hPopup; + UINT uiCmd; + POINT pt, ptClient; + INT Index; - pt.x = (SHORT)LOWORD(lParam); - pt.y = (SHORT)HIWORD(lParam); + pt.x = (SHORT)LOWORD(lParam); + pt.y = (SHORT)HIWORD(lParam); - hwndMonSel = GetDlgItem(hwndDlg, - IDC_SETTINGS_MONSEL); - if ((HWND)wParam == hwndMonSel) - { - if (pt.x == -1 && pt.y == -1) - { - RECT rcMon; + hwndMonSel = GetDlgItem(hwndDlg, + IDC_SETTINGS_MONSEL); + if ((HWND)wParam == hwndMonSel) + { + if (pt.x == -1 && pt.y == -1) + { + RECT rcMon; - Index = (INT)SendMessage(hwndMonSel, - MSLM_GETCURSEL, - 0, - 0); + Index = (INT)SendMessage(hwndMonSel, + MSLM_GETCURSEL, + 0, + 0); - if (Index >= 0 && - (INT)SendMessage(hwndMonSel, - MSLM_GETMONITORRECT, - Index, - (LPARAM)&rcMon) > 0) - { - pt.x = rcMon.left + ((rcMon.right - rcMon.left) / 2); - pt.y = rcMon.top + ((rcMon.bottom - rcMon.top) / 2); - } - else - pt.x = pt.y = 0; + if (Index >= 0 && + (INT)SendMessage(hwndMonSel, + MSLM_GETMONITORRECT, + Index, + (LPARAM)&rcMon) > 0) + { + pt.x = rcMon.left + ((rcMon.right - rcMon.left) / 2); + pt.y = rcMon.top + ((rcMon.bottom - rcMon.top) / 2); + } + else + pt.x = pt.y = 0; + + MapWindowPoints(hwndMonSel, + NULL, + &pt, + 1); + } + else + { + ptClient = pt; + MapWindowPoints(NULL, + hwndMonSel, + &ptClient, + 1); - MapWindowPoints(hwndMonSel, - NULL, - &pt, - 1); - } - else - { - ptClient = pt; - MapWindowPoints(NULL, - hwndMonSel, - &ptClient, - 1); + Index = (INT)SendMessage(hwndMonSel, + MSLM_HITTEST, + (WPARAM)&ptClient, + 0); + } - Index = (INT)SendMessage(hwndMonSel, - MSLM_HITTEST, - (WPARAM)&ptClient, - 0); - } + if (Index >= 0) + { + hPopup = LoadPopupMenu(hApplet, + MAKEINTRESOURCE(IDM_MONITOR_MENU)); + if (hPopup != NULL) + { + /* FIXME: Enable/Disable menu items */ + EnableMenuItem(hPopup, + ID_MENU_ATTACHED, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_PRIMARY, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_IDENTIFY, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + EnableMenuItem(hPopup, + ID_MENU_PROPERTIES, + MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - if (Index >= 0) - { - hPopup = LoadPopupMenu(hApplet, - MAKEINTRESOURCE(IDM_MONITOR_MENU)); - if (hPopup != NULL) - { - /* FIXME: Enable/Disable menu items */ - EnableMenuItem(hPopup, - ID_MENU_ATTACHED, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hPopup, - ID_MENU_PRIMARY, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hPopup, - ID_MENU_IDENTIFY, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); - EnableMenuItem(hPopup, - ID_MENU_PROPERTIES, - MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); + uiCmd = (UINT)TrackPopupMenu(hPopup, + TPM_RETURNCMD | TPM_RIGHTBUTTON, + pt.x, + pt.y, + 0, + hwndDlg, + NULL); - uiCmd = (UINT)TrackPopupMenu(hPopup, - TPM_RETURNCMD | TPM_RIGHTBUTTON, - pt.x, - pt.y, - 0, - hwndDlg, - NULL); + switch (uiCmd) + { + case ID_MENU_ATTACHED: + case ID_MENU_PRIMARY: + case ID_MENU_IDENTIFY: + case ID_MENU_PROPERTIES: + /* FIXME: Implement */ + break; + } - switch (uiCmd) - { - case ID_MENU_ATTACHED: - case ID_MENU_PRIMARY: - case ID_MENU_IDENTIFY: - case ID_MENU_PROPERTIES: - /* FIXME: Implement */ - break; - } - - DestroyMenu(hPopup); - } - } - } - break; - } + DestroyMenu(hPopup); + } + } + } + break; + } case WM_DESTROY: { - INT i; - + INT i; PDISPLAY_DEVICE_ENTRY Current = pGlobalData->DisplayDeviceList; + while (Current != NULL) { PDISPLAY_DEVICE_ENTRY Next = Current->Flink; @@ -832,11 +838,11 @@ SettingsPageProc(IN HWND hwndDlg, IN UINT uMsg, IN WPARAM wParam, IN LPARAM lPar HeapFree(GetProcessHeap(), 0, pGlobalData); - for(i = 0; i < NUM_SPECTRUM_BITMAPS; i++) - { - if(pGlobalData->hSpectrumBitmaps[i]) - DeleteObject(pGlobalData->hSpectrumBitmaps[i]); - } + for (i = 0; i < NUM_SPECTRUM_BITMAPS; i++) + { + if (pGlobalData->hSpectrumBitmaps[i]) + DeleteObject(pGlobalData->hSpectrumBitmaps[i]); + } } } return FALSE; From 50e5c6483ad481a97f0a2a23691b92eeed56912b Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 2 Aug 2008 14:45:18 +0000 Subject: [PATCH 084/304] - Add dosfsck to the build. svn path=/trunk/; revision=35037 --- .../applications/sysutils/dosfsck/dosfsck.rbuild | 15 +++++++++++++++ rosapps/applications/sysutils/dosfsck/dosfsck.rc | 7 +++++++ rosapps/applications/sysutils/sysutils.rbuild | 4 ++++ 3 files changed, 26 insertions(+) create mode 100644 rosapps/applications/sysutils/dosfsck/dosfsck.rbuild create mode 100644 rosapps/applications/sysutils/dosfsck/dosfsck.rc diff --git a/rosapps/applications/sysutils/dosfsck/dosfsck.rbuild b/rosapps/applications/sysutils/dosfsck/dosfsck.rbuild new file mode 100644 index 00000000000..50c0fbfa38d --- /dev/null +++ b/rosapps/applications/sysutils/dosfsck/dosfsck.rbuild @@ -0,0 +1,15 @@ + + kernel32 + user32 + + boot.c + check.c + common.c + dosfsck.c + fat.c + file.c + io.c + lfn.c + + dosfsck.rc + diff --git a/rosapps/applications/sysutils/dosfsck/dosfsck.rc b/rosapps/applications/sysutils/dosfsck/dosfsck.rc new file mode 100644 index 00000000000..4b5f8321ea9 --- /dev/null +++ b/rosapps/applications/sysutils/dosfsck/dosfsck.rc @@ -0,0 +1,7 @@ +#include + +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS FAT checker\0" +#define REACTOS_STR_INTERNAL_NAME "dosfsck\0" +#define REACTOS_STR_ORIGINAL_FILENAME "dosfsck.exe\0" +#define REACTOS_STR_ORIGINAL_COPYRIGHT "Copyright ReactOS Development team\0" +#include diff --git a/rosapps/applications/sysutils/sysutils.rbuild b/rosapps/applications/sysutils/sysutils.rbuild index 47ec3b08867..6457cdbbfe4 100644 --- a/rosapps/applications/sysutils/sysutils.rbuild +++ b/rosapps/applications/sysutils/sysutils.rbuild @@ -12,6 +12,10 @@ + + + + From a71a69c253cfe04b08cd33b15ee48d054ea4d27e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 2 Aug 2008 15:34:14 +0000 Subject: [PATCH 085/304] Support nested structures svn path=/trunk/; revision=35039 --- reactos/tools/widl/typegen.c | 5 +++-- reactos/tools/widl/widl_ros.diff | 16 ++++++++++++++++ 2 files changed, 19 insertions(+), 2 deletions(-) diff --git a/reactos/tools/widl/typegen.c b/reactos/tools/widl/typegen.c index 41dd22f2cfd..952baf82796 100644 --- a/reactos/tools/widl/typegen.c +++ b/reactos/tools/widl/typegen.c @@ -3299,8 +3299,9 @@ int write_expr_eval_routines(FILE *file, const char *iface) print_file(file, 0, "static void __RPC_USER %s_%sExprEval_%04u(PMIDL_STUB_MESSAGE pStubMsg)\n", iface, name, callback_offset); print_file(file, 0, "{\n"); - print_file (file, 1, "%s *%s = (%s *)(pStubMsg->StackTop - %u);\n", - name, var_name, name, eval->baseoff); + print_file (file, 1, "%s%s *%s = (%s%s *)(pStubMsg->StackTop - %u);\n", + is_struct(eval->structure->type) ? "struct " : "", name, var_name, + is_struct(eval->structure->type) ? "struct " : "", name, eval->baseoff); print_file(file, 1, "pStubMsg->Offset = 0;\n"); /* FIXME */ print_file(file, 1, "pStubMsg->MaxCount = (unsigned long)"); write_struct_expr(file, eval->expr, 1, fields, var_name); diff --git a/reactos/tools/widl/widl_ros.diff b/reactos/tools/widl/widl_ros.diff index 84aff9839cd..3d88b9768a9 100644 --- a/reactos/tools/widl/widl_ros.diff +++ b/reactos/tools/widl/widl_ros.diff @@ -46,6 +46,22 @@ Index: server.c print_server("#include \"%s\"\n", header_name); fprintf(server, "\n"); } +Index: typegen.c +=================================================================== +--- typegen.c (revision 32187) ++++ typegen.c (working copy) +@@ -3299,8 +3299,9 @@ + print_file(file, 0, "static void __RPC_USER %s_%sExprEval_%04u(PMIDL_STUB_MESSAGE pStubMsg)\n", + iface, name, callback_offset); + print_file(file, 0, "{\n"); +- print_file (file, 1, "%s *%s = (%s *)(pStubMsg->StackTop - %u);\n", +- name, var_name, name, eval->baseoff); ++ print_file (file, 1, "%s%s *%s = (%s%s *)(pStubMsg->StackTop - %u);\n", ++ is_struct(eval->structure->type) ? "struct " : "", name, var_name, ++ is_struct(eval->structure->type) ? "struct " : "", name, eval->baseoff); + print_file(file, 1, "pStubMsg->Offset = 0;\n"); /* FIXME */ + print_file(file, 1, "pStubMsg->MaxCount = (unsigned long)"); + write_struct_expr(file, eval->expr, 1, fields, var_name); Index: typelib.c =================================================================== --- typelib.c (revision 32187) From 61c0684353101b485f452117a79d3a6981a32d62 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 2 Aug 2008 15:45:59 +0000 Subject: [PATCH 086/304] Add lots of missing functions to LSA RPC interface Fix existing ones to have same prototypes as MS Windows svn path=/trunk/; revision=35040 --- reactos/dll/win32/advapi32/sec/lsa.c | 2 +- reactos/dll/win32/lsasrv/lsarpc.c | 1002 +++++++++++++++++++- reactos/dll/win32/lsasrv/lsasrv.rbuild | 3 +- reactos/include/reactos/idl/lsa.idl | 1191 +++++++++++++++++++++++- 4 files changed, 2152 insertions(+), 46 deletions(-) diff --git a/reactos/dll/win32/advapi32/sec/lsa.c b/reactos/dll/win32/advapi32/sec/lsa.c index 032a5bd0ea9..3428fbe1ba9 100644 --- a/reactos/dll/win32/advapi32/sec/lsa.c +++ b/reactos/dll/win32/advapi32/sec/lsa.c @@ -93,7 +93,7 @@ LsaClose(LSA_HANDLE ObjectHandle) LSAHandleBind(); return LsarClose(LSABindingHandle, - (unsigned long)ObjectHandle); + (unsigned long *)&ObjectHandle); } diff --git a/reactos/dll/win32/lsasrv/lsarpc.c b/reactos/dll/win32/lsasrv/lsarpc.c index 97b7535eab1..b0d51b392fb 100644 --- a/reactos/dll/win32/lsasrv/lsarpc.c +++ b/reactos/dll/win32/lsasrv/lsarpc.c @@ -8,8 +8,7 @@ #include "lsa_s.h" -#define NDEBUG -#include +#include #define POLICY_DELETE (RTL_HANDLE_VALID << 1) typedef struct _LSAR_POLICY_HANDLE @@ -22,10 +21,12 @@ typedef struct _LSAR_POLICY_HANDLE static RTL_CRITICAL_SECTION PolicyHandleTableLock; static RTL_HANDLE_TABLE PolicyHandleTable; +WINE_DEFAULT_DEBUG_CHANNEL(lsasrv); + /* FUNCTIONS ***************************************************************/ -static NTSTATUS -ReferencePolicyHandle(IN LSA_HANDLE ObjectHandle, +/*static*/ NTSTATUS +ReferencePolicyHandle(IN LSAPR_HANDLE ObjectHandle, IN ACCESS_MASK DesiredAccess, OUT PLSAR_POLICY_HANDLE *Policy) { @@ -56,7 +57,7 @@ ReferencePolicyHandle(IN LSA_HANDLE ObjectHandle, return Status; } -static VOID +/*static*/ VOID DereferencePolicyHandle(IN OUT PLSAR_POLICY_HANDLE Policy, IN BOOLEAN Delete) { @@ -90,7 +91,7 @@ LsarStartRpcServer(VOID) sizeof(LSAR_POLICY_HANDLE), &PolicyHandleTable); - DPRINT("LsarStartRpcServer() called"); + TRACE("LsarStartRpcServer() called"); Status = RpcServerUseProtseqEpW(L"ncacn_np", 10, @@ -98,7 +99,7 @@ LsarStartRpcServer(VOID) NULL); if (Status != RPC_S_OK) { - DPRINT1("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + WARN("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); return; } @@ -107,31 +108,33 @@ LsarStartRpcServer(VOID) NULL); if (Status != RPC_S_OK) { - DPRINT1("RpcServerRegisterIf() failed (Status %lx)\n", Status); + WARN("RpcServerRegisterIf() failed (Status %lx)\n", Status); return; } Status = RpcServerListen(1, 20, TRUE); if (Status != RPC_S_OK) { - DPRINT1("RpcServerListen() failed (Status %lx)\n", Status); + WARN("RpcServerListen() failed (Status %lx)\n", Status); return; } - DPRINT("LsarStartRpcServer() done\n"); + TRACE("LsarStartRpcServer() done\n"); } + /* Function 0 */ -NTSTATUS -LsarClose(IN handle_t BindingHandle, - IN unsigned long ObjectHandle) +NTSTATUS LsarClose( + handle_t hBinding, + LSAPR_HANDLE *ObjectHandle) { +#if 0 PLSAR_POLICY_HANDLE Policy = NULL; NTSTATUS Status; - DPRINT("LsarClose(0x%p) called!\n", ObjectHandle); + TRACE("0x%p\n", ObjectHandle); - Status = ReferencePolicyHandle((LSA_HANDLE)ObjectHandle, + Status = ReferencePolicyHandle(*ObjectHandle, 0, &Policy); if (NT_SUCCESS(Status)) @@ -142,15 +145,974 @@ LsarClose(IN handle_t BindingHandle, } return Status; +#endif + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } + /* Function 1 */ -NTSTATUS -LsarDelete(IN handle_t BindingHandle, - IN unsigned long ObjectHandle) +NTSTATUS LsarDelete( + handle_t hBinding, + LSAPR_HANDLE ObjectHandle) { - DPRINT1("LsarDelete(0x%p) UNIMPLEMENTED!\n", ObjectHandle); - return STATUS_ACCESS_DENIED; + /* Deprecated */ + return STATUS_NOT_SUPPORTED; } + +/* Function 2 */ +NTSTATUS LsarEnumeratePrivileges( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD *EnumerationContext, + PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer, + DWORD PreferedMaximumLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 3 */ +NTSTATUS LsarQuerySecurityObject( + handle_t hBinding, + LSAPR_HANDLE ObjectHandle, + SECURITY_INFORMATION SecurityInformation, + PLSAPR_SR_SECURITY_DESCRIPTOR *SecurityDescriptor) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 4 */ +NTSTATUS LsarSetSecurityObject( + handle_t hBinding, + LSAPR_HANDLE ObjectHandle, + SECURITY_INFORMATION SecurityInformation, + PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 5 */ +NTSTATUS LsarChangePassword( + handle_t hBinding, + PRPC_UNICODE_STRING String1, + PRPC_UNICODE_STRING String2, + PRPC_UNICODE_STRING String3, + PRPC_UNICODE_STRING String4, + PRPC_UNICODE_STRING String5) +{ + /* Deprecated */ + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 6 */ +NTSTATUS LsarOpenPolicy( + handle_t hBinding, + LPWSTR SystemName, + PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *PolicyHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 7 */ +NTSTATUS LsarQueryInformationPolicy( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 8 */ +NTSTATUS LsarSetInformationPolicy( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long *PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 9 */ +NTSTATUS LsarClearAuditLog( + handle_t hBinding, + LSAPR_HANDLE ObjectHandle) +{ + /* Deprecated */ + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 10 */ +NTSTATUS LsarCreateAccount( + handle_t hBinding, + PRPC_SID AccountSid, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *AccountHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 11 */ +NTSTATUS LsarEnumerateAccounts( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD *EnumerationContext, + PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer, + DWORD PreferedMaximumLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 12 */ +NTSTATUS LsarCreateTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_TRUST_INFORMATION TrustedDomainInformation, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 13 */ +NTSTATUS LsarEnumerateTrustedDomains( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD *EnumerationContext, + PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer, + DWORD PreferedMaximumLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 14 */ +NTSTATUS LsarLookupNames( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD Count, + PRPC_UNICODE_STRING Names, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_SIDS TranslatedSids, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 15 */ +NTSTATUS LsarLookupSids( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_NAMES TranslatedNames, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 16 */ +NTSTATUS LsarCreateSecret( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING SecretName, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *SecretHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 17 */ +NTSTATUS LsarOpenAccount( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID AccountSid, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *AccountHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 18 */ +NTSTATUS LsarEnumeratePrivilegesAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + PLSAPR_PRIVILEGE_SET *Privileges) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 19 */ +NTSTATUS LsarAddPrivilegesToAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + PLSAPR_PRIVILEGE_SET Privileges) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 20 */ +NTSTATUS LsarRemovePrivilegesFromAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + BOOL AllPrivileges, + PLSAPR_PRIVILEGE_SET Privileges) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 21 */ +NTSTATUS LsarGetQuotasForAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + PQUOTA_LIMITS QuotaLimits) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 22 */ +NTSTATUS LsarSetQuotasForAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + PQUOTA_LIMITS QuotaLimits) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 23 */ +NTSTATUS LsarGetSystemAccessAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + ACCESS_MASK *SystemAccess) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 24 */ +NTSTATUS LsarSetSystemAccessAccount( + handle_t hBinding, + LSAPR_HANDLE AccountHandle, + ACCESS_MASK SystemAccess) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 25 */ +NTSTATUS LsarOpenTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID TrustedDomainSid, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 26 */ +NTSTATUS LsarQueryInfoTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE TrustedDomainHandle, + TRUSTED_INFORMATION_CLASS InformationClass, + PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 27 */ +NTSTATUS LsarSetInformationTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE TrustedDomainHandle, + TRUSTED_INFORMATION_CLASS InformationClass, + PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 28 */ +NTSTATUS LsarOpenSecret( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING SecretName, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *SecretHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 29 */ +NTSTATUS LsarSetSecret( + handle_t hBinding, + LSAPR_HANDLE *SecretHandle, + PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue, + PLSAPR_CR_CIPHER_VALUE EncryptedOldValue) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 30 */ +NTSTATUS LsarQuerySecret( + handle_t hBinding, + LSAPR_HANDLE SecretHandle, + PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue, + PLARGE_INTEGER CurrentValueSetTime, + PLSAPR_CR_CIPHER_VALUE *EncryptedOldValue, + PLARGE_INTEGER OldValueSetTime) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 31 */ +NTSTATUS LsarLookupPrivilegeValue( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING Name, + PLUID Value) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 32 */ +NTSTATUS LsarLookupPrivilegeName( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLUID Value, + PRPC_UNICODE_STRING *Name) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 33 */ +NTSTATUS LsarLookupPrivilegeDisplayName( + handle_t hBinding, + USHORT *LanguageReturned) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 34 */ +NTSTATUS LsarDeleteObject( + handle_t hBinding, + LSAPR_HANDLE *ObjectHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 35 */ +NTSTATUS LsarEnumerateAccountsWithUserRight( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING UserRight, + PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 36 */ +NTSTATUS LsarEnmuerateAccountRights( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID AccountSid, + PLSAPR_USER_RIGHT_SET UserRights) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 37 */ +NTSTATUS LsarAddAccountRights( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID AccountSid, + PLSAPR_USER_RIGHT_SET UserRights) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 38 */ +NTSTATUS LsarRemoveAccountRights( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID AccountSid, + BOOL AllRights, + PLSAPR_USER_RIGHT_SET UserRights) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 39 */ +NTSTATUS LsarQueryTrustedDomainInfo( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID TrustedDomainSid, + TRUSTED_INFORMATION_CLASS InformationClass, + PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 40 */ +NTSTATUS LsarSetTrustedDomainInfo( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID TrustedDomainSid, + TRUSTED_INFORMATION_CLASS InformationClass, + PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 41 */ +NTSTATUS LsarDeleteTrustedDomain( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_SID TrustedDomainSid) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 42 */ +NTSTATUS LsarStorePrivateData( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING KeyName, + PLSAPR_CR_CIPHER_VALUE EncryptedData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 43 */ +NTSTATUS LsarRetrievePrivateData( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING KeyName, + PLSAPR_CR_CIPHER_VALUE *EncryptedData) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 44 */ +NTSTATUS LsarOpenPolicy2( + handle_t hBinding, + LPWSTR SystemName, + PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *PolicyHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 45 */ +NTSTATUS LsarGetUserName( + handle_t hBinding, + LPWSTR SystemName, + PRPC_UNICODE_STRING *UserName, + PRPC_UNICODE_STRING *DomainName) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 46 */ +NTSTATUS LsarQueryInformationPolicy2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long *PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 47 */ +NTSTATUS LsarSetInformationPolicy2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 48 */ +NTSTATUS LsarQueryTrustedDomainInfoByName( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING TrustedDomainName, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long *PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 49 */ +NTSTATUS LsarSetTrustedDomainInfoByName( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING TrustedDomainName, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 50 */ +NTSTATUS LsarEnumerateTrustedDomainsEx( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD *EnumerationContext, + PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer, + DWORD PreferedMaximumLength) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 51 */ +NTSTATUS LsarCreateTrustedDomainEx( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 52 */ +NTSTATUS LsarSetPolicyReplicationHandle( + handle_t hBinding, + PLSAPR_HANDLE PolicyHandle) +{ + /* Deprecated */ + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 53 */ +NTSTATUS LsarQueryDomainInformationPolicy( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long *PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 54 */ +NTSTATUS LsarSetDomainInformationPolicy( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + POLICY_INFORMATION_CLASS InformationClass, + unsigned long PolicyInformation) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 55 */ +NTSTATUS LsarOpenTrustedDomainByName( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PRPC_UNICODE_STRING TrustedDomainName, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 56 */ +NTSTATUS LsarTestCall( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 57 */ +NTSTATUS LsarLookupSids2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_NAMES_EX TranslatedNames, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 58 */ +NTSTATUS LsarLookupNames2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD Count, + PRPC_UNICODE_STRING Names, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_SID_EX TranslatedSids, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 59 */ +NTSTATUS LsarCreateTrustedDomainEx2( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation, + ACCESS_MASK DesiredAccess, + LSAPR_HANDLE *TrustedDomainHandle) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 60 */ +NTSTATUS CredrWrite( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 61 */ +NTSTATUS CredrRead( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 62 */ +NTSTATUS CredrEnumerate( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 63 */ +NTSTATUS CredrWriteDomainCredentials( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 64 */ +NTSTATUS CredrReadDomainCredentials( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 65 */ +NTSTATUS CredrDelete( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 66 */ +NTSTATUS CredrGetTargetInfo( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 67 */ +NTSTATUS CredrProfileLoaded( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 68 */ +NTSTATUS LsarLookupNames3( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + DWORD Count, + PRPC_UNICODE_STRING Names, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_SID_EX2 TranslatedSids, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 69 */ +NTSTATUS CredrGetSessionTypes( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 70 */ +NTSTATUS LsarRegisterAuditEvent( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 71 */ +NTSTATUS LsarGenAuditEvent( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 72 */ +NTSTATUS LsarUnregisterAuditEvent( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 73 */ +NTSTATUS LsarQueryForestTrustInformation( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType, + PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 74 */ +NTSTATUS LsarSetForestTrustInformation( + handle_t hBinding, + LSAPR_HANDLE PolicyHandle, + PLSA_UNICODE_STRING TrustedDomainName, + LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType, + PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo, + BOOL CheckOnly, + PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 75 */ +NTSTATUS CredrRename( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 76 */ +NTSTATUS LsarLookupSids3( + handle_t hBinding, + PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_NAMES_EX TranslatedNames, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 77 */ +NTSTATUS LsarLookupNames4( + handle_t hBinding, + handle_t RpcHandle, + DWORD Count, + PRPC_UNICODE_STRING Names, + PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + PLSAPR_TRANSLATED_SID_EX2 TranslatedSids, + LSAP_LOOKUP_LEVEL LookupLevel, + DWORD *MappedCount, + DWORD LookupOptions, + DWORD ClientRevision) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 78 */ +NTSTATUS LsarOpenPolicySce( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 79 */ +NTSTATUS LsarAdtRegisterSecurityEventSource( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 80 */ +NTSTATUS LsarAdtUnregisterSecurityEventSource( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + +/* Function 81 */ +NTSTATUS LsarAdtReportSecurityEvent( + handle_t hBinding) +{ + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; +} + + /* EOF */ diff --git a/reactos/dll/win32/lsasrv/lsasrv.rbuild b/reactos/dll/win32/lsasrv/lsasrv.rbuild index b87a23a0681..8f1757c9e76 100644 --- a/reactos/dll/win32/lsasrv/lsasrv.rbuild +++ b/reactos/dll/win32/lsasrv/lsasrv.rbuild @@ -5,9 +5,10 @@ 0x600 0x0600 lsa_server - ntdll + wine kernel32 rpcrt4 + ntdll pseh lsarpc.c lsasrv.c diff --git a/reactos/include/reactos/idl/lsa.idl b/reactos/include/reactos/idl/lsa.idl index 1f02f1bf651..c5e129da6a3 100644 --- a/reactos/include/reactos/idl/lsa.idl +++ b/reactos/include/reactos/idl/lsa.idl @@ -2,9 +2,590 @@ * Local Security Authority interface definition */ -#include "include/reactos/idl/wtypes.idl" +#include -#define LSA_HANDLE unsigned long +typedef [context_handle] unsigned long LSAPR_HANDLE; +typedef LSAPR_HANDLE *PLSAPR_HANDLE; + +cpp_quote("#ifndef _WINNT_H"); +typedef LARGE_INTEGER LUID; +cpp_quote("#endif"); + +cpp_quote("#ifndef _NTDEF_"); + +typedef long NTSTATUS; + +typedef struct _STRING { + WORD Length; + WORD MaximumLength; + [size_is(MaximumLength), length_is(Length)] LPSTR Buffer; +} STRING, *PSTRING; + +cpp_quote("#endif"); + +typedef struct _LSAPR_ACL { + BYTE AclRevision; + BYTE Sbz1; + WORD AclSize; + [size_is(AclSize - 4)] BYTE Dummy1[*]; +} LSAPR_ACL, *PLSAPR_ACL; + +typedef WORD SECURITY_DESCRIPTOR_CONTROL, *PSECURITY_DESCRIPTOR_CONTROL; + +typedef struct _LSAPR_SECURITY_DESCRIPTOR { + BYTE Revision; + BYTE Sbz1; + SECURITY_DESCRIPTOR_CONTROL Control; + PRPC_SID Owner; + PRPC_SID Group; + PLSAPR_ACL Sacl; + PLSAPR_ACL Dacl; +} LSAPR_SECURITY_DESCRIPTOR, *PLSAPR_SECURITY_DESCRIPTOR; + +cpp_quote("#if 0"); + +typedef enum _SECURITY_IMPERSONATION_LEVEL { + SecurityAnonymous = 0, + SecurityIdentification, + SecurityImpersonation, + SecurityDelegation, +} SECURITY_IMPERSONATION_LEVEL, *PSECURITY_IMPERSONATION_LEVEL; + +typedef BYTE SECURITY_CONTEXT_TRACKING_MODE, *PSECURITY_CONTEXT_TRACKING_MODE; + +typedef struct _SECURITY_QUALITY_OF_SERVICE { + DWORD Length; + SECURITY_IMPERSONATION_LEVEL ImpersonationLevel; + SECURITY_CONTEXT_TRACKING_MODE ContextTrackingMode; + BYTE EffectiveOnly; +} SECURITY_QUALITY_OF_SERVICE, *PSECURITY_QUALITY_OF_SERVICE; + +cpp_quote("#endif"); + +typedef struct _LSAPR_OBJECT_ATTRIBUTES { + DWORD Length; + BYTE *RootDirectory; + PSTRING ObjectName; + DWORD Attributes; + PLSAPR_SECURITY_DESCRIPTOR SecurityDescriptor; + PSECURITY_QUALITY_OF_SERVICE SecurityQualityOfService; +} LSAPR_OBJECT_ATTRIBUTES, *PLSAPR_OBJECT_ATTRIBUTES; + +typedef unsigned long ACCESS_MASK; + +typedef unsigned long SECURITY_INFORMATION; + +typedef struct _LSAPR_POLICY_PRIVILEGE_DEF { + RPC_UNICODE_STRING Name; + LUID LocalValue; +} LSAPR_POLICY_PRIVILEGE_DEF, *PLSAPR_POLICY_PRIVILEGE_DEF; + +typedef struct _LSAPR_PRIVILEGE_ENUM_BUFFER { + DWORD Entries; + [size_is(Entries)] PLSAPR_POLICY_PRIVILEGE_DEF Privileges; +} LSAPR_PRIVILEGE_ENUM_BUFFER, *PLSAPR_PRIVILEGE_ENUM_BUFFER; + +typedef struct _LSAPR_ACCOUNT_INFORMATION { + PRPC_SID Sid; +} LSAPR_ACCOUNT_INFORMATION, *PLSAPR_ACCOUNT_INFORMATION; + +typedef struct _LSAPR_ACCOUNT_ENUM_BUFFER { + DWORD EntriesRead; + [size_is(EntriesRead)] PLSAPR_ACCOUNT_INFORMATION Information; +} LSAPR_ACCOUNT_ENUM_BUFFER, *PLSAPR_ACCOUNT_ENUM_BUFFER; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef RPC_UNICODE_STRING LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; +cpp_quote("#endif"); + +typedef struct _LSAPR_TRUST_INFORMATION { + RPC_UNICODE_STRING Name; + PRPC_SID Sid; +} LSAPR_TRUST_INFORMATION, *PLSAPR_TRUST_INFORMATION; + +typedef struct _LSAPR_REFERENCED_DOMAIN_LIST { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRUST_INFORMATION Domains; + DWORD MaxEntries; +} LSAPR_REFERENCED_DOMAIN_LIST, *PLSAPR_REFERENCED_DOMAIN_LIST; + +cpp_quote("#if 0"); + +typedef enum _SID_NAME_USE { + SidTypeUser = 1, + SidTypeGroup, + SidTypeDomain, + SidTypeAlias, + SidTypeWellKnownGroup, + SidTypeDeletedAccount, + SidTypeInvalid, + SidTypeUnknown, + SidTypeComputer, + SidTypeLabel, +} SID_NAME_USE, *PSID_NAME_USE; + +cpp_quote("#endif"); + +cpp_quote("#ifndef _NTDEF_"); + +typedef struct _LSA_TRANSLATED_SID { + SID_NAME_USE Use; + DWORD RelativeId; + LONG DomainIndex; +} LSA_TRANSLATED_SID, *PLSA_TRANSLATED_SID; + +cpp_quote("#endif"); + +typedef struct _LSAPR_TRANSLATED_SIDS { + DWORD Entries; + [size_is(Entries)] PLSA_TRANSLATED_SID Sids; +} LSAPR_TRANSLATED_SIDS, *PLSAPR_TRANSLATED_SIDS; + +typedef enum _LSAP_LOOKUP_LEVEL { + LsapLookupWksta = 1, + LsapLookupPDC, + LsapLookupTDL, + LsapLookupGC, + LsapLookupXForestReferral, + LsapLookupXForestResolve, + LsapLookupRODCReferralToFullDC, +} LSAP_LOOKUP_LEVEL, *PLSAP_LOOKUP_LEVEL; + +typedef struct _LSAPR_SID_INFORMATION { + PRPC_SID Sid; +} LSAPR_SID_INFORMATION, *PLSAPR_SID_INFORMATION; + +typedef struct _LSAPR_SID_ENUM_BUFFER { + DWORD Entries; + [size_is(Entries)] PLSAPR_SID_INFORMATION SidInfo; +} LSAPR_SID_ENUM_BUFFER, *PLSAPR_SID_ENUM_BUFFER; + +typedef struct _LSAPR_TRANSLATED_NAME { + SID_NAME_USE Use; + RPC_UNICODE_STRING Name; + LONG DomainIndex; +} LSAPR_TRANSLATED_NAME, *PLSAPR_TRANSLATED_NAME; + +typedef struct _LSAPR_TRANSLATED_NAMES { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRANSLATED_NAME Names; +} LSAPR_TRANSLATED_NAMES, *PLSAPR_TRANSLATED_NAMES; + +typedef struct _LSAPR_TRANSLATED_NAME_EX { + SID_NAME_USE Use; + RPC_UNICODE_STRING Name; + LONG DomainIndex; + DWORD Flags; +} LSAPR_TRANSLATED_NAME_EX, *PLSAPR_TRANSLATED_NAME_EX; + +typedef struct _LSAPR_TRANSLATED_NAMES_EX { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRANSLATED_NAME_EX Names; +} LSAPR_TRANSLATED_NAMES_EX, *PLSAPR_TRANSLATED_NAMES_EX; + +typedef struct _LSAPR_TRANSLATED_SID_EX { + SID_NAME_USE Use; + DWORD RelativeId; + LONG DomainIndex; + DWORD Flags; +} LSAPR_TRANSLATED_SID_EX, *PLSAPR_TRANSLATED_SID_EX; + +typedef struct _LSAPR_TRANSLATED_SIDS_EX { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRANSLATED_SID_EX Sids; +} LSAPR_TRANSLATED_SIDS_EX, *PLSAPR_TRANSLATED_SIDS_EX; + +typedef struct _LSAPR_TRANSLATED_SID_EX2 { + SID_NAME_USE Use; + PRPC_SID Sid; + LONG DomainIndex; + DWORD Flags; +} LSAPR_TRANSLATED_SID_EX2, *PLSAPR_TRANSLATED_SID_EX2; + +typedef struct _LSAPR_TRANSLATED_SIDS_EX2 { + DWORD Entries; + [size_is(Entries)] PLSAPR_TRANSLATED_SID_EX2 Sids; +} LSAPR_TRANSLATED_SIDS_EX2, *PLSAPR_TRANSLATED_SIDS_EX2; + +typedef LSAPR_TRUST_INFORMATION LSAPR_TRUSTED_DOMAIN_INFORMATION_BASIC; + +typedef struct _LSAPR_SR_SECURITY_DESCRIPTOR { + DWORD Length; + [size_is(Length)] BYTE *SecurityDescriptor; +} LSAPR_SR_SECURITY_DESCRIPTOR, *PLSAPR_SR_SECURITY_DESCRIPTOR; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _POLICY_INFORMATION_CLASS { + PolicyAuditLogInformation = 1, + PolicyAuditEventsInformation, + PolicyPrimaryDomainInformation, + PolicyPdAccountInformation, + PolicyAccountDomainInformation, + PolicyLsaServerRoleInformation, + PolicyReplicaSourceInformation, + PolicyDefaultQuotaInformation, + PolicyModificationInformation, + PolicyAuditFullSetInformation, + PolicyAuditFullQueryInformation, + PolicyDnsDomainInformation, + PolicyDnsDomainInformationInt, + PolicyLocalAccountDomainInformation, + PolicyLastEntry, +} POLICY_INFORMATION_CLASS, *PPOLICY_INFORMATION_CLASS; + +typedef struct _POLICY_AUDIT_LOG_INFO { + DWORD AuditLogPercentFull; + DWORD MaximumLogSize; + LARGE_INTEGER AuditRetentionPeriod; + BYTE AuditLogFullShutdownInProgress; + LARGE_INTEGER TimeToShutdown; + DWORD NextAuditRecordId; +} POLICY_AUDIT_LOG_INFO, *PPOLICY_AUDIT_LOG_INFO; +cpp_quote("#endif"); + +typedef struct _LSAPR_POLICY_AUDIT_EVENTS_INFO { + BYTE AuditingMode; + [size_is(MaximumAuditEventCount)] DWORD *EventAuditingOptions; + DWORD MaximumAuditEventCount; +} LSAPR_POLICY_AUDIT_EVENTS_INFO, *PLSAPR_POLICY_AUDIT_EVENTS_INFO; + +typedef struct _LSAPR_POLICY_PRIMARY_DOM_INFO { + RPC_UNICODE_STRING Name; + PRPC_SID Sid; +} LSAPR_POLICY_PRIMARY_DOM_INFO, *PLSAPR_POLICY_PRIMARY_DOM_INFO; + +typedef struct _LSAPR_POLICY_ACCOUNT_DOM_INFO { + RPC_UNICODE_STRING DomainName; + PRPC_SID Sid; +} LSAPR_POLICY_ACCOUNT_DOM_INFO, *PLSAPR_POLICY_ACCOUNT_DOM_INFO; + +typedef struct _LSAPR_POLICY_PD_ACCOUNT_INFO { + RPC_UNICODE_STRING Name; +} LSAPR_POLICY_PD_ACCOUNT_INFO, *PLSAPR_POLICY_PD_ACCOUNT_INFO; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _POLICY_LSA_SERVER_ROLE { + PolicyServerRoleBackup = 2, + PolicyServerRolePrimary, +} POLICY_LSA_SERVER_ROLE, *PPOLICY_LSA_SERVER_ROLE; + +typedef struct _POLICY_LSA_SERVER_ROLE_INFO { + POLICY_LSA_SERVER_ROLE LsaServerRole; +} POLICY_LSA_SERVER_ROLE_INFO, *PPOLICY_LSA_SERVER_ROLE_INFO; +cpp_quote("#endif"); + +typedef struct _POLICY_LSA_REPLICA_SRCE_INFO { + RPC_UNICODE_STRING ReplicaSource; + RPC_UNICODE_STRING ReplicaAccountName; +} POLICY_LSA_REPLICA_SRCE_INFO, *PPOLICY_LSA_REPLICA_SRCE_INFO; + +cpp_quote("#ifndef _WINNT_H"); +typedef struct _QUOTA_LIMITS { + INT64 PagedPoolLimit; + INT64 NonPagedPoolLimit; + INT64 MinimumWorkingSetSize; + INT64 MaximumWorkingSetSize; + INT64 PagefileLimit; + LARGE_INTEGER TimeLimit; +} QUOTA_LIMITS, *PQUOTA_LIMITS; +cpp_quote("#endif"); + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef struct _POLICY_DEFAULT_QUOTA_INFO { + QUOTA_LIMITS QuotaLimits; +} POLICY_DEFAULT_QUOTA_INFO, *PPOLICY_DEFAULT_QUOTA_INFO; + +typedef struct _POLICY_MODIFICATION_INFO { + LARGE_INTEGER ModifiedId; + LARGE_INTEGER DatabaseCreationTime; +} POLICY_MODIFICATION_INFO, *PPOLICY_MODIFICATION_INFO; +cpp_quote("#endif"); + +typedef struct _POLICY_FULL_SET_INFO { + BOOL ShutDownOnFull; +} POLICY_FULL_SET_INFO, *PPOLICY_FULL_SET_INFO; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef struct _POLICY_AUDIT_FULL_QUERY_INFO { + BOOL ShutDownOnFull; + BOOL LogIsFull; +} POLICY_AUDIT_FULL_QUERY_INFO, *PPOLICY_AUDIT_FULL_QUERY_INFO; +cpp_quote("#endif"); + +typedef struct _LSAPR_POLICY_DNS_DOMAIN_INFO { + RPC_UNICODE_STRING Name; + RPC_UNICODE_STRING DnsDomainName; + RPC_UNICODE_STRING DnsForestName; + GUID DomainGuid; + PRPC_SID Sid; +} LSAPR_POLICY_DNS_DOMAIN_INFO, *PLSAPR_POLICY_DNS_DOMAIN_INFO; + +/*typedef +[switch_type(POLICY_INFORMATION_CLASS)] union _LSAPR_POLICY_INFORMATION { + [case(PolicyAuditLogInformation)] POLICY_AUDIT_LOG_INFO PolicyAuditLogInfo; + [case(PolicyAuditEventsInformation)] POLICY_AUDIT_EVENTS_INFO PolicyAuditEventsInfo; + [case(PolicyPrimaryDomainInformation)] POLICY_PRIMARY_DOM_INFO PolicyPrimaryDomInfo; + [case(PolicyPdAccountInformation)] POLICY_PD_ACCOUNT_INFO PolicyPdAccountInfo; + [case(PolicyAccountDomainInformation)] POLICY_ACCOUNT_DOM_INFO PolicyAccountDomainInfo; + [case(PolicyLsaServerRoleInformation)] POLICY_LSA_SERVER_ROLE_INFO PolicyServerRoleInfo; + [case(PolicyReplicaSourceInformation)] POLICY_REPLICA_SRCE_INFO PolicyReplicaSourceInfo; + [case(PolicyDefaultQuotaInformation)] POLICY_DEFAULT_QUOTA_INFO PolicyDefaultQuotaInfo; + [case(PolicyModificationInformation)] POLICY_MODIFICATION_INFO PolicyModificationInfo; + [case(PolicyAuditFullSetInformation)] POLICY_AUDIT_FULL_SET_INFO PolicyAuditFullSetInfo; + [case(PolicyAuditFullQueryInformation)] POLICY_AUDIT_FULL_QUERY_INFO PolicyAuditFullQueryInfo; + [case(PolicyDnsDomainInformation)] LSAPR_DNS_DOMAIN_INFO PolicyDnsDomainInfo; + [case(PolicyDnsDomainInformationInt)] LSAPR_DNS_DOMAIN_INFO PolicyDnsDomainInfoInt; + [case(PolicyLocalAccountDomainInformation)] LSAPR_POLICY_ACCOUNT_DOM_INFO PolicyLocalAccountDomainInfo; +} LSAPR_POLICY_INFORMATION, *PLSAPR_POLICY_INFORMATION;*/ + +typedef struct _LSAPR_TRUSTED_ENUM_BUFFER { + DWORD EntriesRead; + [size_is(EntriesRead)] PLSAPR_TRUST_INFORMATION Information; +} LSAPR_TRUSTED_ENUM_BUFFER, *PLSAPR_TRUSTED_ENUM_BUFFER; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _TRUSTED_INFORMATION_CLASS { + TrustedDomainNameInformation = 1, + TrustedControllersInformation, + TrustedPosixOffsetInformation, + TrustedPasswordInformation, + TrustedDomainInformationBasic, + TrustedDomainInformationEx, + TrustedDomainAuthInformation, + TrustedDomainFullInformation, + TrustedDomainAuthInformationInternal, + TrustedDomainFullInformationInternal, + TrustedDomainInformationEx2Internal, + TrustedDomainFullInformation2Internal, + TrustedDomainSupportedEncryptionTypes, +} TRUSTED_INFORMATION_CLASS, *PTRUSTED_INFORMATION_CLASS; +cpp_quote("#endif"); + +typedef struct _LSAPR_TRUSTED_DOMAIN_NAME_INFO { + RPC_UNICODE_STRING Name; +} LSAPR_TRUSTED_DOMAIN_NAME_INFO, *PLSAPR_TRUSTED_DOMAIN_NAME_INFO; + +typedef struct _LSAPR_TRUSTED_CONTROLLERS_INFO { + DWORD Entries; + [size_is(Entries)] PRPC_UNICODE_STRING Names; +} LSAPR_TRUSTED_CONTROLLERS_INFO, *PLSAPR_TRUSTED_CONTROLLERS_INFO; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef struct _TRUSTED_POSIX_OFFSET_INFO { + DWORD Offset; +} TRUSTED_POSIX_OFFSET_INFO, *PTRUSTED_POSIX_OFFSET_INFO; +cpp_quote("#endif"); + +typedef struct _LSAPR_CR_CIPHER_VALUE { + DWORD Length; + DWORD MaximumLength; + [size_is(MaximumLength), length_is(Length)] BYTE *Buffer; +} LSAPR_CR_CIPHER_VALUE, *PLSAPR_CR_CIPHER_VALUE; + +typedef struct _LSAPR_TRUSTED_PASSWORD_INFO { + PLSAPR_CR_CIPHER_VALUE Password; + PLSAPR_CR_CIPHER_VALUE OldPassword; +} LSAPR_TRUSTED_PASSWORD_INFO, *PLSAPR_TRUSTED_PASSWORD_INFO; + +typedef struct _LSAPR_USER_RIGHT_SET { + DWORD Entries; + [size_is(Entries)] PRPC_UNICODE_STRING UserRights; +} LSAPR_USER_RIGHT_SET, *PLSAPR_USER_RIGHT_SET; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _POLICY_DOMAIN_INFORMATION_CLASS { + PolicyDomainQualityOfServiceInformation = 1, + PolicyDomainEfsInformation = 2, + PolicyDomainKerberosTicketInformation = 3, +} POLICY_DOMAIN_INFORMATION_CLASS, *PPOLICY_DOMAIN_INFORMATION_CLASS; + +typedef struct _POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO { + DWORD QualityOfService; +} POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO, *PPOLICY_DOMAIN_QUALITY_OF_SERVICE_INFO; +cpp_quote("#endif"); + +typedef struct _LSAPR_POLICY_DOMAIN_EFS_INFO { + DWORD InfoLength; + [size_is(InfoLength)] BYTE *EfsBlob; +} LSAPR_POLICY_DOMAIN_EFS_INFO, *PLSAPR_POLICY_DOMAIN_EFS_INFO; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef struct _POLICY_DOMAIN_KERBEROS_TICKET_INFO { + DWORD AuthenticationOptions; + LARGE_INTEGER MaxServiceTicketAge; + LARGE_INTEGER MaxTicketAge; + LARGE_INTEGER MaxRenewAge; + LARGE_INTEGER MaxClockSkew; + LARGE_INTEGER Reserved; +} POLICY_DOMAIN_KERBEROS_TICKET_INFO, *PPOLICY_DOMAIN_KERBEROS_TICKET_INFO; +cpp_quote("#endif"); + +typedef +[switch_type(POLICY_DOMAIN_INFORMATION_CLASS)] union _LSAPR_POLICY_DOMAIN_INFORMATION { + [case(PolicyDomainQualityOfServiceInformation)] POLICY_DOMAIN_QUALITY_OF_SERVICE_INFO PolicyDomainQualityOfServiceInfo; + [case(PolicyDomainEfsInformation)] LSAPR_POLICY_DOMAIN_EFS_INFO PolicyDomainEfsInfo; + [case(PolicyDomainKerberosTicketInformation)] POLICY_DOMAIN_KERBEROS_TICKET_INFO PolicyDomainKerbTicketInfo; +} LSAPR_POLICY_DOMAIN_INFORMATION, *PLSAPR_POLICY_DOMAIN_INFORMATION; + +typedef struct _LSAPR_TRUSTED_DOMAIN_INFORMATION_EX { + RPC_UNICODE_STRING Name; + RPC_UNICODE_STRING FlatName; + PRPC_SID Sid; + DWORD TrustDirection; + DWORD TrustType; + DWORD TrustAttributes; +} LSAPR_TRUSTED_DOMAIN_INFORMATION_EX, *PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX; + +typedef struct _LSAPR_TRUSTED_ENUM_BUFFER_EX { + DWORD EntriesRead; + [size_is(EntriesRead)] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX EnumerationBuffer; +} LSAPR_TRUSTED_ENUM_BUFFER_EX, *PLSAPR_TRUSTED_ENUM_BUFFER_EX; + +typedef struct _LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 { + RPC_UNICODE_STRING Name; + RPC_UNICODE_STRING FlatName; + PRPC_SID Sid; + DWORD TrustDirection; + DWORD TrustType; + DWORD TrustAttributes; + DWORD ForestTrustLength; + [size_is(ForestTrustLength)] BYTE *ForestTrustInfo; +} LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2, *PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX2; + +typedef struct _LSAPR_AUTH_INFORMATION { + LARGE_INTEGER LastUpdateTime; + DWORD AuthType; + DWORD AuthInfoLength; + [size_is(AuthInfoLength)] BYTE *AuthInfo; +} LSAPR_AUTH_INFORMATION, *PLSAPR_AUTH_INFORMATION; + +typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION { + DWORD IncomingAuthInfos; + PLSAPR_AUTH_INFORMATION IncomingAuthenticationInformation; + PLSAPR_AUTH_INFORMATION IncomingPreviousAuthenticationInformation; + DWORD OutgoingAuthInfos; + PLSAPR_AUTH_INFORMATION OutgoingAuthenticationInformation; + PLSAPR_AUTH_INFORMATION OutgoingPreviousAuthenticationInformation; +} LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION, *PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION; + +typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_BLOB { + DWORD AuthSize; + [size_is(AuthSize)] BYTE *AuthBlob; +} LSAPR_TRUSTED_DOMAIN_AUTH_BLOB, *PLSAPR_TRUSTED_DOMAIN_AUTH_BLOB; + +typedef struct _LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL { + LSAPR_TRUSTED_DOMAIN_AUTH_BLOB AuthBlob; +} LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL, *PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL; + +typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION { + LSAPR_TRUSTED_DOMAIN_INFORMATION_EX Information; + TRUSTED_POSIX_OFFSET_INFO PosixOffset; + LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation; +} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION; + +typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL { + LSAPR_TRUSTED_DOMAIN_INFORMATION_EX Information; + TRUSTED_POSIX_OFFSET_INFO PosixOffset; + LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthInformation; +} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL; + +typedef struct _LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2 { + LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 Information; + TRUSTED_POSIX_OFFSET_INFO PosixOffset; + LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthInformation; +} LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2, *PLSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2; + +typedef struct _TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES { + DWORD SupportedEncryptionTypes; +} TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES, *PTRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES; + +typedef +[switch_type(TRUSTED_INFORMATION_CLASS)] union _LSAPR_TRUSTED_DOMAIN_INFO { + [case(TrustedDomainNameInformation)] LSAPR_TRUSTED_DOMAIN_NAME_INFO TrustedDomainNameInfo; + [case(TrustedControllersInformation)] LSAPR_TRUSTED_CONTROLLERS_INFO TrustedControllersInfo; + [case(TrustedPosixOffsetInformation)] TRUSTED_POSIX_OFFSET_INFO TrustedPosixOffsetInfo; + [case(TrustedPasswordInformation)] LSAPR_TRUSTED_PASSWORD_INFO TrustedPasswordInfo; + [case(TrustedDomainInformationBasic)] LSAPR_TRUSTED_DOMAIN_INFORMATION_BASIC TrustedDomainInfoBasic; + [case(TrustedDomainInformationEx)] LSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInfoEx; + [case(TrustedDomainAuthInformation)] LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION TrustedAuthInfo; + [case(TrustedDomainFullInformation)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION TrustedFullInfo; + [case(TrustedDomainAuthInformationInternal)] LSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL TrustedAuthInfoInternal; + [case(TrustedDomainFullInformationInternal)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION_INTERNAL TrustedFullInfoInternal; + [case(TrustedDomainInformationEx2Internal)] LSAPR_TRUSTED_DOMAIN_INFORMATION_EX2 TrustedDomainInfoEx2; + [case(TrustedDomainFullInformation2Internal)] LSAPR_TRUSTED_DOMAIN_FULL_INFORMATION2 TrustedFullInfo2; + [case(TrustedDomainSupportedEncryptionTypes)] TRUSTED_DOMAIN_SUPPORTED_ENCRYPTION_TYPES TrustedDomainSETs; +} LSAPR_TRUSTED_DOMAIN_INFO, *PLSAPR_TRUSTED_DOMAIN_INFO; + +cpp_quote("#ifndef _WINNT_H"); +typedef struct _LUID { + ULONG LowPart; + LONG HightPart; +} LUID, *PLUID; +cpp_quote("#endif"); + +typedef struct _LSAPR_LUID_AND_ATTRIBUTES { + LUID Luid; + DWORD Attributes; +} LSAPR_LUID_AND_ATTRIBUTES, *PLSAPR_LUID_AND_ATTRIBUTES; + +typedef struct _LSAPR_PRIVILEGE_SET { + DWORD PrivilegeCount; + DWORD Control; + [size_is(PrivilegeCount)] LSAPR_LUID_AND_ATTRIBUTES Privilege[*]; +} LSAPR_PRIVILEGE_SET, *PLSAPR_PRIVILEGE_SET; + +cpp_quote("#ifndef _NTSECAPI_H"); +typedef enum _LSA_FOREST_TRUST_RECORD_TYPE { + ForestTrustTopLevelName = 0, + ForestTrustTopLevelNameEx = 1, + ForestTrustDomainInfo = 2, +} LSA_FOREST_TRUST_RECORD_TYPE; + +typedef struct _LSA_FOREST_TRUST_BINARY_DATA { + DWORD Length; + [size_is(Length)] BYTE *Buffer; +} LSA_FOREST_TRUST_BINARY_DATA, *PLSA_FOREST_TRUST_BINARY_DATA; + +typedef struct _LSA_FOREST_TRUST_DOMAIN_INFO { + PRPC_SID Sid; + LSA_UNICODE_STRING DnsName; + LSA_UNICODE_STRING NetbiosName; +} LSA_FOREST_TRUST_DOMAIN_INFO, *PLSA_FOREST_TRUST_DOMAIN_INFO; + +typedef struct _LSA_FOREST_TRUST_RECORD { + DWORD Flags; + LSA_FOREST_TRUST_RECORD_TYPE ForestTrustType; + LARGE_INTEGER Time; + [switch_type(LSA_FOREST_TRUST_RECORD_TYPE), switch_is(ForestTrustType)] union { + [case(ForestTrustTopLevelName, ForestTrustTopLevelNameEx)] LSA_UNICODE_STRING TopLevelName; + [case(ForestTrustDomainInfo)] LSA_FOREST_TRUST_DOMAIN_INFO DomainInfo; + [default] LSA_FOREST_TRUST_BINARY_DATA Data; + } ForestTrustData; +} LSA_FOREST_TRUST_RECORD, *PLSA_FOREST_TRUST_RECORD; + +typedef struct _LSA_FOREST_TRUST_INFORMATION { + DWORD RecordCount; + [size_is(RecordCount)] PLSA_FOREST_TRUST_RECORD *Entries; +} LSA_FOREST_TRUST_INFORMATION, *PLSA_FOREST_TRUST_INFORMATION; + +typedef enum _LSA_FOREST_TRUST_COLLISION_RECORD_TYPE { + CollisionTdo = 0, + CollisionXref, + CollisionOther, +} LSA_FOREST_TRUST_COLLISION_RECORD_TYPE; + +typedef struct _LSA_FOREST_TRUST_COLLISION_RECORD { + DWORD Index; + LSA_FOREST_TRUST_COLLISION_RECORD_TYPE Type; + DWORD Flags; + LSA_UNICODE_STRING Name; +} LSA_FOREST_TRUST_COLLISION_RECORD, *PLSA_FOREST_TRUST_COLLISION_RECORD; + +typedef struct _LSA_FOREST_TRUST_COLLISION_INFORMATION { + DWORD RecordCount; + [size_is(RecordCount)] PLSA_FOREST_TRUST_COLLISION_RECORD *Entries; +} LSA_FOREST_TRUST_COLLISION_INFORMATION, *PLSA_FOREST_TRUST_COLLISION_INFORMATION; +cpp_quote("#endif"); [ uuid(12345778-1234-abcd-ef00-0123456789ab), @@ -16,29 +597,591 @@ ] interface lsarpc { -/* - cpp_quote("#if 0") - typedef [handle, unique] wchar_t *LPWSTR; - typedef [handle, unique] char *LPSTR; - cpp_quote("#endif") - typedef [context_handle] void *LSA_HANDLE; - typedef LSA_HANDLE *PLSA_HANDLE; - typedef unsigned int NTSTATUS; -*/ - - cpp_quote("#if 0") - typedef struct _LSA_UNICODE_STRING { - unsigned short Length; - unsigned short MaximumLength; - [size_is(MaximumLength)] wchar_t *Buffer; - } LSA_UNICODE_STRING, *PLSA_UNICODE_STRING; - cpp_quote("#endif") - /* Function 0 */ - NTSTATUS LsarClose(handle_t BindingHandle, - [in] LSA_HANDLE ObjectHandle); + NTSTATUS LsarClose( + [in] handle_t hBinding, + [in, out] LSAPR_HANDLE *ObjectHandle); /* Function 1 */ - NTSTATUS LsarDelete(handle_t BindingHandle, - [in] LSA_HANDLE ObjectHandle); + NTSTATUS LsarDelete( + [in] handle_t hBinding, + [in] LSAPR_HANDLE ObjectHandle); + + /* Function 2 */ + NTSTATUS LsarEnumeratePrivileges( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, out] DWORD *EnumerationContext, + [out] PLSAPR_PRIVILEGE_ENUM_BUFFER EnumerationBuffer, + [in] DWORD PreferedMaximumLength); + + /* Function 3 */ + NTSTATUS LsarQuerySecurityObject( + [in] handle_t hBinding, + [in] LSAPR_HANDLE ObjectHandle, + [in] SECURITY_INFORMATION SecurityInformation, + [out] PLSAPR_SR_SECURITY_DESCRIPTOR *SecurityDescriptor); + + /* Function 4 */ + NTSTATUS LsarSetSecurityObject( + [in] handle_t hBinding, + [in] LSAPR_HANDLE ObjectHandle, + [in] SECURITY_INFORMATION SecurityInformation, + [in] PLSAPR_SR_SECURITY_DESCRIPTOR SecurityDescriptor); + + /* Function 5 */ + NTSTATUS LsarChangePassword( + [in] handle_t hBinding, + [in] PRPC_UNICODE_STRING String1, + [in] PRPC_UNICODE_STRING String2, + [in] PRPC_UNICODE_STRING String3, + [in] PRPC_UNICODE_STRING String4, + [in] PRPC_UNICODE_STRING String5); + + /* Function 6 */ + NTSTATUS LsarOpenPolicy( + [in] handle_t hBinding, + [in, unique] LPWSTR SystemName, + [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *PolicyHandle); + + /* Function 7 */ + NTSTATUS LsarQueryInformationPolicy( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [in] unsigned long PolicyInformation); + /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */ + + /* Function 8 */ + NTSTATUS LsarSetInformationPolicy( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [out] unsigned long *PolicyInformation); + /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */ + + /* Function 9 */ + NTSTATUS LsarClearAuditLog( + [in] handle_t hBinding, + [in] LSAPR_HANDLE ObjectHandle); + + /* Function 10 */ + NTSTATUS LsarCreateAccount( + [in] handle_t hBinding, + [in] PRPC_SID AccountSid, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *AccountHandle); + + /* Function 11 */ + NTSTATUS LsarEnumerateAccounts( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, out] DWORD *EnumerationContext, + [out] PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer, + [in] DWORD PreferedMaximumLength); + + /* Function 12 */ + NTSTATUS LsarCreateTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_TRUST_INFORMATION TrustedDomainInformation, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + + /* Function 13 */ + NTSTATUS LsarEnumerateTrustedDomains( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, out] DWORD *EnumerationContext, + [out] PLSAPR_TRUSTED_ENUM_BUFFER EnumerationBuffer, + [in] DWORD PreferedMaximumLength); + + /* Function 14 */ + NTSTATUS LsarLookupNames( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] DWORD Count, + [in, size_is(Count)] PRPC_UNICODE_STRING Names, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_SIDS TranslatedSids, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount); + + /* Function 15 */ + NTSTATUS LsarLookupSids( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_NAMES TranslatedNames, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount); + + /* Function 16 */ + NTSTATUS LsarCreateSecret( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING SecretName, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *SecretHandle); + + /* Function 17 */ + NTSTATUS LsarOpenAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID AccountSid, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *AccountHandle); + + /* Function 18 */ + NTSTATUS LsarEnumeratePrivilegesAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [out] PLSAPR_PRIVILEGE_SET *Privileges); + + /* Function 19 */ + NTSTATUS LsarAddPrivilegesToAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [in] PLSAPR_PRIVILEGE_SET Privileges); + + /* Function 20 */ + NTSTATUS LsarRemovePrivilegesFromAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [in] BOOL AllPrivileges, + [in, unique] PLSAPR_PRIVILEGE_SET Privileges); + + /* Function 21 */ + NTSTATUS LsarGetQuotasForAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [out] PQUOTA_LIMITS QuotaLimits); + + /* Function 22 */ + NTSTATUS LsarSetQuotasForAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [in] PQUOTA_LIMITS QuotaLimits); + + /* Function 23 */ + NTSTATUS LsarGetSystemAccessAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [out] ACCESS_MASK *SystemAccess); + + /* Function 24 */ + NTSTATUS LsarSetSystemAccessAccount( + [in] handle_t hBinding, + [in] LSAPR_HANDLE AccountHandle, + [in] ACCESS_MASK SystemAccess); + + /* Function 25 */ + NTSTATUS LsarOpenTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID TrustedDomainSid, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + + /* Function 26 */ + NTSTATUS LsarQueryInfoTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE TrustedDomainHandle, + [in] TRUSTED_INFORMATION_CLASS InformationClass, + [out, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation); + + /* Function 27 */ + NTSTATUS LsarSetInformationTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE TrustedDomainHandle, + [in] TRUSTED_INFORMATION_CLASS InformationClass, + [in, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation); + + /* Function 28 */ + NTSTATUS LsarOpenSecret( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING SecretName, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *SecretHandle); + + /* Function 29 */ + NTSTATUS LsarSetSecret( + [in] handle_t hBinding, + [in] LSAPR_HANDLE *SecretHandle, + [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedCurrentValue, + [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedOldValue); + + /* Function 30 */ + NTSTATUS LsarQuerySecret( + [in] handle_t hBinding, + [in] LSAPR_HANDLE SecretHandle, + [in, out, unique] PLSAPR_CR_CIPHER_VALUE *EncryptedCurrentValue, + [in, out, unique] PLARGE_INTEGER CurrentValueSetTime, + [in, out, unique] PLSAPR_CR_CIPHER_VALUE *EncryptedOldValue, + [in, out, unique] PLARGE_INTEGER OldValueSetTime); + + /* Function 31 */ + NTSTATUS LsarLookupPrivilegeValue( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING Name, + [out] PLUID Value); + + /* Function 32 */ + NTSTATUS LsarLookupPrivilegeName( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLUID Value, + [out] PRPC_UNICODE_STRING *Name); + + /* Function 33 */ + NTSTATUS LsarLookupPrivilegeDisplayName( + [in] handle_t hBinding, + /*[in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING Name, + [in] USHORT ClientLanguage, + [in] USHORT ClientSystemDefaultLanguage, + [out] PRPC_UNICODE_STRING *DisplayName,*/ + [out] USHORT *LanguageReturned); + + /* Function 34 */ + NTSTATUS LsarDeleteObject( + [in] handle_t hBinding, + [in, out] LSAPR_HANDLE *ObjectHandle); + +cpp_quote("#if _WIN32_WINNT >= 0x0351") + + /* Function 35 */ + NTSTATUS LsarEnumerateAccountsWithUserRight( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, unique] PRPC_UNICODE_STRING UserRight, + [out] PLSAPR_ACCOUNT_ENUM_BUFFER EnumerationBuffer); + + /* Function 36 */ + NTSTATUS LsarEnmuerateAccountRights( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID AccountSid, + [out] PLSAPR_USER_RIGHT_SET UserRights); + + /* Function 37 */ + NTSTATUS LsarAddAccountRights( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID AccountSid, + [in] PLSAPR_USER_RIGHT_SET UserRights); + + /* Function 38 */ + NTSTATUS LsarRemoveAccountRights( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID AccountSid, + [in] BOOL AllRights, + [in] PLSAPR_USER_RIGHT_SET UserRights); + + /* Function 39 */ + NTSTATUS LsarQueryTrustedDomainInfo( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID TrustedDomainSid, + [in] TRUSTED_INFORMATION_CLASS InformationClass, + [out, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO *TrustedDomainInformation); + + /* Function 40 */ + NTSTATUS LsarSetTrustedDomainInfo( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID TrustedDomainSid, + [in] TRUSTED_INFORMATION_CLASS InformationClass, + [in, switch_is(InformationClass)] PLSAPR_TRUSTED_DOMAIN_INFO TrustedDomainInformation); + + /* Function 41 */ + NTSTATUS LsarDeleteTrustedDomain( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_SID TrustedDomainSid); + + /* Function 42 */ + NTSTATUS LsarStorePrivateData( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING KeyName, + [in, unique] PLSAPR_CR_CIPHER_VALUE EncryptedData); + + /* Function 43 */ + NTSTATUS LsarRetrievePrivateData( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING KeyName, + [in, out] PLSAPR_CR_CIPHER_VALUE *EncryptedData); + + /* Function 44 */ + NTSTATUS LsarOpenPolicy2( + [in] handle_t hBinding, + [in, unique, string] LPWSTR SystemName, + [in] PLSAPR_OBJECT_ATTRIBUTES ObjectAttributes, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *PolicyHandle); + + /* Function 45 */ + NTSTATUS LsarGetUserName( + [in] handle_t hBinding, + [in, unique, string] LPWSTR SystemName, + [in, out] PRPC_UNICODE_STRING *UserName, + [in, out, unique] PRPC_UNICODE_STRING *DomainName); + +cpp_quote("#if _WIN32_WINNT >= 0x0500") + + /* Function 46 */ + NTSTATUS LsarQueryInformationPolicy2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [out] unsigned long *PolicyInformation); + /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */ + + /* Function 47 */ + NTSTATUS LsarSetInformationPolicy2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [in] unsigned long PolicyInformation); + /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */ + + /* Function 48 */ + NTSTATUS LsarQueryTrustedDomainInfoByName( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING TrustedDomainName, + [in] POLICY_INFORMATION_CLASS InformationClass, + [out] unsigned long *PolicyInformation); + /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */ + + /* Function 49 */ + NTSTATUS LsarSetTrustedDomainInfoByName( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING TrustedDomainName, + [in] POLICY_INFORMATION_CLASS InformationClass, + [in] unsigned long PolicyInformation); + /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */ + + /* Function 50 */ + NTSTATUS LsarEnumerateTrustedDomainsEx( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in, out] DWORD *EnumerationContext, + [out] PLSAPR_TRUSTED_ENUM_BUFFER_EX EnumerationBuffer, + [in] DWORD PreferedMaximumLength); + + /* Function 51 */ + NTSTATUS LsarCreateTrustedDomainEx( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + [in] PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION AuthentificationInformation, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + + /* Function 52 */ + NTSTATUS LsarSetPolicyReplicationHandle( + [in] handle_t hBinding, + [in, out] PLSAPR_HANDLE PolicyHandle); + + /* Function 53 */ + NTSTATUS LsarQueryDomainInformationPolicy( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [out] unsigned long *PolicyInformation); + /* FIXME: should be [out, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION *PolicyInformation); */ + + /* Function 54 */ + NTSTATUS LsarSetDomainInformationPolicy( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] POLICY_INFORMATION_CLASS InformationClass, + [in] unsigned long PolicyInformation); + /* FIXME: should be [in, switch_is(InformationClass)] PLSAPR_POLICY_INFORMATION PolicyInformation); */ + + /* Function 55 */ + NTSTATUS LsarOpenTrustedDomainByName( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PRPC_UNICODE_STRING TrustedDomainName, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + + /* Function 56 */ + NTSTATUS LsarTestCall( + [in] handle_t hBinding); /* FIXME */ + + /* Function 57 */ + NTSTATUS LsarLookupSids2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_NAMES_EX TranslatedNames, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 58 */ + NTSTATUS LsarLookupNames2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] DWORD Count, + [in, size_is(Count)] PRPC_UNICODE_STRING Names, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_SID_EX TranslatedSids, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 59 */ + NTSTATUS LsarCreateTrustedDomainEx2( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSAPR_TRUSTED_DOMAIN_INFORMATION_EX TrustedDomainInformation, + [in] PLSAPR_TRUSTED_DOMAIN_AUTH_INFORMATION_INTERNAL AuthentificationInformation, + [in] ACCESS_MASK DesiredAccess, + [out] LSAPR_HANDLE *TrustedDomainHandle); + +cpp_quote("#if _WIN32_WINNT >= 0x0501") + + /* Function 60 */ + NTSTATUS CredrWrite( + [in] handle_t hBinding); /* FIXME */ + + /* Function 61 */ + NTSTATUS CredrRead( + [in] handle_t hBinding); /* FIXME */ + + /* Function 62 */ + NTSTATUS CredrEnumerate( + [in] handle_t hBinding); /* FIXME */ + + /* Function 63 */ + NTSTATUS CredrWriteDomainCredentials( + [in] handle_t hBinding); /* FIXME */ + + /* Function 64 */ + NTSTATUS CredrReadDomainCredentials( + [in] handle_t hBinding); /* FIXME */ + + /* Function 65 */ + NTSTATUS CredrDelete( + [in] handle_t hBinding); /* FIXME */ + + /* Function 66 */ + NTSTATUS CredrGetTargetInfo( + [in] handle_t hBinding); /* FIXME */ + + /* Function 67 */ + NTSTATUS CredrProfileLoaded( + [in] handle_t hBinding); /* FIXME */ + + /* Function 68 */ + NTSTATUS LsarLookupNames3( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] DWORD Count, + [in, size_is(Count)] PRPC_UNICODE_STRING Names, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_SID_EX2 TranslatedSids, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 69 */ + NTSTATUS CredrGetSessionTypes( + [in] handle_t hBinding); /* FIXME */ + + /* Function 70 */ + NTSTATUS LsarRegisterAuditEvent( + [in] handle_t hBinding); /* FIXME */ + + /* Function 71 */ + NTSTATUS LsarGenAuditEvent( + [in] handle_t hBinding); /* FIXME */ + + /* Function 72 */ + NTSTATUS LsarUnregisterAuditEvent( + [in] handle_t hBinding); /* FIXME */ + + /* Function 73 */ + NTSTATUS LsarQueryForestTrustInformation( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSA_UNICODE_STRING TrustedDomainName, + [in] LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType, + [out] PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo); + + /* Function 74 */ + NTSTATUS LsarSetForestTrustInformation( + [in] handle_t hBinding, + [in] LSAPR_HANDLE PolicyHandle, + [in] PLSA_UNICODE_STRING TrustedDomainName, + [in] LSA_FOREST_TRUST_RECORD_TYPE HighestRecordType, + [in] PLSA_FOREST_TRUST_INFORMATION ForestTrustInfo, + [in] BOOL CheckOnly, + [out] PLSA_FOREST_TRUST_COLLISION_INFORMATION *CollisionInfo); + + /* Function 75 */ + NTSTATUS CredrRename( + [in] handle_t hBinding); /* FIXME */ + + /* Function 76 */ + NTSTATUS LsarLookupSids3( + [in] handle_t hBinding, + [in] PLSAPR_SID_ENUM_BUFFER SidEnumBuffer, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_NAMES_EX TranslatedNames, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 77 */ + NTSTATUS LsarLookupNames4( + [in] handle_t hBinding, + [in] handle_t RpcHandle, + [in] DWORD Count, + [in, size_is(Count)] PRPC_UNICODE_STRING Names, + [out] PLSAPR_REFERENCED_DOMAIN_LIST *ReferencedDomains, + [in, out] PLSAPR_TRANSLATED_SID_EX2 TranslatedSids, + [in] LSAP_LOOKUP_LEVEL LookupLevel, + [in, out] DWORD *MappedCount, + [in] DWORD LookupOptions, + [in] DWORD ClientRevision); + + /* Function 78 */ + NTSTATUS LsarOpenPolicySce( + [in] handle_t hBinding); /* FIXME */ + + /* Function 79 */ + NTSTATUS LsarAdtRegisterSecurityEventSource( + [in] handle_t hBinding); /* FIXME */ + + /* Function 80 */ + NTSTATUS LsarAdtUnregisterSecurityEventSource( + [in] handle_t hBinding); /* FIXME */ + + /* Function 81 */ + NTSTATUS LsarAdtReportSecurityEvent( + [in] handle_t hBinding); /* FIXME */ + +cpp_quote("#endif /* _WIN32_WINNT >= 0x0501 */") +cpp_quote("#endif /* _WIN32_WINNT >= 0x0500 */") +cpp_quote("#endif /* _WIN32_WINNT >= 0x0351 */") + } From 9b188f4ebc1ee510d2e0f92728aca2c511428b2d Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Sat, 2 Aug 2008 17:01:22 +0000 Subject: [PATCH 087/304] - Implement GenerateConsoleCtrlEvent. - Remove IgnoreCtrlEvents variable (which ConsoleControlDispatcher did not actually use); set ProcessParameters->ConsoleFlags instead. Despite the name "ConsoleFlags", SetConsoleCtrlHandler treats it like a boolean. - Preserve all 16 bits of the attribute set by SetConsoleTextAttribute. Even though the upper byte does not affect text colors, it should be retrievable with GetConsoleScreenBufferInfo. - Update OpenConsoleW prototype in kernel32.h to match the change made in r34694. svn path=/trunk/; revision=35041 --- reactos/dll/win32/kernel32/include/kernel32.h | 2 +- reactos/dll/win32/kernel32/misc/console.c | 37 ++++++++++++++----- reactos/include/reactos/subsys/csrss/csrss.h | 10 ++++- reactos/subsystems/win32/csrss/api/process.c | 9 +++++ reactos/subsystems/win32/csrss/include/api.h | 1 + .../subsystems/win32/csrss/include/conio.h | 3 +- .../subsystems/win32/csrss/win32csr/conio.c | 36 ++++++++++++++++++ .../subsystems/win32/csrss/win32csr/dllmain.c | 1 + 8 files changed, 87 insertions(+), 12 deletions(-) diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/reactos/dll/win32/kernel32/include/kernel32.h index b2abfa8e828..5ba86675750 100755 --- a/reactos/dll/win32/kernel32/include/kernel32.h +++ b/reactos/dll/win32/kernel32/include/kernel32.h @@ -69,7 +69,7 @@ GetConsoleInputWaitHandle (VOID); HANDLE STDCALL OpenConsoleW (LPCWSTR wsName, DWORD dwDesiredAccess, BOOL bInheritHandle, - DWORD dwCreationDistribution); + DWORD dwShareMode); PTEB GetTeb(VOID); diff --git a/reactos/dll/win32/kernel32/misc/console.c b/reactos/dll/win32/kernel32/misc/console.c index 10de6a44800..b638e4ef137 100644 --- a/reactos/dll/win32/kernel32/misc/console.c +++ b/reactos/dll/win32/kernel32/misc/console.c @@ -27,8 +27,6 @@ extern BOOL WINAPI IsDebuggerPresent(VOID); /* GLOBALS *******************************************************************/ -static BOOL IgnoreCtrlEvents = FALSE; - static PHANDLER_ROUTINE* CtrlHandlers = NULL; static ULONG NrCtrlHandlers = 0; static WCHAR InputExeName[MAX_PATH + 1] = L""; @@ -3141,7 +3139,7 @@ SetConsoleTextAttribute( CsrRequest = MAKE_CSR_API(SET_ATTRIB, CSR_CONSOLE); Request.Data.SetAttribRequest.ConsoleHandle = hConsoleOutput; - Request.Data.SetAttribRequest.Attrib = (CHAR)wAttributes; + Request.Data.SetAttribRequest.Attrib = wAttributes; Status = CsrClientCallServer( &Request, NULL, CsrRequest, sizeof( CSR_API_MESSAGE ) ); if( !NT_SUCCESS( Status ) || !NT_SUCCESS( Status = Request.Status ) ) { @@ -3157,7 +3155,7 @@ AddConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine) { if (HandlerRoutine == NULL) { - IgnoreCtrlEvents = TRUE; + NtCurrentPeb()->ProcessParameters->ConsoleFlags = TRUE; return(TRUE); } else @@ -3193,7 +3191,7 @@ RemoveConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine) if (HandlerRoutine == NULL) { - IgnoreCtrlEvents = FALSE; + NtCurrentPeb()->ProcessParameters->ConsoleFlags = FALSE; return(TRUE); } else @@ -3245,7 +3243,7 @@ SetConsoleCtrlHandler(PHANDLER_ROUTINE HandlerRoutine, /*-------------------------------------------------------------- * GenerateConsoleCtrlEvent * - * @unimplemented + * @implemented */ BOOL WINAPI GenerateConsoleCtrlEvent( @@ -3253,9 +3251,30 @@ GenerateConsoleCtrlEvent( DWORD dwProcessGroupId ) { - DPRINT1("GenerateConsoleCtrlEvent(0x%x, 0x%x) UNIMPLEMENTED!\n", dwCtrlEvent, dwProcessGroupId); - SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + CSR_API_MESSAGE Request; + ULONG CsrRequest; + NTSTATUS Status; + + if (dwCtrlEvent != CTRL_C_EVENT && dwCtrlEvent != CTRL_BREAK_EVENT) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + CsrRequest = MAKE_CSR_API(GENERATE_CTRL_EVENT, CSR_CONSOLE); + Request.Data.GenerateCtrlEvent.Event = dwCtrlEvent; + Request.Data.GenerateCtrlEvent.ProcessGroup = dwProcessGroupId; + Status = CsrClientCallServer(&Request, + NULL, + CsrRequest, + sizeof(CSR_API_MESSAGE)); + if(!NT_SUCCESS(Status) || !(NT_SUCCESS(Status = Request.Status))) + { + SetLastErrorByStatus(Status); + return FALSE; + } + + return TRUE; } diff --git a/reactos/include/reactos/subsys/csrss/csrss.h b/reactos/include/reactos/subsys/csrss/csrss.h index 6aa80f3596b..b23bf0c29e2 100644 --- a/reactos/include/reactos/subsys/csrss/csrss.h +++ b/reactos/include/reactos/subsys/csrss/csrss.h @@ -163,7 +163,7 @@ typedef struct typedef struct { HANDLE ConsoleHandle; - CHAR Attrib; + WORD Attrib; } CSRSS_SET_ATTRIB, *PCSRSS_SET_ATTRIB; typedef struct @@ -460,6 +460,12 @@ typedef struct DWORD Length; } CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH, *PCSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH; +typedef struct +{ + DWORD Event; + DWORD ProcessGroup; +} CSRSS_GENERATE_CTRL_EVENT, *PCSRSS_GENERATE_CTRL_EVENT; + #define CSR_API_MESSAGE_HEADER_SIZE(Type) (FIELD_OFFSET(CSR_API_MESSAGE, Data) + sizeof(Type)) @@ -537,6 +543,7 @@ typedef struct #define GET_ALL_CONSOLE_ALIASES_LENGTH (0x3B) #define GET_CONSOLE_ALIASES_EXES (0x3C) #define GET_CONSOLE_ALIASES_EXES_LENGTH (0x3D) +#define GENERATE_CTRL_EVENT (0x3E) /* Keep in sync with definition below. */ #define CSRSS_HEADER_SIZE (sizeof(PORT_MESSAGE) + sizeof(ULONG) + sizeof(NTSTATUS)) @@ -608,6 +615,7 @@ typedef struct _CSR_API_MESSAGE CSRSS_GET_ALL_CONSOLE_ALIASES_LENGTH GetAllConsoleAliasesLength; CSRSS_GET_CONSOLE_ALIASES_EXES GetConsoleAliasesExes; CSRSS_GET_CONSOLE_ALIASES_EXES_LENGTH GetConsoleAliasesExesLength; + CSRSS_GENERATE_CTRL_EVENT GenerateCtrlEvent; } Data; } CSR_API_MESSAGE, *PCSR_API_MESSAGE; diff --git a/reactos/subsystems/win32/csrss/api/process.c b/reactos/subsystems/win32/csrss/api/process.c index d96651ff980..1c439fc8ab3 100644 --- a/reactos/subsystems/win32/csrss/api/process.c +++ b/reactos/subsystems/win32/csrss/api/process.c @@ -242,6 +242,15 @@ CSR_API(CsrCreateProcess) } } + if (Request->Data.CreateProcessRequest.Flags & CREATE_NEW_PROCESS_GROUP) + { + NewProcessData->ProcessGroup = (DWORD)NewProcessData->ProcessId; + } + else + { + NewProcessData->ProcessGroup = ProcessData->ProcessGroup; + } + /* Set default shutdown parameters */ NewProcessData->ShutdownLevel = 0x280; NewProcessData->ShutdownFlags = 0; diff --git a/reactos/subsystems/win32/csrss/include/api.h b/reactos/subsystems/win32/csrss/include/api.h index 7ec1d22d176..651da359656 100644 --- a/reactos/subsystems/win32/csrss/include/api.h +++ b/reactos/subsystems/win32/csrss/include/api.h @@ -48,6 +48,7 @@ typedef struct _CSRSS_PROCESS_DATA ULONG HandleTableSize; PCSRSS_HANDLE HandleTable; HANDLE ProcessId; + DWORD ProcessGroup; HANDLE Process; ULONG ShutdownLevel; ULONG ShutdownFlags; diff --git a/reactos/subsystems/win32/csrss/include/conio.h b/reactos/subsystems/win32/csrss/include/conio.h index 38c18b201cf..07dff611589 100644 --- a/reactos/subsystems/win32/csrss/include/conio.h +++ b/reactos/subsystems/win32/csrss/include/conio.h @@ -41,7 +41,7 @@ typedef struct tagCSRSS_SCREEN_BUFFER USHORT ShowX, ShowY; /* beginning offset for the actual display area */ ULONG CurrentX; /* Current X cursor position */ ULONG CurrentY; /* Current Y cursor position */ - BYTE DefaultAttrib; /* default char attribute */ + WORD DefaultAttrib; /* default char attribute */ USHORT VirtualY; /* top row of buffer being displayed, reported to callers */ CONSOLE_CURSOR_INFO CursorInfo; USHORT Mode; @@ -135,6 +135,7 @@ CSR_API(CsrSetConsoleCodePage); CSR_API(CsrGetConsoleOutputCodePage); CSR_API(CsrSetConsoleOutputCodePage); CSR_API(CsrGetProcessList); +CSR_API(CsrGenerateCtrlEvent); #define ConioInitScreenBuffer(Console, Buff) (Console)->Vtbl->InitScreenBuffer((Console), (Buff)) #define ConioDrawRegion(Console, Region) (Console)->Vtbl->DrawRegion((Console), (Region)) diff --git a/reactos/subsystems/win32/csrss/win32csr/conio.c b/reactos/subsystems/win32/csrss/win32csr/conio.c index ff65c58e37a..d1a7d222ac4 100644 --- a/reactos/subsystems/win32/csrss/win32csr/conio.c +++ b/reactos/subsystems/win32/csrss/win32csr/conio.c @@ -3129,4 +3129,40 @@ CSR_API(CsrGetProcessList) return Request->Status = STATUS_SUCCESS; } +CSR_API(CsrGenerateCtrlEvent) +{ + PCSRSS_CONSOLE Console; + PCSRSS_PROCESS_DATA current; + PLIST_ENTRY current_entry; + DWORD Group; + NTSTATUS Status; + + Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); + Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); + + Status = ConioConsoleFromProcessData(ProcessData, &Console); + if (! NT_SUCCESS(Status)) + { + return Request->Status = Status; + } + + Group = Request->Data.GenerateCtrlEvent.ProcessGroup; + Status = STATUS_INVALID_PARAMETER; + for (current_entry = Console->ProcessList.Flink; + current_entry != &Console->ProcessList; + current_entry = current_entry->Flink) + { + current = CONTAINING_RECORD(current_entry, CSRSS_PROCESS_DATA, ProcessEntry); + if (Group == 0 || current->ProcessGroup == Group) + { + ConioConsoleCtrlEvent(Request->Data.GenerateCtrlEvent.Event, current); + Status = STATUS_SUCCESS; + } + } + + ConioUnlockConsole(Console); + + return Request->Status = Status; +} + /* EOF */ diff --git a/reactos/subsystems/win32/csrss/win32csr/dllmain.c b/reactos/subsystems/win32/csrss/win32csr/dllmain.c index 0b73d2df16c..34c72eefc81 100644 --- a/reactos/subsystems/win32/csrss/win32csr/dllmain.c +++ b/reactos/subsystems/win32/csrss/win32csr/dllmain.c @@ -74,6 +74,7 @@ static CSRSS_API_DEFINITION Win32CsrApiDefinitions[] = CSRSS_DEFINE_API(GET_ALL_CONSOLE_ALIASES_LENGTH, CsrGetAllConsoleAliasesLength), CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES, CsrGetConsoleAliasesExes), CSRSS_DEFINE_API(GET_CONSOLE_ALIASES_EXES_LENGTH, CsrGetConsoleAliasesExesLength), + CSRSS_DEFINE_API(GENERATE_CTRL_EVENT, CsrGenerateCtrlEvent), { 0, 0, NULL } }; From a1246184342ef0c9c0ae6e79c576ac42a3f32a27 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sat, 2 Aug 2008 18:25:53 +0000 Subject: [PATCH 088/304] - ExpLookupHandleTableEntry: Apply same changes as was done for ExpFreeHandleTable and ExpAllocateHandleTableEntrySlow in 34467 - ExpAllocateHandleTableEntry: Fail if we don't find a handle table entry svn path=/trunk/; revision=35042 --- reactos/ntoskrnl/ex/handle.c | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/reactos/ntoskrnl/ex/handle.c b/reactos/ntoskrnl/ex/handle.c index 70d181edd42..11df6d016e6 100644 --- a/reactos/ntoskrnl/ex/handle.c +++ b/reactos/ntoskrnl/ex/handle.c @@ -35,8 +35,10 @@ NTAPI ExpLookupHandleTableEntry(IN PHANDLE_TABLE HandleTable, IN EXHANDLE LookupHandle) { - ULONG i, j, k, TableLevel, NextHandle; - ULONG_PTR TableBase; + ULONG i, j, k, NextHandle; + ULONG_PTR TableCode = HandleTable->TableCode; + ULONG_PTR TableBase = TableCode & ~3; + ULONG TableLevel = (ULONG)(TableCode & 3); PHANDLE_TABLE_ENTRY Entry = NULL; EXHANDLE Handle = LookupHandle; PUCHAR Level1, Level2, Level3; @@ -46,13 +48,6 @@ ExpLookupHandleTableEntry(IN PHANDLE_TABLE HandleTable, NextHandle = *(volatile ULONG*)&HandleTable->NextHandleNeedingPool; if (Handle.Value >= NextHandle) return NULL; - /* Get the table code */ - TableBase = *(volatile ULONG_PTR*)&HandleTable->TableCode; - - /* Extract the table level and actual table base */ - TableLevel = (ULONG)(TableBase & 3); - TableBase = TableBase - TableLevel; - /* Check what level we're running at */ switch (TableLevel) { @@ -210,8 +205,8 @@ ExpFreeHandleTable(IN PHANDLE_TABLE HandleTable) PEPROCESS Process = HandleTable->QuotaProcess; ULONG i, j; ULONG_PTR TableCode = HandleTable->TableCode; - ULONG TableLevel = TableCode & 3; ULONG_PTR TableBase = TableCode & ~3; + ULONG TableLevel = (ULONG)(TableCode & 3); PHANDLE_TABLE_ENTRY Level1, *Level2, **Level3; PAGED_CODE(); @@ -734,6 +729,13 @@ ExpAllocateHandleTableEntry(IN PHANDLE_TABLE HandleTable, /* Lookup the entry for this handle */ Entry = ExpLookupHandleTableEntry(HandleTable, Handle); + /* Make sure that we found an entry */ + if (!Entry) + { + /* We didn't, fail */ + return NULL; + } + /* Get an available lock and acquire it */ i = ((OldValue & FREE_HANDLE_MASK) >> 2) % 4; KeEnterCriticalRegion(); From 6eeeb0ab4efb0c580db2549a668197824c935193 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 2 Aug 2008 18:30:38 +0000 Subject: [PATCH 089/304] Synced dbghelp.dll with Wine HEAD. svn path=/trunk/; revision=35043 --- reactos/dll/win32/dbghelp/Makefile.in | 30 - reactos/dll/win32/dbghelp/dbghelp.c | 12 +- reactos/dll/win32/dbghelp/dbghelp.def | 199 ------ reactos/dll/win32/dbghelp/dbghelp.rbuild | 24 +- reactos/dll/win32/dbghelp/dbghelp.rc | 1 - reactos/dll/win32/dbghelp/dbghelp.spec | 6 +- reactos/dll/win32/dbghelp/dbghelp_private.h | 18 +- reactos/dll/win32/dbghelp/dwarf.c | 142 ++-- reactos/dll/win32/dbghelp/dwarf.h | 28 - reactos/dll/win32/dbghelp/minidump.c | 248 ++++--- reactos/dll/win32/dbghelp/module.c | 11 +- reactos/dll/win32/dbghelp/msc.c | 140 +++- reactos/dll/win32/dbghelp/path.c | 10 +- reactos/dll/win32/dbghelp/pe_module.c | 83 ++- reactos/dll/win32/dbghelp/stabs.c | 21 +- reactos/dll/win32/dbghelp/stackframe.h | 83 --- reactos/dll/win32/dbghelp/stubs.c | 745 -------------------- reactos/dll/win32/dbghelp/symbol.c | 75 +- reactos/dll/win32/dbghelp/thread.h | 45 -- reactos/dll/win32/dbghelp/type.c | 33 +- reactos/dll/win32/shell32/fprop.c | 4 +- reactos/include/psdk/dbghelp.h | 57 +- reactos/include/reactos/wine/mscvpdb.h | 362 +++++++++- reactos/media/doc/README.WINE | 2 +- 24 files changed, 937 insertions(+), 1442 deletions(-) delete mode 100644 reactos/dll/win32/dbghelp/Makefile.in delete mode 100644 reactos/dll/win32/dbghelp/dbghelp.def delete mode 100644 reactos/dll/win32/dbghelp/dbghelp.rc delete mode 100644 reactos/dll/win32/dbghelp/stackframe.h delete mode 100644 reactos/dll/win32/dbghelp/stubs.c delete mode 100644 reactos/dll/win32/dbghelp/thread.h diff --git a/reactos/dll/win32/dbghelp/Makefile.in b/reactos/dll/win32/dbghelp/Makefile.in deleted file mode 100644 index 280e199c9ac..00000000000 --- a/reactos/dll/win32/dbghelp/Makefile.in +++ /dev/null @@ -1,30 +0,0 @@ -TOPSRCDIR = @top_srcdir@ -TOPOBJDIR = ../.. -SRCDIR = @srcdir@ -VPATH = @srcdir@ -MODULE = dbghelp.dll -IMPORTLIB = libdbghelp.$(IMPLIBEXT) -IMPORTS = psapi kernel32 ntdll - -C_SRCS = \ - coff.c \ - dbghelp.c \ - dwarf.c \ - elf_module.c \ - image.c \ - memory.c \ - minidump.c \ - module.c \ - msc.c \ - path.c \ - pe_module.c \ - source.c \ - stabs.c \ - stack.c \ - storage.c \ - symbol.c \ - type.c - -@MAKE_DLL_RULES@ - -@DEPENDENCIES@ # everything below this line is overwritten by make depend diff --git a/reactos/dll/win32/dbghelp/dbghelp.c b/reactos/dll/win32/dbghelp/dbghelp.c index dc3b86a35db..fba22d09baf 100644 --- a/reactos/dll/win32/dbghelp/dbghelp.c +++ b/reactos/dll/win32/dbghelp/dbghelp.c @@ -268,8 +268,14 @@ BOOL WINAPI SymInitializeW(HANDLE hProcess, PCWSTR UserSearchPath, BOOL fInvadeP TRACE("(%p %s %u)\n", hProcess, debugstr_w(UserSearchPath), fInvadeProcess); - if (process_find_by_handle(hProcess)) - FIXME("what to do ??\n"); + if (process_find_by_handle(hProcess)){ + WARN("the symbols for this process have already been initialized!\n"); + + /* MSDN says to only call this function once unless SymCleanup() has been called since the last call. + It also says to call SymRefreshModuleList() instead if you just want the module list refreshed. + Native still returns TRUE even if the process has already been initialized. */ + return TRUE; + } pcs = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*pcs)); if (!pcs) return FALSE; @@ -379,6 +385,8 @@ BOOL WINAPI SymCleanup(HANDLE hProcess) return TRUE; } } + + ERR("this process has not had SymInitialize() called for it!\n"); return FALSE; } diff --git a/reactos/dll/win32/dbghelp/dbghelp.def b/reactos/dll/win32/dbghelp/dbghelp.def deleted file mode 100644 index 18e369af2b8..00000000000 --- a/reactos/dll/win32/dbghelp/dbghelp.def +++ /dev/null @@ -1,199 +0,0 @@ -; $Id: dbghelp.def 27344 2007-08-01 14:12:10Z tkreuzer $ -; -; ReactOS Operating System -; -; This file contains all dbghelp.dll exports -; -LIBRARY dbghelp.dll - -EXPORTS -;SymGetOmapBlockBase -DbgHelpCreateUserDump@12 -DbgHelpCreateUserDumpW@12 -EnumDirTree@24 -EnumDirTreeW@24 -EnumerateLoadedModules64@12 -EnumerateLoadedModules@12 -EnumerateLoadedModulesW64@12 -ExtensionApiVersion@0 -FindDebugInfoFile@12 -FindDebugInfoFileEx@20 -;FindDebugInfoFileExW; not existent on windows, stubbed in wine spec -FindExecutableImage@12 -FindExecutableImageEx@20 -FindExecutableImageExW@20 -FindFileInPath@32 -FindFileInSearchPath@28 -GetTimestampForLoadedLibrary@4 -ImageDirectoryEntryToData@16=ntdll.RtlImageDirectoryEntryToData -ImageDirectoryEntryToDataEx@20 -ImageNtHeader@4=ntdll.RtlImageNtHeader -ImageRvaToSection@12=ntdll.RtlImageRvaToSection -ImageRvaToVa@16=ntdll.RtlImageRvaToVa -ImagehlpApiVersion@0 -ImagehlpApiVersionEx@4 -MakeSureDirectoryPathExists@4 -MapDebugInformation@16 -MiniDumpReadDumpStream@20 -MiniDumpWriteDump@28 -SearchTreeForFile@12 -SearchTreeForFileW@12 -StackWalk64@36 -StackWalk@36 -SymAddSymbol@32 -SymAddSymbolW@32 -SymCleanup@4 -SymDeleteSymbol@28 -SymDeleteSymbolW@28 -SymEnumLines@28 -SymEnumLinesW@28 -SymEnumProcesses@8 -SymEnumSourceFiles@24 -SymEnumSourceFilesW@24 -SymEnumSourceLines@36 -SymEnumSourceLinesW@36 -SymEnumSym@20 -SymEnumSymbols@24 -SymEnumSymbolsForAddr@20 -SymEnumSymbolsForAddrW@20 -SymEnumSymbolsW@24 -SymEnumTypes@20 -SymEnumTypesW@20 -SymEnumerateModules64@12 -SymEnumerateModules@12 -SymEnumerateModulesW64@12 -SymEnumerateSymbols64@20 -SymEnumerateSymbols@16 -SymEnumerateSymbolsW64@20 -SymEnumerateSymbolsW@16 -;SymFindDebugInfoFile; not existent on windows, stubbed in wine spec -;SymFindDebugInfoFileW; not existent on windows, stubbed in wine spec -SymFindFileInPath@40 -SymFindFileInPathW@40 -SymFromAddr@20 -SymFromAddrW@20 -SymFromIndex@20 -SymFromIndexW@20 -SymFromName@12 -SymFromNameW@12 -SymFromToken@20 -SymFromTokenW@20 -SymFunctionTableAccess64@12 -SymFunctionTableAccess@8 -SymGetFileLineOffsets64@20 -SymGetHomeDirectory@12 -SymGetHomeDirectoryW@12 -SymGetLineFromAddr64@20 -SymGetLineFromAddr@16 -SymGetLineFromAddrW64@20 -SymGetLineFromName64@24 -SymGetLineFromName@24 -SymGetLineFromNameW64@24 -SymGetLineNext64@8 -SymGetLineNext@8 -SymGetLineNextW64@8 -SymGetLinePrev64@8 -SymGetLinePrev@8 -SymGetLinePrevW64@8 -SymGetModuleBase64@12 -SymGetModuleBase@8 -SymGetModuleInfo64@16 -SymGetModuleInfo@12 -SymGetModuleInfoW64@16 -SymGetModuleInfoW@12 -SymGetOptions@0 -SymGetScope@20 -SymGetScopeW@20 -SymGetSearchPath@12 -SymGetSearchPathW@12 -SymGetSourceFile@28 -SymGetSourceFileFromToken@20 -SymGetSourceFileFromTokenW@20 -SymGetSourceFileToken@24 -SymGetSourceFileTokenW@24 -;SymGetSourceFileW -;SymGetSourceVarFromToken -;SymGetSourceVarFromTokenW -SymGetSymFromAddr64@20 -SymGetSymFromAddr@16 -SymGetSymFromName64@12 -SymGetSymFromName@12 -SymGetSymNext64@8 -SymGetSymNext@8 -SymGetSymPrev64@8 -SymGetSymPrev@8 -SymGetSymbolFile@32 -SymGetSymbolFileW@32 -SymGetTypeFromName@20 -SymGetTypeFromNameW@20 -SymGetTypeInfo@24 -SymGetTypeInfoEx@16 -SymInitialize@12 -SymInitializeW@12 -SymLoadModule64@28 -SymLoadModule@24 -SymLoadModuleEx@36 -SymLoadModuleExW@36 -SymMatchFileName@16 -SymMatchFileNameW@16 -SymMatchString@12 -SymMatchStringA@12 -SymMatchStringW@12 -SymNext@8 -SymNextW@8 -SymPrev@8 -SymPrevW@8 -;SymRefreshModuleList -SymRegisterCallback64@16 -SymRegisterCallback@12 -SymRegisterCallbackW64@16 -SymRegisterFunctionEntryCallback64@16 -SymRegisterFunctionEntryCallback@12 -SymSearch@44 -SymSearchW@44 -SymSetContext@12 -SymSetHomeDirectory@8 -SymSetHomeDirectoryW@8 -SymSetOptions@4 -SymSetParentWindow@4 -SymSetSearchPath@8 -SymSetSearchPathW@8 -;SymSetSymWithAddr64 -SymSrvDeltaName@20 -SymSrvDeltaNameW@20 -;SymSrvGetFileIndexInfo; not existent on windows, stubbed in wine spec -;SymSrvGetFileIndexInfoW; not existent on windows, stubbed in wine spec -SymSrvGetFileIndexString@24 -SymSrvGetFileIndexStringW@24 -SymSrvGetFileIndexes@20 -SymSrvGetFileIndexesW@20 -SymSrvGetSupplement@16 -SymSrvGetSupplementW@16 -SymSrvIsStore@8 -SymSrvIsStoreW@8 -SymSrvStoreFile@16 -SymSrvStoreFileW@16 -SymSrvStoreSupplement@20 -SymSrvStoreSupplementW@20 -SymUnDName64@12 -SymUnDName@12 -SymUnloadModule64@12 -SymUnloadModule@8 -UnDecorateSymbolName@16 -UnDecorateSymbolNameW@16 -UnmapDebugInformation@4 -WinDbgExtensionDllInit@12 -;block -;dbghelp -;dh -;fptr -;homedir -;lmi -;lminfo -;omap -;srcfiles -;stack_force_ebp -;stackdbg -;sym -;symsrv -;vc7fpo diff --git a/reactos/dll/win32/dbghelp/dbghelp.rbuild b/reactos/dll/win32/dbghelp/dbghelp.rbuild index b7e71c8aaa8..236536ac3e5 100644 --- a/reactos/dll/win32/dbghelp/dbghelp.rbuild +++ b/reactos/dll/win32/dbghelp/dbghelp.rbuild @@ -1,17 +1,14 @@ + + + - + . include/reactos/wine - 0x600 - 0x502 - 0x502 + 0x600 + 0x600 - ntdll - wine - pseh - kernel32 - psapi coff.c dbghelp.c dwarf.c @@ -27,9 +24,14 @@ source.c stabs.c stack.c - stubs.c storage.c symbol.c type.c - dbghelp.rc + dbghelp.spec + wine + psapi + kernel32 + version + ntdll + diff --git a/reactos/dll/win32/dbghelp/dbghelp.rc b/reactos/dll/win32/dbghelp/dbghelp.rc deleted file mode 100644 index 766ec2b7b11..00000000000 --- a/reactos/dll/win32/dbghelp/dbghelp.rc +++ /dev/null @@ -1 +0,0 @@ -#include "wine/wine_common_ver.rc" diff --git a/reactos/dll/win32/dbghelp/dbghelp.spec b/reactos/dll/win32/dbghelp/dbghelp.spec index b023f3d70e3..b95a9e728bf 100644 --- a/reactos/dll/win32/dbghelp/dbghelp.spec +++ b/reactos/dll/win32/dbghelp/dbghelp.spec @@ -15,8 +15,8 @@ @ stub FindFileInPath @ stub FindFileInSearchPath @ stdcall GetTimestampForLoadedLibrary(long) -@ stdcall ImageDirectoryEntryToData(ptr long long ptr) ntdll.RtlImageDirectoryEntryToData -@ stub ImageDirectoryEntryToDataEx +@ stdcall ImageDirectoryEntryToData(ptr long long ptr) +@ stdcall ImageDirectoryEntryToDataEx(ptr long long ptr ptr) @ stdcall ImageNtHeader(ptr) ntdll.RtlImageNtHeader @ stdcall ImageRvaToSection(ptr ptr long) ntdll.RtlImageRvaToSection @ stdcall ImageRvaToVa(ptr ptr long ptr) ntdll.RtlImageRvaToVa @@ -48,7 +48,7 @@ @ stdcall SymEnumerateModules64(long ptr ptr) @ stdcall SymEnumerateModulesW64(long ptr ptr) @ stdcall SymEnumerateSymbols(long long ptr ptr) -@ stub SymEnumerateSymbols64 +@ stdcall SymEnumerateSymbols64(long double ptr ptr) @ stub SymEnumerateSymbolsW @ stub SymEnumerateSymbolsW64 @ stub SymFindDebugInfoFile diff --git a/reactos/dll/win32/dbghelp/dbghelp_private.h b/reactos/dll/win32/dbghelp/dbghelp_private.h index 99b8b542f9d..e4cae5befdc 100644 --- a/reactos/dll/win32/dbghelp/dbghelp_private.h +++ b/reactos/dll/win32/dbghelp/dbghelp_private.h @@ -106,7 +106,7 @@ void hash_table_iter_init(const struct hash_table* ht, void* hash_table_iter_up(struct hash_table_iter* hti); #define GET_ENTRY(__i, __t, __f) \ - ((__t*)((char*)(__i) - (unsigned int)(&((__t*)0)->__f))) + ((__t*)((char*)(__i) - FIELD_OFFSET(__t,__f))) extern unsigned dbghelp_options; @@ -206,12 +206,12 @@ struct symt_function struct vector vchildren; /* locals, params, blocks, start/end, labels */ }; -struct symt_function_point +struct symt_hierarchy_point { struct symt symt; /* either SymTagFunctionDebugStart, SymTagFunctionDebugEnd, SymTagLabel */ - struct symt_function* parent; + struct hash_table_elt hash_elt; /* if label (and in compiland's hash table if global) */ + struct symt* parent; /* symt_function or symt_compiland */ struct location loc; - const char* name; /* for labels */ }; struct symt_public @@ -256,6 +256,7 @@ struct symt_basic struct symt_enum { struct symt symt; + struct symt* base_type; const char* name; struct vector vchildren; }; @@ -548,7 +549,7 @@ extern struct symt_block* symt_close_func_block(struct module* module, struct symt_function* func, struct symt_block* block, unsigned pc); -extern struct symt_function_point* +extern struct symt_hierarchy_point* symt_add_function_point(struct module* module, struct symt_function* func, enum SymTagEnum point, @@ -568,6 +569,10 @@ extern struct symt_data* struct symt_compiland* parent, const char* name, struct symt* type, const VARIANT* v); +extern struct symt_hierarchy_point* + symt_new_label(struct module* module, + struct symt_compiland* compiland, + const char* name, unsigned long address); /* type.c */ extern void symt_init_basic(struct module* module); @@ -587,7 +592,8 @@ extern BOOL symt_add_udt_element(struct module* module, struct symt* elt_type, unsigned offset, unsigned size); extern struct symt_enum* - symt_new_enum(struct module* module, const char* typename); + symt_new_enum(struct module* module, const char* typename, + struct symt* basetype); extern BOOL symt_add_enum_element(struct module* module, struct symt_enum* enum_type, const char* name, int value); diff --git a/reactos/dll/win32/dbghelp/dwarf.c b/reactos/dll/win32/dbghelp/dwarf.c index a03b0490800..ccd39fbd569 100644 --- a/reactos/dll/win32/dbghelp/dwarf.c +++ b/reactos/dll/win32/dbghelp/dwarf.c @@ -19,6 +19,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +#define NONAMELESSUNION + #include "config.h" #include @@ -167,6 +169,13 @@ typedef struct dwarf2_traverse_context_s unsigned char word_size; } dwarf2_traverse_context_t; +/* symt_cache indexes */ +#define sc_void 0 +#define sc_int1 1 +#define sc_int2 2 +#define sc_int4 3 +#define sc_num 4 + typedef struct dwarf2_parse_context_s { const dwarf2_section_t* sections; @@ -179,6 +188,7 @@ typedef struct dwarf2_parse_context_s unsigned long load_offset; unsigned long ref_offset; unsigned char word_size; + struct symt* symt_cache[sc_num]; /* void, int1, int2, int4 */ } dwarf2_parse_context_t; /* stored in the dbghelp's module internal structure for later reuse */ @@ -932,7 +942,7 @@ static struct symt* dwarf2_parse_base_type(dwarf2_parse_context_t* ctx, struct attribute size; struct attribute encoding; enum BasicType bt; - + int cache_idx = -1; if (di->symt) return di->symt; TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); @@ -956,6 +966,25 @@ static struct symt* dwarf2_parse_base_type(dwarf2_parse_context_t* ctx, default: bt = btNoType; break; } di->symt = &symt_new_basic(ctx->module, bt, name.u.string, size.u.uvalue)->symt; + switch (bt) + { + case btVoid: + assert(size.u.uvalue == 0); + cache_idx = sc_void; + break; + case btInt: + switch (size.u.uvalue) + { + case 1: cache_idx = sc_int1; break; + case 2: cache_idx = sc_int2; break; + case 4: cache_idx = sc_int4; break; + } + break; + default: break; + } + if (cache_idx != -1 && !ctx->symt_cache[cache_idx]) + ctx->symt_cache[cache_idx] = di->symt; + if (di->abbrev->have_child) FIXME("Unsupported children\n"); return di->symt; } @@ -991,8 +1020,10 @@ static struct symt* dwarf2_parse_pointer_type(dwarf2_parse_context_t* ctx, if (!dwarf2_find_attribute(ctx, di, DW_AT_byte_size, &size)) size.u.uvalue = 0; if (!(ref_type = dwarf2_lookup_type(ctx, di))) - ref_type = &symt_new_basic(ctx->module, btVoid, "void", 0)->symt; - + { + ref_type = ctx->symt_cache[sc_void]; + assert(ref_type); + } di->symt = &symt_new_pointer(ctx->module, ref_type)->symt; if (di->abbrev->have_child) FIXME("Unsupported children\n"); return di->symt; @@ -1181,6 +1212,7 @@ static struct symt* dwarf2_parse_udt_type(dwarf2_parse_context_t* ctx, case DW_TAG_structure_type: case DW_TAG_class_type: case DW_TAG_union_type: + case DW_TAG_typedef: /* FIXME: we need to handle nested udt definitions */ break; default: @@ -1215,15 +1247,24 @@ static struct symt* dwarf2_parse_enumeration_type(dwarf2_parse_context_t* ctx, { struct attribute name; struct attribute size; + struct symt_basic* basetype; if (di->symt) return di->symt; TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); if (!dwarf2_find_attribute(ctx, di, DW_AT_name, &name)) name.u.string = NULL; - if (!dwarf2_find_attribute(ctx, di, DW_AT_byte_size, &size)) size.u.uvalue = 0; + if (!dwarf2_find_attribute(ctx, di, DW_AT_byte_size, &size)) size.u.uvalue = 4; - di->symt = &symt_new_enum(ctx->module, name.u.string)->symt; + switch (size.u.uvalue) /* FIXME: that's wrong */ + { + case 1: basetype = symt_new_basic(ctx->module, btInt, "char", 1); break; + case 2: basetype = symt_new_basic(ctx->module, btInt, "short", 2); break; + default: + case 4: basetype = symt_new_basic(ctx->module, btInt, "int", 4); break; + } + + di->symt = &symt_new_enum(ctx->module, name.u.string, &basetype->symt)->symt; if (di->abbrev->have_child) /* any interest to not have child ? */ { @@ -1530,7 +1571,11 @@ static struct symt* dwarf2_parse_subprogram(dwarf2_parse_context_t* ctx, TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); - if (!dwarf2_find_attribute(ctx, di, DW_AT_name, &name)) name.u.string = NULL; + if (!dwarf2_find_attribute(ctx, di, DW_AT_name, &name)) + { + WARN("No name for function... dropping function\n"); + return NULL; + } /* if it's an abstract representation of an inline function, there should be * a concrete object that we'll handle */ @@ -1554,7 +1599,10 @@ static struct symt* dwarf2_parse_subprogram(dwarf2_parse_context_t* ctx, is_decl.u.uvalue = 0; if (!(ret_type = dwarf2_lookup_type(ctx, di))) - ret_type = &symt_new_basic(ctx->module, btVoid, "void", 0)->symt; + { + ret_type = ctx->symt_cache[sc_void]; + assert(ret_type); + } /* FIXME: assuming C source code */ sig_type = symt_new_function_signature(ctx->module, ret_type, CV_CALL_FAR_C); @@ -1631,7 +1679,7 @@ static struct symt* dwarf2_parse_subprogram(dwarf2_parse_context_t* ctx, symt_add_function_point(ctx->module, subpgm.func, SymTagCustom, &subpgm.frame, NULL); } - symt_normalize_function(subpgm.ctx->module, subpgm.func); + if (subpgm.func) symt_normalize_function(subpgm.ctx->module, subpgm.func); return di->symt; } @@ -1647,7 +1695,10 @@ static struct symt* dwarf2_parse_subroutine_type(dwarf2_parse_context_t* ctx, TRACE("%s, for %s\n", dwarf2_debug_ctx(ctx), dwarf2_debug_di(di)); if (!(ret_type = dwarf2_lookup_type(ctx, di))) - ret_type = &symt_new_basic(ctx->module, btVoid, "void", 0)->symt; + { + ret_type = ctx->symt_cache[sc_void]; + assert(ret_type); + } /* FIXME: assuming C source code */ sig_type = symt_new_function_signature(ctx->module, ret_type, CV_CALL_FAR_C); @@ -1935,29 +1986,40 @@ static BOOL dwarf2_parse_line_numbers(const dwarf2_section_t* sections, } static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections, - const dwarf2_comp_unit_t* comp_unit, struct module* module, const struct elf_thunk_area* thunks, - const unsigned char* comp_unit_cursor, + dwarf2_traverse_context_t* mod_ctx, unsigned long load_offset) { dwarf2_parse_context_t ctx; - dwarf2_traverse_context_t traverse; dwarf2_traverse_context_t abbrev_ctx; dwarf2_debug_info_t* di; + dwarf2_traverse_context_t cu_ctx; + const unsigned char* comp_unit_start = mod_ctx->data; + unsigned long cu_length; + unsigned short cu_version; + unsigned long cu_abbrev_offset; BOOL ret = FALSE; - TRACE("Compilation Unit Header found at 0x%x:\n", - comp_unit_cursor - sections[section_debug].address); - TRACE("- length: %lu\n", comp_unit->length); - TRACE("- version: %u\n", comp_unit->version); - TRACE("- abbrev_offset: %lu\n", comp_unit->abbrev_offset); - TRACE("- word_size: %u\n", comp_unit->word_size); + cu_length = dwarf2_parse_u4(mod_ctx); + cu_ctx.data = cu_ctx.start_data = mod_ctx->data; + cu_ctx.end_data = mod_ctx->data + cu_length; + mod_ctx->data += cu_length; + cu_version = dwarf2_parse_u2(&cu_ctx); + cu_abbrev_offset = dwarf2_parse_u4(&cu_ctx); + cu_ctx.word_size = dwarf2_parse_byte(&cu_ctx); - if (comp_unit->version != 2) + TRACE("Compilation Unit Header found at 0x%x:\n", + comp_unit_start - sections[section_debug].address); + TRACE("- length: %lu\n", cu_length); + TRACE("- version: %u\n", cu_version); + TRACE("- abbrev_offset: %lu\n", cu_abbrev_offset); + TRACE("- word_size: %u\n", cu_ctx.word_size); + + if (cu_version != 2) { WARN("%u DWARF version unsupported. Wine dbghelp only support DWARF 2.\n", - comp_unit->version); + cu_version); return FALSE; } @@ -1965,24 +2027,21 @@ static BOOL dwarf2_parse_compilation_unit(const dwarf2_section_t* sections, ctx.sections = sections; ctx.section = section_debug; ctx.module = module; - ctx.word_size = comp_unit->word_size; + ctx.word_size = cu_ctx.word_size; ctx.thunks = thunks; ctx.load_offset = load_offset; - ctx.ref_offset = comp_unit_cursor - sections[section_debug].address; + ctx.ref_offset = comp_unit_start - sections[section_debug].address; + memset(ctx.symt_cache, 0, sizeof(ctx.symt_cache)); + ctx.symt_cache[sc_void] = &symt_new_basic(module, btVoid, "void", 0)->symt; - traverse.start_data = comp_unit_cursor + sizeof(dwarf2_comp_unit_stream_t); - traverse.data = traverse.start_data; - traverse.word_size = comp_unit->word_size; - traverse.end_data = comp_unit_cursor + comp_unit->length + sizeof(unsigned); - - abbrev_ctx.start_data = sections[section_abbrev].address + comp_unit->abbrev_offset; + abbrev_ctx.start_data = sections[section_abbrev].address + cu_abbrev_offset; abbrev_ctx.data = abbrev_ctx.start_data; abbrev_ctx.end_data = sections[section_abbrev].address + sections[section_abbrev].size; - abbrev_ctx.word_size = comp_unit->word_size; + abbrev_ctx.word_size = cu_ctx.word_size; dwarf2_parse_abbrev_set(&abbrev_ctx, &ctx.abbrev_table, &ctx.pool); sparse_array_init(&ctx.debug_info_table, sizeof(dwarf2_debug_info_t), 128); - dwarf2_read_one_debug_info(&ctx, &traverse, &di); + dwarf2_read_one_debug_info(&ctx, &cu_ctx, &di); if (di->abbrev->tag == DW_TAG_compile_unit) { @@ -2069,7 +2128,7 @@ static enum location_error loc_compute_frame(struct process* pcs, psym = vector_at(&func->vchildren, i); if ((*psym)->tag == SymTagCustom) { - pframe = &((struct symt_function_point*)*psym)->loc; + pframe = &((struct symt_hierarchy_point*)*psym)->loc; /* First, recompute the frame information, if needed */ switch (pframe->kind) @@ -2174,8 +2233,10 @@ BOOL dwarf2_parse(struct module* module, unsigned long load_offset, { dwarf2_section_t section[section_max]; unsigned char* ptr; - const unsigned char*comp_unit_cursor = debug; - const unsigned char*end_debug = debug + debug_size; + dwarf2_traverse_context_t mod_ctx; + + mod_ctx.start_data = mod_ctx.data = debug; + mod_ctx.end_data = debug + debug_size; module->loc_compute = dwarf2_location_compute; @@ -2202,20 +2263,9 @@ BOOL dwarf2_parse(struct module* module, unsigned long load_offset, module->dwarf2_info->debug_loc.size = loclist_size; } - while (comp_unit_cursor < end_debug) + while (mod_ctx.data < mod_ctx.end_data) { - const dwarf2_comp_unit_stream_t* comp_unit_stream; - dwarf2_comp_unit_t comp_unit; - - comp_unit_stream = (const dwarf2_comp_unit_stream_t*) comp_unit_cursor; - comp_unit.length = *(const unsigned long*) comp_unit_stream->length; - comp_unit.version = *(const unsigned short*) comp_unit_stream->version; - comp_unit.abbrev_offset = *(const unsigned long*) comp_unit_stream->abbrev_offset; - comp_unit.word_size = *(const unsigned char*) comp_unit_stream->word_size; - - dwarf2_parse_compilation_unit(section, &comp_unit, module, - thunks, comp_unit_cursor, load_offset); - comp_unit_cursor += comp_unit.length + sizeof(unsigned); + dwarf2_parse_compilation_unit(section, module, thunks, &mod_ctx, load_offset); } module->module.SymType = SymDia; module->module.CVSig = 'D' | ('W' << 8) | ('A' << 16) | ('R' << 24); diff --git a/reactos/dll/win32/dbghelp/dwarf.h b/reactos/dll/win32/dbghelp/dwarf.h index c03799ef9ca..6a34bb59b0b 100644 --- a/reactos/dll/win32/dbghelp/dwarf.h +++ b/reactos/dll/win32/dbghelp/dwarf.h @@ -18,34 +18,6 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -typedef struct -{ - unsigned char length[4]; - unsigned char version[2]; - unsigned char abbrev_offset[4]; - unsigned char word_size[1]; -} dwarf2_comp_unit_stream_t; - -typedef struct -{ - unsigned long length; - unsigned short version; - unsigned long abbrev_offset; - unsigned char word_size; -} dwarf2_comp_unit_t; - -typedef struct -{ - unsigned int length; - unsigned short version; - unsigned int prologue_length; - unsigned char min_insn_length; - unsigned char default_is_stmt; - int line_base; - unsigned char line_range; - unsigned char opcode_base; -} dwarf2_line_info_t; - typedef enum dwarf_tag_e { DW_TAG_padding = 0x00, diff --git a/reactos/dll/win32/dbghelp/minidump.c b/reactos/dll/win32/dbghelp/minidump.c index dd0cd8de551..52458f24f01 100644 --- a/reactos/dll/win32/dbghelp/minidump.c +++ b/reactos/dll/win32/dbghelp/minidump.c @@ -57,8 +57,8 @@ struct dump_context void* pcs_buffer; SYSTEM_PROCESS_INFORMATION* spi; /* module information */ - struct dump_module* module; - unsigned num_module; + struct dump_module* modules; + unsigned num_modules; /* exception information */ /* output information */ MINIDUMP_TYPE type; @@ -71,12 +71,12 @@ struct dump_context }; /****************************************************************** - * fetch_process_info + * fetch_processes_info * * reads system wide process information, and make spi point to the record * for process of id 'pid' */ -static BOOL fetch_process_info(struct dump_context* dc) +static BOOL fetch_processes_info(struct dump_context* dc) { ULONG buf_size = 0x1000; NTSTATUS nts; @@ -119,20 +119,50 @@ static void fetch_thread_stack(struct dump_context* dc, const void* teb_addr, { #ifdef __i386__ /* limiting the stack dumping to the size actually used */ - if (ctx->Esp) - mmd->StartOfMemoryRange = (ctx->Esp - 4); + if (ctx->Esp){ + + /* make sure ESP is within the established range of the stack. It could have + been clobbered by whatever caused the original exception. */ + if (ctx->Esp - 4 < (ULONG_PTR)tib.StackLimit || ctx->Esp - 4 > (ULONG_PTR)tib.StackBase) + mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + + else + mmd->StartOfMemoryRange = (ctx->Esp - 4); + } + else mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + #elif defined(__powerpc__) - if (ctx->Iar) - mmd->StartOfMemoryRange = ctx->Iar - 4; + if (ctx->Iar){ + + /* make sure IAR is within the established range of the stack. It could have + been clobbered by whatever caused the original exception. */ + if (ctx->Iar - 4 < (ULONG_PTR)tib.StackLimit || ctx->Iar - 4 > (ULONG_PTR)tib.StackBase) + mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + + else + mmd->StartOfMemoryRange = (ctx->Iar - 4); + } + else mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + #elif defined(__x86_64__) - if (ctx->Rsp) - mmd->StartOfMemoryRange = (ctx->Rsp - 8); + if (ctx->Rsp){ + + /* make sure RSP is within the established range of the stack. It could have + been clobbered by whatever caused the original exception. */ + if (ctx->Rsp - 8 < (ULONG_PTR)tib.StackLimit || ctx->Rsp - 8 > (ULONG_PTR)tib.StackBase) + mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + + else + mmd->StartOfMemoryRange = (ctx->Rsp - 8); + } + else mmd->StartOfMemoryRange = (ULONG_PTR)tib.StackLimit; + #else #error unsupported CPU #endif @@ -182,7 +212,6 @@ static BOOL fetch_thread_info(struct dump_context* dc, int thd_idx, if (tid != GetCurrentThreadId() && (mdThd->SuspendCount = SuspendThread(hThread)) != (DWORD)-1) { - mdThd->SuspendCount--; ctx->ContextFlags = CONTEXT_FULL; if (!GetThreadContext(hThread, ctx)) memset(ctx, 0, sizeof(*ctx)); @@ -193,6 +222,7 @@ static BOOL fetch_thread_info(struct dump_context* dc, int thd_idx, else if (tid == GetCurrentThreadId() && except) { CONTEXT lctx, *pctx; + mdThd->SuspendCount = 1; if (except->ClientPointers) { EXCEPTION_POINTERS ep; @@ -204,8 +234,11 @@ static BOOL fetch_thread_info(struct dump_context* dc, int thd_idx, pctx = &lctx; } else pctx = except->ExceptionPointers->ContextRecord; + + *ctx = *pctx; fetch_thread_stack(dc, tbi.TebBaseAddress, pctx, &mdThd->Stack); } + else mdThd->SuspendCount = 0; } } CloseHandle(hThread); @@ -221,24 +254,24 @@ static BOOL add_module(struct dump_context* dc, const WCHAR* name, DWORD base, DWORD size, DWORD timestamp, DWORD checksum, BOOL is_elf) { - if (!dc->module) - dc->module = HeapAlloc(GetProcessHeap(), 0, - ++dc->num_module * sizeof(*dc->module)); + if (!dc->modules) + dc->modules = HeapAlloc(GetProcessHeap(), 0, + ++dc->num_modules * sizeof(*dc->modules)); else - dc->module = HeapReAlloc(GetProcessHeap(), 0, dc->module, - ++dc->num_module * sizeof(*dc->module)); - if (!dc->module) return FALSE; + dc->modules = HeapReAlloc(GetProcessHeap(), 0, dc->modules, + ++dc->num_modules * sizeof(*dc->modules)); + if (!dc->modules) return FALSE; if (is_elf || !GetModuleFileNameExW(dc->hProcess, (HMODULE)base, - dc->module[dc->num_module - 1].name, - sizeof(dc->module[dc->num_module - 1].name) / sizeof(WCHAR))) - lstrcpynW(dc->module[dc->num_module - 1].name, name, - sizeof(dc->module[dc->num_module - 1].name) / sizeof(WCHAR)); - dc->module[dc->num_module - 1].base = base; - dc->module[dc->num_module - 1].size = size; - dc->module[dc->num_module - 1].timestamp = timestamp; - dc->module[dc->num_module - 1].checksum = checksum; - dc->module[dc->num_module - 1].is_elf = is_elf; + dc->modules[dc->num_modules - 1].name, + sizeof(dc->modules[dc->num_modules - 1].name) / sizeof(WCHAR))) + lstrcpynW(dc->modules[dc->num_modules - 1].name, name, + sizeof(dc->modules[dc->num_modules - 1].name) / sizeof(WCHAR)); + dc->modules[dc->num_modules - 1].base = base; + dc->modules[dc->num_modules - 1].size = size; + dc->modules[dc->num_modules - 1].timestamp = timestamp; + dc->modules[dc->num_modules - 1].checksum = checksum; + dc->modules[dc->num_modules - 1].is_elf = is_elf; return TRUE; } @@ -285,7 +318,7 @@ static BOOL fetch_elf_module_info_cb(const WCHAR* name, unsigned long base, return TRUE; } -static void fetch_module_info(struct dump_context* dc) +static void fetch_modules_info(struct dump_context* dc) { EnumerateLoadedModulesW64(dc->hProcess, fetch_pe_module_info_cb, dc); /* Since we include ELF modules in a separate stream from the regular PE ones, @@ -296,6 +329,28 @@ static void fetch_module_info(struct dump_context* dc) elf_enum_modules(dc->hProcess, fetch_elf_module_info_cb, dc); } +static void fetch_module_versioninfo(LPCWSTR filename, VS_FIXEDFILEINFO* ffi) +{ + DWORD handle; + DWORD sz; + static const WCHAR backslashW[] = {'\\', '\0'}; + + memset(ffi, 0, sizeof(*ffi)); + if ((sz = GetFileVersionInfoSizeW(filename, &handle))) + { + void* info = HeapAlloc(GetProcessHeap(), 0, sz); + if (info && GetFileVersionInfoW(filename, handle, sz, info)) + { + VS_FIXEDFILEINFO* ptr; + UINT len; + + if (VerQueryValueW(info, backslashW, (void*)&ptr, &len)) + memcpy(ffi, ptr, min(len, sizeof(*ffi))); + } + HeapFree(GetProcessHeap(), 0, info); + } +} + /****************************************************************** * add_memory_block * @@ -350,9 +405,8 @@ static void append(struct dump_context* dc, void* data, unsigned size) * * Write in File the exception information from pcs */ -static void dump_exception_info(struct dump_context* dc, - const MINIDUMP_EXCEPTION_INFORMATION* except, - DWORD *size) +static unsigned dump_exception_info(struct dump_context* dc, + const MINIDUMP_EXCEPTION_INFORMATION* except) { MINIDUMP_EXCEPTION_STREAM mdExcpt; EXCEPTION_RECORD rec, *prec; @@ -386,13 +440,13 @@ static void dump_exception_info(struct dump_context* dc, mdExcpt.ExceptionRecord.NumberParameters = prec->NumberParameters; mdExcpt.ExceptionRecord.__unusedAlignment = 0; for (i = 0; i < mdExcpt.ExceptionRecord.NumberParameters; i++) - mdExcpt.ExceptionRecord.ExceptionInformation[i] = (DWORD_PTR)prec->ExceptionInformation[i]; + mdExcpt.ExceptionRecord.ExceptionInformation[i] = prec->ExceptionInformation[i]; mdExcpt.ThreadContext.DataSize = sizeof(*pctx); mdExcpt.ThreadContext.Rva = dc->rva + sizeof(mdExcpt); append(dc, &mdExcpt, sizeof(mdExcpt)); - *size = sizeof(mdExcpt); append(dc, pctx, sizeof(*pctx)); + return sizeof(mdExcpt); } /****************************************************************** @@ -400,7 +454,7 @@ static void dump_exception_info(struct dump_context* dc, * * Write in File the modules from pcs */ -static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size) +static unsigned dump_modules(struct dump_context* dc, BOOL dump_elf) { MINIDUMP_MODULE mdModule; MINIDUMP_MODULE_LIST mdModuleList; @@ -409,11 +463,12 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size ULONG i, nmod; RVA rva_base; DWORD flags_out; + unsigned sz; - for (i = nmod = 0; i < dc->num_module; i++) + for (i = nmod = 0; i < dc->num_modules; i++) { - if ((dc->module[i].is_elf && dump_elf) || - (!dc->module[i].is_elf && !dump_elf)) + if ((dc->modules[i].is_elf && dump_elf) || + (!dc->modules[i].is_elf && !dump_elf)) nmod++; } @@ -423,12 +478,17 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size * size of mdModuleList * FIXME: if we don't ask for all modules in cb, we'll get a hole in the file */ + + /* the stream size is just the size of the module index. It does not include the data for the + names of each module. *Technically* the names are supposed to go into the common string table + in the minidump file. Since each string is referenced by RVA they can all safely be located + anywhere between streams in the file, so the end of this stream is sufficient. */ rva_base = dc->rva; - dc->rva += *size = sizeof(mdModuleList.NumberOfModules) + sizeof(mdModule) * nmod; - for (i = 0; i < dc->num_module; i++) + dc->rva += sz = sizeof(mdModuleList.NumberOfModules) + sizeof(mdModule) * nmod; + for (i = 0; i < dc->num_modules; i++) { - if ((dc->module[i].is_elf && !dump_elf) || - (!dc->module[i].is_elf && dump_elf)) + if ((dc->modules[i].is_elf && !dump_elf) || + (!dc->modules[i].is_elf && dump_elf)) continue; flags_out = ModuleWriteModule | ModuleWriteMiscRecord | ModuleWriteCvRecord; @@ -438,10 +498,10 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size flags_out |= ModuleWriteTlsData; if (dc->type & MiniDumpWithCodeSegs) flags_out |= ModuleWriteCodeSegs; - ms->Length = (lstrlenW(dc->module[i].name) + 1) * sizeof(WCHAR); + ms->Length = (lstrlenW(dc->modules[i].name) + 1) * sizeof(WCHAR); if (sizeof(ULONG) + ms->Length > sizeof(tmp)) FIXME("Buffer overflow!!!\n"); - lstrcpyW(ms->Buffer, dc->module[i].name); + lstrcpyW(ms->Buffer, dc->modules[i].name); if (dc->cb) { @@ -453,10 +513,10 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size cbin.CallbackType = ModuleCallback; cbin.u.Module.FullPath = ms->Buffer; - cbin.u.Module.BaseOfImage = dc->module[i].base; - cbin.u.Module.SizeOfImage = dc->module[i].size; - cbin.u.Module.CheckSum = dc->module[i].checksum; - cbin.u.Module.TimeDateStamp = dc->module[i].timestamp; + cbin.u.Module.BaseOfImage = dc->modules[i].base; + cbin.u.Module.SizeOfImage = dc->modules[i].size; + cbin.u.Module.CheckSum = dc->modules[i].checksum; + cbin.u.Module.TimeDateStamp = dc->modules[i].timestamp; memset(&cbin.u.Module.VersionInfo, 0, sizeof(cbin.u.Module.VersionInfo)); cbin.u.Module.CvRecord = NULL; cbin.u.Module.SizeOfCvRecord = 0; @@ -470,14 +530,14 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size } if (flags_out & ModuleWriteModule) { - mdModule.BaseOfImage = dc->module[i].base; - mdModule.SizeOfImage = dc->module[i].size; - mdModule.CheckSum = dc->module[i].checksum; - mdModule.TimeDateStamp = dc->module[i].timestamp; + mdModule.BaseOfImage = dc->modules[i].base; + mdModule.SizeOfImage = dc->modules[i].size; + mdModule.CheckSum = dc->modules[i].checksum; + mdModule.TimeDateStamp = dc->modules[i].timestamp; mdModule.ModuleNameRva = dc->rva; ms->Length -= sizeof(WCHAR); append(dc, ms, sizeof(ULONG) + ms->Length + sizeof(WCHAR)); - memset(&mdModule.VersionInfo, 0, sizeof(mdModule.VersionInfo)); /* FIXME */ + fetch_module_versioninfo(ms->Buffer, &mdModule.VersionInfo); mdModule.CvRecord.DataSize = 0; /* FIXME */ mdModule.CvRecord.Rva = 0; /* FIXME */ mdModule.MiscRecord.DataSize = 0; /* FIXME */ @@ -492,6 +552,8 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size } writeat(dc, rva_base, &mdModuleList.NumberOfModules, sizeof(mdModuleList.NumberOfModules)); + + return sz; } /****************************************************************** @@ -499,7 +561,7 @@ static void dump_modules(struct dump_context* dc, BOOL dump_elf, DWORD *size * * Dumps into File the information about the system */ -static void dump_system_info(struct dump_context* dc, DWORD *size) +static unsigned dump_system_info(struct dump_context* dc) { MINIDUMP_SYSTEM_INFO mdSysInfo; SYSTEM_INFO sysInfo; @@ -523,16 +585,21 @@ static void dump_system_info(struct dump_context* dc, DWORD *size) mdSysInfo.CSDVersionRva = dc->rva + sizeof(mdSysInfo); mdSysInfo.u1.Reserved1 = 0; + mdSysInfo.u1.s.SuiteMask = VER_SUITE_TERMINAL; + FIXME("fill in CPU vendorID and feature set\n"); memset(&mdSysInfo.Cpu, 0, sizeof(mdSysInfo.Cpu)); append(dc, &mdSysInfo, sizeof(mdSysInfo)); - *size = sizeof(mdSysInfo); + /* write the service pack version string after this stream. It is referenced within the + stream by its RVA in the file. */ slen = lstrlenW(osInfo.szCSDVersion) * sizeof(WCHAR); WriteFile(dc->hFile, &slen, sizeof(slen), &written, NULL); WriteFile(dc->hFile, osInfo.szCSDVersion, slen, &written, NULL); dc->rva += sizeof(ULONG) + slen; + + return sizeof(mdSysInfo); } /****************************************************************** @@ -540,9 +607,8 @@ static void dump_system_info(struct dump_context* dc, DWORD *size) * * Dumps into File the information about running threads */ -static void dump_threads(struct dump_context* dc, - const MINIDUMP_EXCEPTION_INFORMATION* except, - DWORD *size) +static unsigned dump_threads(struct dump_context* dc, + const MINIDUMP_EXCEPTION_INFORMATION* except) { MINIDUMP_THREAD mdThd; MINIDUMP_THREAD_LIST mdThdList; @@ -578,7 +644,7 @@ static void dump_threads(struct dump_context* dc, cbin.CallbackType = ThreadCallback; cbin.u.Thread.ThreadId = dc->spi->ti[i].dwThreadID; cbin.u.Thread.ThreadHandle = 0; /* FIXME */ - memcpy(&cbin.u.Thread.Context, &ctx, sizeof(CONTEXT)); + cbin.u.Thread.Context = ctx; cbin.u.Thread.SizeOfContext = sizeof(CONTEXT); cbin.u.Thread.StackBase = mdThd.Stack.StartOfMemoryRange; cbin.u.Thread.StackEnd = mdThd.Stack.StartOfMemoryRange + @@ -622,7 +688,8 @@ static void dump_threads(struct dump_context* dc, } writeat(dc, rva_base, &mdThdList.NumberOfThreads, sizeof(mdThdList.NumberOfThreads)); - *size = dc->rva - rva_base; + + return dc->rva - rva_base; } /****************************************************************** @@ -630,12 +697,12 @@ static void dump_threads(struct dump_context* dc, * * dumps information about the memory of the process (stack of the threads) */ -static void dump_memory_info(struct dump_context* dc, DWORD* size) +static unsigned dump_memory_info(struct dump_context* dc) { MINIDUMP_MEMORY_LIST mdMemList; MINIDUMP_MEMORY_DESCRIPTOR mdMem; DWORD written; - unsigned i, pos, len; + unsigned i, pos, len, sz; RVA rva_base; char tmp[1024]; @@ -643,9 +710,9 @@ static void dump_memory_info(struct dump_context* dc, DWORD* size) append(dc, &mdMemList.NumberOfMemoryRanges, sizeof(mdMemList.NumberOfMemoryRanges)); rva_base = dc->rva; - dc->rva += mdMemList.NumberOfMemoryRanges * sizeof(mdMem); - *size = sizeof(mdMemList.NumberOfMemoryRanges) + - mdMemList.NumberOfMemoryRanges * sizeof(mdMem); + sz = mdMemList.NumberOfMemoryRanges * sizeof(mdMem); + dc->rva += sz; + sz += sizeof(mdMemList.NumberOfMemoryRanges); for (i = 0; i < dc->num_mem; i++) { @@ -657,7 +724,7 @@ static void dump_memory_info(struct dump_context* dc, DWORD* size) { len = min(dc->mem[i].size - pos, sizeof(tmp)); if (ReadProcessMemory(dc->hProcess, - (void*)(ULONG)(dc->mem[i].base + pos), + (void*)(dc->mem[i].base + pos), tmp, len, NULL)) WriteFile(dc->hFile, tmp, len, &written, NULL); } @@ -668,9 +735,11 @@ static void dump_memory_info(struct dump_context* dc, DWORD* size) writeat(dc, dc->mem[i].rva, &mdMem.Memory.Rva, sizeof(mdMem.Memory.Rva)); } } + + return sz; } -static void dump_misc_info(struct dump_context* dc, DWORD* size) +static unsigned dump_misc_info(struct dump_context* dc) { MINIDUMP_MISC_INFO mmi; @@ -678,8 +747,12 @@ static void dump_misc_info(struct dump_context* dc, DWORD* size) mmi.Flags1 = MINIDUMP_MISC1_PROCESS_ID; mmi.ProcessId = dc->pid; /* FIXME: create/user/kernel time */ + mmi.ProcessCreateTime = 0; + mmi.ProcessKernelTime = 0; + mmi.ProcessUserTime = 0; + append(dc, &mmi, sizeof(mmi)); - *size = sizeof(mmi); + return sizeof(mmi); } /****************************************************************** @@ -692,6 +765,7 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, PMINIDUMP_USER_STREAM_INFORMATION UserStreamParam, PMINIDUMP_CALLBACK_INFORMATION CallbackParam) { + static const MINIDUMP_DIRECTORY emptyDir = {UnusedStream, {0, 0}}; MINIDUMP_HEADER mdHead; MINIDUMP_DIRECTORY mdDir; DWORD i, nStreams, idx_stream; @@ -700,21 +774,24 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, dc.hProcess = hProcess; dc.hFile = hFile; dc.pid = pid; - dc.module = NULL; - dc.num_module = 0; + dc.modules = NULL; + dc.num_modules = 0; dc.cb = CallbackParam; dc.type = DumpType; dc.mem = NULL; dc.num_mem = 0; dc.rva = 0; - if (!fetch_process_info(&dc)) return FALSE; - fetch_module_info(&dc); + if (!fetch_processes_info(&dc)) return FALSE; + fetch_modules_info(&dc); /* 1) init */ nStreams = 6 + (ExceptionParam ? 1 : 0) + (UserStreamParam ? UserStreamParam->UserStreamCount : 0); + /* pad the directory size to a multiple of 4 for alignment purposes */ + nStreams = (nStreams + 3) & ~3; + if (DumpType & MiniDumpWithDataSegs) FIXME("NIY MiniDumpWithDataSegs\n"); if (DumpType & MiniDumpWithFullMemory) @@ -728,12 +805,12 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, /* 2) write header */ mdHead.Signature = MINIDUMP_SIGNATURE; - mdHead.Version = MINIDUMP_VERSION; + mdHead.Version = MINIDUMP_VERSION; /* NOTE: native puts in an 'implementation specific' value in the high order word of this member */ mdHead.NumberOfStreams = nStreams; + mdHead.CheckSum = 0; /* native sets a 0 checksum in its files */ mdHead.StreamDirectoryRva = sizeof(mdHead); mdHead.u.TimeDateStamp = time(NULL); mdHead.Flags = DumpType; - mdHead.CheckSum = 0; append(&dc, &mdHead, sizeof(mdHead)); /* 3) write stream directories */ @@ -745,43 +822,37 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, /* must be first in minidump */ mdDir.StreamType = SystemInfoStream; mdDir.Location.Rva = dc.rva; - dump_system_info(&dc, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_system_info(&dc); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = ThreadListStream; mdDir.Location.Rva = dc.rva; - dump_threads(&dc, ExceptionParam, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_threads(&dc, ExceptionParam); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = ModuleListStream; mdDir.Location.Rva = dc.rva; - dump_modules(&dc, FALSE, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_modules(&dc, FALSE); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = 0xfff0; /* FIXME: this is part of MS reserved streams */ mdDir.Location.Rva = dc.rva; - dump_modules(&dc, TRUE, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_modules(&dc, TRUE); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = MemoryListStream; mdDir.Location.Rva = dc.rva; - dump_memory_info(&dc, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_memory_info(&dc); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); mdDir.StreamType = MiscInfoStream; mdDir.Location.Rva = dc.rva; - dump_misc_info(&dc, &mdDir.Location.DataSize); - writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), - &mdDir, sizeof(mdDir)); - - mdDir.StreamType = SystemInfoStream; - mdDir.Location.Rva = dc.rva; - dump_system_info(&dc, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_misc_info(&dc); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); @@ -790,7 +861,7 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, { mdDir.StreamType = ExceptionStream; mdDir.Location.Rva = dc.rva; - dump_exception_info(&dc, ExceptionParam, &mdDir.Location.DataSize); + mdDir.Location.DataSize = dump_exception_info(&dc, ExceptionParam); writeat(&dc, mdHead.StreamDirectoryRva + idx_stream++ * sizeof(mdDir), &mdDir, sizeof(mdDir)); } @@ -810,9 +881,14 @@ BOOL WINAPI MiniDumpWriteDump(HANDLE hProcess, DWORD pid, HANDLE hFile, } } + /* fill the remaining directory entries with 0's (unused stream types) */ + /* NOTE: this should always come last in the dump! */ + for (i = idx_stream; i < nStreams; i++) + writeat(&dc, mdHead.StreamDirectoryRva + i * sizeof(emptyDir), &emptyDir, sizeof(emptyDir)); + HeapFree(GetProcessHeap(), 0, dc.pcs_buffer); HeapFree(GetProcessHeap(), 0, dc.mem); - HeapFree(GetProcessHeap(), 0, dc.module); + HeapFree(GetProcessHeap(), 0, dc.modules); return TRUE; } diff --git a/reactos/dll/win32/dbghelp/module.c b/reactos/dll/win32/dbghelp/module.c index 8b2ece0be2f..a53e6b568b9 100644 --- a/reactos/dll/win32/dbghelp/module.c +++ b/reactos/dll/win32/dbghelp/module.c @@ -308,7 +308,7 @@ BOOL module_get_debug(struct module_pair* pair) idslW64.CheckSum = pair->effective->module.CheckSum; idslW64.TimeDateStamp = pair->effective->module.TimeDateStamp; memcpy(idslW64.FileName, pair->effective->module.ImageName, - sizeof(idslW64.FileName)); + sizeof(pair->effective->module.ImageName)); idslW64.Reparse = FALSE; idslW64.hFile = INVALID_HANDLE_VALUE; @@ -555,7 +555,7 @@ DWORD64 WINAPI SymLoadModuleExW(HANDLE hProcess, HANDLE hFile, PCWSTR wImageNam if (wModuleName) module_set_module(module, wModuleName); lstrcpynW(module->module.ImageName, wImageName, - sizeof(module->module.ImageName) / sizeof(CHAR)); + sizeof(module->module.ImageName) / sizeof(WCHAR)); return module->module.BaseOfImage; } @@ -895,7 +895,12 @@ BOOL WINAPI SymGetModuleInfo64(HANDLE hProcess, DWORD64 dwAddr, IMAGEHLP_MODULE64 mi64; IMAGEHLP_MODULEW64 miw64; - if (sizeof(mi64) < ModuleInfo->SizeOfStruct) FIXME("Wrong size\n"); + if (sizeof(mi64) < ModuleInfo->SizeOfStruct) + { + SetLastError(ERROR_MOD_NOT_FOUND); /* NOTE: native returns this error */ + WARN("Wrong size %u\n", ModuleInfo->SizeOfStruct); + return FALSE; + } miw64.SizeOfStruct = sizeof(miw64); if (!SymGetModuleInfoW64(hProcess, dwAddr, &miw64)) return FALSE; diff --git a/reactos/dll/win32/dbghelp/msc.c b/reactos/dll/win32/dbghelp/msc.c index 5e6f8a84bcf..d04ebfb2c5c 100644 --- a/reactos/dll/win32/dbghelp/msc.c +++ b/reactos/dll/win32/dbghelp/msc.c @@ -32,6 +32,8 @@ * Add symbol size to internal symbol table. */ +#define NONAMELESSUNION + #include "config.h" #include "wine/port.h" @@ -125,12 +127,21 @@ static void codeview_init_basic_types(struct module* module) cv_basic_types[T_USHORT] = &symt_new_basic(module, btUInt, "unsigned short", 2)->symt; cv_basic_types[T_ULONG] = &symt_new_basic(module, btUInt, "unsigned long", 4)->symt; cv_basic_types[T_UQUAD] = &symt_new_basic(module, btUInt, "unsigned long long", 8)->symt; + cv_basic_types[T_BOOL08] = &symt_new_basic(module, btBool, "BOOL08", 1)->symt; + cv_basic_types[T_BOOL16] = &symt_new_basic(module, btBool, "BOOL16", 2)->symt; + cv_basic_types[T_BOOL32] = &symt_new_basic(module, btBool, "BOOL32", 4)->symt; + cv_basic_types[T_BOOL64] = &symt_new_basic(module, btBool, "BOOL64", 8)->symt; cv_basic_types[T_REAL32] = &symt_new_basic(module, btFloat, "float", 4)->symt; cv_basic_types[T_REAL64] = &symt_new_basic(module, btFloat, "double", 8)->symt; cv_basic_types[T_RCHAR] = &symt_new_basic(module, btInt, "signed char", 1)->symt; cv_basic_types[T_WCHAR] = &symt_new_basic(module, btWChar, "wchar_t", 2)->symt; + cv_basic_types[T_INT2] = &symt_new_basic(module, btInt, "INT2", 2)->symt; + cv_basic_types[T_UINT2] = &symt_new_basic(module, btUInt, "UINT2", 2)->symt; cv_basic_types[T_INT4] = &symt_new_basic(module, btInt, "INT4", 4)->symt; cv_basic_types[T_UINT4] = &symt_new_basic(module, btUInt, "UINT4", 4)->symt; + cv_basic_types[T_INT8] = &symt_new_basic(module, btInt, "INT8", 8)->symt; + cv_basic_types[T_UINT8] = &symt_new_basic(module, btUInt, "UINT8", 8)->symt; + cv_basic_types[T_HRESULT]= &symt_new_basic(module, btUInt, "HRESULT", 4)->symt; cv_basic_types[T_32PVOID] = &symt_new_pointer(module, cv_basic_types[T_VOID])->symt; cv_basic_types[T_32PCHAR] = &symt_new_pointer(module, cv_basic_types[T_CHAR])->symt; @@ -141,12 +152,21 @@ static void codeview_init_basic_types(struct module* module) cv_basic_types[T_32PUSHORT] = &symt_new_pointer(module, cv_basic_types[T_USHORT])->symt; cv_basic_types[T_32PULONG] = &symt_new_pointer(module, cv_basic_types[T_ULONG])->symt; cv_basic_types[T_32PUQUAD] = &symt_new_pointer(module, cv_basic_types[T_UQUAD])->symt; + cv_basic_types[T_32PBOOL08] = &symt_new_pointer(module, cv_basic_types[T_BOOL08])->symt; + cv_basic_types[T_32PBOOL16] = &symt_new_pointer(module, cv_basic_types[T_BOOL16])->symt; + cv_basic_types[T_32PBOOL32] = &symt_new_pointer(module, cv_basic_types[T_BOOL32])->symt; + cv_basic_types[T_32PBOOL64] = &symt_new_pointer(module, cv_basic_types[T_BOOL64])->symt; cv_basic_types[T_32PREAL32] = &symt_new_pointer(module, cv_basic_types[T_REAL32])->symt; cv_basic_types[T_32PREAL64] = &symt_new_pointer(module, cv_basic_types[T_REAL64])->symt; cv_basic_types[T_32PRCHAR] = &symt_new_pointer(module, cv_basic_types[T_RCHAR])->symt; cv_basic_types[T_32PWCHAR] = &symt_new_pointer(module, cv_basic_types[T_WCHAR])->symt; + cv_basic_types[T_32PINT2] = &symt_new_pointer(module, cv_basic_types[T_INT2])->symt; + cv_basic_types[T_32PUINT2] = &symt_new_pointer(module, cv_basic_types[T_UINT2])->symt; cv_basic_types[T_32PINT4] = &symt_new_pointer(module, cv_basic_types[T_INT4])->symt; cv_basic_types[T_32PUINT4] = &symt_new_pointer(module, cv_basic_types[T_UINT4])->symt; + cv_basic_types[T_32PINT8] = &symt_new_pointer(module, cv_basic_types[T_INT8])->symt; + cv_basic_types[T_32PUINT8] = &symt_new_pointer(module, cv_basic_types[T_UINT8])->symt; + cv_basic_types[T_32PHRESULT]= &symt_new_pointer(module, cv_basic_types[T_HRESULT])->symt; } static int numeric_leaf(int* value, const unsigned short int* leaf) @@ -391,7 +411,7 @@ static void* codeview_cast_symt(struct symt* symt, enum SymTagEnum tag) } static struct symt* codeview_fetch_type(struct codeview_type_parse* ctp, - unsigned typeno) + unsigned typeno, BOOL details) { struct symt* symt; const union codeview_type* p; @@ -405,7 +425,7 @@ static struct symt* codeview_fetch_type(struct codeview_type_parse* ctp, FIXME("Cannot locate type %x\n", typeno); return NULL; } - symt = codeview_parse_one_type(ctp, typeno, p, FALSE); + symt = codeview_parse_one_type(ctp, typeno, p, details); if (!symt) FIXME("Couldn't load forward type %x\n", typeno); return symt; } @@ -421,7 +441,7 @@ static struct symt* codeview_add_type_pointer(struct codeview_type_parse* ctp, existing = codeview_cast_symt(existing, SymTagPointerType); return existing; } - pointee = codeview_fetch_type(ctp, pointee_type); + pointee = codeview_fetch_type(ctp, pointee_type, FALSE); return &symt_new_pointer(ctp->module, pointee)->symt; } @@ -431,8 +451,8 @@ static struct symt* codeview_add_type_array(struct codeview_type_parse* ctp, unsigned int indextype, unsigned int arr_len) { - struct symt* elem = codeview_fetch_type(ctp, elemtype); - struct symt* index = codeview_fetch_type(ctp, indextype); + struct symt* elem = codeview_fetch_type(ctp, elemtype, FALSE); + struct symt* index = codeview_fetch_type(ctp, indextype, FALSE); DWORD arr_max = 0; if (elem) @@ -504,19 +524,19 @@ static void codeview_add_udt_element(struct codeview_type_parse* ctp, { case LF_BITFIELD_V1: symt_add_udt_element(ctp->module, symt, name, - codeview_fetch_type(ctp, cv_type->bitfield_v1.type), + codeview_fetch_type(ctp, cv_type->bitfield_v1.type, FALSE), cv_type->bitfield_v1.bitoff, cv_type->bitfield_v1.nbits); return; case LF_BITFIELD_V2: symt_add_udt_element(ctp->module, symt, name, - codeview_fetch_type(ctp, cv_type->bitfield_v2.type), + codeview_fetch_type(ctp, cv_type->bitfield_v2.type, FALSE), cv_type->bitfield_v2.bitoff, cv_type->bitfield_v2.nbits); return; } } - subtype = codeview_fetch_type(ctp, type); + subtype = codeview_fetch_type(ctp, type, FALSE); if (subtype) { @@ -641,6 +661,11 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, ptr += 2 + 4 + 2 + (1 + type->stmember_v2.p_name.namelen); break; + case LF_STMEMBER_V3: + /* FIXME: ignored for now */ + ptr += 2 + 4 + 2 + (strlen(type->stmember_v3.name) + 1); + break; + case LF_METHOD_V1: /* FIXME: ignored for now */ ptr += 2 + 2 + 2 + (1 + type->method_v1.p_name.namelen); @@ -651,6 +676,11 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, ptr += 2 + 2 + 4 + (1 + type->method_v2.p_name.namelen); break; + case LF_METHOD_V3: + /* FIXME: ignored for now */ + ptr += 2 + 2 + 4 + (strlen(type->method_v3.name) + 1); + break; + case LF_NESTTYPE_V1: /* FIXME: ignored for now */ ptr += 2 + 2 + (1 + type->nesttype_v1.p_name.namelen); @@ -661,6 +691,11 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, ptr += 2 + 2 + 4 + (1 + type->nesttype_v2.p_name.namelen); break; + case LF_NESTTYPE_V3: + /* FIXME: ignored for now */ + ptr += 2 + 2 + 4 + (strlen(type->nesttype_v3.name) + 1); + break; + case LF_VFUNCTAB_V1: /* FIXME: ignored for now */ ptr += 2 + 2; @@ -699,6 +734,20 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, } break; + case LF_ONEMETHOD_V3: + /* FIXME: ignored for now */ + switch ((type->onemethod_v3.attribute >> 2) & 7) + { + case 4: case 6: /* (pure) introducing virtual method */ + ptr += 2 + 2 + 4 + 4 + (strlen(type->onemethod_virt_v3.name) + 1); + break; + + default: + ptr += 2 + 2 + 4 + (strlen(type->onemethod_v3.name) + 1); + break; + } + break; + default: FIXME("Unsupported type %04x in STRUCT field list\n", type->generic.id); return FALSE; @@ -711,7 +760,8 @@ static int codeview_add_type_struct_field_list(struct codeview_type_parse* ctp, static struct symt* codeview_add_type_enum(struct codeview_type_parse* ctp, struct symt* existing, const char* name, - unsigned fieldlistno) + unsigned fieldlistno, + unsigned basetype) { struct symt_enum* symt; @@ -722,7 +772,8 @@ static struct symt* codeview_add_type_enum(struct codeview_type_parse* ctp, } else { - symt = symt_new_enum(ctp->module, name); + symt = symt_new_enum(ctp->module, name, + codeview_fetch_type(ctp, basetype, FALSE)); if (fieldlistno) { const union codeview_reftype* fieldlist; @@ -775,7 +826,7 @@ static void codeview_add_func_signature_args(struct codeview_type_parse* ctp, { const union codeview_reftype* reftype; - sym->rettype = codeview_fetch_type(ctp, ret_type); + sym->rettype = codeview_fetch_type(ctp, ret_type, FALSE); if (args_list && (reftype = codeview_jump_to_type(ctp, args_list))) { int i; @@ -784,12 +835,12 @@ static void codeview_add_func_signature_args(struct codeview_type_parse* ctp, case LF_ARGLIST_V1: for (i = 0; i < reftype->arglist_v1.num; i++) symt_add_function_signature_parameter(ctp->module, sym, - codeview_fetch_type(ctp, reftype->arglist_v1.args[i])); + codeview_fetch_type(ctp, reftype->arglist_v1.args[i], FALSE)); break; case LF_ARGLIST_V2: for (i = 0; i < reftype->arglist_v2.num; i++) symt_add_function_signature_parameter(ctp->module, sym, - codeview_fetch_type(ctp, reftype->arglist_v2.args[i])); + codeview_fetch_type(ctp, reftype->arglist_v2.args[i], FALSE)); break; default: FIXME("Unexpected leaf %x for signature's pmt\n", reftype->generic.id); @@ -812,8 +863,8 @@ static struct symt* codeview_parse_one_type(struct codeview_type_parse* ctp, switch (type->generic.id) { case LF_MODIFIER_V1: - /* FIXME: we don't handle modifiers, - * but readd previous type on the curr_type + /* FIXME: we don't handle modifiers, + * but read previous type on the curr_type */ WARN("Modifier on %x: %s%s%s%s\n", type->modifier_v1.type, @@ -821,9 +872,7 @@ static struct symt* codeview_parse_one_type(struct codeview_type_parse* ctp, type->modifier_v1.attribute & 0x02 ? "volatile " : "", type->modifier_v1.attribute & 0x04 ? "unaligned " : "", type->modifier_v1.attribute & ~0x07 ? "unknown " : ""); - if (!(symt = codeview_get_type(type->modifier_v1.type, TRUE))) - symt = codeview_parse_one_type(ctp, type->modifier_v1.type, - codeview_jump_to_type(ctp, type->modifier_v1.type), details); + symt = codeview_fetch_type(ctp, type->modifier_v1.type, details); break; case LF_MODIFIER_V2: /* FIXME: we don't handle modifiers, but readd previous type on the curr_type */ @@ -833,9 +882,7 @@ static struct symt* codeview_parse_one_type(struct codeview_type_parse* ctp, type->modifier_v2.attribute & 0x02 ? "volatile " : "", type->modifier_v2.attribute & 0x04 ? "unaligned " : "", type->modifier_v2.attribute & ~0x07 ? "unknown " : ""); - if (!(symt = codeview_get_type(type->modifier_v2.type, TRUE))) - symt = codeview_parse_one_type(ctp, type->modifier_v2.type, - codeview_jump_to_type(ctp, type->modifier_v2.type), details); + symt = codeview_fetch_type(ctp, type->modifier_v2.type, details); break; case LF_POINTER_V1: @@ -965,18 +1012,21 @@ static struct symt* codeview_parse_one_type(struct codeview_type_parse* ctp, case LF_ENUM_V1: symt = codeview_add_type_enum(ctp, existing, terminate_string(&type->enumeration_v1.p_name), - type->enumeration_v1.fieldlist); + type->enumeration_v1.fieldlist, + type->enumeration_v1.type); break; case LF_ENUM_V2: symt = codeview_add_type_enum(ctp, existing, terminate_string(&type->enumeration_v2.p_name), - type->enumeration_v2.fieldlist); + type->enumeration_v2.fieldlist, + type->enumeration_v2.type); break; case LF_ENUM_V3: symt = codeview_add_type_enum(ctp, existing, type->enumeration_v3.name, - type->enumeration_v3.fieldlist); + type->enumeration_v3.fieldlist, + type->enumeration_v3.type); break; case LF_PROCEDURE_V1: @@ -1068,8 +1118,8 @@ static int codeview_parse_type_table(struct codeview_type_parse* ctp) * X 1500-150d for V3 types * 8000-8010 for numeric leafes */ - if (type->generic.id & 0x8600) continue; - codeview_parse_one_type(ctp, curr_type, type, TRUE); + if (!(type->generic.id & 0x8600) || (type->generic.id & 0x0100)) + codeview_parse_one_type(ctp, curr_type, type, TRUE); } return TRUE; @@ -1272,6 +1322,7 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root const union codeview_symbol* sym = (const union codeview_symbol*)(root + i); length = sym->generic.len + 2; if (i + length > size) break; + if (!sym->generic.id || length < 4) break; if (length & 3) FIXME("unpadded len %u\n", length); switch (sym->generic.id) @@ -1433,6 +1484,17 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root codeview_get_type(sym->stack_v3.symtype, FALSE), sym->stack_v3.name); break; + case S_BPREL_XXXX_V3: + loc.kind = loc_regrel; + loc.reg = 0; /* FIXME */ + loc.offset = sym->stack_xxxx_v3.offset; + WARN("Supposed stack variable %s (%d)\n", sym->stack_xxxx_v3.name, sym->stack_xxxx_v3.unknown); + symt_add_func_local(msc_dbg->module, curr_func, + sym->stack_xxxx_v3.offset > 0 ? DataIsParam : DataIsLocal, + &loc, block, + codeview_get_type(sym->stack_xxxx_v3.symtype, FALSE), + sym->stack_xxxx_v3.name); + break; case S_REGISTER_V1: loc.kind = loc_register; @@ -1452,6 +1514,15 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root block, codeview_get_type(sym->register_v2.type, FALSE), terminate_string(&sym->register_v2.p_name)); break; + case S_REGISTER_V3: + loc.kind = loc_register; + loc.reg = sym->register_v3.reg; + loc.offset = 0; + symt_add_func_local(msc_dbg->module, curr_func, + DataIsLocal, &loc, + block, codeview_get_type(sym->register_v3.type, FALSE), + sym->register_v3.name); + break; case S_BLOCK_V1: block = symt_open_func_block(msc_dbg->module, curr_func, block, @@ -1490,7 +1561,7 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root while (*ptr1) { ptr2 = ptr1 + strlen(ptr1) + 1; - TRACE("\t%s => %s\n", ptr1, ptr2); + TRACE("\t%s => %s\n", ptr1, debugstr_a(ptr2)); ptr1 = ptr2 + strlen(ptr2) + 1; } } @@ -1504,7 +1575,7 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root while (*ptr1) { ptr2 = ptr1 + strlen(ptr1) + 1; - TRACE("\t%s => %s\n", ptr1, ptr2); + TRACE("\t%s => %s\n", ptr1, debugstr_a(ptr2)); ptr1 = ptr2 + strlen(ptr2) + 1; } } @@ -1525,9 +1596,9 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root symt_add_function_point(msc_dbg->module, curr_func, SymTagLabel, &loc, terminate_string(&sym->label_v1.p_name)); } - else - FIXME("No current function for label %s\n", - terminate_string(&sym->label_v1.p_name)); + else symt_new_label(msc_dbg->module, compiland, + terminate_string(&sym->label_v1.p_name), + codeview_get_address(msc_dbg, sym->label_v1.segment, sym->label_v1.offset)); break; case S_LABEL_V3: if (curr_func) @@ -1537,8 +1608,8 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root symt_add_function_point(msc_dbg->module, curr_func, SymTagLabel, &loc, sym->label_v3.name); } - else - FIXME("No current function for label %s\n", sym->label_v3.name); + else symt_new_label(msc_dbg->module, compiland, sym->label_v3.name, + codeview_get_address(msc_dbg, sym->label_v3.segment, sym->label_v3.offset)); break; case S_CONSTANT_V1: @@ -1651,6 +1722,8 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root break; case S_PUB_FUNC1_V3: case S_PUB_FUNC2_V3: /* using a data_v3 isn't what we'd expect */ +#if 0 + /* FIXME: this is plain wrong (from a simple test) */ if (!(dbghelp_options & SYMOPT_NO_PUBLICS)) { symt_new_public(msc_dbg->module, compiland, @@ -1658,6 +1731,7 @@ static int codeview_snarf(const struct msc_debug_info* msc_dbg, const BYTE* root codeview_get_address(msc_dbg, sym->data_v3.segment, sym->data_v3.offset), 1, TRUE /* FIXME */, TRUE); } +#endif break; case S_MSTOOL_V3: /* just to silence a few warnings */ diff --git a/reactos/dll/win32/dbghelp/path.c b/reactos/dll/win32/dbghelp/path.c index 2e191af791d..7057e265c3e 100644 --- a/reactos/dll/win32/dbghelp/path.c +++ b/reactos/dll/win32/dbghelp/path.c @@ -57,7 +57,7 @@ HANDLE WINAPI FindDebugInfoFile(PCSTR FileName, PCSTR SymbolPath, PSTR DebugFile { HANDLE h; - h = CreateFileA(DebugFilePath, GENERIC_READ, FILE_SHARE_READ, NULL, + h = CreateFileA(FileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (h == INVALID_HANDLE_VALUE) { @@ -79,7 +79,7 @@ HANDLE WINAPI FindDebugInfoFileEx(PCSTR FileName, PCSTR SymbolPath, PVOID CallerData) { FIXME("(%s %s %p %p %p): stub\n", - FileName, SymbolPath, DebugFilePath, Callback, CallerData); + debugstr_a(FileName), debugstr_a(SymbolPath), debugstr_a(DebugFilePath), Callback, CallerData); return NULL; } @@ -191,7 +191,7 @@ BOOL WINAPI SymMatchFileName(PCSTR file, PCSTR match, PCSTR fptr; PCSTR mptr; - TRACE("(%s %s %p %p)\n", file, match, filestop, matchstop); + TRACE("(%s %s %p %p)\n", debugstr_a(file), debugstr_a(match), filestop, matchstop); fptr = file + strlen(file) - 1; mptr = match + strlen(match) - 1; @@ -217,7 +217,7 @@ static BOOL do_searchW(PCWSTR file, PWSTR buffer, BOOL recurse, BOOL found = FALSE; static const WCHAR S_AllW[] = {'*','.','*','\0'}; static const WCHAR S_DotW[] = {'.','\0'}; - static const WCHAR S_DotDotW[] = {'.','\0'}; + static const WCHAR S_DotDotW[] = {'.','.','\0'}; pos = strlenW(buffer); if (buffer[pos - 1] != '\\') buffer[pos++] = '\\'; @@ -478,7 +478,7 @@ BOOL WINAPI SymFindFileInPathW(HANDLE hProcess, PCWSTR searchPath, PCWSTR full_p WCHAR* ptr; const WCHAR* filename; - TRACE("(%p %s %s %p %08x %08x %08x %p %p %p)\n", + TRACE("(hProcess = %p, searchPath = %s, full_path = %s, id = %p, two = 0x%08x, three = 0x%08x, flags = 0x%08x, buffer = %p, cb = %p, user = %p)\n", hProcess, debugstr_w(searchPath), debugstr_w(full_path), id, two, three, flags, buffer, cb, user); diff --git a/reactos/dll/win32/dbghelp/pe_module.c b/reactos/dll/win32/dbghelp/pe_module.c index 3027f5ba00c..283962cb367 100644 --- a/reactos/dll/win32/dbghelp/pe_module.c +++ b/reactos/dll/win32/dbghelp/pe_module.c @@ -22,6 +22,8 @@ */ #include "config.h" +#include "wine/port.h" + #include #include #include @@ -40,7 +42,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp); * its debugging information) */ static BOOL pe_load_stabs(const struct process* pcs, struct module* module, - const void* mapping, IMAGE_NT_HEADERS* nth) + void* mapping, IMAGE_NT_HEADERS* nth) { IMAGE_SECTION_HEADER* section; int i, stabsize = 0, stabstrsize = 0; @@ -67,11 +69,13 @@ static BOOL pe_load_stabs(const struct process* pcs, struct module* module, { ret = stabs_parse(module, module->module.BaseOfImage - nth->OptionalHeader.ImageBase, - RtlImageRvaToVa(nth, (void*)mapping, stabs, NULL), + RtlImageRvaToVa(nth, mapping, stabs, NULL), stabsize, - RtlImageRvaToVa(nth, (void*)mapping, stabstr, NULL), + RtlImageRvaToVa(nth, mapping, stabstr, NULL), stabstrsize); } + + TRACE("%s the STABS debug info\n", ret ? "successfully loaded" : "failed to load"); return ret; } @@ -96,7 +100,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, const IMAGE_DEBUG_DIRECTORY* dbg; BOOL ret = FALSE; - WINE_TRACE("Processing DBG file %s\n", dbg_name); + WINE_TRACE("Processing DBG file %s\n", debugstr_a(dbg_name)); if (SymFindFileInPath(pcs->handle, NULL, dbg_name, NULL, 0, 0, 0, tmp, dbg_match, NULL) && (hFile = CreateFileA(tmp, GENERIC_READ, FILE_SHARE_READ, NULL, @@ -108,7 +112,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, if (hdr->TimeDateStamp != timestamp) { WINE_ERR("Warning - %s has incorrect internal timestamp\n", - dbg_name); + debugstr_a(dbg_name)); /* * Well, sometimes this happens to DBG files which ARE REALLY the * right .DBG files but nonetheless this check fails. Anyway, @@ -136,7 +140,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, ERR("Wrong signature in .DBG file %s\n", debugstr_a(tmp)); } else - WINE_ERR("-Unable to peruse .DBG file %s (%s)\n", dbg_name, debugstr_a(tmp)); + WINE_ERR("-Unable to peruse .DBG file %s (%s)\n", debugstr_a(dbg_name), debugstr_a(tmp)); if (dbg_mapping) UnmapViewOfFile(dbg_mapping); if (hMap) CloseHandle(hMap); @@ -151,7 +155,7 @@ static BOOL pe_load_dbg_file(const struct process* pcs, struct module* module, */ static BOOL pe_load_msc_debug_info(const struct process* pcs, struct module* module, - const void* mapping, IMAGE_NT_HEADERS* nth) + void* mapping, IMAGE_NT_HEADERS* nth) { BOOL ret = FALSE; const IMAGE_DATA_DIRECTORY* dir; @@ -163,7 +167,7 @@ static BOOL pe_load_msc_debug_info(const struct process* pcs, nDbg = dir->Size / sizeof(IMAGE_DEBUG_DIRECTORY); if (!nDbg) return FALSE; - dbg = RtlImageRvaToVa(nth, (void*)mapping, dir->VirtualAddress, NULL); + dbg = RtlImageRvaToVa(nth, mapping, dir->VirtualAddress, NULL); /* Parse debug directory */ if (nth->FileHeader.Characteristics & IMAGE_FILE_DEBUG_STRIPPED) @@ -199,7 +203,7 @@ static BOOL pe_load_msc_debug_info(const struct process* pcs, */ static BOOL pe_load_export_debug_info(const struct process* pcs, struct module* module, - const void* mapping, IMAGE_NT_HEADERS* nth) + void* mapping, IMAGE_NT_HEADERS* nth) { unsigned int i; const IMAGE_EXPORT_DIRECTORY* exports; @@ -229,13 +233,13 @@ static BOOL pe_load_export_debug_info(const struct process* pcs, for (i = 0; i < nth->FileHeader.NumberOfSections; i++, section++) { symt_new_public(module, NULL, section->Name, - RtlImageRvaToVa(nth, (void*)mapping, section->VirtualAddress, NULL), + RtlImageRvaToVa(nth, mapping, section->VirtualAddress, NULL), 1, TRUE /* FIXME */, TRUE /* FIXME */); } #endif /* Add exported functions */ - if ((exports = RtlImageDirectoryEntryToData((void*)mapping, FALSE, + if ((exports = RtlImageDirectoryEntryToData(mapping, FALSE, IMAGE_DIRECTORY_ENTRY_EXPORT, &size))) { const WORD* ordinals = NULL; @@ -244,9 +248,9 @@ static BOOL pe_load_export_debug_info(const struct process* pcs, unsigned int j; char buffer[16]; - functions = RtlImageRvaToVa(nth, (void*)mapping, exports->AddressOfFunctions, NULL); - ordinals = RtlImageRvaToVa(nth, (void*)mapping, exports->AddressOfNameOrdinals, NULL); - names = RtlImageRvaToVa(nth, (void*)mapping, exports->AddressOfNames, NULL); + functions = RtlImageRvaToVa(nth, mapping, exports->AddressOfFunctions, NULL); + ordinals = RtlImageRvaToVa(nth, mapping, exports->AddressOfNameOrdinals, NULL); + names = RtlImageRvaToVa(nth, mapping, exports->AddressOfNames, NULL); if (functions && ordinals && names) { @@ -254,7 +258,7 @@ static BOOL pe_load_export_debug_info(const struct process* pcs, { if (!names[i]) continue; symt_new_public(module, NULL, - RtlImageRvaToVa(nth, (void*)mapping, names[i], NULL), + RtlImageRvaToVa(nth, mapping, names[i], NULL), base + functions[ordinals[i]], 1, TRUE /* FIXME */, TRUE /* FIXME */); } @@ -369,6 +373,8 @@ struct module* pe_load_native_module(struct process* pcs, const WCHAR* name, else pe_load_debug_info(pcs, module); } + else + ERR("could not load the module '%s'\n", debugstr_w(loaded_name)); } UnmapViewOfFile(mapping); } @@ -417,3 +423,50 @@ struct module* pe_load_builtin_module(struct process* pcs, const WCHAR* name, } return module; } + +/*********************************************************************** + * ImageDirectoryEntryToDataEx (DBGHELP.@) + * + * Search for specified directory in PE image + * + * PARAMS + * + * base [in] Image base address + * image [in] TRUE - image has been loaded by loader, FALSE - raw file image + * dir [in] Target directory index + * size [out] Receives directory size + * section [out] Receives pointer to section header of section containing directory data + * + * RETURNS + * Success: pointer to directory data + * Failure: NULL + * + */ +PVOID WINAPI ImageDirectoryEntryToDataEx( PVOID base, BOOLEAN image, USHORT dir, PULONG size, PIMAGE_SECTION_HEADER *section ) +{ + const IMAGE_NT_HEADERS *nt; + DWORD addr; + + *size = 0; + if (section) *section = NULL; + + if (!(nt = RtlImageNtHeader( base ))) return NULL; + if (dir >= nt->OptionalHeader.NumberOfRvaAndSizes) return NULL; + if (!(addr = nt->OptionalHeader.DataDirectory[dir].VirtualAddress)) return NULL; + + *size = nt->OptionalHeader.DataDirectory[dir].Size; + if (image || addr < nt->OptionalHeader.SizeOfHeaders) return (char *)base + addr; + + return RtlImageRvaToVa( nt, (HMODULE)base, addr, section ); +} + +/*********************************************************************** + * ImageDirectoryEntryToData (DBGHELP.@) + * + * NOTES + * See ImageDirectoryEntryToDataEx + */ +PVOID WINAPI ImageDirectoryEntryToData( PVOID base, BOOLEAN image, USHORT dir, PULONG size ) +{ + return ImageDirectoryEntryToDataEx( base, image, dir, size, NULL ); +} diff --git a/reactos/dll/win32/dbghelp/stabs.c b/reactos/dll/win32/dbghelp/stabs.c index 8f651b18cba..9955b7eac62 100644 --- a/reactos/dll/win32/dbghelp/stabs.c +++ b/reactos/dll/win32/dbghelp/stabs.c @@ -30,6 +30,7 @@ */ #include "config.h" +#include "wine/port.h" #include #include @@ -498,7 +499,7 @@ static int stabs_pts_read_range(struct ParseTypedefData* ptd, const char* typena PTS_ABORTIF(ptd, *ptd->ptr++ != ';'); /* ';' */ /* basically, we don't use ref... in some cases, for example, float is declared - * as a derivated type of int... which won't help us... so we guess the types + * as a derived type of int... which won't help us... so we guess the types * from the various formats */ if (lo.sign == 0 && hi.sign < 0) @@ -793,9 +794,9 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ struct symt** ret_dt) { int idx; - long sz = -1; - struct symt* new_dt = NULL; /* newly created data type */ - struct symt* ref_dt; /* referenced data type (pointer...) */ + long sz = -1; + struct symt* new_dt = NULL; /* newly created data type */ + struct symt* ref_dt; /* referenced data type (pointer...) */ long filenr1, subnr1, tmp; /* things are a bit complicated because of the way the typedefs are stored inside @@ -807,7 +808,7 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ while (*ptd->ptr == '=') { ptd->ptr++; - PTS_ABORTIF(ptd, new_dt != btNoType); + PTS_ABORTIF(ptd, new_dt != NULL); /* first handle attribute if any */ switch (*ptd->ptr) @@ -856,7 +857,8 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ new_dt = &symt_new_function_signature(ptd->module, ref_dt, -1)->symt; break; case 'e': - new_dt = &symt_new_enum(ptd->module, typename)->symt; + stabs_get_basic(ptd, 1 /* int */, &ref_dt); + new_dt = &symt_new_enum(ptd->module, typename, ref_dt)->symt; PTS_ABORTIF(ptd, stabs_pts_read_enum(ptd, (struct symt_enum*)new_dt) == -1); break; case 's': @@ -910,7 +912,8 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ switch (tmp) { case 'e': - new_dt = &symt_new_enum(ptd->module, ptd->buf + idx)->symt; + stabs_get_basic(ptd, 1 /* int */, &ref_dt); + new_dt = &symt_new_enum(ptd->module, ptd->buf + idx, ref_dt)->symt; break; case 's': new_dt = &symt_new_udt(ptd->module, ptd->buf + idx, 0, UdtStruct)->symt; @@ -1000,7 +1003,7 @@ static int stabs_pts_read_type_def(struct ParseTypedefData* ptd, const char* typ *stabs_find_ref(filenr1, subnr1) = *ret_dt = new_dt; - TRACE("Adding (%ld,%ld) %s\n", filenr1, subnr1, typename); + TRACE("Adding (%ld,%ld) %s\n", filenr1, subnr1, debugstr_a(typename)); return 0; } @@ -1145,7 +1148,7 @@ static void pending_flush(struct pending_block* pending, struct module* module, * Ends function creation: mainly: * - cleans up line number information * - tries to set up a debug-start tag (FIXME: heuristic to be enhanced) - * - for stabs which have abolute address in them, initializes the size of the + * - for stabs which have absolute address in them, initializes the size of the * function (assuming that current function ends where next function starts) */ static void stabs_finalize_function(struct module* module, struct symt_function* func, diff --git a/reactos/dll/win32/dbghelp/stackframe.h b/reactos/dll/win32/dbghelp/stackframe.h deleted file mode 100644 index c9af8220ea9..00000000000 --- a/reactos/dll/win32/dbghelp/stackframe.h +++ /dev/null @@ -1,83 +0,0 @@ -/* - * 16-bit and 32-bit mode stack frame layout - * - * Copyright 1995, 1998 Alexandre Julliard - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __WINE_STACKFRAME_H -#define __WINE_STACKFRAME_H - -#include -#define NTOS_MODE_USER -#include -#include -#include - -#define SELECTOROF(ptr) (HIWORD(ptr)) -#define OFFSETOF(ptr) (LOWORD(ptr)) - -#include - - /* 32-bit stack layout after CallTo16() */ -typedef struct _STACK32FRAME -{ - DWORD restore_addr; /* 00 return address for restoring code selector */ - DWORD codeselector; /* 04 code selector to restore */ - EXCEPTION_REGISTRATION_RECORD frame; /* 08 Exception frame */ - SEGPTR frame16; /* 10 16-bit frame from last CallFrom16() */ - DWORD edi; /* 14 saved registers */ - DWORD esi; /* 18 */ - DWORD ebx; /* 1c */ - DWORD ebp; /* 20 saved 32-bit frame pointer */ - DWORD retaddr; /* 24 return address */ - DWORD target; /* 28 target address / CONTEXT86 pointer */ - DWORD nb_args; /* 2c number of 16-bit argument bytes */ -} STACK32FRAME; - - /* 16-bit stack layout after CallFrom16() */ -typedef struct _STACK16FRAME -{ - STACK32FRAME *frame32; /* 00 32-bit frame from last CallTo16() */ - DWORD edx; /* 04 saved registers */ - DWORD ecx; /* 08 */ - DWORD ebp; /* 0c */ - WORD ds; /* 10 */ - WORD es; /* 12 */ - WORD fs; /* 14 */ - WORD gs; /* 16 */ - DWORD callfrom_ip; /* 18 callfrom tail IP */ - DWORD module_cs; /* 1c module code segment */ - DWORD relay; /* 20 relay function address */ - WORD entry_ip; /* 22 entry point IP */ - DWORD entry_point; /* 26 API entry point to call, reused as mutex count */ - WORD bp; /* 2a 16-bit stack frame chain */ - WORD ip; /* 2c return address */ - WORD cs; /* 2e */ -} STACK16FRAME; - -#include - -static __inline int MapSL(int size) -{ - return -1; -} - -#define CURRENT_STACK16 ((STACK16FRAME*)MapSL(NtCurrentTeb()->cur_stack)) -#define CURRENT_DS (CURRENT_STACK16->ds) - - -#endif /* __WINE_STACKFRAME_H */ diff --git a/reactos/dll/win32/dbghelp/stubs.c b/reactos/dll/win32/dbghelp/stubs.c deleted file mode 100644 index fcae6713e01..00000000000 --- a/reactos/dll/win32/dbghelp/stubs.c +++ /dev/null @@ -1,745 +0,0 @@ -/* - * File stubs.c - stubs for exported functions - * - * Copyright (C) 2007, Timo Kreuzer - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#define WIN32_NO_STATUS -#include -#include - -#include "dbghelp_private.h" - -#define UNIMPLEMENTED DbgPrint("DBGHELP: %s is unimplemented, please try again later.\n", __FUNCTION__); - -BOOL WINAPI -DbgHelpCreateUserDump(LPSTR pszFileName, - PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, - PVOID pUserData) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -DbgHelpCreateUserDumpW(LPWSTR pszFileName, - PDBGHELP_CREATE_USER_DUMP_CALLBACK Callback, - PVOID pUserData) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -FindFileInPath(HANDLE hProcess, - LPSTR pszSearchPath, - LPSTR pszFileName, - PVOID id, - DWORD two, - DWORD three, - DWORD dwFlags, - LPSTR pszFilePath) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -FindFileInSearchPath(HANDLE hProcess, - LPSTR pszSearchPath, - LPSTR pszFileName, - DWORD one, - DWORD two, - DWORD three, - LPSTR pszFilePath) -{ - UNIMPLEMENTED; - return FALSE; -} - -PVOID WINAPI -ImageDirectoryEntryToDataEx(PVOID pModuleBase, - BOOLEAN bMappedAsImage, - USHORT DirectoryEntry, - PULONG pulSize, - PIMAGE_SECTION_HEADER *FoundHeader) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymAddSymbol(HANDLE hProcess, - ULONG64 ModBase, - PCSTR pszName, - DWORD64 Address, - DWORD dwSize, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymAddSymbolW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszName, - DWORD64 Address, - DWORD dwSize, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymDeleteSymbol(HANDLE hProcess, - ULONG64 ModBase, - PCSTR pszName, - DWORD64 Address, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymDeleteSymbolW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszName, - DWORD64 Address, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumLinesW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszObj, - PCWSTR pszFile, - PSYM_ENUMLINES_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL SymEnumProcesses(PSYM_ENUMPROCESSES_CALLBACK Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSourceFilesW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszMask, - PSYM_ENUMSOURCEFILES_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSourceLines(HANDLE hProcess, - ULONG64 ModBase, - PCSTR pszObject, - PCSTR pszFile, - DWORD dwLine, - DWORD dwFlags, - PSYM_ENUMLINES_CALLBACK Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSourceLinesW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszObject, - PCWSTR pszFile, - DWORD dwLine, - DWORD dwFlags, - PSYM_ENUMLINES_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSym(HANDLE hProcess, - ULONG64 ModBase, - PSYM_ENUMERATESYMBOLS_CALLBACK Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSymbolsForAddr(HANDLE hProcess, - DWORD64 Address, - PSYM_ENUMERATESYMBOLS_CALLBACK Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumSymbolsForAddrW(HANDLE hProcess, - DWORD64 Address, - PSYM_ENUMERATESYMBOLS_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumerateSymbols64(HANDLE hProcess, - DWORD64 ModBase, - PSYM_ENUMSYMBOLS_CALLBACK64 Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumerateSymbolsW64(HANDLE hProcess, - DWORD64 ModBase, - PSYM_ENUMSYMBOLS_CALLBACK64W Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymEnumerateSymbolsW(HANDLE hProcess, - DWORD ModBase, - PSYM_ENUMSYMBOLS_CALLBACKW Callback, - PVOID pUserContext) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromIndex(HANDLE hProcess, - ULONG64 ModBase, - DWORD Index, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromIndexW(HANDLE hProcess, - ULONG64 ModBase, - DWORD Index, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromNameW(HANDLE hProcess, - PCWSTR pszName, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromToken(HANDLE hProcess, - DWORD64 ModBase, - DWORD Token, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymFromTokenW(HANDLE hProcess, - DWORD64 ModBase, - DWORD Token, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetFileLineOffsets64(HANDLE hProcess, - PSTR pszModuleName, - PSTR pszFileName, - PDWORD64 pBuffer, - ULONG BufferLines) -{ - UNIMPLEMENTED; - return FALSE; -} - -PCHAR WINAPI -SymGetHomeDirectory(DWORD dwType, - PSTR pszDir, - size_t Size) -{ - UNIMPLEMENTED; - return NULL; -} - -PWCHAR WINAPI -SymGetHomeDirectoryW(DWORD dwType, - PWSTR pszDir, - size_t Size) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymGetLineFromName64(HANDLE hProcess, - PCSTR pszModuleName, - PCSTR pszFileName, - DWORD dwLineNumber, - PLONG plDisplacement, - PIMAGEHLP_LINE64 Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetLineFromName(HANDLE hProcess, - PCSTR pszModuleName, - PCSTR pszFileName, - DWORD dwLineNumber, - PLONG plDisplacement, - PIMAGEHLP_LINE Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetLineFromNameW64(HANDLE hProcess, - PCWSTR pszModuleName, - PCWSTR pszFileName, - DWORD dwLineNumber, - PLONG lpDisplacement, - PIMAGEHLP_LINEW64 Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetLineNextW64(HANDLE hProcess, - PIMAGEHLP_LINEW64 Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetLinePrevW64(HANDLE hProcess, - PIMAGEHLP_LINEW64 Line) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetScope(HANDLE hProcess, - ULONG64 ModBase, - DWORD Index, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetScopeW(HANDLE hProcess, - ULONG64 ModBase, - DWORD Index, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSourceFile(HANDLE hProcess, - ULONG64 ModBase, - PCSTR pszParams, - PCSTR pszFileSpec, - PSTR pszFilePath, - DWORD Size) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSourceFileFromToken(HANDLE hProcess, - PVOID Token, - PCSTR pszParams, - PSTR pszFilePath, - DWORD Size) -{ - UNIMPLEMENTED; - return FALSE; -} - - -BOOL WINAPI -SymGetSourceFileFromTokenW(HANDLE hProcess, - PVOID Token, - PCWSTR pszParams, - PWSTR pszFilePath, - DWORD Size) -{ - UNIMPLEMENTED; - return FALSE; -} - -// SymGetSourceFileW -// SymGetSourceVarFromToken -// SymGetSourceVarFromTokenW - -BOOL WINAPI -SymGetSymFromName64(HANDLE hProcess, - PCSTR pszName, - PIMAGEHLP_SYMBOL64 Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSymNext64(HANDLE hProcess, - PIMAGEHLP_SYMBOL64 Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSymPrev64(HANDLE hProcess, - PIMAGEHLP_SYMBOL64 Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSymbolFile(HANDLE hProcess, - PCSTR pszSymPath, - PCSTR pszImageFile, - DWORD Type, - PSTR SymbolFile, - size_t cSymbolFile, - PSTR DbgFile, - size_t cDbgFile) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetSymbolFileW(HANDLE hProcess, - PCWSTR pszSymPath, - PCWSTR pszImageFile, - DWORD Type, - PWSTR pszSymbolFile, - size_t cSymbolFile, - PWSTR pszDbgFile, - size_t cDbgFile) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetTypeFromNameW(HANDLE hProcess, - ULONG64 ModBase, - PCWSTR pszName, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymGetTypeInfoEx(HANDLE hProcess, - DWORD64 ModBase, - PIMAGEHLP_GET_TYPE_INFO_PARAMS Params) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymMatchStringA(PCSTR pszString, - PCSTR pszExpression, - BOOL bCaseSensitiv) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymMatchStringW(PCWSTR pszString, - PCWSTR pszExpression, - BOOL bCaseSensitiv) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymNext(HANDLE hProcess, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymNextW(HANDLE hProcess, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymPrev(HANDLE hProcess, - PSYMBOL_INFO Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymPrevW(HANDLE hProcess, - PSYMBOL_INFOW Symbol) -{ - UNIMPLEMENTED; - return FALSE; -} - -// SymRefreshModuleList - -PCHAR WINAPI -SymSetHomeDirectory(HANDLE hProcess, - PCSTR pszDir) -{ - UNIMPLEMENTED; - return NULL; -} - -PWCHAR WINAPI -SymSetHomeDirectoryW(HANDLE hProcess, - PCWSTR pszDir) -{ - UNIMPLEMENTED; - return NULL; -} - -// SymSetSymWithAddr64 - -PCSTR WINAPI -SymSrvDeltaName(HANDLE hProcess, - PCSTR pszSymPath, - PCSTR pszType, - PCSTR pszFile1, - PCSTR pszFile2) -{ - UNIMPLEMENTED; - return NULL; -} - -PCWSTR WINAPI -SymSrvDeltaNameW(HANDLE hProcess, - PCWSTR pszSymPath, - PCWSTR pszType, - PCWSTR pszFile1, - PCWSTR pszFile2) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymSrvGetFileIndexString(HANDLE hProcess, - PCSTR pszSrvPath, - PCSTR pszFile, - PSTR pszIndex, - size_t Size, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymSrvGetFileIndexStringW(HANDLE hProcess, - PCWSTR pszSrvPath, - PCWSTR pszFile, - PWSTR pszIndex, - size_t Size, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymSrvGetFileIndexes(PCSTR File, - GUID* Id, - DWORD* Val1, - DWORD* Val2, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymSrvGetFileIndexesW(PCWSTR File, - GUID* Id, - DWORD* Val1, - DWORD* Val2, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return FALSE; -} - -PCSTR WINAPI -SymSrvGetSupplement(HANDLE hProcess, - PCSTR pszSymPath, - PCSTR pszNode, - PCSTR pszFile) -{ - UNIMPLEMENTED; - return NULL; -} - -PCWSTR WINAPI -SymSrvGetSupplementW(HANDLE hProcess, - PCWSTR pszSymPath, - PCWSTR pszNode, - PCWSTR pszFile) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymSrvIsStore(HANDLE hProcess, - PCSTR pszPath) -{ - UNIMPLEMENTED; - return FALSE; -} - -BOOL WINAPI -SymSrvIsStoreW(HANDLE hProcess, - PCWSTR pszPath) -{ - UNIMPLEMENTED; - return FALSE; -} - -PCSTR WINAPI -SymSrvStoreFile(HANDLE hProcess, - PCSTR pszSrvPath, - PCSTR pszFile, - DWORD pszFlags) -{ - UNIMPLEMENTED; - return NULL; -} - -PCWSTR WINAPI -SymSrvStoreFileW(HANDLE hProcess, - PCWSTR pszSrvPath, - PCWSTR pszFile, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return NULL; -} - -PCSTR WINAPI -SymSrvStoreSupplement(HANDLE hProcess, - PCSTR pszSymPath, - PCSTR pszNode, - PCSTR pszFile, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return NULL; -} - -PCWSTR WINAPI -SymSrvStoreSupplementW(HANDLE hProcess, - PCWSTR pszSymPath, - PCWSTR pszNode, - PCWSTR pszFile, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return NULL; -} - -BOOL WINAPI -SymUnDName64(PIMAGEHLP_SYMBOL64 Symbol, - PSTR pszUndecoratedName, - DWORD dwUndecoratedNameLength) -{ - UNIMPLEMENTED; - return FALSE; -} - -DWORD WINAPI -UnDecorateSymbolNameW(PCWSTR DecoratedName, - PWSTR pszUnDecoratedName, - DWORD dwUndecoratedLength, - DWORD dwFlags) -{ - UNIMPLEMENTED; - return 0; -} - - diff --git a/reactos/dll/win32/dbghelp/symbol.c b/reactos/dll/win32/dbghelp/symbol.c index d76811b114d..f4f2d11644a 100644 --- a/reactos/dll/win32/dbghelp/symbol.c +++ b/reactos/dll/win32/dbghelp/symbol.c @@ -374,21 +374,21 @@ struct symt_block* symt_close_func_block(struct module* module, GET_ENTRY(block->container, struct symt_block, symt) : NULL; } -struct symt_function_point* symt_add_function_point(struct module* module, - struct symt_function* func, - enum SymTagEnum point, - const struct location* loc, - const char* name) +struct symt_hierarchy_point* symt_add_function_point(struct module* module, + struct symt_function* func, + enum SymTagEnum point, + const struct location* loc, + const char* name) { - struct symt_function_point* sym; + struct symt_hierarchy_point*sym; struct symt** p; if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) { sym->symt.tag = point; - sym->parent = func; + sym->parent = &func->symt; sym->loc = *loc; - sym->name = name ? pool_strdup(&module->pool, name) : NULL; + sym->hash_elt.name = name ? pool_strdup(&module->pool, name) : NULL; p = vector_add(&func->vchildren, &module->pool); *p = &sym->symt; } @@ -478,6 +478,34 @@ struct symt_data* symt_new_constant(struct module* module, return sym; } +struct symt_hierarchy_point* symt_new_label(struct module* module, + struct symt_compiland* compiland, + const char* name, unsigned long address) +{ + struct symt_hierarchy_point* sym; + + TRACE_(dbghelp_symt)("Adding global label value %s:%s\n", + debugstr_w(module->module.ModuleName), name); + + if ((sym = pool_alloc(&module->pool, sizeof(*sym)))) + { + sym->symt.tag = SymTagLabel; + sym->hash_elt.name = pool_strdup(&module->pool, name); + hash_table_add(&module->ht_symbols, &sym->hash_elt); + module->sortlist_valid = FALSE; + sym->loc.kind = loc_absolute; + sym->loc.offset = address; + sym->parent = compiland ? &compiland->symt : NULL; + if (compiland) + { + struct symt** p; + p = vector_add(&compiland->vchildren, &module->pool); + *p = &sym->symt; + } + } + return sym; +} + /* expect sym_info->MaxNameLen to be set before being called */ static void symt_fill_sym_info(const struct module_pair* pair, const struct symt_function* func, @@ -589,8 +617,8 @@ static void symt_fill_sym_info(const struct module_pair* pair, if (sym_info->MaxNameLen) { if (sym->tag != SymTagPublicSymbol || !(dbghelp_options & SYMOPT_UNDNAME) || - (sym_info->NameLen = UnDecorateSymbolName(name, sym_info->Name, - sym_info->MaxNameLen, UNDNAME_COMPLETE) == 0)) + (sym_info->NameLen = UnDecorateSymbolName(name, sym_info->Name, + sym_info->MaxNameLen, UNDNAME_NAME_ONLY) == 0)) { sym_info->NameLen = min(strlen(name), sym_info->MaxNameLen - 1); memcpy(sym_info->Name, name, sym_info->NameLen); @@ -1027,6 +1055,33 @@ BOOL WINAPI SymEnumerateSymbols(HANDLE hProcess, DWORD BaseOfDll, return SymEnumSymbols(hProcess, BaseOfDll, NULL, sym_enumerate_cb, &se); } +struct sym_enumerate64 +{ + void* ctx; + PSYM_ENUMSYMBOLS_CALLBACK64 cb; +}; + +static BOOL CALLBACK sym_enumerate_cb64(PSYMBOL_INFO syminfo, ULONG size, void* ctx) +{ + struct sym_enumerate64* se = (struct sym_enumerate64*)ctx; + return (se->cb)(syminfo->Name, syminfo->Address, syminfo->Size, se->ctx); +} + +/*********************************************************************** + * SymEnumerateSymbols64 (DBGHELP.@) + */ +BOOL WINAPI SymEnumerateSymbols64(HANDLE hProcess, DWORD64 BaseOfDll, + PSYM_ENUMSYMBOLS_CALLBACK64 EnumSymbolsCallback, + PVOID UserContext) +{ + struct sym_enumerate64 se; + + se.ctx = UserContext; + se.cb = EnumSymbolsCallback; + + return SymEnumSymbols(hProcess, BaseOfDll, NULL, sym_enumerate_cb64, &se); +} + /****************************************************************** * SymFromAddr (DBGHELP.@) * diff --git a/reactos/dll/win32/dbghelp/thread.h b/reactos/dll/win32/dbghelp/thread.h deleted file mode 100644 index 3ee2f8dc1c1..00000000000 --- a/reactos/dll/win32/dbghelp/thread.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Thread definitions - * - * Copyright 1996 Alexandre Julliard - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __WINE_THREAD_H -#define __WINE_THREAD_H - -#include -#define WIN32_NO_STATUS -#include -#include -#include -#define WINE_NO_TEB -#include - -struct _SECURITY_ATTRIBUTES; -struct tagSYSLEVEL; -struct server_buffer_info; -struct fiber_data; - -struct debug_info -{ - char *str_pos; /* current position in strings buffer */ - char *out_pos; /* current position in output buffer */ - char strings[1024]; /* buffer for temporary strings */ - char output[1024]; /* current output line */ -}; - -#endif /* __WINE_THREAD_H */ diff --git a/reactos/dll/win32/dbghelp/type.c b/reactos/dll/win32/dbghelp/type.c index a8c6778ed90..aeb3e75ae6f 100644 --- a/reactos/dll/win32/dbghelp/type.c +++ b/reactos/dll/win32/dbghelp/type.c @@ -21,6 +21,9 @@ * Note: This really doesn't do much at the moment, but it forms the framework * upon which full support for datatype handling will eventually be built. */ + +#define NONAMELESSUNION + #include "config.h" #include #include @@ -83,7 +86,7 @@ const char* symt_get_name(const struct symt* sym) case SymTagFunction: return ((const struct symt_function*)sym)->hash_elt.name; case SymTagPublicSymbol: return ((const struct symt_public*)sym)->hash_elt.name; case SymTagBaseType: return ((const struct symt_basic*)sym)->hash_elt.name; - case SymTagLabel: return ((const struct symt_function_point*)sym)->name; + case SymTagLabel: return ((const struct symt_hierarchy_point*)sym)->hash_elt.name; case SymTagThunk: return ((const struct symt_thunk*)sym)->hash_elt.name; /* hierarchy tree */ case SymTagEnum: return ((const struct symt_enum*)sym)->name; @@ -243,7 +246,8 @@ BOOL symt_add_udt_element(struct module* module, struct symt_udt* udt_type, return TRUE; } -struct symt_enum* symt_new_enum(struct module* module, const char* typename) +struct symt_enum* symt_new_enum(struct module* module, const char* typename, + struct symt* basetype) { struct symt_enum* sym; @@ -251,6 +255,7 @@ struct symt_enum* symt_new_enum(struct module* module, const char* typename) { sym->symt.tag = SymTagEnum; sym->name = (typename) ? pool_strdup(&module->pool, typename) : NULL; + sym->base_type = basetype; vector_init(&sym->vchildren, sizeof(struct symt*), 8); } return sym; @@ -271,8 +276,7 @@ BOOL symt_add_enum_element(struct module* module, struct symt_enum* enum_type, e->hash_elt.next = NULL; e->kind = DataIsConstant; e->container = &enum_type->symt; - /* CV defines the underlying type for the enumeration */ - e->type = &symt_new_basic(module, btInt, "int", 4)->symt; + e->type = enum_type->base_type; e->u.value.n1.n2.vt = VT_I4; e->u.value.n1.n2.n3.lVal = value; @@ -518,8 +522,10 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, case SymTagFuncDebugStart: case SymTagFuncDebugEnd: case SymTagLabel: - X(ULONG64) = ((const struct symt_function_point*)type)->parent->address + - ((const struct symt_function_point*)type)->loc.offset; + if (!symt_get_info(((const struct symt_hierarchy_point*)type)->parent, + req, pInfo)) + return FALSE; + X(ULONG64) += ((const struct symt_hierarchy_point*)type)->loc.offset; break; case SymTagThunk: X(ULONG64) = ((const struct symt_thunk*)type)->address; @@ -648,6 +654,9 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, case SymTagThunk: X(DWORD64) = ((const struct symt_thunk*)type)->size; break; + case SymTagLabel: + X(DWORD64) = 0; + break; default: FIXME("Unsupported sym-tag %s for get-length\n", symt_get_tag_str(type->tag)); @@ -759,7 +768,9 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, case SymTagFunction: X(DWORD) = (DWORD)((const struct symt_function*)type)->type; break; - /* FIXME: should also work for enums */ + case SymTagEnum: + X(DWORD) = (DWORD)((const struct symt_enum*)type)->base_type; + break; case SymTagFunctionArgType: X(DWORD) = (DWORD)((const struct symt_function_arg_type*)type)->arg_type; break; @@ -768,6 +779,7 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, symt_get_tag_str(type->tag)); case SymTagPublicSymbol: case SymTagThunk: + case SymTagLabel: return FALSE; } break; @@ -797,10 +809,15 @@ BOOL symt_get_info(const struct symt* type, IMAGEHLP_SYMBOL_TYPE_INFO req, X(DWORD) = (DWORD)((const struct symt_array*)type)->index_type; break; + case TI_GET_CLASSPARENTID: + /* FIXME: we don't support properly C++ for now, pretend this symbol doesn't + * belong to a parent class + */ + return FALSE; + #undef X case TI_GET_ADDRESSOFFSET: - case TI_GET_CLASSPARENTID: case TI_GET_SYMINDEX: case TI_GET_THISADJUST: case TI_GET_VIRTUALBASECLASS: diff --git a/reactos/dll/win32/shell32/fprop.c b/reactos/dll/win32/shell32/fprop.c index 6cb44310181..39ed0f69e0d 100644 --- a/reactos/dll/win32/shell32/fprop.c +++ b/reactos/dll/win32/shell32/fprop.c @@ -349,10 +349,10 @@ SH_FileGeneralSetFileSizeTime(HWND hwndDlg, WCHAR * lpfilename, PULARGE_INTEGER return FALSE; } CloseHandle(hFile); - if (!StrFormatByteSizeW(file_size.QuadPart, resultstr, sizeof(resultstr) / sizeof(WCHAR))) + if (!StrFormatByteSizeW(file_size.QuadPart, resultstr, sizeof(resultstr)/sizeof(resultstr[0]))); return FALSE; hDlgCtrl = GetDlgItem(hwndDlg, 14011); - TRACE("result size %u resultstr %s\n", file_size.QuadPart, debugstr_w(resultstr)); + ERR("result size %u resultstr %s %s\n", file_size.QuadPart, debugstr_w(resultstr), resultstr); SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)resultstr); if (lpfilesize) diff --git a/reactos/include/psdk/dbghelp.h b/reactos/include/psdk/dbghelp.h index b62fdf28e52..a67daf38905 100644 --- a/reactos/include/psdk/dbghelp.h +++ b/reactos/include/psdk/dbghelp.h @@ -88,7 +88,7 @@ typedef struct _tagADDRESS64 #define SYMF_THUNK 0x00002000 #define SYMF_TLSREL 0x00004000 -typedef enum +typedef enum { SymNone = 0, SymCoff, @@ -375,10 +375,10 @@ typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 #define SYMOPT_EXACT_SYMBOLS 0x00000400 #define SYMOPT_WILD_UNDERSCORE 0x00000800 #define SYMOPT_USE_DEFAULTS 0x00001000 -/* latest SDK defines: */ +/* latest SDK defines: #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 #define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 - +*/ #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 #define SYMOPT_PUBLICS_ONLY 0x00004000 #define SYMOPT_NO_PUBLICS 0x00008000 @@ -430,7 +430,7 @@ typedef struct _DBGHELP_MODLOAD_DATA typedef DWORD RVA; typedef ULONG64 RVA64; -typedef enum _MINIDUMP_TYPE +typedef enum _MINIDUMP_TYPE { MiniDumpNormal = 0x0000, MiniDumpWithDataSegs = 0x0001, @@ -469,7 +469,7 @@ typedef struct _MINIDUMP_THREAD_CALLBACK ULONG64 StackEnd; } MINIDUMP_THREAD_CALLBACK, *PMINIDUMP_THREAD_CALLBACK; -typedef struct _MINIDUMP_THREAD_EX_CALLBACK +typedef struct _MINIDUMP_THREAD_EX_CALLBACK { ULONG ThreadId; HANDLE ThreadHandle; @@ -486,7 +486,7 @@ typedef struct _MINIDUMP_INCLUDE_THREAD_CALLBACK ULONG ThreadId; } MINIDUMP_INCLUDE_THREAD_CALLBACK, *PMINIDUMP_INCLUDE_THREAD_CALLBACK; -typedef enum _THREAD_WRITE_FLAGS +typedef enum _THREAD_WRITE_FLAGS { ThreadWriteThread = 0x0001, ThreadWriteStack = 0x0002, @@ -497,7 +497,7 @@ typedef enum _THREAD_WRITE_FLAGS ThreadWriteThreadInfo = 0x0040 } THREAD_WRITE_FLAGS; -typedef struct _MINIDUMP_MODULE_CALLBACK +typedef struct _MINIDUMP_MODULE_CALLBACK { PWCHAR FullPath; ULONG64 BaseOfImage; @@ -511,12 +511,12 @@ typedef struct _MINIDUMP_MODULE_CALLBACK ULONG SizeOfMiscRecord; } MINIDUMP_MODULE_CALLBACK, *PMINIDUMP_MODULE_CALLBACK; -typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK +typedef struct _MINIDUMP_INCLUDE_MODULE_CALLBACK { ULONG64 BaseOfImage; } MINIDUMP_INCLUDE_MODULE_CALLBACK, *PMINIDUMP_INCLUDE_MODULE_CALLBACK; -typedef enum _MODULE_WRITE_FLAGS +typedef enum _MODULE_WRITE_FLAGS { ModuleWriteModule = 0x0001, ModuleWriteDataSeg = 0x0002, @@ -527,12 +527,12 @@ typedef enum _MODULE_WRITE_FLAGS ModuleWriteCodeSegs = 0x0040, } MODULE_WRITE_FLAGS; -typedef struct _MINIDUMP_CALLBACK_INPUT +typedef struct _MINIDUMP_CALLBACK_INPUT { ULONG ProcessId; HANDLE ProcessHandle; ULONG CallbackType; - union + union { MINIDUMP_THREAD_CALLBACK Thread; MINIDUMP_THREAD_EX_CALLBACK ThreadEx; @@ -544,7 +544,7 @@ typedef struct _MINIDUMP_CALLBACK_INPUT typedef struct _MINIDUMP_CALLBACK_OUTPUT { - union + union { ULONG ModuleWriteFlags; ULONG ThreadWriteFlags; @@ -558,19 +558,19 @@ typedef struct _MINIDUMP_CALLBACK_OUTPUT typedef BOOL (WINAPI* MINIDUMP_CALLBACK_ROUTINE)(PVOID, const PMINIDUMP_CALLBACK_INPUT, PMINIDUMP_CALLBACK_OUTPUT); -typedef struct _MINIDUMP_CALLBACK_INFORMATION +typedef struct _MINIDUMP_CALLBACK_INFORMATION { MINIDUMP_CALLBACK_ROUTINE CallbackRoutine; void* CallbackParam; } MINIDUMP_CALLBACK_INFORMATION, *PMINIDUMP_CALLBACK_INFORMATION; -typedef struct _MINIDUMP_LOCATION_DESCRIPTOR +typedef struct _MINIDUMP_LOCATION_DESCRIPTOR { ULONG DataSize; RVA Rva; } MINIDUMP_LOCATION_DESCRIPTOR; -typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 +typedef struct _MINIDUMP_LOCATION_DESCRIPTOR64 { ULONG64 DataSize; RVA64 Rva; @@ -615,7 +615,7 @@ typedef struct _MINIDUMP_HEADER DWORD NumberOfStreams; RVA StreamDirectoryRva; DWORD CheckSum; - union + union { DWORD Reserved; DWORD TimeDateStamp; @@ -662,7 +662,7 @@ typedef struct _MINIDUMP_MODULE ULONG64 Reserved1; } MINIDUMP_MODULE, *PMINIDUMP_MODULE; -typedef struct _MINIDUMP_MODULE_LIST +typedef struct _MINIDUMP_MODULE_LIST { ULONG NumberOfModules; MINIDUMP_MODULE Modules[1]; /* FIXME: 0-sized array not supported */ @@ -713,7 +713,7 @@ typedef struct _MINIDUMP_SYSTEM_INFO ULONG FeatureInformation; ULONG AMDExtendedCpuFeatures; } X86CpuInfo; - struct + struct { ULONG64 ProcessorFeatures[2]; } OtherCpuInfo; @@ -784,13 +784,6 @@ BOOL WINAPI MiniDumpReadDumpStream(PVOID, ULONG, PMINIDUMP_DIRECTORY*, PVOID*, #include -/************************* - * User mode dump * - *************************/ -typedef BOOL (WINAPI *PDBGHELP_CREATE_USER_DUMP_CALLBACK)(DWORD, PVOID*, LPDWORD, PVOID); -BOOL WINAPI DbgHelpCreateUserDump(LPSTR, PDBGHELP_CREATE_USER_DUMP_CALLBACK, PVOID); -BOOL WINAPI DbgHelpCreateUserDumpW(LPWSTR, PDBGHELP_CREATE_USER_DUMP_CALLBACK, PVOID); - /************************* * MODULE handling * *************************/ @@ -906,7 +899,7 @@ typedef struct _SYMBOL_INFO_PACKAGEW WCHAR name[MAX_SYM_NAME+1]; } SYMBOL_INFO_PACKAGEW, *PSYMBOL_INFO_PACKAGEW; -typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO +typedef enum _IMAGEHLP_SYMBOL_TYPE_INFO { TI_GET_SYMTAG, TI_GET_SYMNAME, @@ -961,7 +954,7 @@ typedef struct _IMAGEHLP_GET_TYPE_INFO_PARAMS PULONG64 ReqsValid; } IMAGEHLP_GET_TYPE_INFO_PARAMS, *PIMAGEHLP_GET_TYPE_INFO_PARAMS; -typedef struct _TI_FINDCHILDREN_PARAMS +typedef struct _TI_FINDCHILDREN_PARAMS { ULONG Count; ULONG Start; @@ -1076,7 +1069,7 @@ BOOL WINAPI SymGetLineNextW64(HANDLE, PIMAGEHLP_LINEW64); BOOL WINAPI SymGetLineFromName(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE); BOOL WINAPI SymGetLineFromName64(HANDLE, PCSTR, PCSTR, DWORD, PLONG, PIMAGEHLP_LINE64); BOOL WINAPI SymGetLineFromNameW64(HANDLE, PCWSTR, PCWSTR, DWORD, PLONG, PIMAGEHLP_LINEW64); -BOOL WINAPI SymGetFileLineOffsets64(HANDLE, PSTR, PSTR, PDWORD64, ULONG); +ULONG WINAPI SymGetFileLineOffsets64(HANDLE, PCSTR, PCSTR, PDWORD64, ULONG); BOOL WINAPI SymGetSourceFile(HANDLE, ULONG64, PCSTR, PCSTR, PSTR, DWORD); BOOL WINAPI SymGetSourceFileW(HANDLE, ULONG64, PCWSTR, PCWSTR, PWSTR, DWORD); BOOL WINAPI SymGetSourceFileToken(HANDLE, ULONG64, PCSTR, PVOID*, DWORD*); @@ -1131,7 +1124,8 @@ HANDLE WINAPI SymFindDebugInfoFile(HANDLE, PCSTR, PSTR, PFIND_DEBUG_FILE_CALLBAC HANDLE WINAPI SymFindDebugInfoFileW(HANDLE, PCWSTR, PWSTR, PFIND_DEBUG_FILE_CALLBACKW, PVOID); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACK)(PCSTR, PVOID); typedef BOOL (CALLBACK *PFINDFILEINPATHCALLBACKW)(PCWSTR, PVOID); -BOOL WINAPI FindFileInPath(HANDLE, LPSTR, LPSTR, PVOID, DWORD, DWORD, DWORD, LPSTR); +BOOL WINAPI FindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, + PSTR, PFINDFILEINPATHCALLBACK, PVOID); BOOL WINAPI SymFindFileInPath(HANDLE, PCSTR, PCSTR, PVOID, DWORD, DWORD, DWORD, PSTR, PFINDFILEINPATHCALLBACK, PVOID); BOOL WINAPI SymFindFileInPathW(HANDLE, PCWSTR, PCWSTR, PVOID, DWORD, DWORD, DWORD, @@ -1177,11 +1171,6 @@ PWSTR WINAPI SymGetHomeDirectoryW(DWORD, PWSTR, size_t); *************************/ BOOL WINAPI SymSetContext(HANDLE, PIMAGEHLP_STACK_FRAME, PIMAGEHLP_CONTEXT); -/************************* - * Processes * - *************************/ -typedef BOOL (*PSYM_ENUMPROCESSES_CALLBACK)(HANDLE, PVOID); -BOOL SymEnumProcesses(PSYM_ENUMPROCESSES_CALLBACK, PVOID); /************************* * Stack management * diff --git a/reactos/include/reactos/wine/mscvpdb.h b/reactos/include/reactos/wine/mscvpdb.h index 1aa70a85f97..306d8934ca2 100644 --- a/reactos/include/reactos/wine/mscvpdb.h +++ b/reactos/include/reactos/wine/mscvpdb.h @@ -81,7 +81,7 @@ * For the evolution of types, the need of the second flavor was the * number of types to be defined (limited to 0xFFFF, including the C * basic types); the need of the third flavor is the increase of - * symbol size (to be greated than 256), which was likely needed for + * symbol size (to be greater than 256), which was likely needed for * complex C++ types (nested + templates). * * It's somehow difficult to represent the layout of those types on @@ -343,9 +343,9 @@ union codeview_type { unsigned short int len; short int id; - unsigned this_type; - unsigned int class_type; unsigned int rvtype; + unsigned int class_type; + unsigned this_type; unsigned char call; unsigned char reserved; unsigned short params; @@ -732,41 +732,317 @@ union codeview_fieldtype * bit mode. There are many other types listed in the documents, but these * are apparently not used by the compiler, or represent pointer types * that are not used. + * + * Official MS documentation says that type (< 0x4000, so 12 bits) is made of: + * +----------+------+------+----------+------+ + * | 11 | 10-8 | 7-4 | 3 | 2-0 | + * +----------+------+------+----------+------+ + * | reserved | mode | type | reserved | size | + * +----------+------+------+----------+------+ + * In recent PDB files, type 8 exists, and is seen as an HRESULT... So we've + * added this basic type... as if bit 3 had been integrated into the size field */ -#define T_NOTYPE 0x0000 /* Notype */ -#define T_ABS 0x0001 /* Abs */ -#define T_VOID 0x0003 /* Void */ -#define T_CHAR 0x0010 /* signed char */ -#define T_SHORT 0x0011 /* short */ -#define T_LONG 0x0012 /* long */ -#define T_QUAD 0x0013 /* long long */ -#define T_UCHAR 0x0020 /* unsigned char */ -#define T_USHORT 0x0021 /* unsigned short */ -#define T_ULONG 0x0022 /* unsigned long */ -#define T_UQUAD 0x0023 /* unsigned long long */ -#define T_REAL32 0x0040 /* float */ -#define T_REAL64 0x0041 /* double */ -#define T_RCHAR 0x0070 /* real char */ -#define T_WCHAR 0x0071 /* wide char */ -#define T_INT4 0x0074 /* int */ -#define T_UINT4 0x0075 /* unsigned int */ -#define T_32PVOID 0x0403 /* 32 bit near pointer to void */ -#define T_32PCHAR 0x0410 /* 16:32 near pointer to signed char */ -#define T_32PSHORT 0x0411 /* 16:32 near pointer to short */ -#define T_32PLONG 0x0412 /* 16:32 near pointer to int */ -#define T_32PQUAD 0x0413 /* 16:32 near pointer to long long */ -#define T_32PUCHAR 0x0420 /* 16:32 near pointer to unsigned char */ -#define T_32PUSHORT 0x0421 /* 16:32 near pointer to unsigned short */ -#define T_32PULONG 0x0422 /* 16:32 near pointer to unsigned int */ -#define T_32PUQUAD 0x0423 /* 16:32 near pointer to long long */ -#define T_32PREAL32 0x0440 /* 16:32 near pointer to float */ -#define T_32PREAL64 0x0441 /* 16:32 near pointer to float */ -#define T_32PRCHAR 0x0470 /* 16:32 near pointer to real char */ -#define T_32PWCHAR 0x0471 /* 16:32 near pointer to real char */ -#define T_32PINT4 0x0474 /* 16:32 near pointer to int */ -#define T_32PUINT4 0x0475 /* 16:32 near pointer to unsigned int */ +/* the type number of a built-in type is a 16-bit value specified in the following format: + bit # | 11 | 10-8 | 7-4 | 3 | 2-0 | + field | reserved | mode | type | reserved | size | + where + is one of the following types: + 0x00 Special + 0x01 Signed integral value + 0x02 Unsigned integral value + 0x03 Boolean + 0x04 Real + 0x05 Complex + 0x06 Special2 + 0x07 Real int value + 0x08 Reserved + 0x09 Reserved + 0x0a Reserved + 0x0b Reserved + 0x0c Reserved + 0x0d Reserved + 0x0e Reserved + 0x0f Reserved for debugger expression evaluator + + is an enumerated value for each of the types. + Type = special + 0x00 No type + 0x01 Absolute symbol + 0x02 Segment + 0x03 Void + 0x04 Basic 8-byte currency value + 0x05 Near Basic string + 0x06 Far Basic string + 0x07 Untranslated type from previous Microsoft symbol formats + Type = signed/unsigned integral and Boolean values + 0x00 1 byte + 0x01 2 byte + 0x02 4 byte + 0x03 8 byte + 0x04 Reserved + 0x05 Reserved + 0x06 Reserved + 0x07 Reserved + Type = real and complex + 0x00 32 bit + 0x01 64 bit + 0x02 80 bit + 0x03 128 bit + 0x04 48 bit + 0x05 Reserved + 0x06 Reserved + 0x07 Reserved + Type = special2 + 0x00 Bit + 0x01 Pascal CHAR + Type = Real int + 0x00 Char + 0x01 Wide character + 0x02 2-byte signed integer + 0x03 2-byte unsigned integer + 0x04 4-byte signed integer + 0x05 4-byte unsigned integer + 0x06 8-byte signed integer + 0x07 8-byte unsigned integer + + is the pointer mode: + 0x00 Direct; not a pointer + 0x01 Near pointer + 0x02 Far pointer + 0x03 Huge pointer + 0x04 32-bit near pointer + 0x05 32-bit far pointer + 0x06 64-bit near pointer + 0x07 Reserved +*/ + +/* basic types */ +#define T_NOTYPE 0x0000 /* Notype */ +#define T_ABS 0x0001 /* Abs */ +#define T_SEGMENT 0x0002 /* segment type */ +#define T_VOID 0x0003 /* Void */ +#define T_CURRENCY 0x0004 /* basic 8-byte currency value */ +#define T_NBASICSTR 0x0005 /* near basic string */ +#define T_FBASICSTR 0x0006 /* far basic string */ +#define T_NOTTRANS 0x0007 /* untranslated type record from MS symbol format */ +#define T_HRESULT 0x0008 /* HRESULT - or error code ??? */ +#define T_CHAR 0x0010 /* signed char */ +#define T_SHORT 0x0011 /* short */ +#define T_LONG 0x0012 /* long */ +#define T_QUAD 0x0013 /* long long */ +#define T_UCHAR 0x0020 /* unsigned char */ +#define T_USHORT 0x0021 /* unsigned short */ +#define T_ULONG 0x0022 /* unsigned long */ +#define T_UQUAD 0x0023 /* unsigned long long */ +#define T_BOOL08 0x0030 /* 8-bit boolean */ +#define T_BOOL16 0x0031 /* 16-bit boolean */ +#define T_BOOL32 0x0032 /* 32-bit boolean */ +#define T_BOOL64 0x0033 /* 64-bit boolean */ +#define T_REAL32 0x0040 /* float */ +#define T_REAL64 0x0041 /* double */ +#define T_REAL80 0x0042 /* 80-bit real */ +#define T_REAL128 0x0043 /* 128-bit real */ +#define T_REAL48 0x0044 /* 48-bit real */ +#define T_CPLX32 0x0050 /* 32-bit complex number */ +#define T_CPLX64 0x0051 /* 64-bit complex number */ +#define T_CPLX80 0x0052 /* 80-bit complex number */ +#define T_CPLX128 0x0053 /* 128-bit complex number */ +#define T_BIT 0x0060 /* bit */ +#define T_PASCHAR 0x0061 /* pascal CHAR */ +#define T_RCHAR 0x0070 /* real char */ +#define T_WCHAR 0x0071 /* wide char */ +#define T_INT2 0x0072 /* real 16-bit signed int */ +#define T_UINT2 0x0073 /* real 16-bit unsigned int */ +#define T_INT4 0x0074 /* int */ +#define T_UINT4 0x0075 /* unsigned int */ +#define T_INT8 0x0076 /* 64-bit signed int */ +#define T_UINT8 0x0077 /* 64-bit unsigned int */ + + +/* near pointers to basic types */ +#define T_PVOID 0x0103 /* near pointer to void */ +#define T_PCHAR 0x0110 /* Near pointer to 8-bit signed */ +#define T_PSHORT 0x0111 /* Near pointer to 16-bit signed */ +#define T_PLONG 0x0112 /* Near pointer to 32-bit signed */ +#define T_PQUAD 0x0113 /* Near pointer to 64-bit signed */ +#define T_PUCHAR 0x0120 /* Near pointer to 8-bit unsigned */ +#define T_PUSHORT 0x0121 /* Near pointer to 16-bit unsigned */ +#define T_PULONG 0x0122 /* Near pointer to 32-bit unsigned */ +#define T_PUQUAD 0x0123 /* Near pointer to 64-bit unsigned */ +#define T_PBOOL08 0x0130 /* Near pointer to 8-bit Boolean */ +#define T_PBOOL16 0x0131 /* Near pointer to 16-bit Boolean */ +#define T_PBOOL32 0x0132 /* Near pointer to 32-bit Boolean */ +#define T_PBOOL64 0x0133 /* Near pointer to 64-bit Boolean */ +#define T_PREAL32 0x0140 /* Near pointer to 32-bit real */ +#define T_PREAL64 0x0141 /* Near pointer to 64-bit real */ +#define T_PREAL80 0x0142 /* Near pointer to 80-bit real */ +#define T_PREAL128 0x0143 /* Near pointer to 128-bit real */ +#define T_PREAL48 0x0144 /* Near pointer to 48-bit real */ +#define T_PCPLX32 0x0150 /* Near pointer to 32-bit complex */ +#define T_PCPLX64 0x0151 /* Near pointer to 64-bit complex */ +#define T_PCPLX80 0x0152 /* Near pointer to 80-bit complex */ +#define T_PCPLX128 0x0153 /* Near pointer to 128-bit complex */ +#define T_PRCHAR 0x0170 /* Near pointer to a real char */ +#define T_PWCHAR 0x0171 /* Near pointer to a wide char */ +#define T_PINT2 0x0172 /* Near pointer to 16-bit signed int */ +#define T_PUINT2 0x0173 /* Near pointer to 16-bit unsigned int */ +#define T_PINT4 0x0174 /* Near pointer to 32-bit signed int */ +#define T_PUINT4 0x0175 /* Near pointer to 32-bit unsigned int */ +#define T_PINT8 0x0176 /* Near pointer to 64-bit signed int */ +#define T_PUINT8 0x0177 /* Near pointer to 64-bit unsigned int */ + + +/* far pointers to basic types */ +#define T_PFVOID 0x0203 /* Far pointer to void */ +#define T_PFCHAR 0x0210 /* Far pointer to 8-bit signed */ +#define T_PFSHORT 0x0211 /* Far pointer to 16-bit signed */ +#define T_PFLONG 0x0212 /* Far pointer to 32-bit signed */ +#define T_PFQUAD 0x0213 /* Far pointer to 64-bit signed */ +#define T_PFUCHAR 0x0220 /* Far pointer to 8-bit unsigned */ +#define T_PFUSHORT 0x0221 /* Far pointer to 16-bit unsigned */ +#define T_PFULONG 0x0222 /* Far pointer to 32-bit unsigned */ +#define T_PFUQUAD 0x0223 /* Far pointer to 64-bit unsigned */ +#define T_PFBOOL08 0x0230 /* Far pointer to 8-bit Boolean */ +#define T_PFBOOL16 0x0231 /* Far pointer to 16-bit Boolean */ +#define T_PFBOOL32 0x0232 /* Far pointer to 32-bit Boolean */ +#define T_PFBOOL64 0x0233 /* Far pointer to 64-bit Boolean */ +#define T_PFREAL32 0x0240 /* Far pointer to 32-bit real */ +#define T_PFREAL64 0x0241 /* Far pointer to 64-bit real */ +#define T_PFREAL80 0x0242 /* Far pointer to 80-bit real */ +#define T_PFREAL128 0x0243 /* Far pointer to 128-bit real */ +#define T_PFREAL48 0x0244 /* Far pointer to 48-bit real */ +#define T_PFCPLX32 0x0250 /* Far pointer to 32-bit complex */ +#define T_PFCPLX64 0x0251 /* Far pointer to 64-bit complex */ +#define T_PFCPLX80 0x0252 /* Far pointer to 80-bit complex */ +#define T_PFCPLX128 0x0253 /* Far pointer to 128-bit complex */ +#define T_PFRCHAR 0x0270 /* Far pointer to a real char */ +#define T_PFWCHAR 0x0271 /* Far pointer to a wide char */ +#define T_PFINT2 0x0272 /* Far pointer to 16-bit signed int */ +#define T_PFUINT2 0x0273 /* Far pointer to 16-bit unsigned int */ +#define T_PFINT4 0x0274 /* Far pointer to 32-bit signed int */ +#define T_PFUINT4 0x0275 /* Far pointer to 32-bit unsigned int */ +#define T_PFINT8 0x0276 /* Far pointer to 64-bit signed int */ +#define T_PFUINT8 0x0277 /* Far pointer to 64-bit unsigned int */ + + +/* huge pointers to basic types */ +#define T_PHVOID 0x0303 /* Huge pointer to void */ +#define T_PHCHAR 0x0310 /* Huge pointer to 8-bit signed */ +#define T_PHSHORT 0x0311 /* Huge pointer to 16-bit signed */ +#define T_PHLONG 0x0312 /* Huge pointer to 32-bit signed */ +#define T_PHQUAD 0x0313 /* Huge pointer to 64-bit signed */ +#define T_PHUCHAR 0x0320 /* Huge pointer to 8-bit unsigned */ +#define T_PHUSHORT 0x0321 /* Huge pointer to 16-bit unsigned */ +#define T_PHULONG 0x0322 /* Huge pointer to 32-bit unsigned */ +#define T_PHUQUAD 0x0323 /* Huge pointer to 64-bit unsigned */ +#define T_PHBOOL08 0x0330 /* Huge pointer to 8-bit Boolean */ +#define T_PHBOOL16 0x0331 /* Huge pointer to 16-bit Boolean */ +#define T_PHBOOL32 0x0332 /* Huge pointer to 32-bit Boolean */ +#define T_PHBOOL64 0x0333 /* Huge pointer to 64-bit Boolean */ +#define T_PHREAL32 0x0340 /* Huge pointer to 32-bit real */ +#define T_PHREAL64 0x0341 /* Huge pointer to 64-bit real */ +#define T_PHREAL80 0x0342 /* Huge pointer to 80-bit real */ +#define T_PHREAL128 0x0343 /* Huge pointer to 128-bit real */ +#define T_PHREAL48 0x0344 /* Huge pointer to 48-bit real */ +#define T_PHCPLX32 0x0350 /* Huge pointer to 32-bit complex */ +#define T_PHCPLX64 0x0351 /* Huge pointer to 64-bit complex */ +#define T_PHCPLX80 0x0352 /* Huge pointer to 80-bit complex */ +#define T_PHCPLX128 0x0353 /* Huge pointer to 128-bit real */ +#define T_PHRCHAR 0x0370 /* Huge pointer to a real char */ +#define T_PHWCHAR 0x0371 /* Huge pointer to a wide char */ +#define T_PHINT2 0x0372 /* Huge pointer to 16-bit signed int */ +#define T_PHUINT2 0x0373 /* Huge pointer to 16-bit unsigned int */ +#define T_PHINT4 0x0374 /* Huge pointer to 32-bit signed int */ +#define T_PHUINT4 0x0375 /* Huge pointer to 32-bit unsigned int */ +#define T_PHINT8 0x0376 /* Huge pointer to 64-bit signed int */ +#define T_PHUINT8 0x0377 /* Huge pointer to 64-bit unsigned int */ + + +/* 32-bit near pointers to basic types */ +#define T_32PVOID 0x0403 /* 32-bit near pointer to void */ +#define T_32PHRESULT 0x0408 /* 16:32 near pointer to HRESULT - or error code ??? */ +#define T_32PCHAR 0x0410 /* 16:32 near pointer to 8-bit signed */ +#define T_32PSHORT 0x0411 /* 16:32 near pointer to 16-bit signed */ +#define T_32PLONG 0x0412 /* 16:32 near pointer to 32-bit signed */ +#define T_32PQUAD 0x0413 /* 16:32 near pointer to 64-bit signed */ +#define T_32PUCHAR 0x0420 /* 16:32 near pointer to 8-bit unsigned */ +#define T_32PUSHORT 0x0421 /* 16:32 near pointer to 16-bit unsigned */ +#define T_32PULONG 0x0422 /* 16:32 near pointer to 32-bit unsigned */ +#define T_32PUQUAD 0x0423 /* 16:32 near pointer to 64-bit unsigned */ +#define T_32PBOOL08 0x0430 /* 16:32 near pointer to 8-bit Boolean */ +#define T_32PBOOL16 0x0431 /* 16:32 near pointer to 16-bit Boolean */ +#define T_32PBOOL32 0x0432 /* 16:32 near pointer to 32-bit Boolean */ +#define T_32PBOOL64 0x0433 /* 16:32 near pointer to 64-bit Boolean */ +#define T_32PREAL32 0x0440 /* 16:32 near pointer to 32-bit real */ +#define T_32PREAL64 0x0441 /* 16:32 near pointer to 64-bit real */ +#define T_32PREAL80 0x0442 /* 16:32 near pointer to 80-bit real */ +#define T_32PREAL128 0x0443 /* 16:32 near pointer to 128-bit real */ +#define T_32PREAL48 0x0444 /* 16:32 near pointer to 48-bit real */ +#define T_32PCPLX32 0x0450 /* 16:32 near pointer to 32-bit complex */ +#define T_32PCPLX64 0x0451 /* 16:32 near pointer to 64-bit complex */ +#define T_32PCPLX80 0x0452 /* 16:32 near pointer to 80-bit complex */ +#define T_32PCPLX128 0x0453 /* 16:32 near pointer to 128-bit complex */ +#define T_32PRCHAR 0x0470 /* 16:32 near pointer to a real char */ +#define T_32PWCHAR 0x0471 /* 16:32 near pointer to a wide char */ +#define T_32PINT2 0x0472 /* 16:32 near pointer to 16-bit signed int */ +#define T_32PUINT2 0x0473 /* 16:32 near pointer to 16-bit unsigned int */ +#define T_32PINT4 0x0474 /* 16:32 near pointer to 32-bit signed int */ +#define T_32PUINT4 0x0475 /* 16:32 near pointer to 32-bit unsigned int */ +#define T_32PINT8 0x0476 /* 16:32 near pointer to 64-bit signed int */ +#define T_32PUINT8 0x0477 /* 16:32 near pointer to 64-bit unsigned int */ + + +/* 32-bit far pointers to basic types */ +#define T_32PFVOID 0x0503 /* 32-bit far pointer to void */ +#define T_32PFCHAR 0x0510 /* 16:32 far pointer to 8-bit signed */ +#define T_32PFSHORT 0x0511 /* 16:32 far pointer to 16-bit signed */ +#define T_32PFLONG 0x0512 /* 16:32 far pointer to 32-bit signed */ +#define T_32PFQUAD 0x0513 /* 16:32 far pointer to 64-bit signed */ +#define T_32PFUCHAR 0x0520 /* 16:32 far pointer to 8-bit unsigned */ +#define T_32PFUSHORT 0x0521 /* 16:32 far pointer to 16-bit unsigned */ +#define T_32PFULONG 0x0522 /* 16:32 far pointer to 32-bit unsigned */ +#define T_32PFUQUAD 0x0523 /* 16:32 far pointer to 64-bit unsigned */ +#define T_32PFBOOL08 0x0530 /* 16:32 far pointer to 8-bit Boolean */ +#define T_32PFBOOL16 0x0531 /* 16:32 far pointer to 16-bit Boolean */ +#define T_32PFBOOL32 0x0532 /* 16:32 far pointer to 32-bit Boolean */ +#define T_32PFBOOL64 0x0533 /* 16:32 far pointer to 64-bit Boolean */ +#define T_32PFREAL32 0x0540 /* 16:32 far pointer to 32-bit real */ +#define T_32PFREAL64 0x0541 /* 16:32 far pointer to 64-bit real */ +#define T_32PFREAL80 0x0542 /* 16:32 far pointer to 80-bit real */ +#define T_32PFREAL128 0x0543 /* 16:32 far pointer to 128-bit real */ +#define T_32PFREAL48 0x0544 /* 16:32 far pointer to 48-bit real */ +#define T_32PFCPLX32 0x0550 /* 16:32 far pointer to 32-bit complex */ +#define T_32PFCPLX64 0x0551 /* 16:32 far pointer to 64-bit complex */ +#define T_32PFCPLX80 0x0552 /* 16:32 far pointer to 80-bit complex */ +#define T_32PFCPLX128 0x0553 /* 16:32 far pointer to 128-bit complex */ +#define T_32PFRCHAR 0x0570 /* 16:32 far pointer to a real char */ +#define T_32PFWCHAR 0x0571 /* 16:32 far pointer to a wide char */ +#define T_32PFINT2 0x0572 /* 16:32 far pointer to 16-bit signed int */ +#define T_32PFUINT2 0x0573 /* 16:32 far pointer to 16-bit unsigned int */ +#define T_32PFINT4 0x0574 /* 16:32 far pointer to 32-bit signed int */ +#define T_32PFUINT4 0x0575 /* 16:32 far pointer to 32-bit unsigned int */ +#define T_32PFINT8 0x0576 /* 16:32 far pointer to 64-bit signed int */ +#define T_32PFUINT8 0x0577 /* 16:32 far pointer to 64-bit unsigned int */ + + +/* counts, bit masks, and shift values needed to access various parts of the built-in type numbers */ +#define T_MAXPREDEFINEDTYPE 0x0580 /* maximum type index for all built-in types */ +#define T_MAXBASICTYPE 0x0080 /* maximum type index all non-pointer built-in types */ +#define T_BASICTYPE_MASK 0x00ff /* mask of bits that can potentially identify a non-pointer basic type */ +#define T_BASICTYPE_SHIFT 8 /* shift count to push out the basic type bits from a type number */ +#define T_MODE_MASK 0x0700 /* type mode mask (ptr/non-ptr) */ +#define T_SIZE_MASK 0x0007 /* type size mask (depends on 'type' value) */ +#define T_TYPE_MASK 0x00f0 /* type type mask (data treatment mode) */ + +/* bit patterns for the portion of a built-in type number */ +#define T_NEARPTR_BITS 0x0100 +#define T_FARPTR_BITS 0x0200 +#define T_HUGEPTR_BITS 0x0300 +#define T_NEAR32PTR_BITS 0x0400 +#define T_FAR32PTR_BITS 0x0500 +#define T_NEAR64PTR_BITS 0x0600 #define LF_MODIFIER_V1 0x0001 #define LF_POINTER_V1 0x0002 @@ -1065,6 +1341,16 @@ union codeview_symbol char name[1]; } stack_v3; + struct + { + short int len; /* Total length of this entry */ + short int id; /* Always S_BPREL_V3 */ + int offset; /* Stack offset relative to BP */ + unsigned int symtype; + unsigned short unknown; + char name[1]; + } stack_xxxx_v3; + struct { short int len; /* Total length of this entry */ @@ -1307,7 +1593,8 @@ union codeview_symbol #define S_PUB_V3 0x110E #define S_LPROC_V3 0x110F #define S_GPROC_V3 0x1110 -#define S_MSTOOL_V3 0x1116 /* not really understood */ +#define S_BPREL_XXXX_V3 0x1111 /* not really understood, but looks like bprel... */ +#define S_MSTOOL_V3 0x1116 /* compiler command line options and build information */ #define S_PUB_FUNC1_V3 0x1125 /* didn't get the difference between the two */ #define S_PUB_FUNC2_V3 0x1127 @@ -1523,7 +1810,8 @@ typedef struct _PDB_SYMBOLS DWORD unknown; DWORD hash1_file; DWORD hash2_file; - DWORD gsym_file; + WORD gsym_file; + WORD unknown1; DWORD module_size; DWORD offset_size; DWORD hash_size; diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index 288ee4b29d1..d98a15e7782 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -44,7 +44,7 @@ reactos/dll/win32/crypt32 # Synced to Wine-1_0-rc1 reactos/dll/win32/cryptdll # Autosync reactos/dll/win32/cryptnet # Autosync reactos/dll/win32/cryptui # Autosync -reactos/dll/win32/dbghelp # Synced to Wine-20080106 +reactos/dll/win32/dbghelp # Synced to Wine-20080802 reactos/dll/win32/dciman32 # Synced to Wine-1_0-rc2 reactos/dll/win32/gdiplus # Autosync reactos/dll/win32/hhctrl.ocx # Autosync From 42b84f7df1f86742d4d1df23db91ca51683c9a8b Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sat, 2 Aug 2008 18:35:08 +0000 Subject: [PATCH 090/304] Revert r35043 on shell32/fprop.c svn path=/trunk/; revision=35044 --- reactos/dll/win32/shell32/fprop.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/shell32/fprop.c b/reactos/dll/win32/shell32/fprop.c index 39ed0f69e0d..6cb44310181 100644 --- a/reactos/dll/win32/shell32/fprop.c +++ b/reactos/dll/win32/shell32/fprop.c @@ -349,10 +349,10 @@ SH_FileGeneralSetFileSizeTime(HWND hwndDlg, WCHAR * lpfilename, PULARGE_INTEGER return FALSE; } CloseHandle(hFile); - if (!StrFormatByteSizeW(file_size.QuadPart, resultstr, sizeof(resultstr)/sizeof(resultstr[0]))); + if (!StrFormatByteSizeW(file_size.QuadPart, resultstr, sizeof(resultstr) / sizeof(WCHAR))) return FALSE; hDlgCtrl = GetDlgItem(hwndDlg, 14011); - ERR("result size %u resultstr %s %s\n", file_size.QuadPart, debugstr_w(resultstr), resultstr); + TRACE("result size %u resultstr %s\n", file_size.QuadPart, debugstr_w(resultstr)); SendMessageW(hDlgCtrl, WM_SETTEXT, (WPARAM)NULL, (LPARAM)resultstr); if (lpfilesize) From f2341b9cf072a99520a555c47f6163c9892bc8c7 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Sat, 2 Aug 2008 20:07:59 +0000 Subject: [PATCH 091/304] NtGdiGetRegionData: Use correct address of region header (&obj->rdh, not obj). Also, for the contents, just use 'rgndata->Buffer' as the destination address instead of doing funky pointer arithmetic. svn path=/trunk/; revision=35045 --- reactos/subsystems/win32/win32k/objects/region.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/region.c b/reactos/subsystems/win32/win32k/objects/region.c index 2b8320e4ad1..606e03635fe 100644 --- a/reactos/subsystems/win32/win32k/objects/region.c +++ b/reactos/subsystems/win32/win32k/objects/region.c @@ -3174,12 +3174,8 @@ NtGdiGetRegionData( _SEH_TRY { ProbeForWrite(rgndata, count, 1); - RtlCopyMemory(rgndata, - obj, - sizeof(RGNDATAHEADER)); - RtlCopyMemory((PVOID)((ULONG_PTR)rgndata + (ULONG_PTR)sizeof(RGNDATAHEADER)), - obj->Buffer, - size); + RtlCopyMemory(rgndata, &obj->rdh, sizeof(RGNDATAHEADER)); + RtlCopyMemory(rgndata->Buffer, obj->Buffer, size); } _SEH_HANDLE { From d6872d359d8d892548e9580a430cd1e3a9b12f98 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Sat, 2 Aug 2008 21:57:53 +0000 Subject: [PATCH 092/304] Reorganize shdocvw: - Moved and renamed language resource files into created 'lang' directory. - Outdated shdocvw_ros.diff removed. svn path=/trunk/; revision=35047 --- .../win32/shdocvw/{Bg.rc => lang/bg-BG.rc} | 0 .../win32/shdocvw/{Cs.rc => lang/cz-CZ.rc} | 0 .../win32/shdocvw/{De.rc => lang/de-DE.rc} | 0 .../win32/shdocvw/{En.rc => lang/en-US.rc} | 0 .../win32/shdocvw/{Es.rc => lang/es-ES.rc} | 0 .../win32/shdocvw/{Fi.rc => lang/fi-FI.rc} | 0 .../win32/shdocvw/{Fr.rc => lang/fr-FR.rc} | 0 .../win32/shdocvw/{Hu.rc => lang/hu-HU.rc} | 0 .../win32/shdocvw/{Ja.rc => lang/ja-JP.rc} | 0 .../win32/shdocvw/{Ko.rc => lang/ko-KO.rc} | 0 .../win32/shdocvw/{Nl.rc => lang/nl-NL.rc} | 0 .../win32/shdocvw/{No.rc => lang/no-NO.rc} | 0 .../win32/shdocvw/{Pl.rc => lang/pl-PL.rc} | 0 .../win32/shdocvw/{Pt.rc => lang/pt-PT.rc} | 0 .../win32/shdocvw/{Ru.rc => lang/ru-RU.rc} | 0 .../win32/shdocvw/{Sk.rc => lang/sk-SK.rc} | 0 .../win32/shdocvw/{Sv.rc => lang/sv-SE.rc} | 0 .../win32/shdocvw/{Uk.rc => lang/uk-UA.rc} | 0 reactos/dll/win32/shdocvw/shdocvw.rc | 36 +++++++-------- reactos/dll/win32/shdocvw/shdocvw_ros.diff | 46 ------------------- 20 files changed, 18 insertions(+), 64 deletions(-) rename reactos/dll/win32/shdocvw/{Bg.rc => lang/bg-BG.rc} (100%) rename reactos/dll/win32/shdocvw/{Cs.rc => lang/cz-CZ.rc} (100%) rename reactos/dll/win32/shdocvw/{De.rc => lang/de-DE.rc} (100%) rename reactos/dll/win32/shdocvw/{En.rc => lang/en-US.rc} (100%) rename reactos/dll/win32/shdocvw/{Es.rc => lang/es-ES.rc} (100%) rename reactos/dll/win32/shdocvw/{Fi.rc => lang/fi-FI.rc} (100%) rename reactos/dll/win32/shdocvw/{Fr.rc => lang/fr-FR.rc} (100%) rename reactos/dll/win32/shdocvw/{Hu.rc => lang/hu-HU.rc} (100%) rename reactos/dll/win32/shdocvw/{Ja.rc => lang/ja-JP.rc} (100%) rename reactos/dll/win32/shdocvw/{Ko.rc => lang/ko-KO.rc} (100%) rename reactos/dll/win32/shdocvw/{Nl.rc => lang/nl-NL.rc} (100%) rename reactos/dll/win32/shdocvw/{No.rc => lang/no-NO.rc} (100%) rename reactos/dll/win32/shdocvw/{Pl.rc => lang/pl-PL.rc} (100%) rename reactos/dll/win32/shdocvw/{Pt.rc => lang/pt-PT.rc} (100%) rename reactos/dll/win32/shdocvw/{Ru.rc => lang/ru-RU.rc} (100%) rename reactos/dll/win32/shdocvw/{Sk.rc => lang/sk-SK.rc} (100%) rename reactos/dll/win32/shdocvw/{Sv.rc => lang/sv-SE.rc} (100%) rename reactos/dll/win32/shdocvw/{Uk.rc => lang/uk-UA.rc} (100%) delete mode 100644 reactos/dll/win32/shdocvw/shdocvw_ros.diff diff --git a/reactos/dll/win32/shdocvw/Bg.rc b/reactos/dll/win32/shdocvw/lang/bg-BG.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Bg.rc rename to reactos/dll/win32/shdocvw/lang/bg-BG.rc diff --git a/reactos/dll/win32/shdocvw/Cs.rc b/reactos/dll/win32/shdocvw/lang/cz-CZ.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Cs.rc rename to reactos/dll/win32/shdocvw/lang/cz-CZ.rc diff --git a/reactos/dll/win32/shdocvw/De.rc b/reactos/dll/win32/shdocvw/lang/de-DE.rc similarity index 100% rename from reactos/dll/win32/shdocvw/De.rc rename to reactos/dll/win32/shdocvw/lang/de-DE.rc diff --git a/reactos/dll/win32/shdocvw/En.rc b/reactos/dll/win32/shdocvw/lang/en-US.rc similarity index 100% rename from reactos/dll/win32/shdocvw/En.rc rename to reactos/dll/win32/shdocvw/lang/en-US.rc diff --git a/reactos/dll/win32/shdocvw/Es.rc b/reactos/dll/win32/shdocvw/lang/es-ES.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Es.rc rename to reactos/dll/win32/shdocvw/lang/es-ES.rc diff --git a/reactos/dll/win32/shdocvw/Fi.rc b/reactos/dll/win32/shdocvw/lang/fi-FI.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Fi.rc rename to reactos/dll/win32/shdocvw/lang/fi-FI.rc diff --git a/reactos/dll/win32/shdocvw/Fr.rc b/reactos/dll/win32/shdocvw/lang/fr-FR.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Fr.rc rename to reactos/dll/win32/shdocvw/lang/fr-FR.rc diff --git a/reactos/dll/win32/shdocvw/Hu.rc b/reactos/dll/win32/shdocvw/lang/hu-HU.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Hu.rc rename to reactos/dll/win32/shdocvw/lang/hu-HU.rc diff --git a/reactos/dll/win32/shdocvw/Ja.rc b/reactos/dll/win32/shdocvw/lang/ja-JP.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Ja.rc rename to reactos/dll/win32/shdocvw/lang/ja-JP.rc diff --git a/reactos/dll/win32/shdocvw/Ko.rc b/reactos/dll/win32/shdocvw/lang/ko-KO.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Ko.rc rename to reactos/dll/win32/shdocvw/lang/ko-KO.rc diff --git a/reactos/dll/win32/shdocvw/Nl.rc b/reactos/dll/win32/shdocvw/lang/nl-NL.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Nl.rc rename to reactos/dll/win32/shdocvw/lang/nl-NL.rc diff --git a/reactos/dll/win32/shdocvw/No.rc b/reactos/dll/win32/shdocvw/lang/no-NO.rc similarity index 100% rename from reactos/dll/win32/shdocvw/No.rc rename to reactos/dll/win32/shdocvw/lang/no-NO.rc diff --git a/reactos/dll/win32/shdocvw/Pl.rc b/reactos/dll/win32/shdocvw/lang/pl-PL.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Pl.rc rename to reactos/dll/win32/shdocvw/lang/pl-PL.rc diff --git a/reactos/dll/win32/shdocvw/Pt.rc b/reactos/dll/win32/shdocvw/lang/pt-PT.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Pt.rc rename to reactos/dll/win32/shdocvw/lang/pt-PT.rc diff --git a/reactos/dll/win32/shdocvw/Ru.rc b/reactos/dll/win32/shdocvw/lang/ru-RU.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Ru.rc rename to reactos/dll/win32/shdocvw/lang/ru-RU.rc diff --git a/reactos/dll/win32/shdocvw/Sk.rc b/reactos/dll/win32/shdocvw/lang/sk-SK.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Sk.rc rename to reactos/dll/win32/shdocvw/lang/sk-SK.rc diff --git a/reactos/dll/win32/shdocvw/Sv.rc b/reactos/dll/win32/shdocvw/lang/sv-SE.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Sv.rc rename to reactos/dll/win32/shdocvw/lang/sv-SE.rc diff --git a/reactos/dll/win32/shdocvw/Uk.rc b/reactos/dll/win32/shdocvw/lang/uk-UA.rc similarity index 100% rename from reactos/dll/win32/shdocvw/Uk.rc rename to reactos/dll/win32/shdocvw/lang/uk-UA.rc diff --git a/reactos/dll/win32/shdocvw/shdocvw.rc b/reactos/dll/win32/shdocvw/shdocvw.rc index ae2deeb028e..c0e09977768 100644 --- a/reactos/dll/win32/shdocvw/shdocvw.rc +++ b/reactos/dll/win32/shdocvw/shdocvw.rc @@ -23,21 +23,21 @@ #include "version.rc" -#include "Bg.rc" -#include "Cs.rc" -#include "De.rc" -#include "En.rc" -#include "Es.rc" -#include "Fi.rc" -#include "Fr.rc" -#include "Hu.rc" -#include "Ja.rc" -#include "Ko.rc" -#include "Nl.rc" -#include "No.rc" -#include "Pl.rc" -#include "Pt.rc" -#include "Ru.rc" -#include "Sk.rc" -#include "Sv.rc" -#include "Uk.rc" +#include "lang/bg-BG.rc" +#include "lang/cz-CZ.rc" +#include "lang/de-DE.rc" +#include "lang/en-US.rc" +#include "lang/es-ES.rc" +#include "lang/fi-FI.rc" +#include "lang/fr-FR.rc" +#include "lang/hu-HU.rc" +#include "lang/ja-JP.rc" +#include "lang/ko-KO.rc" +#include "lang/nl-NL.rc" +#include "lang/no-NO.rc" +#include "lang/pl-PL.rc" +#include "lang/pt-PT.rc" +#include "lang/ru-RU.rc" +#include "lang/sk-SK.rc" +#include "lang/sv-SE.rc" +#include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/shdocvw/shdocvw_ros.diff b/reactos/dll/win32/shdocvw/shdocvw_ros.diff deleted file mode 100644 index 5a88a428358..00000000000 --- a/reactos/dll/win32/shdocvw/shdocvw_ros.diff +++ /dev/null @@ -1,46 +0,0 @@ -Index: shdocvw.rc -=================================================================== ---- shdocvw.rc (revision 25694) -+++ shdocvw.rc (revision 25695) -@@ -38,3 +38,4 @@ - #include "Pt.rc" - #include "Ru.rc" - #include "Sv.rc" -+#include "Uk.rc" -Index: Uk.rc -=================================================================== ---- Uk.rc (revision 25695) -+++ Uk.rc (working copy) -@@ -0,0 +1,26 @@ -+/* -+ * PROJECT: Shell Doc Object and Control Library -+ * LICENSE: GPL - See COPYING in the top level directory -+ * FILE: dll/win32/shdocvw/Uk.rc -+ * PURPOSE: Ukraianian Language File for shdocvw -+ * TRANSLATOR: Artem Reznikov -+ */ -+ -+LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT -+ -+100 DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 62 -+STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -+CAPTION " Mozilla Active X" -+FONT 8, "MS Shell Dlg" -+{ -+ CONTROL "Progress1",1000,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12 -+ LTEXT "", 104, 10, 30, 200, 10, SS_CENTER -+ PUSHBUTTON "", IDCANCEL, 85, 44, 50, 15, WS_GROUP | WS_TABSTOP -+} -+ -+STRINGTABLE -+BEGIN -+ 1001 " ' ActiveX ,\n" \ -+ " Mozilla Active X ." \ -+ " ??" -+END - -Property changes on: Uk.rc -___________________________________________________________________ -Name: svn:eol-style - + native - From 57edd3268de55ef2efa24fb210587c392feabee3 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Sat, 2 Aug 2008 22:01:46 +0000 Subject: [PATCH 093/304] Fix step and next commands. Not perfect, but working. Also, make all printing go through KdbpPrint, and switch to KeStallExecutionProcessor for checking on messages from the terminal. Use the classic unix 100ms time limit for messages. We need to refactor debug entry. There's a whole bunch of intermixed code that basically handles 5 distinct states here: 1) Unexpected stop against a loose breakpoint instruction 2) Expected stop against a breakpoint instruction we placed 3) Singlestep after an expected breakpoint, user was not stepping 4) Singlestep after an expected breakpoint, user was stepping 5) Singlestep trap, user was not stepping (memory breakpoint). svn path=/trunk/; revision=35048 --- reactos/ntoskrnl/kdbg/kdb.c | 52 +++++++++++++++-------------- reactos/ntoskrnl/kdbg/kdb_cli.c | 46 ++++++++++++++----------- reactos/ntoskrnl/kdbg/kdb_symbols.c | 16 +++++++-- 3 files changed, 68 insertions(+), 46 deletions(-) diff --git a/reactos/ntoskrnl/kdbg/kdb.c b/reactos/ntoskrnl/kdbg/kdb.c index a07882a5e69..2973c50a39b 100644 --- a/reactos/ntoskrnl/kdbg/kdb.c +++ b/reactos/ntoskrnl/kdbg/kdb.c @@ -1203,9 +1203,9 @@ KdbpInternalEnter() Thread->Tcb.StackLimit = (ULONG)KdbStack; Thread->Tcb.KernelStack = (char*)KdbStack + KDB_STACK_SIZE; - /*KdbpPrint("Switching to KDB stack 0x%08x-0x%08x\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase);*/ + /*KdbpPrint("Switching to KDB stack 0x%08x-0x%08x (Current Stack is 0x%08x)\n", Thread->Tcb.StackLimit, Thread->Tcb.StackBase, Esp);*/ - KdbpStackSwitchAndCall(Thread->Tcb.KernelStack, KdbpCallMainLoop); + KdbpStackSwitchAndCall(KdbStack + KDB_STACK_SIZE - sizeof(ULONG), KdbpCallMainLoop); Thread->Tcb.InitialStack = SavedInitialStack; Thread->Tcb.StackBase = SavedStackBase; @@ -1330,7 +1330,7 @@ KdbEnterDebuggerException( if (!NT_SUCCESS(KdbpOverwriteInstruction(KdbCurrentProcess, BreakPoint->Address, BreakPoint->Data.SavedInstruction, NULL))) { - DbgPrint("Couldn't restore original instruction after INT3! Cannot continue execution.\n"); + KdbpPrint("Couldn't restore original instruction after INT3! Cannot continue execution.\n"); KEBUGCHECK(0); } } @@ -1361,7 +1361,7 @@ KdbEnterDebuggerException( if ((KdbSingleStepOver && !KdbpStepOverInstruction(TrapFrame->Eip)) || (!KdbSingleStepOver && !KdbpStepIntoInstruction(TrapFrame->Eip))) { - TrapFrame->EFlags |= X86_EFLAGS_TF; + Context->EFlags |= X86_EFLAGS_TF; } goto continue_execution; /* return */ } @@ -1377,7 +1377,7 @@ KdbEnterDebuggerException( BreakPoint->Type == KdbBreakPointTemporary) { ASSERT(ExceptionCode == STATUS_BREAKPOINT); - TrapFrame->EFlags |= X86_EFLAGS_TF; + Context->EFlags |= X86_EFLAGS_TF; KdbBreakPointToReenable = BreakPoint; } @@ -1410,12 +1410,12 @@ KdbEnterDebuggerException( if (BreakPoint->Type == KdbBreakPointSoftware) { - DbgPrint("Entered debugger on breakpoint #%d: EXEC 0x%04x:0x%08x\n", + KdbpPrint("Entered debugger on breakpoint #%d: EXEC 0x%04x:0x%08x\n", KdbLastBreakPointNr, TrapFrame->SegCs & 0xffff, TrapFrame->Eip); } else if (BreakPoint->Type == KdbBreakPointHardware) { - DbgPrint("Entered debugger on breakpoint #%d: %s 0x%08x\n", + KdbpPrint("Entered debugger on breakpoint #%d: %s 0x%08x\n", KdbLastBreakPointNr, (BreakPoint->Data.Hw.AccessType == KdbAccessRead) ? "READ" : ((BreakPoint->Data.Hw.AccessType == KdbAccessWrite) ? "WRITE" : @@ -1444,36 +1444,38 @@ KdbEnterDebuggerException( if (!NT_SUCCESS(KdbpOverwriteInstruction(KdbCurrentProcess, BreakPoint->Address, 0xCC, &BreakPoint->Data.SavedInstruction))) { - DbgPrint("Warning: Couldn't reenable breakpoint %d\n", + KdbpPrint("Warning: Couldn't reenable breakpoint %d\n", BreakPoint - KdbBreakPoints); } /* Unset TF if we are no longer single stepping. */ if (KdbNumSingleSteps == 0) - TrapFrame->EFlags &= ~X86_EFLAGS_TF; + Context->EFlags &= ~X86_EFLAGS_TF; goto continue_execution; /* return */ } /* Check if we expect a single step */ if ((TrapFrame->Dr6 & 0xf) == 0 && KdbNumSingleSteps > 0) { - /*ASSERT((TrapFrame->Eflags & X86_EFLAGS_TF) != 0);*/ + /*ASSERT((Context->Eflags & X86_EFLAGS_TF) != 0);*/ if (--KdbNumSingleSteps > 0) { if ((KdbSingleStepOver && KdbpStepOverInstruction(TrapFrame->Eip)) || (!KdbSingleStepOver && KdbpStepIntoInstruction(TrapFrame->Eip))) { - TrapFrame->EFlags &= ~X86_EFLAGS_TF; + Context->EFlags &= ~X86_EFLAGS_TF; } else { - TrapFrame->EFlags |= X86_EFLAGS_TF; + Context->EFlags |= X86_EFLAGS_TF; } - goto continue_execution; /* return */ + goto continue_execution; /* return */ } - - TrapFrame->EFlags &= ~X86_EFLAGS_TF; - KdbEnteredOnSingleStep = TRUE; + else + { + Context->EFlags &= ~X86_EFLAGS_TF; + KdbEnteredOnSingleStep = TRUE; + } } else { @@ -1481,7 +1483,7 @@ KdbEnterDebuggerException( { return kdHandleException; } - DbgPrint("Entered debugger on unexpected debug trap!\n"); + KdbpPrint("Entered debugger on unexpected debug trap!\n"); } } else if (ExceptionCode == STATUS_BREAKPOINT) @@ -1496,7 +1498,7 @@ KdbEnterDebuggerException( return kdHandleException; } - DbgPrint("Entered debugger on embedded INT3 at 0x%04x:0x%08x.\n", + KdbpPrint("Entered debugger on embedded INT3 at 0x%04x:0x%08x.\n", TrapFrame->SegCs & 0xffff, TrapFrame->Eip - 1); } else @@ -1510,7 +1512,7 @@ KdbEnterDebuggerException( return ContinueType; } - DbgPrint("Entered debugger on %s-chance exception (Exception Code: 0x%x) (%s)\n", + KdbpPrint("Entered debugger on %s-chance exception (Exception Code: 0x%x) (%s)\n", FirstChance ? "first" : "last", ExceptionCode, ExceptionString); if (ExceptionCode == STATUS_ACCESS_VIOLATION && ExceptionRecord != NULL && ExceptionRecord->NumberParameters != 0) @@ -1528,15 +1530,15 @@ KdbEnterDebuggerException( #endif Err = TrapFrame->ErrCode; - DbgPrint("Memory at 0x%p could not be %s: ", TrapCr2, (Err & (1 << 1)) ? "written" : "read"); + KdbpPrint("Memory at 0x%p could not be %s: ", TrapCr2, (Err & (1 << 1)) ? "written" : "read"); if ((Err & (1 << 0)) == 0) - DbgPrint("Page not present.\n"); + KdbpPrint("Page not present.\n"); else { if ((Err & (1 << 3)) != 0) - DbgPrint("Reserved bits in page directory set.\n"); + KdbpPrint("Reserved bits in page directory set.\n"); else - DbgPrint("Page protection violation.\n"); + KdbpPrint("Page protection violation.\n"); } } } @@ -1577,7 +1579,7 @@ KdbEnterDebuggerException( } else { - KdbCurrentTrapFrame->Tf.EFlags |= X86_EFLAGS_TF; + Context->EFlags |= X86_EFLAGS_TF; } } @@ -1601,7 +1603,7 @@ KdbEnterDebuggerException( continue_execution: /* Clear debug status */ - if (ExceptionCode == STATUS_SINGLE_STEP || ExceptionCode == STATUS_BREAKPOINT) /* FIXME: Why clear DR6 on INT3? */ + if (ExceptionCode == STATUS_BREAKPOINT) /* FIXME: Why clear DR6 on INT3? */ { /* Set the RF flag so we don't trigger the same breakpoint again. */ if (Resume) diff --git a/reactos/ntoskrnl/kdbg/kdb_cli.c b/reactos/ntoskrnl/kdbg/kdb_cli.c index 6fbce3da0ae..e44f0de68e3 100644 --- a/reactos/ntoskrnl/kdbg/kdb_cli.c +++ b/reactos/ntoskrnl/kdbg/kdb_cli.c @@ -1395,8 +1395,10 @@ KdbpCmdMod(ULONG Argc, PCHAR Argv[]) { if (!KdbpSymFindModuleByIndex(0, &Info)) { - KdbpPrint("No modules.\n"); - return TRUE; + ULONG_PTR ntoskrnlBase = ((ULONG_PTR)KdbpCmdMod) & 0xfff00000; + KdbpPrint(" Base Size Name\n"); + KdbpPrint(" %08x %08x %s\n", ntoskrnlBase, 0, "ntoskrnl.exe"); + return TRUE; } i = 1; } @@ -1915,6 +1917,8 @@ KdbpPrint( TerminalInitialized = TRUE; Length = 0; + KeStallExecutionProcessor(100000); + for (;;) { c = KdbpTryGetCharSerial(5000); @@ -1937,6 +1941,7 @@ KdbpPrint( { /* Try to query number of rows from terminal. A reply looks like "\x1b[8;24;80t" */ TerminalReportsSize = FALSE; + KeStallExecutionProcessor(100000); DbgPrint("\x1b[18t"); c = KdbpTryGetCharSerial(5000); if (c == KEY_ESC) @@ -1968,6 +1973,8 @@ KdbpPrint( } } } + /* Clear further characters */ + while ((c = KdbpTryGetCharSerial(5000)) != -1); } } @@ -2066,7 +2073,7 @@ KdbpPrint( } } - DbgPrint("%s", p); + DbgPrint("%s", p); if (c != '\0') p[i + 1] = c; @@ -2229,13 +2236,14 @@ KdbpReadCommand( /* Read the next char - this is to throw away a \n which most clients should * send after \r. */ + KeStallExecutionProcessor(100000); if (KdbDebugState & KD_DEBUG_KDSERIAL) NextKey = KdbpTryGetCharSerial(5); else NextKey = KdbpTryGetCharKeyboard(&ScanCode, 5); if (NextKey == '\n' || NextKey == -1) /* \n or no response at all */ NextKey = '\0'; - DbgPrint("\n"); + KdbpPrint("\n"); /* * Repeat the last command if the user presses enter. Reduces the * risk of RSI when single-stepping. @@ -2260,9 +2268,9 @@ KdbpReadCommand( Buffer--; *Buffer = 0; if (EchoOn) - DbgPrint("%c %c", KEY_BS, KEY_BS); + KdbpPrint("%c %c", KEY_BS, KEY_BS); else - DbgPrint(" %c", KEY_BS); + KdbpPrint(" %c", KEY_BS); } } else if (ScanCode == KEY_SCAN_UP) @@ -2287,15 +2295,15 @@ KdbpReadCommand( Buffer--; *Buffer = 0; if (EchoOn) - DbgPrint("%c %c", KEY_BS, KEY_BS); + KdbpPrint("%c %c", KEY_BS, KEY_BS); else - DbgPrint(" %c", KEY_BS); + KdbpPrint(" %c", KEY_BS); } i = min(strlen(KdbCommandHistory[CmdHistIndex]), Size - 1); memcpy(Orig, KdbCommandHistory[CmdHistIndex], i); Orig[i] = '\0'; Buffer = Orig + i; - DbgPrint("%s", Orig); + KdbpPrint("%s", Orig); } } else if (ScanCode == KEY_SCAN_DOWN) @@ -2313,22 +2321,22 @@ KdbpReadCommand( Buffer--; *Buffer = 0; if (EchoOn) - DbgPrint("%c %c", KEY_BS, KEY_BS); + KdbpPrint("%c %c", KEY_BS, KEY_BS); else - DbgPrint(" %c", KEY_BS); + KdbpPrint(" %c", KEY_BS); } i = min(strlen(KdbCommandHistory[CmdHistIndex]), Size - 1); memcpy(Orig, KdbCommandHistory[CmdHistIndex], i); Orig[i] = '\0'; Buffer = Orig + i; - DbgPrint("%s", Orig); + KdbpPrint("%s", Orig); } } } else { if (EchoOn) - DbgPrint("%c", Key); + KdbpPrint("%c", Key); *Buffer = Key; Buffer++; @@ -2406,14 +2414,14 @@ KdbpCliMainLoop( { if (!KdbSymPrintAddress((PVOID)KdbCurrentTrapFrame->Tf.Eip)) { - DbgPrint("<%x>", KdbCurrentTrapFrame->Tf.Eip); + KdbpPrint("<%x>", KdbCurrentTrapFrame->Tf.Eip); } - DbgPrint(": "); + KdbpPrint(": "); if (KdbpDisassemble(KdbCurrentTrapFrame->Tf.Eip, KdbUseIntelSyntax) < 0) { - DbgPrint(""); + KdbpPrint(""); } - DbgPrint("\n"); + KdbpPrint("\n"); } /* Flush the input buffer */ @@ -2431,7 +2439,7 @@ KdbpCliMainLoop( do { /* Print the prompt */ - DbgPrint("kdb:> "); + KdbpPrint("kdb:> "); /* Read a command and remember it */ KdbpReadCommand(Command, sizeof (Command)); @@ -2456,7 +2464,7 @@ KdbpCliModuleLoaded(IN PUNICODE_STRING Name) if (!KdbBreakOnModuleLoad) return; - DbgPrint("Module %wZ loaded.\n", Name); + KdbpPrint("Module %wZ loaded.\n", Name); DbgBreakPointWithStatus(DBG_STATUS_CONTROL_C); } diff --git a/reactos/ntoskrnl/kdbg/kdb_symbols.c b/reactos/ntoskrnl/kdbg/kdb_symbols.c index 2d1ba0a796c..597f7a90592 100644 --- a/reactos/ntoskrnl/kdbg/kdb_symbols.c +++ b/reactos/ntoskrnl/kdbg/kdb_symbols.c @@ -26,7 +26,7 @@ typedef struct _IMAGE_SYMBOL_INFO_CACHE { static BOOLEAN LoadSymbols; static LIST_ENTRY SymbolFileListHead; static KSPIN_LOCK SymbolFileListLock; - +BOOLEAN KdbpSymbolsInitialized = FALSE; /* FUNCTIONS ****************************************************************/ @@ -57,6 +57,9 @@ KdbpSymFindUserModule(IN PVOID Address OPTIONAL, INT Count = 0; INT Length; + if (!KdbpSymbolsInitialized) + return FALSE; + CurrentProcess = PsGetCurrentProcess(); if (CurrentProcess != NULL) { @@ -110,6 +113,9 @@ KdbpSymFindModule(IN PVOID Address OPTIONAL, INT Count = 0; INT Length; + if (!KdbpSymbolsInitialized) + return FALSE; + current_entry = PsLoadedModuleList.Flink; while (current_entry != &PsLoadedModuleList) @@ -213,7 +219,7 @@ KdbSymPrintAddress(IN PVOID Address) CHAR FileName[256]; CHAR FunctionName[256]; - if (!KdbpSymFindModuleByAddress(Address, &Info)) + if (!KdbpSymbolsInitialized || !KdbpSymFindModuleByAddress(Address, &Info)) return FALSE; RelativeAddress = (ULONG_PTR) Address - Info.Base; @@ -259,6 +265,11 @@ KdbSymGetAddressInformation(IN PROSSYM_INFO RosSymInfo, OUT PCH FileName OPTIONAL, OUT PCH FunctionName OPTIONAL) { + if (!KdbpSymbolsInitialized) + { + return STATUS_UNSUCCESSFUL; + } + if (NULL == RosSymInfo) { return STATUS_UNSUCCESSFUL; @@ -772,6 +783,7 @@ KdbInitialize(PKD_DISPATCH_TABLE DispatchTable, SymbolsInfo.SizeOfImage = DataTableEntry->SizeOfImage; KdbSymProcessSymbols(NULL, &SymbolsInfo); + KdbpSymbolsInitialized = TRUE; } } From 1914d86bac73f9f448d6bb0ee02970afee5626b8 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Sat, 2 Aug 2008 22:09:22 +0000 Subject: [PATCH 094/304] - Remove some redundant ProcessData == NULL checks - ClientConnectionThread already checks this for every request. - CsrApiCallHandler: Get rid of "Found" variable and just return when the right definition is found. - Make CsrApiCallHandler use the return value from the function (previously unused) to set Request->Status, and trim the now-redundant Request->Status setting from tons of CSR_API functions. - CsrCreateProcess: Don't set shutdown parameters again - already set in CsrCreateProcessData. svn path=/trunk/; revision=35049 --- reactos/subsystems/win32/csrss/api/handle.c | 21 +- reactos/subsystems/win32/csrss/api/process.c | 79 +---- reactos/subsystems/win32/csrss/api/user.c | 10 +- reactos/subsystems/win32/csrss/api/wapi.c | 18 +- .../subsystems/win32/csrss/win32csr/alias.c | 67 ++-- .../subsystems/win32/csrss/win32csr/conio.c | 298 ++++++++---------- .../win32/csrss/win32csr/desktopbg.c | 34 +- .../subsystems/win32/csrss/win32csr/exitros.c | 32 +- 8 files changed, 193 insertions(+), 366 deletions(-) diff --git a/reactos/subsystems/win32/csrss/api/handle.c b/reactos/subsystems/win32/csrss/api/handle.c index 6b468fd5950..5a9efda16ff 100644 --- a/reactos/subsystems/win32/csrss/api/handle.c +++ b/reactos/subsystems/win32/csrss/api/handle.c @@ -66,10 +66,6 @@ NTSTATUS STDCALL CsrGetObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle, O ULONG h = (ULONG)Handle >> 2; DPRINT("CsrGetObject, Object: %x, %x, %x\n", Object, Handle, ProcessData ? ProcessData->HandleTableSize : 0); - if (ProcessData == NULL) - { - return STATUS_INVALID_PARAMETER; - } RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (!CsrIsConsoleHandle(Handle) || h >= ProcessData->HandleTableSize || (*Object = ProcessData->HandleTable[h].Object) == NULL @@ -117,10 +113,6 @@ CsrReleaseObject(PCSRSS_PROCESS_DATA ProcessData, ULONG h = (ULONG)Handle >> 2; Object_t *Object; - if (ProcessData == NULL) - { - return STATUS_INVALID_PARAMETER; - } RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (h >= ProcessData->HandleTableSize || (Object = ProcessData->HandleTable[h].Object) == NULL) @@ -143,11 +135,6 @@ NTSTATUS STDCALL CsrInsertObject(PCSRSS_PROCESS_DATA ProcessData, ULONG i; PVOID* Block; - if (ProcessData == NULL) - { - return STATUS_INVALID_PARAMETER; - } - RtlEnterCriticalSection(&ProcessData->HandleTableLock); for (i = 0; i < ProcessData->HandleTableSize; i++) @@ -188,9 +175,7 @@ NTSTATUS STDCALL CsrDuplicateHandleTable(PCSRSS_PROCESS_DATA SourceProcessData, { ULONG i; - if (SourceProcessData == NULL || - TargetProcessData == NULL || - TargetProcessData->HandleTableSize) + if (TargetProcessData->HandleTableSize) { return STATUS_INVALID_PARAMETER; } @@ -225,10 +210,6 @@ NTSTATUS STDCALL CsrVerifyObject( PCSRSS_PROCESS_DATA ProcessData, HANDLE Handle { ULONG h = (ULONG)Handle >> 2; - if (ProcessData == NULL) - { - return STATUS_INVALID_PARAMETER; - } if (h >= ProcessData->HandleTableSize || ProcessData->HandleTable[h].Object == NULL) { diff --git a/reactos/subsystems/win32/csrss/api/process.c b/reactos/subsystems/win32/csrss/api/process.c index 1c439fc8ab3..b3d954d9e95 100644 --- a/reactos/subsystems/win32/csrss/api/process.c +++ b/reactos/subsystems/win32/csrss/api/process.c @@ -228,7 +228,6 @@ CSR_API(CsrCreateProcess) NewProcessData = CsrCreateProcessData(Request->Data.CreateProcessRequest.NewProcessId); if (NewProcessData == NULL) { - Request->Status = STATUS_NO_MEMORY; return(STATUS_NO_MEMORY); } @@ -251,11 +250,6 @@ CSR_API(CsrCreateProcess) NewProcessData->ProcessGroup = ProcessData->ProcessGroup; } - /* Set default shutdown parameters */ - NewProcessData->ShutdownLevel = 0x280; - NewProcessData->ShutdownFlags = 0; - - Request->Status = STATUS_SUCCESS; return(STATUS_SUCCESS); } @@ -264,13 +258,7 @@ CSR_API(CsrTerminateProcess) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - return(Request->Status = STATUS_INVALID_PARAMETER); - } - ProcessData->Terminated = TRUE; - Request->Status = STATUS_SUCCESS; return STATUS_SUCCESS; } @@ -279,8 +267,6 @@ CSR_API(CsrConnectProcess) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - Request->Status = STATUS_SUCCESS; - return(STATUS_SUCCESS); } @@ -289,16 +275,9 @@ CSR_API(CsrGetShutdownParameters) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - return(Request->Status = STATUS_INVALID_PARAMETER); - } - Request->Data.GetShutdownParametersRequest.Level = ProcessData->ShutdownLevel; Request->Data.GetShutdownParametersRequest.Flags = ProcessData->ShutdownFlags; - Request->Status = STATUS_SUCCESS; - return(STATUS_SUCCESS); } @@ -307,16 +286,9 @@ CSR_API(CsrSetShutdownParameters) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - return(Request->Status = STATUS_INVALID_PARAMETER); - } - ProcessData->ShutdownLevel = Request->Data.SetShutdownParametersRequest.Level; ProcessData->ShutdownFlags = Request->Data.SetShutdownParametersRequest.Flags; - Request->Status = STATUS_SUCCESS; - return(STATUS_SUCCESS); } @@ -325,12 +297,7 @@ CSR_API(CsrGetInputHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - Request->Data.GetInputHandleRequest.InputHandle = INVALID_HANDLE_VALUE; - Request->Status = STATUS_INVALID_PARAMETER; - } - else if (ProcessData->Console) + if (ProcessData->Console) { Request->Status = CsrInsertObject(ProcessData, &Request->Data.GetInputHandleRequest.InputHandle, @@ -352,12 +319,7 @@ CSR_API(CsrGetOutputHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - Request->Data.GetOutputHandleRequest.OutputHandle = INVALID_HANDLE_VALUE; - Request->Status = STATUS_INVALID_PARAMETER; - } - else if (ProcessData->Console) + if (ProcessData->Console) { RtlEnterCriticalSection(&ProcessDataLock); Request->Status = CsrInsertObject(ProcessData, @@ -381,15 +343,7 @@ CSR_API(CsrCloseHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - Request->Status = STATUS_INVALID_PARAMETER; - } - else - { - Request->Status = CsrReleaseObject(ProcessData, Request->Data.CloseHandleRequest.Handle); - } - return Request->Status; + return CsrReleaseObject(ProcessData, Request->Data.CloseHandleRequest.Handle); } CSR_API(CsrVerifyHandle) @@ -415,22 +369,14 @@ CSR_API(CsrDuplicateHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (NULL == ProcessData) - { - DPRINT1("Invalid source process\n"); - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; - } - Index = (ULONG)Request->Data.DuplicateHandleRequest.Handle >> 2; RtlEnterCriticalSection(&ProcessData->HandleTableLock); if (Index >= ProcessData->HandleTableSize || (Entry = &ProcessData->HandleTable[Index])->Object == NULL) { DPRINT1("Couldn't dup invalid handle %p\n", Request->Data.DuplicateHandleRequest.Handle); - Request->Status = STATUS_INVALID_HANDLE; RtlLeaveCriticalSection(&ProcessData->HandleTableLock); - return Request->Status; + return STATUS_INVALID_HANDLE; } if (Request->Data.DuplicateHandleRequest.Options & DUPLICATE_SAME_ACCESS) @@ -445,9 +391,8 @@ CSR_API(CsrDuplicateHandle) { DPRINT1("Handle %p only has access %X; requested %X\n", Request->Data.DuplicateHandleRequest.Handle, Entry->Access, DesiredAccess); - Request->Status = STATUS_INVALID_PARAMETER; RtlLeaveCriticalSection(&ProcessData->HandleTableLock); - return Request->Status; + return STATUS_INVALID_PARAMETER; } } @@ -473,18 +418,8 @@ CSR_API(CsrGetInputWaitHandle) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - - Request->Data.GetConsoleInputWaitHandle.InputWaitHandle = INVALID_HANDLE_VALUE; - Request->Status = STATUS_INVALID_PARAMETER; - } - else - { - Request->Data.GetConsoleInputWaitHandle.InputWaitHandle = ProcessData->ConsoleEvent; - Request->Status = STATUS_SUCCESS; - } - return Request->Status; + Request->Data.GetConsoleInputWaitHandle.InputWaitHandle = ProcessData->ConsoleEvent; + return STATUS_SUCCESS; } /* EOF */ diff --git a/reactos/subsystems/win32/csrss/api/user.c b/reactos/subsystems/win32/csrss/api/user.c index cb9724fda80..de963da0a9a 100644 --- a/reactos/subsystems/win32/csrss/api/user.c +++ b/reactos/subsystems/win32/csrss/api/user.c @@ -26,26 +26,20 @@ static ULONG ServicesProcessId; CSR_API(CsrRegisterServicesProcess) { - NTSTATUS Status; - Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); if (ServicesProcessIdValid == TRUE) { /* Only accept a single call */ - Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } else { ServicesProcessId = (ULONG)Request->Data.RegisterServicesProcessRequest.ProcessId; ServicesProcessIdValid = TRUE; - Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } - - Request->Status = Status; - - return(Status); } /* EOF */ diff --git a/reactos/subsystems/win32/csrss/api/wapi.c b/reactos/subsystems/win32/csrss/api/wapi.c index bd1c365c5fb..1261bc79b09 100644 --- a/reactos/subsystems/win32/csrss/api/wapi.c +++ b/reactos/subsystems/win32/csrss/api/wapi.c @@ -70,7 +70,6 @@ FASTCALL CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData, PCSR_API_MESSAGE Request) { - BOOL Found = FALSE; unsigned DefIndex; ULONG Type; @@ -79,7 +78,7 @@ CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData, DPRINT("CSR: API Number: %x ServerID: %x\n",Type, Request->Type >> 16); /* FIXME: Extract DefIndex instead of looping */ - for (DefIndex = 0; ! Found && DefIndex < ApiDefinitionsCount; DefIndex++) + for (DefIndex = 0; DefIndex < ApiDefinitionsCount; DefIndex++) { if (ApiDefinitions[DefIndex].Type == Type) { @@ -92,18 +91,15 @@ CsrApiCallHandler(PCSRSS_PROCESS_DATA ProcessData, } else { - (ApiDefinitions[DefIndex].Handler)(ProcessData, Request); - Found = TRUE; + Request->Status = (ApiDefinitions[DefIndex].Handler)(ProcessData, Request); } + return; } } - if (! Found) - { - DPRINT1("CSR: Unknown request type 0x%x\n", Request->Type); - Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); - Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - Request->Status = STATUS_INVALID_SYSTEM_SERVICE; - } + DPRINT1("CSR: Unknown request type 0x%x\n", Request->Type); + Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); + Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); + Request->Status = STATUS_INVALID_SYSTEM_SERVICE; } BOOL diff --git a/reactos/subsystems/win32/csrss/win32csr/alias.c b/reactos/subsystems/win32/csrss/win32csr/alias.c index 8b3254bc66b..79d927fdcd9 100644 --- a/reactos/subsystems/win32/csrss/win32csr/alias.c +++ b/reactos/subsystems/win32/csrss/win32csr/alias.c @@ -312,8 +312,7 @@ CSR_API(CsrAddConsoleAlias) if (lpExeName == NULL || lpSource == NULL) { - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; + return STATUS_INVALID_PARAMETER; } Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -328,9 +327,8 @@ CSR_API(CsrAddConsoleAlias) Header = IntCreateAliasHeader(lpExeName); if (!Header) { - Request->Status = STATUS_INSUFFICIENT_RESOURCES; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INSUFFICIENT_RESOURCES; } IntInsertAliasHeader(&Console->Aliases, Header); } @@ -355,15 +353,13 @@ CSR_API(CsrAddConsoleAlias) if (!Entry) { - Request->Status = STATUS_INSUFFICIENT_RESOURCES; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INSUFFICIENT_RESOURCES; } IntInsertAliasEntry(Header, Entry); - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrGetConsoleAlias) @@ -387,8 +383,7 @@ CSR_API(CsrGetConsoleAlias) if (Request->Data.GetConsoleAlias.ExeLength == 0 || lpTarget == NULL || Request->Data.GetConsoleAlias.TargetBufferLength == 0 || Request->Data.GetConsoleAlias.SourceLength == 0) { - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; + return STATUS_INVALID_PARAMETER; } Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -400,39 +395,34 @@ CSR_API(CsrGetConsoleAlias) Header = IntFindAliasHeader(Console->Aliases, lpExeName); if (!Header) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } Entry = IntGetAliasEntry(Header, lpSource); if (!Entry) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } Length = (wcslen(Entry->lpTarget)+1) * sizeof(WCHAR); if (Length > Request->Data.GetConsoleAlias.TargetBufferLength) { - Request->Status = STATUS_BUFFER_TOO_SMALL; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_BUFFER_TOO_SMALL; } if (!ValidateBuffer(ProcessData, lpTarget, Request->Data.GetConsoleAlias.TargetBufferLength)) { - Request->Status = STATUS_ACCESS_VIOLATION; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_ACCESS_VIOLATION; } wcscpy(lpTarget, Entry->lpTarget); Request->Data.GetConsoleAlias.BytesWritten = Length; - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrGetAllConsoleAliases) @@ -443,8 +433,7 @@ CSR_API(CsrGetAllConsoleAliases) if (Request->Data.GetAllConsoleAlias.lpExeName == NULL) { - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; + return STATUS_INVALID_PARAMETER; } Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -456,25 +445,22 @@ CSR_API(CsrGetAllConsoleAliases) Header = IntFindAliasHeader(Console->Aliases, Request->Data.GetAllConsoleAlias.lpExeName); if (!Header) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } if (IntGetAllConsoleAliasesLength(Header) > Request->Data.GetAllConsoleAlias.AliasBufferLength) { - Request->Status = STATUS_BUFFER_OVERFLOW; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_BUFFER_OVERFLOW; } if (!ValidateBuffer(ProcessData, Request->Data.GetAllConsoleAlias.AliasBuffer, Request->Data.GetAllConsoleAlias.AliasBufferLength)) { - Request->Status = STATUS_ACCESS_VIOLATION; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_ACCESS_VIOLATION; } BytesWritten = IntGetAllConsoleAliases(Header, @@ -482,9 +468,8 @@ CSR_API(CsrGetAllConsoleAliases) Request->Data.GetAllConsoleAlias.AliasBufferLength); Request->Data.GetAllConsoleAlias.BytesWritten = BytesWritten; - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrGetAllConsoleAliasesLength) @@ -495,8 +480,7 @@ CSR_API(CsrGetAllConsoleAliasesLength) if (Request->Data.GetAllConsoleAliasesLength.lpExeName == NULL) { - Request->Status = STATUS_INVALID_PARAMETER; - return Request->Status; + return STATUS_INVALID_PARAMETER; } Request->Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -508,17 +492,14 @@ CSR_API(CsrGetAllConsoleAliasesLength) Header = IntFindAliasHeader(Console->Aliases, Request->Data.GetAllConsoleAliasesLength.lpExeName); if (!Header) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } Length = IntGetAllConsoleAliasesLength(Header); Request->Data.GetAllConsoleAliasesLength.Length = Length; - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; - + return STATUS_SUCCESS; } CSR_API(CsrGetConsoleAliasesExes) @@ -539,25 +520,22 @@ CSR_API(CsrGetConsoleAliasesExes) if (ExesLength > Request->Data.GetConsoleAliasesExes.Length) { - Request->Status = STATUS_BUFFER_OVERFLOW; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_BUFFER_OVERFLOW; } if (Request->Data.GetConsoleAliasesExes.ExeNames == NULL) { - Request->Status = STATUS_INVALID_PARAMETER; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_INVALID_PARAMETER; } if (!ValidateBuffer(ProcessData, Request->Data.GetConsoleAliasesExes.ExeNames, Request->Data.GetConsoleAliasesExes.Length)) { - Request->Status = STATUS_ACCESS_VIOLATION; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_ACCESS_VIOLATION; } BytesWritten = IntGetConsoleAliasesExes(Console->Aliases, @@ -565,9 +543,8 @@ CSR_API(CsrGetConsoleAliasesExes) Request->Data.GetConsoleAliasesExes.Length); Request->Data.GetConsoleAliasesExes.BytesWritten = BytesWritten; - Request->Status = STATUS_SUCCESS; ConioUnlockConsole(Console); - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrGetConsoleAliasesExesLength) diff --git a/reactos/subsystems/win32/csrss/win32csr/conio.c b/reactos/subsystems/win32/csrss/win32csr/conio.c index d1a7d222ac4..19223ad0c20 100644 --- a/reactos/subsystems/win32/csrss/win32csr/conio.c +++ b/reactos/subsystems/win32/csrss/win32csr/conio.c @@ -245,22 +245,12 @@ CSR_API(CsrAllocConsole) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL) - { - DPRINT1("No process data\n"); - return Request->Status = STATUS_INVALID_PARAMETER; - } - if (ProcessData->Console) { DPRINT1("Process already has a console\n"); - Request->Status = STATUS_INVALID_PARAMETER; return STATUS_INVALID_PARAMETER; } - /* Assume success */ - Request->Status = STATUS_SUCCESS; - /* If we don't need a console, then get out of here */ if (!Request->Data.AllocConsoleRequest.ConsoleNeeded) { @@ -278,7 +268,6 @@ CSR_API(CsrAllocConsole) if (NULL == Console) { DPRINT1("Not enough memory for console\n"); - Request->Status = STATUS_NO_MEMORY; return STATUS_NO_MEMORY; } /* initialize list head */ @@ -286,12 +275,12 @@ CSR_API(CsrAllocConsole) /* insert process data required for GUI initialization */ InsertHeadList(&Console->ProcessList, &ProcessData->ProcessEntry); /* Initialize the Console */ - Request->Status = CsrInitConsole(Console); - if (!NT_SUCCESS(Request->Status)) + Status = CsrInitConsole(Console); + if (!NT_SUCCESS(Status)) { DPRINT1("Console init failed\n"); HeapFree(Win32CsrApiHeap, 0, Console); - return Request->Status; + return Status; } } else @@ -322,7 +311,7 @@ CSR_API(CsrAllocConsole) DPRINT1("Failed to insert object\n"); ConioDeleteConsole((Object_t *) Console); ProcessData->Console = 0; - return Request->Status = Status; + return Status; } Status = Win32CsrInsertObject(ProcessData, @@ -337,7 +326,7 @@ CSR_API(CsrAllocConsole) Win32CsrReleaseObject(ProcessData, Request->Data.AllocConsoleRequest.InputHandle); ProcessData->Console = 0; - return Request->Status = Status; + return Status; } } @@ -360,7 +349,7 @@ CSR_API(CsrAllocConsole) Request->Data.AllocConsoleRequest.InputHandle); } ProcessData->Console = 0; - return Request->Status = Status; + return Status; } /* Set the Ctrl Dispatcher */ @@ -384,9 +373,9 @@ CSR_API(CsrFreeConsole) Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if (ProcessData == NULL || ProcessData->Console == NULL) + if (ProcessData->Console == NULL) { - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Console = ProcessData->Console; @@ -576,7 +565,7 @@ CSR_API(CsrReadConsole) &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Data.ReadConsoleRequest.EventHandle = ProcessData->ConsoleEvent; for (i = 0; i < nNumberOfCharsToRead && Console->InputEvents.Flink != &Console->InputEvents; i++) @@ -619,7 +608,6 @@ CSR_API(CsrReadConsole) ConioUnlockConsole(Console); HeapFree(Win32CsrApiHeap, 0, Input); Request->Data.ReadConsoleRequest.NrCharactersRead = 0; - Request->Status = STATUS_NOTIFY_CLEANUP; return STATUS_NOTIFY_CLEANUP; } @@ -653,27 +641,27 @@ CSR_API(CsrReadConsole) Request->Data.ReadConsoleRequest.NrCharactersRead = i; if (0 == i) { - Request->Status = STATUS_PENDING; /* we didn't read anything */ + Status = STATUS_PENDING; /* we didn't read anything */ } else if (0 != (Console->Mode & ENABLE_LINE_INPUT)) { if (0 == Console->WaitingLines || (Request->Data.ReadConsoleRequest.Unicode ? (L'\n' != UnicodeBuffer[i - 1]) : ('\n' != Buffer[i - 1]))) { - Request->Status = STATUS_PENDING; /* line buffered, didn't get a complete line */ + Status = STATUS_PENDING; /* line buffered, didn't get a complete line */ } else { Console->WaitingLines--; - Request->Status = STATUS_SUCCESS; /* line buffered, did get a complete line */ + Status = STATUS_SUCCESS; /* line buffered, did get a complete line */ } } else { - Request->Status = STATUS_SUCCESS; /* not line buffered, did read something */ + Status = STATUS_SUCCESS; /* not line buffered, did read something */ } - if (Request->Status == STATUS_PENDING) + if (Status == STATUS_PENDING) { Console->EchoCount = nNumberOfCharsToRead - i; } @@ -690,7 +678,7 @@ CSR_API(CsrReadConsole) Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - sizeof(PORT_MESSAGE); } - return Request->Status; + return Status; } BOOLEAN __inline ConioGetIntersection( @@ -846,7 +834,7 @@ CSR_API(CsrWriteConsole) DPRINT1("Invalid request size\n"); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -855,7 +843,7 @@ CSR_API(CsrWriteConsole) if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } if(Request->Data.WriteConsoleRequest.Unicode) @@ -887,8 +875,8 @@ CSR_API(CsrWriteConsole) Status = ConioLockScreenBuffer(ProcessData, Request->Data.WriteConsoleRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (NT_SUCCESS(Status)) { - Request->Status = ConioWriteConsole(Console, Buff, Buffer, - Request->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE); + Status = ConioWriteConsole(Console, Buff, Buffer, + Request->Data.WriteConsoleRequest.NrCharactersToWrite, TRUE); if (NT_SUCCESS(Status)) { Written = Request->Data.WriteConsoleRequest.NrCharactersToWrite; @@ -904,7 +892,7 @@ CSR_API(CsrWriteConsole) Request->Data.WriteConsoleRequest.NrCharactersWritten = Written; - return Request->Status = Status; + return Status; } VOID STDCALL @@ -1304,13 +1292,13 @@ CSR_API(CsrGetScreenBufferInfo) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.ScreenBufferInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } pInfo = &Request->Data.ScreenBufferInfoRequest.Info; pInfo->dwSize.X = Buff->MaxX; @@ -1327,9 +1315,7 @@ CSR_API(CsrGetScreenBufferInfo) ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - Request->Status = STATUS_SUCCESS; - - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrSetCursor) @@ -1345,7 +1331,7 @@ CSR_API(CsrSetCursor) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -1355,7 +1341,7 @@ CSR_API(CsrSetCursor) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } NewCursorX = Request->Data.SetCursorRequest.Position.X; @@ -1365,7 +1351,7 @@ CSR_API(CsrSetCursor) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } OldCursorX = Buff->CurrentX; OldCursorY = Buff->CurrentY; @@ -1377,14 +1363,14 @@ CSR_API(CsrSetCursor) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } } ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } static VOID FASTCALL @@ -1435,7 +1421,7 @@ CSR_API(CsrWriteConsoleOutputChar) DPRINT1("Invalid request size\n"); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -1514,7 +1500,7 @@ CSR_API(CsrWriteConsoleOutputChar) ConioUnlockConsole(Console); } Request->Data.WriteConsoleOutputCharRequest.NrCharactersWritten = Written; - return Request->Status = Status; + return Status; } CSR_API(CsrFillOutputChar) @@ -1535,14 +1521,14 @@ CSR_API(CsrFillOutputChar) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.FillOutputRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } X = Request->Data.FillOutputRequest.Position.X; @@ -1580,7 +1566,7 @@ CSR_API(CsrFillOutputChar) ConioUnlockConsole(Console); Length = Request->Data.FillOutputRequest.Length; Request->Data.FillOutputRequest.NrCharactersWritten = Length; - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrReadInputEvent) @@ -1600,7 +1586,7 @@ CSR_API(CsrReadInputEvent) Status = ConioLockConsole(ProcessData, Request->Data.ReadInputRequest.ConsoleHandle, &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } /* only get input if there is any */ @@ -1659,7 +1645,7 @@ CSR_API(CsrReadInputEvent) ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } CSR_API(CsrWriteConsoleOutputAttrib) @@ -1681,7 +1667,7 @@ CSR_API(CsrWriteConsoleOutputAttrib) DPRINT1("Invalid request size\n"); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Status = ConioConsoleFromProcessData(ProcessData, &Console); @@ -1689,7 +1675,7 @@ CSR_API(CsrWriteConsoleOutputAttrib) Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, @@ -1699,7 +1685,7 @@ CSR_API(CsrWriteConsoleOutputAttrib) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } X = Request->Data.WriteConsoleOutputAttribRequest.Coord.X; @@ -1736,7 +1722,7 @@ CSR_API(CsrWriteConsoleOutputAttrib) ConioUnlockScreenBuffer(Buff); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrFillOutputAttrib) @@ -1754,7 +1740,7 @@ CSR_API(CsrFillOutputAttrib) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -1763,7 +1749,7 @@ CSR_API(CsrFillOutputAttrib) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } X = Request->Data.FillOutputAttribRequest.Coord.X; @@ -1796,7 +1782,7 @@ CSR_API(CsrFillOutputAttrib) ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } @@ -1813,13 +1799,13 @@ CSR_API(CsrGetCursorInfo) Status = ConioLockScreenBuffer(ProcessData, Request->Data.GetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Data.GetCursorInfoRequest.Info.bVisible = Buff->CursorInfo.bVisible; Request->Data.GetCursorInfoRequest.Info.dwSize = Buff->CursorInfo.dwSize; ConioUnlockScreenBuffer(Buff); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetCursorInfo) @@ -1838,14 +1824,14 @@ CSR_API(CsrSetCursorInfo) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorInfoRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } Size = Request->Data.SetCursorInfoRequest.Info.dwSize; @@ -1869,14 +1855,14 @@ CSR_API(CsrSetCursorInfo) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } } ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetTextAttrib) @@ -1890,14 +1876,14 @@ CSR_API(CsrSetTextAttrib) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.SetCursorRequest.ConsoleHandle, &Buff, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } Buff->DefaultAttrib = Request->Data.SetAttribRequest.Attrib; @@ -1907,14 +1893,14 @@ CSR_API(CsrSetTextAttrib) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } } ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetConsoleMode) @@ -1932,7 +1918,7 @@ CSR_API(CsrSetConsoleMode) (Object_t **) &Console, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Buff = (PCSRSS_SCREEN_BUFFER)Console; @@ -1951,7 +1937,7 @@ CSR_API(CsrSetConsoleMode) Win32CsrReleaseObjectByPointer((Object_t *)Console); - return Request->Status = Status; + return Status; } CSR_API(CsrGetConsoleMode) @@ -1968,9 +1954,9 @@ CSR_API(CsrGetConsoleMode) (Object_t **) &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } - Request->Status = STATUS_SUCCESS; + Status = STATUS_SUCCESS; Buff = (PCSRSS_SCREEN_BUFFER) Console; if (CONIO_CONSOLE_MAGIC == Console->Header.Type) { @@ -1982,11 +1968,11 @@ CSR_API(CsrGetConsoleMode) } else { - Request->Status = STATUS_INVALID_HANDLE; + Status = STATUS_INVALID_HANDLE; } Win32CsrReleaseObjectByPointer((Object_t *)Console); - return Request->Status; + return Status; } CSR_API(CsrCreateScreenBuffer) @@ -1997,15 +1983,10 @@ CSR_API(CsrCreateScreenBuffer) DPRINT("CsrCreateScreenBuffer\n"); - if (ProcessData == NULL) - { - return Request->Status = STATUS_INVALID_PARAMETER; - } - Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -2039,13 +2020,9 @@ CSR_API(CsrCreateScreenBuffer) } Status = CsrInitConsoleScreenBuffer(Console, Buff); - if(! NT_SUCCESS(Status)) + if(NT_SUCCESS(Status)) { - Request->Status = Status; - } - else - { - Request->Status = Win32CsrInsertObject(ProcessData, + Status = Win32CsrInsertObject(ProcessData, &Request->Data.CreateScreenBufferRequest.OutputHandle, &Buff->Header, Request->Data.CreateScreenBufferRequest.Access, @@ -2054,11 +2031,11 @@ CSR_API(CsrCreateScreenBuffer) } else { - Request->Status = STATUS_INSUFFICIENT_RESOURCES; + Status = STATUS_INSUFFICIENT_RESOURCES; } ConioUnlockConsole(Console); - return Request->Status; + return Status; } CSR_API(CsrSetScreenBuffer) @@ -2072,7 +2049,7 @@ CSR_API(CsrSetScreenBuffer) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -2082,14 +2059,14 @@ CSR_API(CsrSetScreenBuffer) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } if (Buff == Console->ActiveBuffer) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } /* drop reference to old buffer, maybe delete */ @@ -2107,7 +2084,7 @@ CSR_API(CsrSetScreenBuffer) ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetTitle) @@ -2125,17 +2102,13 @@ CSR_API(CsrSetTitle) DPRINT1("Invalid request size\n"); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - return Request->Status = STATUS_INVALID_PARAMETER; + return STATUS_INVALID_PARAMETER; } Status = ConioConsoleFromProcessData(ProcessData, &Console); Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); - if(! NT_SUCCESS(Status)) - { - Request->Status = Status; - } - else + if(NT_SUCCESS(Status)) { Buffer = RtlAllocateHeap(RtlGetProcessHeap(), 0, Request->Data.SetTitleRequest.Length); if (Buffer) @@ -2147,21 +2120,21 @@ CSR_API(CsrSetTitle) memcpy(Console->Title.Buffer, Request->Data.SetTitleRequest.Title, Console->Title.Length); if (! ConioChangeTitle(Console)) { - Request->Status = STATUS_UNSUCCESSFUL; + Status = STATUS_UNSUCCESSFUL; } else { - Request->Status = STATUS_SUCCESS; + Status = STATUS_SUCCESS; } } else { - Request->Status = STATUS_NO_MEMORY; + Status = STATUS_NO_MEMORY; } ConioUnlockConsole(Console); } - return Request->Status; + return Status; } CSR_API(CsrGetTitle) @@ -2178,7 +2151,7 @@ CSR_API(CsrGetTitle) if (! NT_SUCCESS(Status)) { DPRINT1("Can't get console\n"); - return Request->Status = Status; + return Status; } /* Copy title of the console to the user title buffer */ @@ -2195,9 +2168,7 @@ CSR_API(CsrGetTitle) Request->Header.u1.s1.TotalLength = Length; Request->Header.u1.s1.DataLength = Length - sizeof(PORT_MESSAGE); } - Request->Status = STATUS_SUCCESS; - - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrWriteConsoleOutput) @@ -2220,7 +2191,7 @@ CSR_API(CsrWriteConsoleOutput) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -2232,7 +2203,7 @@ CSR_API(CsrWriteConsoleOutput) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } BufferSize = Request->Data.WriteConsoleOutputRequest.BufferSize; @@ -2245,7 +2216,7 @@ CSR_API(CsrWriteConsoleOutput) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_ACCESS_VIOLATION; + return STATUS_ACCESS_VIOLATION; } WriteRegion.left = Request->Data.WriteConsoleOutputRequest.WriteRegion.Left; WriteRegion.top = Request->Data.WriteConsoleOutputRequest.WriteRegion.Top; @@ -2266,7 +2237,7 @@ CSR_API(CsrWriteConsoleOutput) /* It is okay to have a WriteRegion completely outside the screen buffer. No data is written then. */ - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } for (i = 0, Y = WriteRegion.top; Y <= WriteRegion.bottom; i++, Y++) @@ -2300,7 +2271,7 @@ CSR_API(CsrWriteConsoleOutput) Request->Data.WriteConsoleOutputRequest.WriteRegion.Left = WriteRegion.left; Request->Data.WriteConsoleOutputRequest.WriteRegion.Top = WriteRegion.top; - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrFlushInputBuffer) @@ -2320,7 +2291,7 @@ CSR_API(CsrFlushInputBuffer) GENERIC_WRITE); if(! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } /* Discard all entries in the input event queue */ @@ -2336,7 +2307,7 @@ CSR_API(CsrFlushInputBuffer) ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrScrollConsoleScreenBuffer) @@ -2366,7 +2337,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -2375,7 +2346,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } ScrollRectangle.left = Request->Data.ScrollConsoleScreenBufferRequest.ScrollRectangle.Left; @@ -2389,7 +2360,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) { ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } /* If the source was clipped on the left or top, adjust the destination accordingly */ @@ -2412,7 +2383,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) { ConioUnlockConsole(Console); ConioUnlockScreenBuffer(Buff); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } } else @@ -2446,7 +2417,7 @@ CSR_API(CsrScrollConsoleScreenBuffer) ConioUnlockScreenBuffer(Buff); ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrReadConsoleOutputChar) @@ -2471,14 +2442,14 @@ CSR_API(CsrReadConsoleOutputChar) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputCharRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } Xpos = Request->Data.ReadConsoleOutputCharRequest.ReadCoord.X; @@ -2511,7 +2482,6 @@ CSR_API(CsrReadConsoleOutputChar) } *ReadBuffer = 0; - Request->Status = STATUS_SUCCESS; Request->Data.ReadConsoleOutputCharRequest.EndCoord.X = Xpos; Request->Data.ReadConsoleOutputCharRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY; @@ -2525,7 +2495,7 @@ CSR_API(CsrReadConsoleOutputChar) Request->Header.u1.s1.DataLength = Request->Header.u1.s1.TotalLength - sizeof(PORT_MESSAGE); } - return Request->Status; + return STATUS_SUCCESS; } @@ -2547,7 +2517,7 @@ CSR_API(CsrReadConsoleOutputAttrib) Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputAttribRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Xpos = Request->Data.ReadConsoleOutputAttribRequest.ReadCoord.X; @@ -2574,7 +2544,6 @@ CSR_API(CsrReadConsoleOutputAttrib) *ReadBuffer = 0; - Request->Status = STATUS_SUCCESS; Request->Data.ReadConsoleOutputAttribRequest.EndCoord.X = Xpos; Request->Data.ReadConsoleOutputAttribRequest.EndCoord.Y = (Ypos - Buff->VirtualY + Buff->MaxY) % Buff->MaxY; @@ -2588,7 +2557,7 @@ CSR_API(CsrReadConsoleOutputAttrib) Request->Header.u1.s1.DataLength = CurrentLength - sizeof(PORT_MESSAGE); } - return Request->Status; + return STATUS_SUCCESS; } @@ -2608,7 +2577,7 @@ CSR_API(CsrGetNumberOfConsoleInputEvents) Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } CurrentItem = Console->InputEvents.Flink; @@ -2627,10 +2596,9 @@ CSR_API(CsrGetNumberOfConsoleInputEvents) ConioUnlockConsole(Console); - Request->Status = STATUS_SUCCESS; Request->Data.GetNumInputEventsRequest.NumInputEvents = NumEvents; - return Request->Status; + return STATUS_SUCCESS; } @@ -2653,7 +2621,7 @@ CSR_API(CsrPeekConsoleInput) Status = ConioLockConsole(ProcessData, Request->Data.GetNumInputEventsRequest.ConsoleHandle, &Console, GENERIC_READ); if(! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } InputRecord = Request->Data.PeekConsoleInputRequest.InputRecord; @@ -2664,8 +2632,7 @@ CSR_API(CsrPeekConsoleInput) || (((ULONG_PTR)InputRecord + Size) > ((ULONG_PTR)ProcessData->CsrSectionViewBase + ProcessData->CsrSectionViewSize))) { ConioUnlockConsole(Console); - Request->Status = STATUS_ACCESS_VIOLATION; - return Request->Status ; + return STATUS_ACCESS_VIOLATION; } NumItems = 0; @@ -2699,10 +2666,9 @@ CSR_API(CsrPeekConsoleInput) ConioUnlockConsole(Console); - Request->Status = STATUS_SUCCESS; Request->Data.PeekConsoleInputRequest.Length = NumItems; - return Request->Status; + return STATUS_SUCCESS; } @@ -2732,7 +2698,7 @@ CSR_API(CsrReadConsoleOutput) Status = ConioLockScreenBuffer(ProcessData, Request->Data.ReadConsoleOutputRequest.ConsoleHandle, &Buff, GENERIC_READ); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } CharInfo = Request->Data.ReadConsoleOutputRequest.CharInfo; @@ -2752,8 +2718,7 @@ CSR_API(CsrReadConsoleOutput) || (((ULONG_PTR)CharInfo + Size) > ((ULONG_PTR)ProcessData->CsrSectionViewBase + ProcessData->CsrSectionViewSize))) { ConioUnlockScreenBuffer(Buff); - Request->Status = STATUS_ACCESS_VIOLATION; - return Request->Status ; + return STATUS_ACCESS_VIOLATION; } SizeY = min(BufferSize.Y - BufferCoord.Y, ConioRectHeight(&ReadRegion)); @@ -2765,8 +2730,7 @@ CSR_API(CsrReadConsoleOutput) if (! ConioGetIntersection(&ReadRegion, &ScreenRect, &ReadRegion)) { ConioUnlockScreenBuffer(Buff); - Request->Status = STATUS_SUCCESS; - return Request->Status; + return STATUS_SUCCESS; } for (i = 0, Y = ReadRegion.top; Y < ReadRegion.bottom; ++i, ++Y) @@ -2793,13 +2757,12 @@ CSR_API(CsrReadConsoleOutput) ConioUnlockScreenBuffer(Buff); - Request->Status = STATUS_SUCCESS; Request->Data.ReadConsoleOutputRequest.ReadRegion.Right = ReadRegion.left + SizeX - 1; Request->Data.ReadConsoleOutputRequest.ReadRegion.Bottom = ReadRegion.top + SizeY - 1; Request->Data.ReadConsoleOutputRequest.ReadRegion.Left = ReadRegion.left; Request->Data.ReadConsoleOutputRequest.ReadRegion.Top = ReadRegion.top; - return Request->Status; + return STATUS_SUCCESS; } @@ -2821,7 +2784,7 @@ CSR_API(CsrWriteConsoleInput) Status = ConioLockConsole(ProcessData, Request->Data.WriteConsoleInputRequest.ConsoleHandle, &Console, GENERIC_WRITE); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } InputRecord = Request->Data.WriteConsoleInputRequest.InputRecord; @@ -2832,8 +2795,7 @@ CSR_API(CsrWriteConsoleInput) || (((ULONG_PTR)InputRecord + Size) > ((ULONG_PTR)ProcessData->CsrSectionViewBase + ProcessData->CsrSectionViewSize))) { ConioUnlockConsole(Console); - Request->Status = STATUS_ACCESS_VIOLATION; - return Request->Status ; + return STATUS_ACCESS_VIOLATION; } for (i = 0; i < Length; i++) @@ -2842,8 +2804,7 @@ CSR_API(CsrWriteConsoleInput) if (NULL == Record) { ConioUnlockConsole(Console); - Request->Status = STATUS_INSUFFICIENT_RESOURCES; - return Request->Status; + return STATUS_INSUFFICIENT_RESOURCES; } Record->Echoed = FALSE; @@ -2859,10 +2820,9 @@ CSR_API(CsrWriteConsoleInput) ConioUnlockConsole(Console); - Request->Status = STATUS_SUCCESS; Request->Data.WriteConsoleInputRequest.Length = i; - return Request->Status; + return STATUS_SUCCESS; } /********************************************************************** @@ -2917,7 +2877,7 @@ CSR_API(CsrHardwareStateProperty) if (! NT_SUCCESS(Status)) { DPRINT1("Failed to get console handle in SetConsoleHardwareState\n"); - return Request->Status = Status; + return Status; } switch (Request->Data.ConsoleHardwareStateRequest.SetGet) @@ -2928,17 +2888,17 @@ CSR_API(CsrHardwareStateProperty) case CONSOLE_HARDWARE_STATE_SET: DPRINT("Setting console hardware state.\n"); - Request->Status = SetConsoleHardwareState(Console, Request->Data.ConsoleHardwareStateRequest.State); + Status = SetConsoleHardwareState(Console, Request->Data.ConsoleHardwareStateRequest.State); break; default: - Request->Status = STATUS_INVALID_PARAMETER_2; /* Client: (handle, [set_get], mode) */ + Status = STATUS_INVALID_PARAMETER_2; /* Client: (handle, [set_get], mode) */ break; } ConioUnlockConsole(Console); - return Request->Status; + return Status; } CSR_API(CsrGetConsoleWindow) @@ -2954,13 +2914,13 @@ CSR_API(CsrGetConsoleWindow) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Data.GetConsoleWindowRequest.WindowHandle = Console->hWindow; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetConsoleIcon) @@ -2976,14 +2936,14 @@ CSR_API(CsrSetConsoleIcon) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } - Request->Status = (ConioChangeIcon(Console, Request->Data.SetConsoleIconRequest.WindowIcon) - ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); + Status = (ConioChangeIcon(Console, Request->Data.SetConsoleIconRequest.WindowIcon) + ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL); ConioUnlockConsole(Console); - return Request->Status; + return Status; } CSR_API(CsrGetConsoleCodePage) @@ -2996,14 +2956,14 @@ CSR_API(CsrGetConsoleCodePage) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); Request->Data.GetConsoleCodePage.CodePage = Console->CodePage; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetConsoleCodePage) @@ -3016,7 +2976,7 @@ CSR_API(CsrSetConsoleCodePage) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -3025,10 +2985,10 @@ CSR_API(CsrSetConsoleCodePage) { Console->CodePage = Request->Data.SetConsoleCodePage.CodePage; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } CSR_API(CsrGetConsoleOutputCodePage) @@ -3041,14 +3001,14 @@ CSR_API(CsrGetConsoleOutputCodePage) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); Request->Header.u1.s1.DataLength = sizeof(CSR_API_MESSAGE) - sizeof(PORT_MESSAGE); Request->Data.GetConsoleOutputCodePage.CodePage = Console->OutputCodePage; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrSetConsoleOutputCodePage) @@ -3061,7 +3021,7 @@ CSR_API(CsrSetConsoleOutputCodePage) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Request->Header.u1.s1.TotalLength = sizeof(CSR_API_MESSAGE); @@ -3070,10 +3030,10 @@ CSR_API(CsrSetConsoleOutputCodePage) { Console->OutputCodePage = Request->Data.SetConsoleOutputCodePage.CodePage; ConioUnlockConsole(Console); - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } ConioUnlockConsole(Console); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } CSR_API(CsrGetProcessList) @@ -3098,7 +3058,7 @@ CSR_API(CsrGetProcessList) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } DPRINT1("Console_Api Ctrl-C\n"); @@ -3126,7 +3086,7 @@ CSR_API(CsrGetProcessList) Request->Header.u1.s1.TotalLength = Length; Request->Header.u1.s1.DataLength = Length - sizeof(PORT_MESSAGE); } - return Request->Status = STATUS_SUCCESS; + return STATUS_SUCCESS; } CSR_API(CsrGenerateCtrlEvent) @@ -3143,7 +3103,7 @@ CSR_API(CsrGenerateCtrlEvent) Status = ConioConsoleFromProcessData(ProcessData, &Console); if (! NT_SUCCESS(Status)) { - return Request->Status = Status; + return Status; } Group = Request->Data.GenerateCtrlEvent.ProcessGroup; @@ -3162,7 +3122,7 @@ CSR_API(CsrGenerateCtrlEvent) ConioUnlockConsole(Console); - return Request->Status = Status; + return Status; } /* EOF */ diff --git a/reactos/subsystems/win32/csrss/win32csr/desktopbg.c b/reactos/subsystems/win32/csrss/win32csr/desktopbg.c index 79efe582a97..a8ddd0ef537 100644 --- a/reactos/subsystems/win32/csrss/win32csr/desktopbg.c +++ b/reactos/subsystems/win32/csrss/win32csr/desktopbg.c @@ -209,7 +209,7 @@ CSR_API(CsrCreateDesktop) BgInitialized = TRUE; if (! DtbgInit()) { - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } } @@ -222,7 +222,7 @@ CSR_API(CsrCreateDesktop) if (NULL == ThreadData.Event) { DPRINT1("Failed to create event (error %d)\n", GetLastError()); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } ThreadHandle = CreateThread(NULL, 0, @@ -234,16 +234,14 @@ CSR_API(CsrCreateDesktop) { CloseHandle(ThreadData.Event); DPRINT1("Failed to create desktop window thread.\n"); - return Request->Status = STATUS_UNSUCCESSFUL; + return STATUS_UNSUCCESSFUL; } CloseHandle(ThreadHandle); WaitForSingleObject(ThreadData.Event, INFINITE); CloseHandle(ThreadData.Event); - Request->Status = ThreadData.Status; - - return Request->Status; + return ThreadData.Status; } CSR_API(CsrShowDesktop) @@ -261,13 +259,11 @@ CSR_API(CsrShowDesktop) nmh.ShowDesktop.Width = (int)Request->Data.ShowDesktopRequest.Width; nmh.ShowDesktop.Height = (int)Request->Data.ShowDesktopRequest.Height; - Request->Status = SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, - WM_NOTIFY, - (WPARAM)nmh.hdr.hwndFrom, - (LPARAM)&nmh) - ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS; - - return Request->Status; + return SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, + WM_NOTIFY, + (WPARAM)nmh.hdr.hwndFrom, + (LPARAM)&nmh) + ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS; } CSR_API(CsrHideDesktop) @@ -282,13 +278,11 @@ CSR_API(CsrHideDesktop) nmh.hdr.idFrom = 0; nmh.hdr.code = PM_HIDE_DESKTOP; - Request->Status = SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, - WM_NOTIFY, - (WPARAM)nmh.hdr.hwndFrom, - (LPARAM)&nmh) - ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS; - - return Request->Status; + return SendMessageW(Request->Data.ShowDesktopRequest.DesktopWindow, + WM_NOTIFY, + (WPARAM)nmh.hdr.hwndFrom, + (LPARAM)&nmh) + ? STATUS_UNSUCCESSFUL : STATUS_SUCCESS; } BOOL FASTCALL diff --git a/reactos/subsystems/win32/csrss/win32csr/exitros.c b/reactos/subsystems/win32/csrss/win32csr/exitros.c index b13502cfa88..e3dc47a0c81 100644 --- a/reactos/subsystems/win32/csrss/win32csr/exitros.c +++ b/reactos/subsystems/win32/csrss/win32csr/exitros.c @@ -27,8 +27,7 @@ CSR_API(CsrRegisterLogonProcess) { if (0 != LogonProcess) { - Request->Status = STATUS_LOGON_SESSION_EXISTS; - return Request->Status; + return STATUS_LOGON_SESSION_EXISTS; } LogonProcess = Request->Data.RegisterLogonProcessRequest.ProcessId; } @@ -38,15 +37,12 @@ CSR_API(CsrRegisterLogonProcess) { DPRINT1("Current logon process 0x%x, can't deregister from process 0x%x\n", LogonProcess, Request->Header.ClientId.UniqueProcess); - Request->Status = STATUS_NOT_LOGON_PROCESS; - return Request->Status; + return STATUS_NOT_LOGON_PROCESS; } LogonProcess = 0; } - Request->Status = STATUS_SUCCESS; - - return Request->Status; + return STATUS_SUCCESS; } CSR_API(CsrSetLogonNotifyWindow) @@ -61,21 +57,17 @@ CSR_API(CsrSetLogonNotifyWindow) &WindowCreator)) { DPRINT1("Can't get window creator\n"); - Request->Status = STATUS_INVALID_HANDLE; - return Request->Status; + return STATUS_INVALID_HANDLE; } if (WindowCreator != (DWORD)LogonProcess) { DPRINT1("Trying to register window not created by winlogon as notify window\n"); - Request->Status = STATUS_ACCESS_DENIED; - return Request->Status; + return STATUS_ACCESS_DENIED; } LogonNotifyWindow = Request->Data.SetLogonNotifyWindowRequest.LogonNotifyWindow; - Request->Status = STATUS_SUCCESS; - - return Request->Status; + return STATUS_SUCCESS; } typedef struct tagSHUTDOWN_SETTINGS @@ -938,17 +930,15 @@ CSR_API(CsrExitReactos) if (0 == (Request->Data.ExitReactosRequest.Flags & EWX_INTERNAL_FLAG)) { - Request->Status = UserExitReactos((DWORD) Request->Header.ClientId.UniqueProcess, - Request->Data.ExitReactosRequest.Flags); + return UserExitReactos((DWORD) Request->Header.ClientId.UniqueProcess, + Request->Data.ExitReactosRequest.Flags); } else { - Request->Status = InternalExitReactos((DWORD) Request->Header.ClientId.UniqueProcess, - (DWORD) Request->Header.ClientId.UniqueThread, - Request->Data.ExitReactosRequest.Flags); + return InternalExitReactos((DWORD) Request->Header.ClientId.UniqueProcess, + (DWORD) Request->Header.ClientId.UniqueThread, + Request->Data.ExitReactosRequest.Flags); } - - return Request->Status; } /* EOF */ From 7d96358dbf40b93b129205390cba011a9c046277 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Sat, 2 Aug 2008 22:33:58 +0000 Subject: [PATCH 095/304] revert to 35046, sorry for mistake svn path=/trunk/; revision=35050 --- .../win32/shdocvw/{lang/bg-BG.rc => Bg.rc} | 0 .../win32/shdocvw/{lang/cz-CZ.rc => Cs.rc} | 0 .../win32/shdocvw/{lang/de-DE.rc => De.rc} | 0 .../win32/shdocvw/{lang/en-US.rc => En.rc} | 0 .../win32/shdocvw/{lang/es-ES.rc => Es.rc} | 0 .../win32/shdocvw/{lang/fi-FI.rc => Fi.rc} | 0 .../win32/shdocvw/{lang/fr-FR.rc => Fr.rc} | 0 .../win32/shdocvw/{lang/hu-HU.rc => Hu.rc} | 0 .../win32/shdocvw/{lang/ja-JP.rc => Ja.rc} | 0 .../win32/shdocvw/{lang/ko-KO.rc => Ko.rc} | 0 .../win32/shdocvw/{lang/nl-NL.rc => Nl.rc} | 0 .../win32/shdocvw/{lang/no-NO.rc => No.rc} | 0 .../win32/shdocvw/{lang/pl-PL.rc => Pl.rc} | 0 .../win32/shdocvw/{lang/pt-PT.rc => Pt.rc} | 0 .../win32/shdocvw/{lang/ru-RU.rc => Ru.rc} | 0 .../win32/shdocvw/{lang/sk-SK.rc => Sk.rc} | 0 .../win32/shdocvw/{lang/sv-SE.rc => Sv.rc} | 0 .../win32/shdocvw/{lang/uk-UA.rc => Uk.rc} | 0 reactos/dll/win32/shdocvw/shdocvw.rc | 36 +++++++-------- reactos/dll/win32/shdocvw/shdocvw_ros.diff | 46 +++++++++++++++++++ 20 files changed, 64 insertions(+), 18 deletions(-) rename reactos/dll/win32/shdocvw/{lang/bg-BG.rc => Bg.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/cz-CZ.rc => Cs.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/de-DE.rc => De.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/en-US.rc => En.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/es-ES.rc => Es.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/fi-FI.rc => Fi.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/fr-FR.rc => Fr.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/hu-HU.rc => Hu.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/ja-JP.rc => Ja.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/ko-KO.rc => Ko.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/nl-NL.rc => Nl.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/no-NO.rc => No.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/pl-PL.rc => Pl.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/pt-PT.rc => Pt.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/ru-RU.rc => Ru.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/sk-SK.rc => Sk.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/sv-SE.rc => Sv.rc} (100%) rename reactos/dll/win32/shdocvw/{lang/uk-UA.rc => Uk.rc} (100%) create mode 100644 reactos/dll/win32/shdocvw/shdocvw_ros.diff diff --git a/reactos/dll/win32/shdocvw/lang/bg-BG.rc b/reactos/dll/win32/shdocvw/Bg.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/bg-BG.rc rename to reactos/dll/win32/shdocvw/Bg.rc diff --git a/reactos/dll/win32/shdocvw/lang/cz-CZ.rc b/reactos/dll/win32/shdocvw/Cs.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/cz-CZ.rc rename to reactos/dll/win32/shdocvw/Cs.rc diff --git a/reactos/dll/win32/shdocvw/lang/de-DE.rc b/reactos/dll/win32/shdocvw/De.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/de-DE.rc rename to reactos/dll/win32/shdocvw/De.rc diff --git a/reactos/dll/win32/shdocvw/lang/en-US.rc b/reactos/dll/win32/shdocvw/En.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/en-US.rc rename to reactos/dll/win32/shdocvw/En.rc diff --git a/reactos/dll/win32/shdocvw/lang/es-ES.rc b/reactos/dll/win32/shdocvw/Es.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/es-ES.rc rename to reactos/dll/win32/shdocvw/Es.rc diff --git a/reactos/dll/win32/shdocvw/lang/fi-FI.rc b/reactos/dll/win32/shdocvw/Fi.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/fi-FI.rc rename to reactos/dll/win32/shdocvw/Fi.rc diff --git a/reactos/dll/win32/shdocvw/lang/fr-FR.rc b/reactos/dll/win32/shdocvw/Fr.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/fr-FR.rc rename to reactos/dll/win32/shdocvw/Fr.rc diff --git a/reactos/dll/win32/shdocvw/lang/hu-HU.rc b/reactos/dll/win32/shdocvw/Hu.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/hu-HU.rc rename to reactos/dll/win32/shdocvw/Hu.rc diff --git a/reactos/dll/win32/shdocvw/lang/ja-JP.rc b/reactos/dll/win32/shdocvw/Ja.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/ja-JP.rc rename to reactos/dll/win32/shdocvw/Ja.rc diff --git a/reactos/dll/win32/shdocvw/lang/ko-KO.rc b/reactos/dll/win32/shdocvw/Ko.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/ko-KO.rc rename to reactos/dll/win32/shdocvw/Ko.rc diff --git a/reactos/dll/win32/shdocvw/lang/nl-NL.rc b/reactos/dll/win32/shdocvw/Nl.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/nl-NL.rc rename to reactos/dll/win32/shdocvw/Nl.rc diff --git a/reactos/dll/win32/shdocvw/lang/no-NO.rc b/reactos/dll/win32/shdocvw/No.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/no-NO.rc rename to reactos/dll/win32/shdocvw/No.rc diff --git a/reactos/dll/win32/shdocvw/lang/pl-PL.rc b/reactos/dll/win32/shdocvw/Pl.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/pl-PL.rc rename to reactos/dll/win32/shdocvw/Pl.rc diff --git a/reactos/dll/win32/shdocvw/lang/pt-PT.rc b/reactos/dll/win32/shdocvw/Pt.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/pt-PT.rc rename to reactos/dll/win32/shdocvw/Pt.rc diff --git a/reactos/dll/win32/shdocvw/lang/ru-RU.rc b/reactos/dll/win32/shdocvw/Ru.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/ru-RU.rc rename to reactos/dll/win32/shdocvw/Ru.rc diff --git a/reactos/dll/win32/shdocvw/lang/sk-SK.rc b/reactos/dll/win32/shdocvw/Sk.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/sk-SK.rc rename to reactos/dll/win32/shdocvw/Sk.rc diff --git a/reactos/dll/win32/shdocvw/lang/sv-SE.rc b/reactos/dll/win32/shdocvw/Sv.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/sv-SE.rc rename to reactos/dll/win32/shdocvw/Sv.rc diff --git a/reactos/dll/win32/shdocvw/lang/uk-UA.rc b/reactos/dll/win32/shdocvw/Uk.rc similarity index 100% rename from reactos/dll/win32/shdocvw/lang/uk-UA.rc rename to reactos/dll/win32/shdocvw/Uk.rc diff --git a/reactos/dll/win32/shdocvw/shdocvw.rc b/reactos/dll/win32/shdocvw/shdocvw.rc index c0e09977768..ae2deeb028e 100644 --- a/reactos/dll/win32/shdocvw/shdocvw.rc +++ b/reactos/dll/win32/shdocvw/shdocvw.rc @@ -23,21 +23,21 @@ #include "version.rc" -#include "lang/bg-BG.rc" -#include "lang/cz-CZ.rc" -#include "lang/de-DE.rc" -#include "lang/en-US.rc" -#include "lang/es-ES.rc" -#include "lang/fi-FI.rc" -#include "lang/fr-FR.rc" -#include "lang/hu-HU.rc" -#include "lang/ja-JP.rc" -#include "lang/ko-KO.rc" -#include "lang/nl-NL.rc" -#include "lang/no-NO.rc" -#include "lang/pl-PL.rc" -#include "lang/pt-PT.rc" -#include "lang/ru-RU.rc" -#include "lang/sk-SK.rc" -#include "lang/sv-SE.rc" -#include "lang/uk-UA.rc" +#include "Bg.rc" +#include "Cs.rc" +#include "De.rc" +#include "En.rc" +#include "Es.rc" +#include "Fi.rc" +#include "Fr.rc" +#include "Hu.rc" +#include "Ja.rc" +#include "Ko.rc" +#include "Nl.rc" +#include "No.rc" +#include "Pl.rc" +#include "Pt.rc" +#include "Ru.rc" +#include "Sk.rc" +#include "Sv.rc" +#include "Uk.rc" diff --git a/reactos/dll/win32/shdocvw/shdocvw_ros.diff b/reactos/dll/win32/shdocvw/shdocvw_ros.diff new file mode 100644 index 00000000000..5a88a428358 --- /dev/null +++ b/reactos/dll/win32/shdocvw/shdocvw_ros.diff @@ -0,0 +1,46 @@ +Index: shdocvw.rc +=================================================================== +--- shdocvw.rc (revision 25694) ++++ shdocvw.rc (revision 25695) +@@ -38,3 +38,4 @@ + #include "Pt.rc" + #include "Ru.rc" + #include "Sv.rc" ++#include "Uk.rc" +Index: Uk.rc +=================================================================== +--- Uk.rc (revision 25695) ++++ Uk.rc (working copy) +@@ -0,0 +1,26 @@ ++/* ++ * PROJECT: Shell Doc Object and Control Library ++ * LICENSE: GPL - See COPYING in the top level directory ++ * FILE: dll/win32/shdocvw/Uk.rc ++ * PURPOSE: Ukraianian Language File for shdocvw ++ * TRANSLATOR: Artem Reznikov ++ */ ++ ++LANGUAGE LANG_UKRAINIAN, SUBLANG_DEFAULT ++ ++100 DIALOG LOADONCALL MOVEABLE DISCARDABLE 0, 0, 220, 62 ++STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU ++CAPTION " Mozilla Active X" ++FONT 8, "MS Shell Dlg" ++{ ++ CONTROL "Progress1",1000,"msctls_progress32",WS_BORDER|PBS_SMOOTH,10,10,200,12 ++ LTEXT "", 104, 10, 30, 200, 10, SS_CENTER ++ PUSHBUTTON "", IDCANCEL, 85, 44, 50, 15, WS_GROUP | WS_TABSTOP ++} ++ ++STRINGTABLE ++BEGIN ++ 1001 " ' ActiveX ,\n" \ ++ " Mozilla Active X ." \ ++ " ??" ++END + +Property changes on: Uk.rc +___________________________________________________________________ +Name: svn:eol-style + + native + From 31d20f1882b5661fa491afc8f3cc2c45dd6157b7 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sat, 2 Aug 2008 23:49:02 +0000 Subject: [PATCH 096/304] - start implementing the alt-tab app switching dialog - requires WH_KEYBOARD_LL hook which is not yet ready - add missing resource constant svn path=/trunk/; revision=35051 --- .../win32/csrss/win32csr/appswitch.c | 255 ++++++++++++++++++ .../subsystems/win32/csrss/win32csr/dllmain.c | 2 + .../win32/csrss/win32csr/lang/bg-BG.rc | 8 + .../win32/csrss/win32csr/lang/de-DE.rc | 8 + .../win32/csrss/win32csr/lang/el-GR.rc | 8 + .../win32/csrss/win32csr/lang/en-US.rc | 8 + .../win32/csrss/win32csr/lang/es-ES.rc | 8 + .../win32/csrss/win32csr/lang/fr-FR.rc | 8 + .../win32/csrss/win32csr/lang/id-ID.rc | 8 + .../win32/csrss/win32csr/lang/it-IT.rc | 8 + .../win32/csrss/win32csr/lang/pl-PL.rc | 8 + .../win32/csrss/win32csr/lang/ru-RU.rc | 8 + .../win32/csrss/win32csr/lang/sk-SK.rc | 8 + .../win32/csrss/win32csr/lang/uk-UA.rc | 8 + .../win32/csrss/win32csr/resource.h | 4 + .../win32/csrss/win32csr/win32csr.rbuild | 3 + 16 files changed, 360 insertions(+) create mode 100644 reactos/subsystems/win32/csrss/win32csr/appswitch.c diff --git a/reactos/subsystems/win32/csrss/win32csr/appswitch.c b/reactos/subsystems/win32/csrss/win32csr/appswitch.c new file mode 100644 index 00000000000..9061edc2758 --- /dev/null +++ b/reactos/subsystems/win32/csrss/win32csr/appswitch.c @@ -0,0 +1,255 @@ +#include "w32csr.h" + +typedef struct APPSWITCH_ITEM +{ + HWND hwndDlg; + DWORD zPos; + HICON hIcon; + BOOL bFocus; + struct APPSWITCH_ITEM * Next; + WCHAR szText[1]; +}APPSWITCH_ITEM, *PAPPSWITCH_ITEM; + +static PAPPSWITCH_ITEM pRoot = NULL; +static DWORD NumOfWindows = 0; +static HWND hAppWindowDlg = NULL; +static HHOOK hhk = NULL; + +BOOL +CALLBACK +EnumWindowEnumProc( + HWND hwnd, + LPARAM lParam +) +{ + PAPPSWITCH_ITEM pItem; + UINT Length; + HICON hIcon; + PAPPSWITCH_ITEM pCurItem; + DWORD dwPid; + HANDLE hProcess; + WCHAR szFileName[MAX_PATH] = {0}; + + /* check if the enumerated window is visible */ + if (!IsWindowVisible(hwnd)) + return TRUE; + /* get window icon */ + hIcon = (HICON)SendMessage(hwnd, WM_GETICON, ICON_BIG, 0); + if (!hIcon) + { + GetWindowThreadProcessId(hwnd, &dwPid); + hProcess = OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ, FALSE, dwPid); + if (hProcess) + { + if (GetModuleFileNameExW(hProcess, NULL, szFileName, MAX_PATH)) + { + szFileName[MAX_PATH-1] = L'\0'; + ExtractIconExW(szFileName, 0, &hIcon, NULL, 1); + } + } + } + else + { + /* icons from WM_GETICON need to be copied */ + hIcon = CopyIcon(hIcon); + } + /* get the text length */ + Length = SendMessageW(hwnd, WM_GETTEXTLENGTH, 0, 0); + /* allocate item structure for it */ + pItem = (PAPPSWITCH_ITEM)HeapAlloc(Win32CsrApiHeap, HEAP_ZERO_MEMORY, sizeof(APPSWITCH_ITEM) + Length * sizeof(WCHAR)); + if (!pItem) + return TRUE; + if (Length) + { + /* retrieve the window text when available */ + SendMessageW(hwnd, WM_GETTEXT, Length+1, (LPARAM)pItem->szText); + } + /* copy the window icon */ + pItem->hIcon = hIcon; + /* store window handle */ + pItem->hwndDlg = hwnd; + /* is the window the active window */ + if (GetActiveWindow() == hwnd) + pItem->bFocus = TRUE; + + if (!pRoot) + { + /* first item */ + pRoot = pItem; + return TRUE; + } + + /* enumerate the last item */ + pCurItem = pRoot; + while(pCurItem->Next) + pCurItem = pCurItem->Next; + + /* insert it into the list */ + pCurItem->Next = pItem; + NumOfWindows++; + return TRUE; +} + +VOID +EnumerateAppWindows(HDESK hDesk, HWND hwndDlg) +{ + /* initialize defaults */ + pRoot = NULL; + NumOfWindows = 0; + hAppWindowDlg = hwndDlg; + /* enumerate all windows */ + EnumDesktopWindows(hDesk, EnumWindowEnumProc, (LPARAM)NULL); + if (NumOfWindows > 7) + { + /* FIXME resize window */ + } +} + +VOID +MarkNextEntryAsActive() +{ + PAPPSWITCH_ITEM pItem; + + pItem = pRoot; + if (!pRoot) + return; + + while(pItem) + { + if (pItem->bFocus) + { + pItem->bFocus = FALSE; + if (pItem->Next) + pItem->Next->bFocus = TRUE; + else + pRoot->bFocus = TRUE; + } + pItem = pItem->Next; + } + + InvalidateRgn(hAppWindowDlg, NULL, TRUE); +} + + +LRESULT +CALLBACK +KeyboardHookProc( + int nCode, + WPARAM wParam, + LPARAM lParam +) +{ + PKBDLLHOOKSTRUCT hk = (PKBDLLHOOKSTRUCT) lParam; + + if (wParam == WM_SYSKEYUP) + { + /* is tab key pressed */ + if (hk->vkCode == VK_TAB) + { + if (hAppWindowDlg == NULL) + { + /* FIXME + * launch window + */ + DPRINT1("launch alt-tab window\n"); + } + else + { + MarkNextEntryAsActive(); + } + } + } + return CallNextHookEx(hhk, nCode, wParam, lParam); +} + +VOID +PaintAppWindows(HWND hwndDlg, HDC hDc) +{ + DWORD dwIndex, X, Y; + PAPPSWITCH_ITEM pCurItem; + RECT Rect; + DWORD XSize, YSize, XMax; + HBRUSH hBrush; + + X = 10; + Y = 10; + XSize = GetSystemMetrics(SM_CXICON); + YSize = GetSystemMetrics(SM_CYICON); + XMax = (XSize+(XSize/2)) * 7 + X; + pCurItem = pRoot; + + for (dwIndex = 0; dwIndex < NumOfWindows; dwIndex++) + { + if (X >= XMax) + { + X = 10; + Y += YSize + (YSize/2); + } + if (pCurItem->bFocus) + { + hBrush = CreateSolidBrush(RGB(30, 30, 255)); + SetRect(&Rect, X-5, Y-5, X + XSize + 5, Y + YSize + 5); + FillRect(hDc, &Rect, hBrush); + DeleteObject((HGDIOBJ)hBrush); + SendDlgItemMessageW(hwndDlg, IDC_STATIC_CUR_APP, WM_SETTEXT, 0, (LPARAM)pCurItem->szText); + } + + DrawIcon(hDc, X, Y, pCurItem->hIcon); + pCurItem = pCurItem->Next; + X += XSize +(XSize/2); + } +} +VOID +DestroyAppWindows() +{ + PAPPSWITCH_ITEM pCurItem, pNextItem; + + pCurItem = pRoot; + while(pCurItem) + { + pNextItem = pCurItem->Next; + DestroyIcon(pCurItem->hIcon); + HeapFree(Win32CsrApiHeap, 0, pCurItem); + pCurItem = pNextItem; + } + pRoot = NULL; + hAppWindowDlg = NULL; + NumOfWindows = 0; +} + +INT_PTR +CALLBACK +SwitchWindowDlgProc(HWND hwndDlg, UINT message, WPARAM wParam, LPARAM lParam) +{ + PAINTSTRUCT Paint; + HDESK hInput; + + switch (message) + { + case WM_INITDIALOG: + hInput = OpenInputDesktop(0,0, GENERIC_ALL); + if (hInput) + { + EnumerateAppWindows(hInput, hwndDlg); + CloseDesktop(hInput); + } + return TRUE; + case WM_PAINT: + BeginPaint(hwndDlg, &Paint); + PaintAppWindows(hwndDlg, Paint.hdc); + EndPaint(hwndDlg, &Paint); + break; + case WM_DESTROY: + DestroyAppWindows(); + break; + } + return FALSE; +} + +VOID +STDCALL +InitializeAppSwitchHook() +{ + hhk = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, NULL, 0); + DPRINT("InitializeAppSwitchHook hhk %p\n", hhk); +} diff --git a/reactos/subsystems/win32/csrss/win32csr/dllmain.c b/reactos/subsystems/win32/csrss/win32csr/dllmain.c index 34c72eefc81..554c7a75afb 100644 --- a/reactos/subsystems/win32/csrss/win32csr/dllmain.c +++ b/reactos/subsystems/win32/csrss/win32csr/dllmain.c @@ -16,6 +16,7 @@ /* Not defined in any header file */ extern VOID STDCALL PrivateCsrssManualGuiCheck(LONG Check); extern VOID STDCALL PrivateCsrssInitialized(); +extern VOID STDCALL InitializeAppSwitchHook(); /* GLOBALS *******************************************************************/ @@ -95,6 +96,7 @@ DllMain(HANDLE hDll, if (DLL_PROCESS_ATTACH == dwReason) { Win32CsrDllHandle = hDll; + InitializeAppSwitchHook(); } return TRUE; diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/bg-BG.rc b/reactos/subsystems/win32/csrss/win32csr/lang/bg-BG.rc index 963c6473b62..d358f5703c7 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/bg-BG.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/bg-BG.rc @@ -33,6 +33,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/de-DE.rc b/reactos/subsystems/win32/csrss/win32csr/lang/de-DE.rc index d2a233896c1..a8fa75eabe2 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/de-DE.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/de-DE.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Bearbeiten" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/el-GR.rc b/reactos/subsystems/win32/csrss/win32csr/lang/el-GR.rc index c230817cce9..e6136973002 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/el-GR.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/el-GR.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/en-US.rc b/reactos/subsystems/win32/csrss/win32csr/lang/en-US.rc index 840e31154e6..b6ebdf2a660 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/en-US.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/en-US.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Edit" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/es-ES.rc b/reactos/subsystems/win32/csrss/win32csr/lang/es-ES.rc index e20d4d6dd37..50960a7bfe4 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/es-ES.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/es-ES.rc @@ -32,6 +32,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Editar" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/fr-FR.rc b/reactos/subsystems/win32/csrss/win32csr/lang/fr-FR.rc index c4428d9ec71..834aa502dec 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/fr-FR.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/fr-FR.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + /* Fixme : Translation could be really improved, with context La traduction pourrait rellement tre amliore grce au contexte */ STRINGTABLE diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/id-ID.rc b/reactos/subsystems/win32/csrss/win32csr/lang/id-ID.rc index bb81cbbb0e2..7faf10f7579 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/id-ID.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/id-ID.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Edit" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/it-IT.rc b/reactos/subsystems/win32/csrss/win32csr/lang/it-IT.rc index 0bb1add4cb4..4aecce782f1 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/it-IT.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/it-IT.rc @@ -36,6 +36,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Modifica" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/pl-PL.rc b/reactos/subsystems/win32/csrss/win32csr/lang/pl-PL.rc index a7d3180755c..9d8927ebc2d 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/pl-PL.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/pl-PL.rc @@ -32,6 +32,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Edytuj" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/ru-RU.rc b/reactos/subsystems/win32/csrss/win32csr/lang/ru-RU.rc index be9af13ee1a..e35fa896cfc 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/ru-RU.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/ru-RU.rc @@ -27,6 +27,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/sk-SK.rc b/reactos/subsystems/win32/csrss/win32csr/lang/sk-SK.rc index f5ed348a5e2..3642acb0878 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/sk-SK.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/sk-SK.rc @@ -31,6 +31,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "Upravi" diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/uk-UA.rc b/reactos/subsystems/win32/csrss/win32csr/lang/uk-UA.rc index b0df756b393..7cf8452f2d2 100644 --- a/reactos/subsystems/win32/csrss/win32csr/lang/uk-UA.rc +++ b/reactos/subsystems/win32/csrss/win32csr/lang/uk-UA.rc @@ -35,6 +35,14 @@ BEGIN IDC_STATIC,7,53,178,26 END +IDD_SWITCH_APP DIALOGEX 90, 90, 265, 170 +STYLE DS_SYSMODAL | DS_SETFONT | DS_SETFOREGROUND | DS_3DLOOK | DS_FIXEDSYS | WS_POPUP | WS_VISIBLE +EXSTYLE WS_EX_TOPMOST | WS_EX_WINDOWEDGE +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + LTEXT "",IDC_STATIC_CUR_APP,39,139,204,16,SS_SUNKEN,WS_EX_STATICEDGE +END + STRINGTABLE BEGIN IDS_EDIT "" diff --git a/reactos/subsystems/win32/csrss/win32csr/resource.h b/reactos/subsystems/win32/csrss/win32csr/resource.h index f5491fa0091..a0de6e4adde 100644 --- a/reactos/subsystems/win32/csrss/win32csr/resource.h +++ b/reactos/subsystems/win32/csrss/win32csr/resource.h @@ -10,10 +10,14 @@ #define WIN32CSR_RESOURCE_H_INCLUDED #define IDD_END_NOW 10 +#define IDD_NOT_RESPONDING 11 +#define IDD_SWITCH_APP 12 #define IDC_STATIC 100 #define IDC_PROGRESS 101 #define IDC_END_NOW 102 +#define IDC_STATIC_CUR_APP 103 + #define ID_SYSTEM_EDIT_MARK 1001 #define ID_SYSTEM_EDIT_COPY 1002 diff --git a/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild b/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild index 6a24d5d651e..53bad5de37c 100644 --- a/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild +++ b/reactos/subsystems/win32/csrss/win32csr/win32csr.rbuild @@ -16,6 +16,8 @@ advapi32 psapi msvcrt + psapi + shell32 w32csr.h alias.c conio.c @@ -24,5 +26,6 @@ exitros.c guiconsole.c tuiconsole.c + appswitch.c win32csr.rc From 50fc6d657b1f15780eed8ce0a3953af2f4eaaa21 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sun, 3 Aug 2008 00:04:21 +0000 Subject: [PATCH 097/304] - fix build svn path=/trunk/; revision=35052 --- reactos/subsystems/win32/csrss/win32csr/appswitch.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/reactos/subsystems/win32/csrss/win32csr/appswitch.c b/reactos/subsystems/win32/csrss/win32csr/appswitch.c index 9061edc2758..e978242cca4 100644 --- a/reactos/subsystems/win32/csrss/win32csr/appswitch.c +++ b/reactos/subsystems/win32/csrss/win32csr/appswitch.c @@ -1,4 +1,15 @@ + +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS system libraries + * FILE: subsys/csrss/win32csr/appswitch.c + * PURPOSE: app switching functionality + * PROGRAMMERS: Johannes Anderwald (janderwald@reactos.org) + */ + #include "w32csr.h" +//#define NDEBUG +#include typedef struct APPSWITCH_ITEM { From f24b9e3f36bcb619e266ede21fceb6cb9207a058 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Sun, 3 Aug 2008 07:23:42 +0000 Subject: [PATCH 098/304] Merge aicom-network-fixes up to 35055 svn path=/trunk/; revision=35056 --- reactos/drivers/network/afd/afd/listen.c | 5 ++++- reactos/drivers/network/afd/afd/lock.c | 5 +++-- reactos/drivers/network/afd/afd/main.c | 3 ++- reactos/drivers/network/afd/afd/read.c | 13 +++++++++++-- reactos/drivers/network/afd/afd/select.c | 2 ++ reactos/drivers/network/tcpip/datalink/lan.c | 6 ++++-- reactos/drivers/network/tcpip/tcpip/main.c | 2 ++ reactos/drivers/network/tcpip/tcpip/pool.c | 11 ++++++++++- 8 files changed, 38 insertions(+), 9 deletions(-) diff --git a/reactos/drivers/network/afd/afd/listen.c b/reactos/drivers/network/afd/afd/listen.c index 166e2a6f912..0f59006d722 100644 --- a/reactos/drivers/network/afd/afd/listen.c +++ b/reactos/drivers/network/afd/afd/listen.c @@ -18,7 +18,10 @@ static VOID SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt, PAFD_TDI_OBJECT_QELT Qelt ) { PAFD_FCB FCB = NewFileObject->FsContext; - if( !SocketAcquireStateLock( FCB ) ) return; + if( !SocketAcquireStateLock( FCB ) ) { + LostSocket( Irp ); + return; + } /* Transfer the connection to the new socket, launch the opening read */ AFD_DbgPrint(MID_TRACE,("Completing a real accept (FCB %x)\n", FCB)); diff --git a/reactos/drivers/network/afd/afd/lock.c b/reactos/drivers/network/afd/afd/lock.c index 6ecd4f202d3..4036a9c9ee0 100644 --- a/reactos/drivers/network/afd/afd/lock.c +++ b/reactos/drivers/network/afd/afd/lock.c @@ -237,6 +237,9 @@ NTSTATUS NTAPI UnlockAndMaybeComplete UINT Information, PIO_COMPLETION_ROUTINE Completion ) { + Irp->IoStatus.Status = Status; + Irp->IoStatus.Information = Information; + if( Status == STATUS_PENDING ) { /* We should firstly mark this IRP as pending, because otherwise it may be completed by StreamSocketConnectComplete() @@ -246,8 +249,6 @@ NTSTATUS NTAPI UnlockAndMaybeComplete } else { if ( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); SocketStateUnlock( FCB ); - Irp->IoStatus.Status = Status; - Irp->IoStatus.Information = Information; if( Completion ) Completion( FCB->DeviceExt->DeviceObject, Irp, FCB ); IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); diff --git a/reactos/drivers/network/afd/afd/main.c b/reactos/drivers/network/afd/afd/main.c index 0270c4bede4..51116743c7b 100644 --- a/reactos/drivers/network/afd/afd/main.c +++ b/reactos/drivers/network/afd/afd/main.c @@ -313,6 +313,8 @@ AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) ASSERT(FileObject == IrpSp->FileObject); } + Irp->IoStatus.Information = 0; + switch(IrpSp->MajorFunction) { /* opening and closing handles to the device */ @@ -457,7 +459,6 @@ AfdDispatch(PDEVICE_OBJECT DeviceObject, PIRP Irp) default: Status = STATUS_NOT_IMPLEMENTED; - Irp->IoStatus.Information = 0; AFD_DbgPrint(MIN_TRACE, ("Unknown IOCTL (0x%x)\n", IrpSp->Parameters.DeviceIoControl. IoControlCode)); diff --git a/reactos/drivers/network/afd/afd/read.c b/reactos/drivers/network/afd/afd/read.c index fbe347f6538..0775a490340 100644 --- a/reactos/drivers/network/afd/afd/read.c +++ b/reactos/drivers/network/afd/afd/read.c @@ -129,7 +129,7 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { PIRP NextIrp; PIO_STACK_LOCATION NextIrpSp; PAFD_RECV_INFO RecvReq; - UINT TotalBytesCopied = 0; + UINT TotalBytesCopied = 0, RetBytesCopied = 0; NTSTATUS Status = STATUS_SUCCESS, RetStatus = STATUS_PENDING; AFD_DbgPrint(MID_TRACE,("%x %x\n", FCB, Irp)); @@ -197,7 +197,10 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { RecvReq->BufferCount, FALSE ); NextIrp->IoStatus.Status = Status; NextIrp->IoStatus.Information = TotalBytesCopied; - if( NextIrp == Irp ) RetStatus = Status; + if( NextIrp == Irp ) { + RetStatus = Status; + RetBytesCopied = TotalBytesCopied; + } if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } @@ -213,6 +216,12 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { AFD_DbgPrint(MID_TRACE,("RetStatus for irp %x is %x\n", Irp, RetStatus)); + /* Sometimes we're called with a NULL Irp */ + if( Irp ) { + Irp->IoStatus.Status = RetStatus; + Irp->IoStatus.Information = RetBytesCopied; + } + return RetStatus; } diff --git a/reactos/drivers/network/afd/afd/select.c b/reactos/drivers/network/afd/afd/select.c index 3f00167b134..109a519ade2 100644 --- a/reactos/drivers/network/afd/afd/select.c +++ b/reactos/drivers/network/afd/afd/select.c @@ -262,6 +262,8 @@ AfdSelect( PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Returning %x\n", Status)); + Irp->IoStatus.Status = Status; + return Status; } diff --git a/reactos/drivers/network/tcpip/datalink/lan.c b/reactos/drivers/network/tcpip/datalink/lan.c index 94239036f99..e88bb9d85ab 100644 --- a/reactos/drivers/network/tcpip/datalink/lan.c +++ b/reactos/drivers/network/tcpip/datalink/lan.c @@ -860,8 +860,10 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, Status = ZwEnumerateKey( EnumKey, i, KeyBasicInformation, Kbio, KbioLength, &ResultLength ); - TI_DbgPrint(DEBUG_DATALINK,("Couldn't enum key child %d\n", i)); - return Status; + if( !NT_SUCCESS(Status) ) { + TI_DbgPrint(DEBUG_DATALINK,("Couldn't enum key child %d\n", i)); + return Status; + } } if( NT_SUCCESS(Status) ) { diff --git a/reactos/drivers/network/tcpip/tcpip/main.c b/reactos/drivers/network/tcpip/tcpip/main.c index 9e795c15c2b..19c5a67a681 100644 --- a/reactos/drivers/network/tcpip/tcpip/main.c +++ b/reactos/drivers/network/tcpip/tcpip/main.c @@ -518,6 +518,8 @@ TiDispatchInternal( if( Complete ) IRPFinish( Irp, Status ); + else + Irp->IoStatus.Status = Status; return Status; } diff --git a/reactos/drivers/network/tcpip/tcpip/pool.c b/reactos/drivers/network/tcpip/tcpip/pool.c index e1ff8e2c38e..9ded1ac6639 100644 --- a/reactos/drivers/network/tcpip/tcpip/pool.c +++ b/reactos/drivers/network/tcpip/tcpip/pool.c @@ -48,11 +48,20 @@ VOID PoolFreeBuffer( } PVOID TcpipAllocateFromNPagedLookasideList( PNPAGED_LOOKASIDE_LIST List ) { - return ExAllocateFromNPagedLookasideList( List ); + PVOID Buffer; + + Buffer = ExAllocateFromNPagedLookasideList( List ); + + TI_DbgPrint(DEBUG_MEMORY, ("Allocated from Nonpaged Lookaside List at (0x%X).\n", Buffer)); + + return Buffer; } VOID TcpipFreeToNPagedLookasideList( PNPAGED_LOOKASIDE_LIST List, PVOID Thing ) { + + TI_DbgPrint(DEBUG_MEMORY, ("Freeing buffer (0x%X) to Nonpaged Lookaside List.\n", Thing)); + ExFreeToNPagedLookasideList( List, Thing ); } From 6e2deb5f564c7fabe57341c042af2fe9afc598a0 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sun, 3 Aug 2008 08:18:54 +0000 Subject: [PATCH 099/304] - Revert 35042 svn path=/trunk/; revision=35057 --- reactos/ntoskrnl/ex/handle.c | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/reactos/ntoskrnl/ex/handle.c b/reactos/ntoskrnl/ex/handle.c index 11df6d016e6..70d181edd42 100644 --- a/reactos/ntoskrnl/ex/handle.c +++ b/reactos/ntoskrnl/ex/handle.c @@ -35,10 +35,8 @@ NTAPI ExpLookupHandleTableEntry(IN PHANDLE_TABLE HandleTable, IN EXHANDLE LookupHandle) { - ULONG i, j, k, NextHandle; - ULONG_PTR TableCode = HandleTable->TableCode; - ULONG_PTR TableBase = TableCode & ~3; - ULONG TableLevel = (ULONG)(TableCode & 3); + ULONG i, j, k, TableLevel, NextHandle; + ULONG_PTR TableBase; PHANDLE_TABLE_ENTRY Entry = NULL; EXHANDLE Handle = LookupHandle; PUCHAR Level1, Level2, Level3; @@ -48,6 +46,13 @@ ExpLookupHandleTableEntry(IN PHANDLE_TABLE HandleTable, NextHandle = *(volatile ULONG*)&HandleTable->NextHandleNeedingPool; if (Handle.Value >= NextHandle) return NULL; + /* Get the table code */ + TableBase = *(volatile ULONG_PTR*)&HandleTable->TableCode; + + /* Extract the table level and actual table base */ + TableLevel = (ULONG)(TableBase & 3); + TableBase = TableBase - TableLevel; + /* Check what level we're running at */ switch (TableLevel) { @@ -205,8 +210,8 @@ ExpFreeHandleTable(IN PHANDLE_TABLE HandleTable) PEPROCESS Process = HandleTable->QuotaProcess; ULONG i, j; ULONG_PTR TableCode = HandleTable->TableCode; + ULONG TableLevel = TableCode & 3; ULONG_PTR TableBase = TableCode & ~3; - ULONG TableLevel = (ULONG)(TableCode & 3); PHANDLE_TABLE_ENTRY Level1, *Level2, **Level3; PAGED_CODE(); @@ -729,13 +734,6 @@ ExpAllocateHandleTableEntry(IN PHANDLE_TABLE HandleTable, /* Lookup the entry for this handle */ Entry = ExpLookupHandleTableEntry(HandleTable, Handle); - /* Make sure that we found an entry */ - if (!Entry) - { - /* We didn't, fail */ - return NULL; - } - /* Get an available lock and acquire it */ i = ((OldValue & FREE_HANDLE_MASK) >> 2) % 4; KeEnterCriticalRegion(); From d07210c83c574f33424fccbe8b33d810cb694939 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 3 Aug 2008 08:38:59 +0000 Subject: [PATCH 100/304] Fixed rosapps build svn path=/trunk/; revision=35058 --- reactos/dll/win32/dbghelp/dbghelp.spec | 4 +- reactos/dll/win32/dbghelp/dbghelp_ros.diff | 50 ++++++++++++++++++++++ reactos/dll/win32/dbghelp/symbol.c | 24 +++++++++++ reactos/include/psdk/dbghelp.h | 3 +- 4 files changed, 77 insertions(+), 4 deletions(-) create mode 100644 reactos/dll/win32/dbghelp/dbghelp_ros.diff diff --git a/reactos/dll/win32/dbghelp/dbghelp.spec b/reactos/dll/win32/dbghelp/dbghelp.spec index b95a9e728bf..d304a2a86d4 100644 --- a/reactos/dll/win32/dbghelp/dbghelp.spec +++ b/reactos/dll/win32/dbghelp/dbghelp.spec @@ -40,8 +40,8 @@ @ stub SymEnumSym @ stdcall SymEnumSymbols(ptr double str ptr ptr) @ stdcall SymEnumSymbolsW(ptr double wstr ptr ptr) -@ stub SymEnumSymbolsForAddr -@ stub SymEnumSymbolsForAddrW +@ stdcall SymEnumSymbolsForAddr (ptr double ptr ptr) +@ stdcall SymEnumSymbolsForAddrW (ptr double ptr ptr) @ stdcall SymEnumTypes(ptr double ptr ptr) @ stdcall SymEnumTypesW(ptr double ptr ptr) @ stdcall SymEnumerateModules(long ptr ptr) diff --git a/reactos/dll/win32/dbghelp/dbghelp_ros.diff b/reactos/dll/win32/dbghelp/dbghelp_ros.diff new file mode 100644 index 00000000000..b3c91c1e4f5 --- /dev/null +++ b/reactos/dll/win32/dbghelp/dbghelp_ros.diff @@ -0,0 +1,50 @@ +Index: dbghelp.spec +=================================================================== +--- dbghelp.spec (revision 35049) ++++ dbghelp.spec (working copy) +@@ -40,8 +40,8 @@ + @ stub SymEnumSym + @ stdcall SymEnumSymbols(ptr double str ptr ptr) + @ stdcall SymEnumSymbolsW(ptr double wstr ptr ptr) +-@ stub SymEnumSymbolsForAddr +-@ stub SymEnumSymbolsForAddrW ++@ stdcall SymEnumSymbolsForAddr (ptr double ptr ptr) ++@ stdcall SymEnumSymbolsForAddrW (ptr double ptr ptr) + @ stdcall SymEnumTypes(ptr double ptr ptr) + @ stdcall SymEnumTypesW(ptr double ptr ptr) + @ stdcall SymEnumerateModules(long ptr ptr) +Index: symbol.c +=================================================================== +--- symbol.c (revision 35049) ++++ symbol.c (working copy) +@@ -1000,6 +1000,30 @@ + } + + /****************************************************************** ++ * SymEnumSymbolsForAddrW (DBGHELP.@) ++ * ++ */ ++BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE hProcess, DWORD64 Address, ++ PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, ++ PVOID UserContext) ++{ ++ UNIMPLEMENTED; ++ return FALSE; ++} ++ ++/****************************************************************** ++ * SymEnumSymbolsForAddr (DBGHELP.@) ++ * ++ */ ++BOOL WINAPI SymEnumSymbolsForAddr(HANDLE hProcess, DWORD64 Address, ++ PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, ++ PVOID UserContext) ++{ ++ UNIMPLEMENTED; ++ return FALSE; ++} ++ ++/****************************************************************** + * SymEnumSymbolsW (DBGHELP.@) + * + */ diff --git a/reactos/dll/win32/dbghelp/symbol.c b/reactos/dll/win32/dbghelp/symbol.c index f4f2d11644a..1d0bbf5d2da 100644 --- a/reactos/dll/win32/dbghelp/symbol.c +++ b/reactos/dll/win32/dbghelp/symbol.c @@ -999,6 +999,30 @@ static BOOL CALLBACK sym_enumW(PSYMBOL_INFO si, ULONG size, PVOID ctx) return (sew->cb)(sew->sym_info, size, sew->ctx); } +/****************************************************************** + * SymEnumSymbolsForAddrW (DBGHELP.@) + * + */ +BOOL WINAPI SymEnumSymbolsForAddrW(HANDLE hProcess, DWORD64 Address, + PSYM_ENUMERATESYMBOLS_CALLBACKW EnumSymbolsCallback, + PVOID UserContext) +{ + UNIMPLEMENTED; + return FALSE; +} + +/****************************************************************** + * SymEnumSymbolsForAddr (DBGHELP.@) + * + */ +BOOL WINAPI SymEnumSymbolsForAddr(HANDLE hProcess, DWORD64 Address, + PSYM_ENUMERATESYMBOLS_CALLBACK EnumSymbolsCallback, + PVOID UserContext) +{ + UNIMPLEMENTED; + return FALSE; +} + /****************************************************************** * SymEnumSymbolsW (DBGHELP.@) * diff --git a/reactos/include/psdk/dbghelp.h b/reactos/include/psdk/dbghelp.h index a67daf38905..c8bb33ca4fb 100644 --- a/reactos/include/psdk/dbghelp.h +++ b/reactos/include/psdk/dbghelp.h @@ -375,10 +375,9 @@ typedef struct _IMAGEHLP_DUPLICATE_SYMBOL64 #define SYMOPT_EXACT_SYMBOLS 0x00000400 #define SYMOPT_WILD_UNDERSCORE 0x00000800 #define SYMOPT_USE_DEFAULTS 0x00001000 -/* latest SDK defines: +/* latest SDK defines: */ #define SYMOPT_ALLOW_ABSOLUTE_SYMBOLS 0x00000800 #define SYMOPT_IGNORE_NT_SYMPATH 0x00001000 -*/ #define SYMOPT_INCLUDE_32BIT_MODULES 0x00002000 #define SYMOPT_PUBLICS_ONLY 0x00004000 #define SYMOPT_NO_PUBLICS 0x00008000 From 00301390749bd986b4421bb02abb74c3c9f5b653 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sun, 3 Aug 2008 08:53:27 +0000 Subject: [PATCH 101/304] - Use RtlCopyUnicodeString instead of RtlInitUnicodeString when copying a string svn path=/trunk/; revision=35059 --- reactos/ntoskrnl/kdbg/kdb_symbols.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/kdbg/kdb_symbols.c b/reactos/ntoskrnl/kdbg/kdb_symbols.c index 597f7a90592..7d582651c99 100644 --- a/reactos/ntoskrnl/kdbg/kdb_symbols.c +++ b/reactos/ntoskrnl/kdbg/kdb_symbols.c @@ -354,7 +354,7 @@ KdbpSymAddCachedFile(IN PUNICODE_STRING FileName, CacheEntry->FileName.Buffer = ExAllocatePoolWithTag(NonPagedPool, FileName->Length, TAG_KDBS); - RtlInitUnicodeString(&CacheEntry->FileName, FileName->Buffer); + RtlCopyUnicodeString(&CacheEntry->FileName, FileName); ASSERT(CacheEntry->FileName.Buffer); CacheEntry->RefCount = 1; CacheEntry->RosSymInfo = RosSymInfo; From fdf8fa1b90d986a90d449ffa5c53934b83904ff2 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 3 Aug 2008 09:18:24 +0000 Subject: [PATCH 102/304] Fixed French translation for cacls by Amine Khaldi svn path=/trunk/; revision=35060 --- reactos/base/applications/cacls/lang/fr-FR.rc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/reactos/base/applications/cacls/lang/fr-FR.rc b/reactos/base/applications/cacls/lang/fr-FR.rc index c5b9d7c310f..114acca4adb 100644 --- a/reactos/base/applications/cacls/lang/fr-FR.rc +++ b/reactos/base/applications/cacls/lang/fr-FR.rc @@ -7,17 +7,17 @@ IDS_HELP, "Affiche ou change la liste des contr CACLS nomfichier [/T] [/E] [/C] [/G user:perm [...]] [/R user [...]]\n\ [/P user:perm [...]] [/D user [...]]\n\ nomfichier Affiche les ACLs du fichier.\n\ - /T Change les ACLs des fichiers specifis dans\n\ + /T Change les ACLs des fichiers spcifis dans\n\ le rpertoire en cours et tous les sous-rpertoires.\n\ /E dite les ACL au lieu de les remplacer.\n\ /C Continuer en cas de refus d'accs.\n\ - /G user:perm Accorder des droit d'accs l'utilisateur spcifi.\n\ + /G user:perm Accorder des droits d'accs l'utilisateur spcifi.\n\ Perm peut valoir : R Lecture\n\ W criture\n\ C Modification (criture)\n\ F Contrle total\n\ /R user Supprime les droits d'accs de l'utilisateur spcifi (valide uniquement avec /E).\n\ - /P user:perm Remplace les droits d'accs de l'utilisateur specifi.\n\ + /P user:perm Remplace les droits d'accs de l'utilisateur spcifi.\n\ Perm peut valoir : N Aucun \n\ R Lecture\n\ W criture\n\ @@ -27,11 +27,11 @@ CACLS nomfichier [/T] [/E] [/C] [/G user:perm [...]] [/R user [...]]\n\ Il est possible d'utiliser des caractres joker pour slectionner plus d'un fichier avec une commande.\n\ Il est possible de spcifier plus d'un utilisateur dans une commande.\n\n\ Abrviations:\n\ - CI - Heritage du conteneur.\n\ + CI - Hritage du conteneur.\n\ Le ACE sera appliqu aux rpertoires.\n\ OI - Hritage de l'objet.\n\ Le ACE sera appliqu aux fichiers.\n\ - IO - Heritage seul.\n\ + IO - Hritage seul.\n\ Le ACE ne sera pas appliqu au fichier/rpertoire actuel.\n" IDS_ABBR_CI, "(CI)" From 199ec7787468cbc073b487b754b19c46a651c223 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 3 Aug 2008 11:06:40 +0000 Subject: [PATCH 103/304] Workaround WIDL bug svn path=/trunk/; revision=35063 --- reactos/include/reactos/idl/lsa.idl | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reactos/include/reactos/idl/lsa.idl b/reactos/include/reactos/idl/lsa.idl index c5e129da6a3..b886527505c 100644 --- a/reactos/include/reactos/idl/lsa.idl +++ b/reactos/include/reactos/idl/lsa.idl @@ -38,8 +38,10 @@ typedef struct _LSAPR_SECURITY_DESCRIPTOR { SECURITY_DESCRIPTOR_CONTROL Control; PRPC_SID Owner; PRPC_SID Group; - PLSAPR_ACL Sacl; - PLSAPR_ACL Dacl; + LSAPR_ACL *Sacl; + /* FIXME: should be PLSAPR_ACL Sacl; */ + LSAPR_ACL *Dacl; + /* FIXME: should be PLSAPR_ACL Dacl; */ } LSAPR_SECURITY_DESCRIPTOR, *PLSAPR_SECURITY_DESCRIPTOR; cpp_quote("#if 0"); From 6fbda662d9d802b52d77c355fa13772d0deb7aed Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 11:14:34 +0000 Subject: [PATCH 104/304] - Revert 35039 on hpoussin's request. svn path=/trunk/; revision=35064 --- reactos/tools/widl/typegen.c | 5 ++--- reactos/tools/widl/widl_ros.diff | 16 ---------------- 2 files changed, 2 insertions(+), 19 deletions(-) diff --git a/reactos/tools/widl/typegen.c b/reactos/tools/widl/typegen.c index 952baf82796..41dd22f2cfd 100644 --- a/reactos/tools/widl/typegen.c +++ b/reactos/tools/widl/typegen.c @@ -3299,9 +3299,8 @@ int write_expr_eval_routines(FILE *file, const char *iface) print_file(file, 0, "static void __RPC_USER %s_%sExprEval_%04u(PMIDL_STUB_MESSAGE pStubMsg)\n", iface, name, callback_offset); print_file(file, 0, "{\n"); - print_file (file, 1, "%s%s *%s = (%s%s *)(pStubMsg->StackTop - %u);\n", - is_struct(eval->structure->type) ? "struct " : "", name, var_name, - is_struct(eval->structure->type) ? "struct " : "", name, eval->baseoff); + print_file (file, 1, "%s *%s = (%s *)(pStubMsg->StackTop - %u);\n", + name, var_name, name, eval->baseoff); print_file(file, 1, "pStubMsg->Offset = 0;\n"); /* FIXME */ print_file(file, 1, "pStubMsg->MaxCount = (unsigned long)"); write_struct_expr(file, eval->expr, 1, fields, var_name); diff --git a/reactos/tools/widl/widl_ros.diff b/reactos/tools/widl/widl_ros.diff index 3d88b9768a9..84aff9839cd 100644 --- a/reactos/tools/widl/widl_ros.diff +++ b/reactos/tools/widl/widl_ros.diff @@ -46,22 +46,6 @@ Index: server.c print_server("#include \"%s\"\n", header_name); fprintf(server, "\n"); } -Index: typegen.c -=================================================================== ---- typegen.c (revision 32187) -+++ typegen.c (working copy) -@@ -3299,8 +3299,9 @@ - print_file(file, 0, "static void __RPC_USER %s_%sExprEval_%04u(PMIDL_STUB_MESSAGE pStubMsg)\n", - iface, name, callback_offset); - print_file(file, 0, "{\n"); -- print_file (file, 1, "%s *%s = (%s *)(pStubMsg->StackTop - %u);\n", -- name, var_name, name, eval->baseoff); -+ print_file (file, 1, "%s%s *%s = (%s%s *)(pStubMsg->StackTop - %u);\n", -+ is_struct(eval->structure->type) ? "struct " : "", name, var_name, -+ is_struct(eval->structure->type) ? "struct " : "", name, eval->baseoff); - print_file(file, 1, "pStubMsg->Offset = 0;\n"); /* FIXME */ - print_file(file, 1, "pStubMsg->MaxCount = (unsigned long)"); - write_struct_expr(file, eval->expr, 1, fields, var_name); Index: typelib.c =================================================================== --- typelib.c (revision 32187) From 059407e16e57995322d2aa8983eb3ca09dbaedd0 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 12:24:15 +0000 Subject: [PATCH 105/304] - Add proper write support. - Change fs_flush logic, so it reuses the same fs_write routine instead of duplicating code. - RosBE supports %I64d, so use it instead of %lld. svn path=/trunk/; revision=35065 --- .../applications/sysutils/dosfsck/dosfsck.c | 2 +- .../applications/sysutils/dosfsck/dosfsck.h | 2 +- rosapps/applications/sysutils/dosfsck/io.c | 91 ++++++++++++------- 3 files changed, 62 insertions(+), 33 deletions(-) diff --git a/rosapps/applications/sysutils/dosfsck/dosfsck.c b/rosapps/applications/sysutils/dosfsck/dosfsck.c index 15daf1bc686..7c015421dfc 100644 --- a/rosapps/applications/sysutils/dosfsck/dosfsck.c +++ b/rosapps/applications/sysutils/dosfsck/dosfsck.c @@ -24,7 +24,7 @@ #include "check.h" -int interactive = 0,list = 0,test = 0,verbose = 0,write_immed = 0; +int interactive = 0,list = 0,test = 0,verbose = 0,write_immed = 0,no_change_list=0; int atari_format = 0; unsigned n_files = 0; void *mem_queue = NULL; diff --git a/rosapps/applications/sysutils/dosfsck/dosfsck.h b/rosapps/applications/sysutils/dosfsck/dosfsck.h index 3789b8fdf7f..0f44735f4a2 100644 --- a/rosapps/applications/sysutils/dosfsck/dosfsck.h +++ b/rosapps/applications/sysutils/dosfsck/dosfsck.h @@ -162,7 +162,7 @@ typedef struct { #define offsetof(t,e) ((int)&(((t *)0)->e)) #endif -extern int interactive,list,verbose,test,write_immed; +extern int interactive,list,verbose,test,write_immed,no_change_list; extern int atari_format; extern unsigned n_files; extern void *mem_queue; diff --git a/rosapps/applications/sysutils/dosfsck/io.c b/rosapps/applications/sysutils/dosfsck/io.c index 06ed8792129..43ee3048270 100644 --- a/rosapps/applications/sysutils/dosfsck/io.c +++ b/rosapps/applications/sysutils/dosfsck/io.c @@ -107,13 +107,8 @@ void fs_read(loff_t pos,int size,void *data) const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN: const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; // TMN: char* tmpBuf = malloc(readsize_aligned); // TMN: -#ifdef _MSC_VER if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",pos); - if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %I64dd",size,pos); -#else - if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos); - if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %lld",size,pos); -#endif + if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %I64d",size,pos); assert(got >= size); got = size; assert(seek_delta + size <= readsize); @@ -123,7 +118,7 @@ void fs_read(loff_t pos,int size,void *data) if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); if ((got = read(fd,data,size)) < 0) pdie("Read %d bytes at %lld",size,pos); #endif // TMN: - if (got != size) die("Got %d bytes instead of %d at %lld",got,size,pos); + if (got != size) die("Got %d bytes instead of %d at %I64d",got,size,pos); for (walk = changes; walk; walk = walk->next) { if (walk->pos < pos+size && walk->pos+walk->size > pos) { if (walk->pos < pos) @@ -166,32 +161,52 @@ void fs_write(loff_t pos,int size,void *data) int did; #if 1 //SAE - void *scratch; - const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; - const loff_t seekpos_aligned = pos - (pos % 512); - const size_t seek_delta = (size_t)(pos - seekpos_aligned); - const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; - scratch = alloc(readsize_aligned); - if (write_immed) { - did_change = 1; - if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos); - if ((did = write(fd,data,readsize_aligned)) == (int)readsize_aligned) - { - free(scratch); - return; - } - if (did < 0) pdie("Write %d bytes at %lld",size,pos); - die("Wrote %d bytes instead of %d at %lld",did,size,pos); - } - new = alloc(sizeof(CHANGE)); - new->pos = pos; - memcpy(new->data = alloc(new->size = readsize_aligned),data,readsize_aligned); - new->next = NULL; - if (last) last->next = new; - else changes = new; - last = new; + void *scratch; + const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; + const loff_t seekpos_aligned = pos - (pos % 512); + const size_t seek_delta = (size_t)(pos - seekpos_aligned); + const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; + boolean use_read = (seek_delta != 0) || ((readsize_aligned-size) != 0); + /* Aloc temp buffer if write is not aligned */ + if (use_read) + scratch = alloc(readsize_aligned); + else + scratch = data; + + did_change = 1; + if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",seekpos_aligned); + + if (use_read) + { + /* Read aligned data */ + if (read(fd,scratch,readsize_aligned) < 0) pdie("Read %d bytes at %I64d",size,pos); + + /* Patch data in memory */ + memcpy(data, scratch+seek_delta, size); + } + + /* Write it back */ + if ((did = write(fd,scratch,readsize_aligned)) == (int)readsize_aligned) + { + if (use_read) free(scratch); + return; + } + if (did < 0) pdie("Write %d bytes at %I64d",size,pos); + die("Wrote %d bytes instead of %d at %I64d",did,size,pos); + } + + if (!no_change_list) + { + new = alloc(sizeof(CHANGE)); + new->pos = pos; + memcpy(new->data = alloc(new->size = size),data,size); + new->next = NULL; + if (last) last->next = new; + else changes = new; + last = new; + } #else //SAE if (write_immed) { did_change = 1; @@ -215,10 +230,16 @@ static void fs_flush(void) { CHANGE *this; int size; + int old_write_immed = write_immed; + + /* Disable writes to the list now */ + no_change_list = 1; + write_immed = 1; while (changes) { this = changes; changes = changes->next; +#if 0 if (llseek(fd,this->pos,0) != this->pos) fprintf(stderr,"Seek to %lld failed: %s\n Did not write %d bytes.\n", (__int64)this->pos,strerror(errno),this->size); @@ -228,9 +249,17 @@ static void fs_flush(void) else if (size != this->size) fprintf(stderr,"Wrote %d bytes instead of %d bytes at %lld." "\n",size,this->size,(__int64)this->pos); +#else + fs_write(this->pos, this->size, this->data); +#endif + free(this->data); free(this); } + + /* Restore values */ + no_change_list = 0; + write_immed = old_write_immed; } From 56184fa149ae23da3d27a820b36d135f14859a0a Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 12:46:43 +0000 Subject: [PATCH 106/304] - Fix warnings in io.c. svn path=/trunk/; revision=35066 --- rosapps/applications/sysutils/dosfsck/io.c | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/rosapps/applications/sysutils/dosfsck/io.c b/rosapps/applications/sysutils/dosfsck/io.c index 43ee3048270..2aff0a58491 100644 --- a/rosapps/applications/sysutils/dosfsck/io.c +++ b/rosapps/applications/sysutils/dosfsck/io.c @@ -68,7 +68,7 @@ static loff_t WIN32llseek(int fd, loff_t offset, int whence); #endif #define llseek WIN32llseek -static int is_device = 0; +//static int is_device = 0; void fs_open(char *path,int rw) { @@ -139,8 +139,6 @@ int fs_test(loff_t pos,int size) #if 1 // TMN const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; // TMN: const loff_t seekpos_aligned = pos - (pos % 512); // TMN: - const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN: - const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; // TMN: scratch = alloc(readsize_aligned); if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos); okay = read(fd,scratch,readsize_aligned) == (int)readsize_aligned; @@ -166,7 +164,6 @@ void fs_write(loff_t pos,int size,void *data) const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; const loff_t seekpos_aligned = pos - (pos % 512); const size_t seek_delta = (size_t)(pos - seekpos_aligned); - const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; boolean use_read = (seek_delta != 0) || ((readsize_aligned-size) != 0); /* Aloc temp buffer if write is not aligned */ @@ -184,7 +181,7 @@ void fs_write(loff_t pos,int size,void *data) if (read(fd,scratch,readsize_aligned) < 0) pdie("Read %d bytes at %I64d",size,pos); /* Patch data in memory */ - memcpy(data, scratch+seek_delta, size); + memcpy(data, (char *)scratch+seek_delta, size); } /* Write it back */ @@ -229,7 +226,7 @@ void fs_write(loff_t pos,int size,void *data) static void fs_flush(void) { CHANGE *this; - int size; + //int size; int old_write_immed = write_immed; /* Disable writes to the list now */ @@ -300,9 +297,9 @@ int fs_changed(void) static int WIN32open(const char *path, int oflag, ...) { HANDLE fh; - DWORD desiredAccess; - DWORD shareMode; - DWORD creationDisposition; + DWORD desiredAccess = 0; + DWORD shareMode = 0; + DWORD creationDisposition = 0; DWORD flagsAttributes = FILE_ATTRIBUTE_NORMAL; SECURITY_ATTRIBUTES securityAttributes; va_list ap; From b77c380ad7baf96f546d415122c2e866f445c169 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 12:50:10 +0000 Subject: [PATCH 107/304] - Revert my no_change_list modification, it turns out it's not needed, since when write_immed is set, changes aren't added to the list. svn path=/trunk/; revision=35067 --- .../applications/sysutils/dosfsck/dosfsck.c | 2 +- .../applications/sysutils/dosfsck/dosfsck.h | 2 +- rosapps/applications/sysutils/dosfsck/io.c | 20 ++++++++----------- 3 files changed, 10 insertions(+), 14 deletions(-) diff --git a/rosapps/applications/sysutils/dosfsck/dosfsck.c b/rosapps/applications/sysutils/dosfsck/dosfsck.c index 7c015421dfc..15daf1bc686 100644 --- a/rosapps/applications/sysutils/dosfsck/dosfsck.c +++ b/rosapps/applications/sysutils/dosfsck/dosfsck.c @@ -24,7 +24,7 @@ #include "check.h" -int interactive = 0,list = 0,test = 0,verbose = 0,write_immed = 0,no_change_list=0; +int interactive = 0,list = 0,test = 0,verbose = 0,write_immed = 0; int atari_format = 0; unsigned n_files = 0; void *mem_queue = NULL; diff --git a/rosapps/applications/sysutils/dosfsck/dosfsck.h b/rosapps/applications/sysutils/dosfsck/dosfsck.h index 0f44735f4a2..3789b8fdf7f 100644 --- a/rosapps/applications/sysutils/dosfsck/dosfsck.h +++ b/rosapps/applications/sysutils/dosfsck/dosfsck.h @@ -162,7 +162,7 @@ typedef struct { #define offsetof(t,e) ((int)&(((t *)0)->e)) #endif -extern int interactive,list,verbose,test,write_immed,no_change_list; +extern int interactive,list,verbose,test,write_immed; extern int atari_format; extern unsigned n_files; extern void *mem_queue; diff --git a/rosapps/applications/sysutils/dosfsck/io.c b/rosapps/applications/sysutils/dosfsck/io.c index 2aff0a58491..975438f9d16 100644 --- a/rosapps/applications/sysutils/dosfsck/io.c +++ b/rosapps/applications/sysutils/dosfsck/io.c @@ -194,16 +194,14 @@ void fs_write(loff_t pos,int size,void *data) die("Wrote %d bytes instead of %d at %I64d",did,size,pos); } - if (!no_change_list) - { - new = alloc(sizeof(CHANGE)); - new->pos = pos; - memcpy(new->data = alloc(new->size = size),data,size); - new->next = NULL; - if (last) last->next = new; - else changes = new; - last = new; - } + new = alloc(sizeof(CHANGE)); + new->pos = pos; + memcpy(new->data = alloc(new->size = size),data,size); + new->next = NULL; + if (last) last->next = new; + else changes = new; + last = new; + #else //SAE if (write_immed) { did_change = 1; @@ -230,7 +228,6 @@ static void fs_flush(void) int old_write_immed = write_immed; /* Disable writes to the list now */ - no_change_list = 1; write_immed = 1; while (changes) { @@ -255,7 +252,6 @@ static void fs_flush(void) } /* Restore values */ - no_change_list = 0; write_immed = old_write_immed; } From 834b507d7f7f78cf33ac672b225b7a67b1ac1f6d Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 13:20:44 +0000 Subject: [PATCH 108/304] - Fix a typo, now dosfsck really performs writes (and actually works). svn path=/trunk/; revision=35068 --- rosapps/applications/sysutils/dosfsck/io.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rosapps/applications/sysutils/dosfsck/io.c b/rosapps/applications/sysutils/dosfsck/io.c index 975438f9d16..0ccf41d77c7 100644 --- a/rosapps/applications/sysutils/dosfsck/io.c +++ b/rosapps/applications/sysutils/dosfsck/io.c @@ -181,7 +181,7 @@ void fs_write(loff_t pos,int size,void *data) if (read(fd,scratch,readsize_aligned) < 0) pdie("Read %d bytes at %I64d",size,pos); /* Patch data in memory */ - memcpy(data, (char *)scratch+seek_delta, size); + memcpy((char *)scratch+seek_delta, data, size); } /* Write it back */ From ea7d68ba2d88a527dc0c1f8b630eff2c1a3824e0 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 3 Aug 2008 13:53:37 +0000 Subject: [PATCH 109/304] Updated French translation for Shell32.dll by Amine Khaldi svn path=/trunk/; revision=35069 --- reactos/dll/win32/shell32/lang/fr-FR.rc | 30 ++++++++++++------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 614a18a3a03..b356a420052 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -278,7 +278,7 @@ BEGIN LTEXT "Type :", -1, 15, 55, 40, 10 LTEXT "", 14002, 110, 55, 100, 10 - LTEXT "Systme de fichier :", -1, 15, 70, 100, 10 + LTEXT "Systme de fichiers :", -1, 15, 70, 100, 10 LTEXT "", 14003, 110, 70, 100, 10 CONTROL "", 14013, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 5, 90, 10, 10 @@ -333,7 +333,7 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN LTEXT "Quel compte d'utilisateur dsirez-vous utiliser pour lancer ce programme?", -1, 10, 20, 220, 20 CHECKBOX "Utilisateur actuel %s", 14000, 10, 45, 150, 10 - LTEXT "Protger mon ordinateur et mes donnes de l'activ de programme non autoriss", -1, 25, 57, 200, 10, WS_DISABLED + LTEXT "Protger mon ordinateur et mes donnes des activits des programmes non autoriss", -1, 25, 57, 200, 10, WS_DISABLED CHECKBOX "Cette option peut empcher les virus d'ordinateur d'endommager votre ordinateur ou vos donnes personnelles, nanmoins slectionner cette option pourrait empcher le programme de fonctionner correctement.", 14001, 25, 68, 200, 30, WS_DISABLED | BS_MULTILINE CHECKBOX "L'utilisateur suivant :", 14002, 10, 100, 90, 10 LTEXT "Nom d'utilisateur :", -1, 20, 118, 54, 10 @@ -385,8 +385,8 @@ BEGIN GROUPBOX "Tches", -1, 7, 10, 249, 45 //ICON -AUTORADIOBUTTON "Montrer les tches communes dans les dossiers", 14001, 40, 25, 120, 10, WS_TABSTOP -AUTORADIOBUTTON "Utilisez les dossiers ReactOS class&iques", 14002, 40, 37, 120, 10, WS_TABSTOP +AUTORADIOBUTTON "Afficher les tches habituelles dans les dossiers", 14001, 40, 25, 120, 10, WS_TABSTOP +AUTORADIOBUTTON "Utiliser les dossiers ReactOS class&iques", 14002, 40, 37, 120, 10, WS_TABSTOP GROUPBOX "Parcourir les dossiers", -1, 7, 60, 249, 45, WS_TABSTOP //ICON AUTORADIOBUTTON "Ouvrir tous les dossiers dans la &mme fentre", 14004, 40, 70, 140, 10, WS_TABSTOP @@ -394,9 +394,9 @@ AUTORADIOBUTTON "Ouvrir chaque dossier dans sa propre fen GROUPBOX "Cliquer sur les lments de la faon suivante", -1, 7, 110, 249, 60 //ICON AUTORADIOBUTTON "Clic unique pour ouvrir un lment (pointer pour slectionner)", 14007, 40, 120, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "Toujours souligner les titres des icnes avec mon navigateur", 14008, 50, 132, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "Toujours souligner les titres des icnes comme dans le navigateur", 14008, 50, 132, 170, 10, WS_TABSTOP AUTORADIOBUTTON "Souligner les titres des icnes seulement quand je les &pointe", 14009, 50, 144, 170, 10, WS_TABSTOP -AUTORADIOBUTTON "&Double-cliquer pour ouvrir un lment (clic unique pour slectionner)", 14010, 40, 156, 170, 10, WS_TABSTOP +AUTORADIOBUTTON "&Double-cliquer pour ouvrir un lment (clic unique pour le slectionner)", 14010, 40, 156, 170, 10, WS_TABSTOP PUSHBUTTON "Pa&ramtres par dfaut", 14011, 180, 180, 60, 14, WS_TABSTOP END @@ -417,19 +417,19 @@ END FOLDER_OPTIONS_FILETYPES_DLG DIALOGEX 0, 0, 264, 256 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Types de fichier" +CAPTION "Types de fichiers" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN -LTEXT "&Types de fichier enregistrs :", -1, 7, 10, 70, 10 +LTEXT "&Types de fichiers enregistrs :", -1, 7, 10, 70, 10 CONTROL "", 14000, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHAREIMAGELISTS | WS_BORDER | WS_TABSTOP, 7, 20, 249, 80 PUSHBUTTON "&Nouveau", 14001, 120, 110, 50, 14, WS_TABSTOP PUSHBUTTON "Supprimer", 14002, 180, 110, 50, 14, WS_TABSTOP -GROUPBOX "Dtails pour l'extension '%s'", 14003, 7, 130, 249, 70 +GROUPBOX "Dtails concernant l'extension '%s'", 14003, 7, 130, 249, 70 LTEXT "Ouvrir avec :", -1, 12, 140, 40, 10 //ICON LTEXT "Nom de l'application", 14005, 100, 140, 40, 10 -PUSHBUTTON "&Changer...", 14006, 180, 140, 50, 14, WS_TABSTOP -LTEXT "Les fichiers avec l'extension '%s' sont du type '%s'. Pour\nchanger les paramtres qui concernent tous les fichiers '%s', cliquez\nsur Avanc.", 14007, 12, 155, 160, 30 +PUSHBUTTON "&Modifier...", 14006, 180, 140, 50, 14, WS_TABSTOP +LTEXT "Les fichiers avec l'extension '%s' sont de type '%s'. Pour\nmodifier les paramtres qui concernent tous les fichiers '%s', cliquez\nsur Avanc.", 14007, 12, 155, 160, 30 PUSHBUTTON "A&vanc", 14008, 180, 175, 50, 14, WS_TABSTOP END @@ -481,7 +481,7 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CLIPSIBLIN CAPTION "Excution automatique" FONT 8, "MS Shell Dlg" BEGIN - LTEXT "Slectionnez un type de contenu, puis choisissez une action que ReactOS ralisera automatiquement que ce type sera utilis dans ce priphrique :", 1000, 7, 7, 215, 20 + LTEXT "Slectionnez un type de contenu, puis choisissez une action que ReactOS ralisera automatiquement quand ce type sera utilis dans ce priphrique :", 1000, 7, 7, 215, 20 CONTROL "", 1001, "COMBOBOXEX32", WS_TABSTOP | 0x00000043, 7, 27, 212, 200 GROUPBOX "Actions", -1, 7, 45, 212, 146 AUTORADIOBUTTON "Slectionnez une action raliser :", 1005, 14, 54, 202, 10, WS_GROUP @@ -496,7 +496,7 @@ CAPTION "Contenu mixte" FONT 8, "MS Shell Dlg" BEGIN ICON "", 1000, 5, 7, 21, 20 - LTEXT "Ce disque ou dispositif contient plus d'un type de fichier.", 1001, 32, 7, 191, 20 + LTEXT "Ce disque ou dispositif contient plus d'un type de fichiers.", 1001, 32, 7, 191, 20 LTEXT "Que voulez-vous que ReactOS fasse ?", 1002, 32, 31, 188, 8 CONTROL "", 1003, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 32, 43, 188, 139 DEFPUSHBUTTON "OK", IDOK, 96, 186, 60, 14 @@ -556,7 +556,7 @@ BEGIN PUSHBUTTON "Fermer", IDCANCEL, 118, 198, 60, 14 LTEXT "Ca&pacit :", -1, 7, 6, 169, 9 COMBOBOX 28673, 7, 17, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP - LTEXT "Systme de fichier", -1, 7, 35, 170, 9 + LTEXT "Systme de fichiers", -1, 7, 35, 170, 9 COMBOBOX 28677, 7, 46, 170, 200, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP CONTROL "", 28678, "MSCTLS_PROGRESS32", 0, 7, 181, 170, 8 LTEXT "Taille d'unit d'&allocation", -1, 7, 64, 170, 9 @@ -603,7 +603,7 @@ BEGIN IDS_DESKTOP "Bureau" IDS_MYCOMPUTER "Poste de travail" IDS_RECYCLEBIN_FOLDER_NAME "Corbeille" - IDS_CONTROLPANEL "Panneau de contrle" + IDS_CONTROLPANEL "Panneau de configuration" /* context menus */ IDS_VIEW_LARGE "&Grandes icnes" From b326f4d72f187fb1e2e4bc853d5757294c567a0e Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 13:53:41 +0000 Subject: [PATCH 110/304] - Add dosfsck to the bootcd. svn path=/trunk/; revision=35070 --- reactos/boot/bootdata/packages/reactos.dff | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index 4cfa69fb23c..8881c8b5460 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -586,7 +586,7 @@ modules\rosapps\applications\imagesoft\imagesoft.exe modules\rosapps\applications\net\ncftp\ncftp.exe 1 optional modules\rosapps\applications\net\netreg\netreg.exe 1 optional modules\rosapps\applications\net\niclist\niclist.exe 1 optional -modules\rosapps\applications\net\roshttpd\roshttpd.exe 1 optional +modules\rosapps\applications\net\roshttpd\roshttpd.exe 1 optional modules\rosapps\applications\notevil\notevil.exe 1 optional modules\rosapps\applications\magnify\magnify.exe 1 optional modules\rosapps\applications\packmgr\cmd-line\rosget.exe 1 optional @@ -596,6 +596,7 @@ modules\rosapps\applications\sysutils\chkdsk\chkdsk.exe modules\rosapps\applications\sysutils\systeminfo\systeminfo.exe 1 optional modules\rosapps\applications\sysutils\chklib\chklib.exe 1 optional modules\rosapps\applications\sysutils\ctm\ctm.exe 1 optional +modules\rosapps\applications\sysutils\dosfsck\dosfsck.exe 1 optional modules\rosapps\applications\sysutils\kill\kill.exe 1 optional modules\rosapps\applications\sysutils\lsdd\lsdd.exe 1 optional modules\rosapps\applications\sysutils\man\man.exe 1 optional @@ -603,7 +604,7 @@ modules\rosapps\applications\sysutils\pedump\pedump.exe modules\rosapps\applications\sysutils\regexpl\regexpl.exe 1 optional modules\rosapps\applications\sysutils\tcat\tcat.exe 1 optional modules\rosapps\applications\sysutils\tlist\tlist.exe 1 optional -modules\rosapps\applications\sysutils\screenshot\screenshot.exe 1 optional +modules\rosapps\applications\sysutils\screenshot\screenshot.exe 1 optional modules\rosapps\applications\sysutils\utils\binpatch\binpatch.exe 1 optional modules\rosapps\applications\sysutils\utils\cat\cat.exe 1 optional modules\rosapps\applications\sysutils\utils\driver\load\load.exe 1 optional From e8ac6d2a945cd08af223ddbd943b493812417b11 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 3 Aug 2008 16:12:02 +0000 Subject: [PATCH 111/304] Better support for kill_at option in fastcall entry points svn path=/trunk/; revision=35071 --- reactos/tools/winebuild/spec32.c | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/reactos/tools/winebuild/spec32.c b/reactos/tools/winebuild/spec32.c index ca959dab6ef..07c5026dd8e 100644 --- a/reactos/tools/winebuild/spec32.c +++ b/reactos/tools/winebuild/spec32.c @@ -611,15 +611,21 @@ void BuildDef32File( DLLSPEC *spec ) case TYPE_FASTCALL: { int at_param = strlen(odp->u.func.arg_types) * get_ptr_size(); - output( " @%s", name ); + output( " " ); + if (!kill_at) output( "@" ); + output( "%s", name ); if (!kill_at) output( "@%d", at_param ); if (odp->flags & FLAG_FORWARD) { - output( "=@%s", odp->link_name ); + output( "=" ); + if (!kill_at) output( "@" ); + output( "%s", odp->link_name ); } else if (strcmp(name, odp->link_name)) /* try to reduce output */ { - output( "=@%s", odp->link_name ); + output( "=" ); + if (!kill_at) output( "@" ); + output( "%s", odp->link_name ); if (!kill_at) output( "@%d", at_param ); } break; From 36502dfce7459d48606365dbbed0d2453da00d78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 3 Aug 2008 16:16:09 +0000 Subject: [PATCH 112/304] Use generic .spec file instead of arch specific .def file svn path=/trunk/; revision=35072 --- reactos/hal/hal/hal_arm.def | 101 ----------------------------- reactos/hal/halarm/up/halup.rbuild | 2 +- 2 files changed, 1 insertion(+), 102 deletions(-) delete mode 100644 reactos/hal/hal/hal_arm.def diff --git a/reactos/hal/hal/hal_arm.def b/reactos/hal/hal/hal_arm.def deleted file mode 100644 index 33020ec4dff..00000000000 --- a/reactos/hal/hal/hal_arm.def +++ /dev/null @@ -1,101 +0,0 @@ -; Hardware Abstraction Layer - ReactOS Operating System - -LIBRARY hal.dll - -EXPORTS -ExAcquireFastMutex=ExiAcquireFastMutex -ExReleaseFastMutex=ExiReleaseFastMutex -ExTryToAcquireFastMutex=ExiTryToAcquireFastMutex -HalClearSoftwareInterrupt -HalRequestSoftwareInterrupt -HalSystemVectorDispatchEntry -KeAcquireInStackQueuedSpinLock -KeAcquireInStackQueuedSpinLockRaiseToSynch -KeAcquireSpinLockRaiseToSynch -KeAcquireQueuedSpinLock -KeAcquireQueuedSpinLockRaiseToSynch -KeReleaseInStackQueuedSpinLock -KeReleaseQueuedSpinLock -KeTryToAcquireQueuedSpinLock -KeTryToAcquireQueuedSpinLockRaiseToSynch -KfAcquireSpinLock -KfLowerIrql -KfRaiseIrql -KfReleaseSpinLock - -HalAcquireDisplayOwnership -HalAdjustResourceList -HalAllProcessorsStarted -HalAllocateAdapterChannel -HalAllocateCommonBuffer -HalAllocateCrashDumpRegisters -HalAssignSlotResources -HalBeginSystemInterrupt -HalCalibratePerformanceCounter -HalDisableSystemInterrupt -HalDisplayString -HalEnableSystemInterrupt -HalEndSystemInterrupt -HalFlushCommonBuffer -HalFreeCommonBuffer -HalGetAdapter -HalGetBusData -HalGetBusDataByOffset -HalGetEnvironmentVariable -HalGetInterruptSource -HalGetInterruptVector -HalHandleNMI -HalInitSystem -HalInitializeProcessor -HalMakeBeep -HalProcessorIdle -HalQueryDisplayParameters -HalQueryRealTimeClock -HalReadDmaCounter -HalReportResourceUsage -HalRequestIpi -HalReturnToFirmware -HalSetBusData -HalSetBusDataByOffset -HalSetDisplayParameters -HalSetEnvironmentVariable -HalSetProfileInterval -HalSetRealTimeClock -HalSetTimeIncrement -HalStartNextProcessor -HalStartProfileInterrupt -HalStopProfileInterrupt -HalSweepIcache -HalSweepDcache -HalTranslateBusAddress -IoAssignDriveLetters=HalpAssignDriveLetters -IoFlushAdapterBuffers -IoFreeAdapterChannel -IoFreeMapRegisters -IoMapTransfer -IoReadPartitionTable=HalpReadPartitionTable -IoSetPartitionInformation=HalpSetPartitionInformation -IoWritePartitionTable=HalpWritePartitionTable -KeAcquireSpinLock -KdComPortInUse=_KdComPortInUse DATA -KeFlushWriteBuffer -KeGetCurrentIrql -KeLowerIrql -KeQueryPerformanceCounter -KeRaiseIrql -KeRaiseIrqlToDpcLevel -KeRaiseIrqlToSynchLevel -KeReleaseSpinLock -KeStallExecutionProcessor -READ_PORT_BUFFER_UCHAR -READ_PORT_BUFFER_ULONG -READ_PORT_BUFFER_USHORT -READ_PORT_UCHAR -READ_PORT_ULONG -READ_PORT_USHORT -WRITE_PORT_BUFFER_UCHAR -WRITE_PORT_BUFFER_ULONG -WRITE_PORT_BUFFER_USHORT -WRITE_PORT_UCHAR -WRITE_PORT_ULONG -WRITE_PORT_USHORT diff --git a/reactos/hal/halarm/up/halup.rbuild b/reactos/hal/halarm/up/halup.rbuild index 0576021a4d0..1d13227b541 100644 --- a/reactos/hal/halarm/up/halup.rbuild +++ b/reactos/hal/halarm/up/halup.rbuild @@ -1,7 +1,7 @@ - + ../include include From 7c1f230166e796b724a02571fff7055431ef8a1a Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sun, 3 Aug 2008 17:29:57 +0000 Subject: [PATCH 113/304] - use translated verb for cplopen action svn path=/trunk/; revision=35074 --- reactos/dll/win32/shell32/shv_item_cmenu.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/reactos/dll/win32/shell32/shv_item_cmenu.c b/reactos/dll/win32/shell32/shv_item_cmenu.c index 499c78a651d..257f89152db 100644 --- a/reactos/dll/win32/shell32/shv_item_cmenu.c +++ b/reactos/dll/win32/shell32/shv_item_cmenu.c @@ -554,6 +554,9 @@ SH_AddStaticEntryToMenu(HMENU hMenu, UINT indexMenu, ItemCmImpl * This) idResource = IDS_PLAY_VERB; else if (!wcsicmp(curEntry->szVerb, L"preview")) idResource = IDS_PREVIEW_VERB; + else if (!wcsicmp(curEntry->szVerb, L"cplopen")) + idResource = IDS_OPEN_VERB; + else idResource = 0; From ec62b2846eee5d2acd7b59650f473e109d3dc7a9 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Sun, 3 Aug 2008 18:32:29 +0000 Subject: [PATCH 114/304] Igor Koshpaev - Russian translation of setup dialogs added. svn path=/trunk/; revision=35077 --- reactos/base/setup/reactos/lang/ru-RU.rc | 126 ++++++++++++++++++++++- reactos/base/setup/reactos/rsrc.rc | 8 +- 2 files changed, 125 insertions(+), 9 deletions(-) diff --git a/reactos/base/setup/reactos/lang/ru-RU.rc b/reactos/base/setup/reactos/lang/ru-RU.rc index be7a7d71a04..8e4126ed563 100644 --- a/reactos/base/setup/reactos/lang/ru-RU.rc +++ b/reactos/base/setup/reactos/lang/ru-RU.rc @@ -1,12 +1,128 @@ -/* $Id: En.rc 21257 2006-03-08 23:07:09Z audit $ */ +/* $Id: ru-RU.rc 34572 2008-07-18 09:07:54Z mkupfer $ towerr */ LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT -/* String Tables */ -STRINGTABLE DISCARDABLE +IDD_STARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION " ReactOS" +FONT 8, "MS Shell Dlg" BEGIN - IDS_CAPTION " ReactOS" - IDS_TEXT " ReactOS !\n\n, ReactOS." + LTEXT " ReactOS.", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT " ReactOS ! "\ + " CD "\ + " ReactOS.", IDC_STATIC, 115, 40, 195, 100 + LTEXT " .", IDC_STATIC, 115, 169, 195, 17 END +IDD_LANGSELPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION " ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "IDB_LOGO", IDB_ROSLOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 0, 290, 99 + CONTROL " :", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 109, 106, 11 + CONTROL "", IDC_LANGUAGES, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 107, 176, 142 + CONTROL " :", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 142, 106, 11 + CONTROL "", IDC_KEYLAYOUT, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 141, 176, 81 + LTEXT " .", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_TYPEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION " ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL " ", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL " ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 + CONTROL " ReactOS", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 + LTEXT " .", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_DEVICEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION " ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL " ", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT ":", IDC_STATIC, 20,15, 80, 10 + CONTROL "", IDC_COMPUTER, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 15, 150, 80 + LTEXT ":", IDC_STATIC, 20,35, 80, 10 + CONTROL "", IDC_DISPLAY, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 35, 150, 80 + LTEXT ":", IDC_STATIC, 20,55, 80, 10 + CONTROL "", IDC_KEYBOARD, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 55, 150, 80 + LTEXT " .", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_DRIVEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION " ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Partition for ReactOS installation", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176 + LISTBOX IDC_PARTITION, 20,12,278,142,LBS_HASSTRINGS | WS_VSCROLL + PUSHBUTTON "&", IDC_PARTCREATE, 20,155,50,15 + PUSHBUTTON "&", IDC_PARTDELETE, 76,155,50,15 + PUSHBUTTON "& ...", IDC_PARTMOREOPTS, 218,155,80,15 + LTEXT " .", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_BOOTOPTIONS DIALOGEX DISCARDABLE 0, 0, 305, 105 +STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME +CAPTION " " +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL " ", IDC_STATIC, "Button", BS_GROUPBOX, 4,1,298,30 + EDITTEXT IDC_PATH, 10,11,278,13, WS_VISIBLE + + CONTROL " ", IDC_STATIC, "Button", BS_GROUPBOX, 4,36,298,41 + + CONTROL " (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 + CONTROL " ", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 +END + +IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION " ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL " ", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT " ...", IDC_ACTIVITY, 20, 50, 277, 10 + LTEXT "test.txt", IDC_ITEM, 30, 80, 257, 10 + CONTROL "", IDC_PROCESSPROGRESS, "msctls_progress32", + PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 +END + + +IDD_RESTARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION " ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL " ReactOS", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT " ReactOS .", IDC_STATIC, 20, 50, 277, 10 + + LTEXT " .", IDC_STATIC, 20, 80, 277, 10 + CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 + LTEXT " . "\ + " .", IDC_STATIC, 10, 180, 297, 20 +END + + +STRINGTABLE +BEGIN + IDS_LANGTITLE " " + IDS_LANGSUBTITLE " ." + IDS_TYPETITLE " ReactOS" + IDS_TYPESUBTITLE " ." + IDS_DEVICETITLE " " + IDS_DEVICESUBTITLE " ." + IDS_DRIVETITLE " " + IDS_DRIVESUBTITLE " , ." + IDS_PROCESSTITLE " , " + IDS_PROCESSSUBTITLE " , , " + IDS_RESTARTTITLE " " + IDS_RESTARTSUBTITLE " , " + IDS_ABORTSETUP " ReactOS . , ReactOS . ?" + IDS_ABORTSETUP2 " ?" +END /* EOF */ diff --git a/reactos/base/setup/reactos/rsrc.rc b/reactos/base/setup/reactos/rsrc.rc index fe24c0e657b..217b12b5db4 100644 --- a/reactos/base/setup/reactos/rsrc.rc +++ b/reactos/base/setup/reactos/rsrc.rc @@ -18,10 +18,10 @@ #include "lang/no-NO.rc" #include "lang/nl-NL.rc"*/ #include "lang/pl-PL.rc" -/*#include "lang/pt-BR.rc" -#include "lang/ru-RU.rc"*/ -#include "lang/sk-SK.rc" -/*#include "lang/sv-SE.rc" +/*#include "lang/pt-BR.rc"*/ +#include "lang/ru-RU.rc" +/*#include "lang/sk-SK.rc" +#include "lang/sv-SE.rc" #include "lang/th-TH.rc" #include "lang/uk-UA.rc" #include "lang/zh-CN.rc"*/ From 4129e7e645e19625a5916d968c0a96a2fcccd3bc Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Sun, 3 Aug 2008 18:35:54 +0000 Subject: [PATCH 115/304] - Add NULL checks to _atoi64, _wtol, and _wtoi64. - Since atoi, atol, and _wtoi should check for NULL (_tcstol doesn't) but should not check for overflow (_tcstol does), make them call _ttoi64 instead of _tcstol. svn path=/trunk/; revision=35078 --- reactos/lib/sdk/crt/string/atoi.c | 2 +- reactos/lib/sdk/crt/string/atoi64.c | 3 +++ reactos/lib/sdk/crt/string/atol.c | 2 +- reactos/lib/sdk/crt/string/wtoi64.c | 3 +++ reactos/lib/sdk/crt/string/wtol.c | 3 +++ 5 files changed, 11 insertions(+), 2 deletions(-) diff --git a/reactos/lib/sdk/crt/string/atoi.c b/reactos/lib/sdk/crt/string/atoi.c index 74f3175565e..2fc1364dc83 100644 --- a/reactos/lib/sdk/crt/string/atoi.c +++ b/reactos/lib/sdk/crt/string/atoi.c @@ -8,5 +8,5 @@ int _ttoi(const _TCHAR *str) { - return (int)_tcstol(str, 0, 10); + return (int)_ttoi64(str); } diff --git a/reactos/lib/sdk/crt/string/atoi64.c b/reactos/lib/sdk/crt/string/atoi64.c index d97d359ee6f..c820dbaba42 100644 --- a/reactos/lib/sdk/crt/string/atoi64.c +++ b/reactos/lib/sdk/crt/string/atoi64.c @@ -20,6 +20,9 @@ _atoi64(const char *nptr) __int64 acc = 0; int neg = 0; + if (nptr == NULL) + return 0; + while(isspace((int)*s)) s++; if (*s == '-') diff --git a/reactos/lib/sdk/crt/string/atol.c b/reactos/lib/sdk/crt/string/atol.c index cc3fe76cd0e..9aa3af57d87 100644 --- a/reactos/lib/sdk/crt/string/atol.c +++ b/reactos/lib/sdk/crt/string/atol.c @@ -8,7 +8,7 @@ long _ttol(const _TCHAR *str) { - return _tcstol(str, 0, 10); + return (long)_ttoi64(str); } int _atoldbl(long double *value, const char *str) diff --git a/reactos/lib/sdk/crt/string/wtoi64.c b/reactos/lib/sdk/crt/string/wtoi64.c index 6e0f9dbdd64..b729f493a56 100644 --- a/reactos/lib/sdk/crt/string/wtoi64.c +++ b/reactos/lib/sdk/crt/string/wtoi64.c @@ -20,6 +20,9 @@ _wtoi64 (const wchar_t *nptr) __int64 value; int sign; + if (nptr == NULL) + return 0; + while (iswctype((int)*nptr, _SPACE)) ++nptr; diff --git a/reactos/lib/sdk/crt/string/wtol.c b/reactos/lib/sdk/crt/string/wtol.c index 9944956384b..a57015e9f7b 100644 --- a/reactos/lib/sdk/crt/string/wtol.c +++ b/reactos/lib/sdk/crt/string/wtol.c @@ -13,6 +13,9 @@ _wtol(const wchar_t *str) unsigned long RunningTotal = 0; char bMinus = 0; + if (str == NULL) + return 0; + while (iswctype(*str, _SPACE) ) { str++; } /* while */ From 9339b002a7d34fcd318548d6dccd2b0aa2bbdc01 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 18:39:50 +0000 Subject: [PATCH 116/304] - ExfInterlockedAddUlong is FASTCALL, not NTAPI (spotted by Herve). svn path=/trunk/; revision=35079 --- reactos/ntoskrnl/ex/fastinterlck.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ex/fastinterlck.c b/reactos/ntoskrnl/ex/fastinterlck.c index 18fd8545cbb..bddc62cd7bf 100644 --- a/reactos/ntoskrnl/ex/fastinterlck.c +++ b/reactos/ntoskrnl/ex/fastinterlck.c @@ -88,7 +88,7 @@ ExInterlockedPopEntrySList(IN PSLIST_HEADER ListHead, } ULONG -NTAPI +FASTCALL ExfInterlockedAddUlong(IN PULONG Addend, IN ULONG Increment, PKSPIN_LOCK Lock) From 663c4cb88612764c5c7179f35d8e02f8a4329e3b Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 18:50:46 +0000 Subject: [PATCH 117/304] - Copy most of the dosfsck source code into vfatlib. Currently excluded from the build process. svn path=/trunk/; revision=35081 --- reactos/lib/fslib/vfatlib/check/boot.c | 370 +++++++++ reactos/lib/fslib/vfatlib/check/boot.h | 13 + reactos/lib/fslib/vfatlib/check/byteorder.h | 59 ++ reactos/lib/fslib/vfatlib/check/byteswap.h | 40 + reactos/lib/fslib/vfatlib/check/byteswap1.h | 133 +++ reactos/lib/fslib/vfatlib/check/check.c | 867 ++++++++++++++++++++ reactos/lib/fslib/vfatlib/check/check.h | 23 + reactos/lib/fslib/vfatlib/check/common.c | 110 +++ reactos/lib/fslib/vfatlib/check/common.h | 42 + reactos/lib/fslib/vfatlib/check/compiler.h | 158 ++++ reactos/lib/fslib/vfatlib/check/dosfsck.h | 187 +++++ reactos/lib/fslib/vfatlib/check/fat.c | 366 +++++++++ reactos/lib/fslib/vfatlib/check/fat.h | 64 ++ reactos/lib/fslib/vfatlib/check/file.c | 251 ++++++ reactos/lib/fslib/vfatlib/check/file.h | 55 ++ reactos/lib/fslib/vfatlib/check/io.c | 445 ++++++++++ reactos/lib/fslib/vfatlib/check/io.h | 54 ++ reactos/lib/fslib/vfatlib/check/lfn.c | 480 +++++++++++ reactos/lib/fslib/vfatlib/check/lfn.h | 20 + reactos/lib/fslib/vfatlib/check/msdos_fs.h | 182 ++++ reactos/lib/fslib/vfatlib/check/swab.h | 192 +++++ reactos/lib/fslib/vfatlib/check/version.h | 8 + reactos/lib/fslib/vfatlib/check/vfat.h | 744 +++++++++++++++++ 23 files changed, 4863 insertions(+) create mode 100644 reactos/lib/fslib/vfatlib/check/boot.c create mode 100644 reactos/lib/fslib/vfatlib/check/boot.h create mode 100644 reactos/lib/fslib/vfatlib/check/byteorder.h create mode 100644 reactos/lib/fslib/vfatlib/check/byteswap.h create mode 100644 reactos/lib/fslib/vfatlib/check/byteswap1.h create mode 100644 reactos/lib/fslib/vfatlib/check/check.c create mode 100644 reactos/lib/fslib/vfatlib/check/check.h create mode 100644 reactos/lib/fslib/vfatlib/check/common.c create mode 100644 reactos/lib/fslib/vfatlib/check/common.h create mode 100644 reactos/lib/fslib/vfatlib/check/compiler.h create mode 100644 reactos/lib/fslib/vfatlib/check/dosfsck.h create mode 100644 reactos/lib/fslib/vfatlib/check/fat.c create mode 100644 reactos/lib/fslib/vfatlib/check/fat.h create mode 100644 reactos/lib/fslib/vfatlib/check/file.c create mode 100644 reactos/lib/fslib/vfatlib/check/file.h create mode 100644 reactos/lib/fslib/vfatlib/check/io.c create mode 100644 reactos/lib/fslib/vfatlib/check/io.h create mode 100644 reactos/lib/fslib/vfatlib/check/lfn.c create mode 100644 reactos/lib/fslib/vfatlib/check/lfn.h create mode 100644 reactos/lib/fslib/vfatlib/check/msdos_fs.h create mode 100644 reactos/lib/fslib/vfatlib/check/swab.h create mode 100644 reactos/lib/fslib/vfatlib/check/version.h create mode 100755 reactos/lib/fslib/vfatlib/check/vfat.h diff --git a/reactos/lib/fslib/vfatlib/check/boot.c b/reactos/lib/fslib/vfatlib/check/boot.c new file mode 100644 index 00000000000..c5a7416a1d0 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/boot.c @@ -0,0 +1,370 @@ +/* boot.c - Read and analyze ia PC/MS-DOS boot sector */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + +#include +#include +#include + +#include "common.h" +#include "dosfsck.h" +#include "io.h" +#include "boot.h" + + +#define ROUND_TO_MULTIPLE(n,m) ((n) && (m) ? (n)+(m)-1-((n)-1)%(m) : 0) + /* don't divide by zero */ + +static struct { + __u8 media; + char *descr; +} mediabytes[] = { + { 0xf0, "5.25\" or 3.5\" HD floppy" }, + { 0xf8, "hard disk" }, + { 0xf9, "3,5\" 720k floppy 2s/80tr/9sec or " + "5.25\" 1.2M floppy 2s/80tr/15sec" }, + { 0xfa, "5.25\" 320k floppy 1s/80tr/8sec" }, + { 0xfb, "3.5\" 640k floppy 2s/80tr/8sec" }, + { 0xfc, "5.25\" 180k floppy 1s/40tr/9sec" }, + { 0xfd, "5.25\" 360k floppy 2s/40tr/9sec" }, + { 0xfe, "5.25\" 160k floppy 1s/40tr/8sec" }, + { 0xff, "5.25\" 320k floppy 2s/40tr/8sec" }, +}; + +#if defined __alpha || defined __ia64__ || defined __s390x__ || defined __x86_64__ || defined __ppc64__ +/* Unaligned fields must first be copied byte-wise */ +#define GET_UNALIGNED_W(f) \ + ({ \ + unsigned short __v; \ + memcpy( &__v, &f, sizeof(__v) ); \ + CF_LE_W( *(unsigned short *)&f ); \ + }) +#else +#define GET_UNALIGNED_W(f) CF_LE_W( *(unsigned short *)&f ) +#endif + + +static char *get_media_descr( unsigned char media ) +{ + int i; + + for( i = 0; i < sizeof(mediabytes)/sizeof(*mediabytes); ++i ) { + if (mediabytes[i].media == media) + return( mediabytes[i].descr ); + } + return( "undefined" ); +} + +static void dump_boot(DOS_FS *fs,struct boot_sector *b,unsigned lss) +{ + unsigned short sectors; + + printf("Boot sector contents:\n"); + if (!atari_format) { + char id[9]; + strncpy(id,b->system_id,8); + id[8] = 0; + printf("System ID \"%s\"\n",id); + } + else { + /* On Atari, a 24 bit serial number is stored at offset 8 of the boot + * sector */ + printf("Serial number 0x%x\n", + b->system_id[5] | (b->system_id[6]<<8) | (b->system_id[7]<<16)); + } + printf("Media byte 0x%02x (%s)\n",b->media,get_media_descr(b->media)); + printf("%10d bytes per logical sector\n",GET_UNALIGNED_W(b->sector_size)); + printf("%10d bytes per cluster\n",fs->cluster_size); + printf("%10d reserved sector%s\n",CF_LE_W(b->reserved), + CF_LE_W(b->reserved) == 1 ? "" : "s"); + printf("First FAT starts at byte %llu (sector %llu)\n", + (__u64)fs->fat_start, + (__u64)fs->fat_start/lss); + printf("%10d FATs, %d bit entries\n",b->fats,fs->fat_bits); + printf("%10d bytes per FAT (= %u sectors)\n",fs->fat_size, + fs->fat_size/lss); + if (!fs->root_cluster) { + printf("Root directory starts at byte %llu (sector %llu)\n", + (__u64)fs->root_start, + (__u64)fs->root_start/lss); + printf("%10d root directory entries\n",fs->root_entries); + } + else { + printf( "Root directory start at cluster %lu (arbitrary size)\n", + fs->root_cluster); + } + printf("Data area starts at byte %llu (sector %llu)\n", + (__u64)fs->data_start, + (__u64)fs->data_start/lss); + printf("%10lu data clusters (%llu bytes)\n",fs->clusters, + (__u64)fs->clusters*fs->cluster_size); + printf("%u sectors/track, %u heads\n",CF_LE_W(b->secs_track), + CF_LE_W(b->heads)); + printf("%10u hidden sectors\n", + atari_format ? + /* On Atari, the hidden field is only 16 bit wide and unused */ + (((unsigned char *)&b->hidden)[0] | + ((unsigned char *)&b->hidden)[1] << 8) : + CF_LE_L(b->hidden)); + sectors = GET_UNALIGNED_W( b->sectors ); + printf("%10u sectors total\n", sectors ? sectors : CF_LE_L(b->total_sect)); +} + +static void check_backup_boot(DOS_FS *fs, struct boot_sector *b, int lss) +{ + struct boot_sector b2; + + if (!fs->backupboot_start) { + printf( "There is no backup boot sector.\n" ); + if (CF_LE_W(b->reserved) < 3) { + printf( "And there is no space for creating one!\n" ); + return; + } + if (interactive) + printf( "1) Create one\n2) Do without a backup\n" ); + else printf( " Auto-creating backup boot block.\n" ); + if (!interactive || get_key("12","?") == '1') { + int bbs; + /* The usual place for the backup boot sector is sector 6. Choose + * that or the last reserved sector. */ + if (CF_LE_W(b->reserved) >= 7 && CF_LE_W(b->info_sector) != 6) + bbs = 6; + else { + bbs = CF_LE_W(b->reserved) - 1; + if (bbs == CF_LE_W(b->info_sector)) + --bbs; /* this is never 0, as we checked reserved >= 3! */ + } + fs->backupboot_start = bbs*lss; + b->backup_boot = CT_LE_W(bbs); + fs_write(fs->backupboot_start,sizeof(*b),b); + fs_write((off_t)offsetof(struct boot_sector,backup_boot), + sizeof(b->backup_boot),&b->backup_boot); + printf( "Created backup of boot sector in sector %d\n", bbs ); + return; + } + else return; + } + + fs_read(fs->backupboot_start,sizeof(b2),&b2); + if (memcmp(b,&b2,sizeof(b2)) != 0) { + /* there are any differences */ + __u8 *p, *q; + int i, pos, first = 1; + char buf[20]; + + printf( "There are differences between boot sector and its backup.\n" ); + printf( "Differences: (offset:original/backup)\n " ); + pos = 2; + for( p = (__u8 *)b, q = (__u8 *)&b2, i = 0; i < sizeof(b2); + ++p, ++q, ++i ) { + if (*p != *q) { + sprintf( buf, "%s%u:%02x/%02x", first ? "" : ", ", + (unsigned)(p-(__u8 *)b), *p, *q ); + if (pos + strlen(buf) > 78) printf( "\n " ), pos = 2; + printf( "%s", buf ); + pos += strlen(buf); + first = 0; + } + } + printf( "\n" ); + + if (interactive) + printf( "1) Copy original to backup\n" + "2) Copy backup to original\n" + "3) No action\n" ); + else printf( " Not automatically fixing this.\n" ); + switch (interactive ? get_key("123","?") : '3') { + case '1': + fs_write(fs->backupboot_start,sizeof(*b),b); + break; + case '2': + fs_write(0,sizeof(b2),&b2); + break; + default: + break; + } + } +} + +static void init_fsinfo(struct info_sector *i) +{ + i->magic = CT_LE_L(0x41615252); + i->signature = CT_LE_L(0x61417272); + i->free_clusters = CT_LE_L(-1); + i->next_cluster = CT_LE_L(2); + i->boot_sign = CT_LE_W(0xaa55); +} + +static void read_fsinfo(DOS_FS *fs, struct boot_sector *b,int lss) +{ + struct info_sector i; + + if (!b->info_sector) { + printf( "No FSINFO sector\n" ); + if (interactive) + printf( "1) Create one\n2) Do without FSINFO\n" ); + else printf( " Not automatically creating it.\n" ); + if (interactive && get_key("12","?") == '1') { + /* search for a free reserved sector (not boot sector and not + * backup boot sector) */ + __u32 s; + for( s = 1; s < CF_LE_W(b->reserved); ++s ) + if (s != CF_LE_W(b->backup_boot)) break; + if (s > 0 && s < CF_LE_W(b->reserved)) { + init_fsinfo(&i); + fs_write((off_t)s*lss,sizeof(i),&i); + b->info_sector = CT_LE_W(s); + fs_write((off_t)offsetof(struct boot_sector,info_sector), + sizeof(b->info_sector),&b->info_sector); + if (fs->backupboot_start) + fs_write(fs->backupboot_start+ + offsetof(struct boot_sector,info_sector), + sizeof(b->info_sector),&b->info_sector); + } + else { + printf( "No free reserved sector found -- " + "no space for FSINFO sector!\n" ); + return; + } + } + else return; + } + + fs->fsinfo_start = CF_LE_W(b->info_sector)*lss; + fs_read(fs->fsinfo_start,sizeof(i),&i); + + if (i.magic != CT_LE_L(0x41615252) || + i.signature != CT_LE_L(0x61417272) || + i.boot_sign != CT_LE_W(0xaa55)) { + printf( "FSINFO sector has bad magic number(s):\n" ); + if (i.magic != CT_LE_L(0x41615252)) + printf( " Offset %llu: 0x%08x != expected 0x%08x\n", + (__u64)offsetof(struct info_sector,magic), + CF_LE_L(i.magic),0x41615252); + if (i.signature != CT_LE_L(0x61417272)) + printf( " Offset %llu: 0x%08x != expected 0x%08x\n", + (__u64)offsetof(struct info_sector,signature), + CF_LE_L(i.signature),0x61417272); + if (i.boot_sign != CT_LE_W(0xaa55)) + printf( " Offset %llu: 0x%04x != expected 0x%04x\n", + (__u64)offsetof(struct info_sector,boot_sign), + CF_LE_W(i.boot_sign),0xaa55); + if (interactive) + printf( "1) Correct\n2) Don't correct (FSINFO invalid then)\n" ); + else printf( " Auto-correcting it.\n" ); + if (!interactive || get_key("12","?") == '1') { + init_fsinfo(&i); + fs_write(fs->fsinfo_start,sizeof(i),&i); + } + else fs->fsinfo_start = 0; + } + + if (fs->fsinfo_start) + fs->free_clusters = CF_LE_L(i.free_clusters); +} + +void read_boot(DOS_FS *fs) +{ + struct boot_sector b; + unsigned total_sectors; + unsigned short logical_sector_size, sectors; + unsigned fat_length; + loff_t data_size; + + fs_read(0,sizeof(b),&b); + logical_sector_size = GET_UNALIGNED_W(b.sector_size); + if (!logical_sector_size) die("Logical sector size is zero."); + fs->cluster_size = b.cluster_size*logical_sector_size; + if (!fs->cluster_size) die("Cluster size is zero."); + if (b.fats != 2 && b.fats != 1) + die("Currently, only 1 or 2 FATs are supported, not %d.\n",b.fats); + fs->nfats = b.fats; + sectors = GET_UNALIGNED_W(b.sectors); + total_sectors = sectors ? sectors : CF_LE_L(b.total_sect); + if (verbose) printf("Checking we can access the last sector of the filesystem\n"); + /* Can't access last odd sector anyway, so round down */ + fs_test((loff_t)((total_sectors & ~1)-1)*(loff_t)logical_sector_size, + logical_sector_size); + fat_length = CF_LE_W(b.fat_length) ? + CF_LE_W(b.fat_length) : CF_LE_L(b.fat32_length); + fs->fat_start = (off_t)CF_LE_W(b.reserved)*logical_sector_size; + fs->root_start = ((off_t)CF_LE_W(b.reserved)+b.fats*fat_length)* + logical_sector_size; + fs->root_entries = GET_UNALIGNED_W(b.dir_entries); + fs->data_start = fs->root_start+ROUND_TO_MULTIPLE(fs->root_entries << + MSDOS_DIR_BITS,logical_sector_size); + data_size = (loff_t)total_sectors*logical_sector_size-fs->data_start; + fs->clusters = data_size/fs->cluster_size; + fs->root_cluster = 0; /* indicates standard, pre-FAT32 root dir */ + fs->fsinfo_start = 0; /* no FSINFO structure */ + fs->free_clusters = -1; /* unknown */ + if (!b.fat_length && b.fat32_length) { + fs->fat_bits = 32; + fs->root_cluster = CF_LE_L(b.root_cluster); + if (!fs->root_cluster && fs->root_entries) + /* M$ hasn't specified this, but it looks reasonable: If + * root_cluster is 0 but there is a separate root dir + * (root_entries != 0), we handle the root dir the old way. Give a + * warning, but convertig to a root dir in a cluster chain seems + * to complex for now... */ + printf( "Warning: FAT32 root dir not in cluster chain! " + "Compability mode...\n" ); + else if (!fs->root_cluster && !fs->root_entries) + die("No root directory!"); + else if (fs->root_cluster && fs->root_entries) + printf( "Warning: FAT32 root dir is in a cluster chain, but " + "a separate root dir\n" + " area is defined. Cannot fix this easily.\n" ); + + fs->backupboot_start = CF_LE_W(b.backup_boot)*logical_sector_size; + check_backup_boot(fs,&b,logical_sector_size); + + read_fsinfo(fs,&b,logical_sector_size); + } + else if (!atari_format) { + /* On real MS-DOS, a 16 bit FAT is used whenever there would be too + * much clusers otherwise. */ + fs->fat_bits = (fs->clusters > MSDOS_FAT12) ? 16 : 12; + } + else { + /* On Atari, things are more difficult: GEMDOS always uses 12bit FATs + * on floppies, and always 16 bit on harddisks. */ + fs->fat_bits = 16; /* assume 16 bit FAT for now */ + /* If more clusters than fat entries in 16-bit fat, we assume + * it's a real MSDOS FS with 12-bit fat. */ + if (fs->clusters+2 > fat_length*logical_sector_size*8/16 || + /* if it's a floppy disk --> 12bit fat */ + device_no == 2 || + /* if it's a ramdisk or loopback device and has one of the usual + * floppy sizes -> 12bit FAT */ + ((device_no == 1 || device_no == 7) && + (total_sectors == 720 || total_sectors == 1440 || + total_sectors == 2880))) + fs->fat_bits = 12; + } + /* On FAT32, the high 4 bits of a FAT entry are reserved */ + fs->eff_fat_bits = (fs->fat_bits == 32) ? 28 : fs->fat_bits; + fs->fat_size = fat_length*logical_sector_size; + if (fs->clusters > ((__u64)fs->fat_size*8/fs->fat_bits)-2) + die("File system has %d clusters but only space for %d FAT entries.", + fs->clusters,((__u64)fs->fat_size*8/fs->fat_bits)-2); + if (!fs->root_entries && !fs->root_cluster) + die("Root directory has zero size."); + if (fs->root_entries & (MSDOS_DPS-1)) + die("Root directory (%d entries) doesn't span an integral number of " + "sectors.",fs->root_entries); + if (logical_sector_size & (SECTOR_SIZE-1)) + die("Logical sector size (%d bytes) is not a multiple of the physical " + "sector size.",logical_sector_size); + /* ++roman: On Atari, these two fields are often left uninitialized */ + if (!atari_format && (!b.secs_track || !b.heads)) + die("Invalid disk format in boot sector."); + if (verbose) dump_boot(fs,&b,logical_sector_size); +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/boot.h b/reactos/lib/fslib/vfatlib/check/boot.h new file mode 100644 index 00000000000..0540c701662 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/boot.h @@ -0,0 +1,13 @@ +/* boot.h - Read and analyze ia PC/MS-DOS boot sector */ + +/* Written 1993 by Werner Almesberger */ + + +#ifndef _BOOT_H +#define _BOOT_H + +void read_boot(DOS_FS *fs); + +/* Reads the boot sector from the currently open device and initializes *FS */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/byteorder.h b/reactos/lib/fslib/vfatlib/check/byteorder.h new file mode 100644 index 00000000000..273f58ad3ff --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/byteorder.h @@ -0,0 +1,59 @@ +#ifndef _I386_BYTEORDER_H +#define _I386_BYTEORDER_H + +//#include "types.h" +#include "compiler.h" + +#ifdef __GNUC__ + +/* For avoiding bswap on i386 */ +//#ifdef __KERNEL__ +//#include +//#endif + +static __inline__ __attribute_const__ __u32 ___arch__swab32(__u32 x) +{ +#ifdef CONFIG_X86_BSWAP + __asm__("bswap %0" : "=r" (x) : "0" (x)); +#else + __asm__("xchgb %b0,%h0\n\t" /* swap lower bytes */ + "rorl $16,%0\n\t" /* swap words */ + "xchgb %b0,%h0" /* swap higher bytes */ + :"=q" (x) + : "0" (x)); +#endif + return x; +} + +static __inline__ __attribute_const__ __u64 ___arch__swab64(__u64 val) +{ + union { + struct { __u32 a,b; } s; + __u64 u; + } v; + v.u = val; +#ifdef CONFIG_X86_BSWAP + asm("bswapl %0 ; bswapl %1 ; xchgl %0,%1" + : "=r" (v.s.a), "=r" (v.s.b) + : "0" (v.s.a), "1" (v.s.b)); +#else + v.s.a = ___arch__swab32(v.s.a); + v.s.b = ___arch__swab32(v.s.b); + asm("xchgl %0,%1" : "=r" (v.s.a), "=r" (v.s.b) : "0" (v.s.a), "1" (v.s.b)); +#endif + return v.u; +} + +/* Do not define swab16. Gcc is smart enough to recognize "C" version and + convert it into rotation or exhange. */ + +#define __arch__swab64(x) ___arch__swab64(x) +#define __arch__swab32(x) ___arch__swab32(x) + +#define __BYTEORDER_HAS_U64__ + +#endif /* __GNUC__ */ + +//#include "little_endian.h" + +#endif /* _I386_BYTEORDER_H */ diff --git a/reactos/lib/fslib/vfatlib/check/byteswap.h b/reactos/lib/fslib/vfatlib/check/byteswap.h new file mode 100644 index 00000000000..0cf37c16848 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/byteswap.h @@ -0,0 +1,40 @@ +/* Copyright (C) 1997 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#ifndef _BYTESWAP_H +#define _BYTESWAP_H 1 + +/* Get the machine specific, optimized definitions. */ +#include "byteswap1.h" + + +/* The following definitions must all be macros since otherwise some + of the possible optimizations are not possible. */ + +/* Return a value with all bytes in the 16 bit argument swapped. */ +#define bswap_16(x) __bswap_16 (x) + +/* Return a value with all bytes in the 32 bit argument swapped. */ +#define bswap_32(x) __bswap_32 (x) + +#if defined __GNUC__ && __GNUC__ >= 2 +/* Return a value with all bytes in the 64 bit argument swapped. */ +# define bswap_64(x) __bswap_64 (x) +#endif + +#endif /* byteswap.h */ diff --git a/reactos/lib/fslib/vfatlib/check/byteswap1.h b/reactos/lib/fslib/vfatlib/check/byteswap1.h new file mode 100644 index 00000000000..33af2088883 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/byteswap1.h @@ -0,0 +1,133 @@ +/* Macros to swap the order of bytes in integer values. + Copyright (C) 1997, 1998, 2000, 2002, 2003 Free Software Foundation, Inc. + This file is part of the GNU C Library. + + The GNU C Library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2.1 of the License, or (at your option) any later version. + + The GNU C Library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public + License along with the GNU C Library; if not, write to the Free + Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA + 02111-1307 USA. */ + +#if !defined _BYTESWAP_H && !defined _NETINET_IN_H +# error "Never use directly; include instead." +#endif + +#ifndef _BITS_BYTESWAP_H +#define _BITS_BYTESWAP_H 1 + +/* Swap bytes in 16 bit value. */ +#define __bswap_constant_16(x) \ + ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8)) + +#ifdef __GNUC__ +# if __GNUC__ >= 2 +# define __bswap_16(x) \ + (__extension__ \ + ({ register unsigned short int __v, __x = (x); \ + if (__builtin_constant_p (__x)) \ + __v = __bswap_constant_16 (__x); \ + else \ + __asm__ ("rorw $8, %w0" \ + : "=r" (__v) \ + : "0" (__x) \ + : "cc"); \ + __v; })) +# else +/* This is better than nothing. */ +# define __bswap_16(x) \ + (__extension__ \ + ({ register unsigned short int __x = (x); __bswap_constant_16 (__x); })) +# endif +#else +static __inline unsigned short int +__bswap_16 (unsigned short int __bsx) +{ + return __bswap_constant_16 (__bsx); +} +#endif + +/* Swap bytes in 32 bit value. */ +#define __bswap_constant_32(x) \ + ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \ + (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24)) + +#ifdef __GNUC__ +# if __GNUC__ >= 2 +/* To swap the bytes in a word the i486 processors and up provide the + `bswap' opcode. On i386 we have to use three instructions. */ +# if !defined __i486__ && !defined __pentium__ && !defined __pentiumpro__ \ + && !defined __pentium4__ +# define __bswap_32(x) \ + (__extension__ \ + ({ register unsigned int __v, __x = (x); \ + if (__builtin_constant_p (__x)) \ + __v = __bswap_constant_32 (__x); \ + else \ + __asm__ ("rorw $8, %w0;" \ + "rorl $16, %0;" \ + "rorw $8, %w0" \ + : "=r" (__v) \ + : "0" (__x) \ + : "cc"); \ + __v; })) +# else +# define __bswap_32(x) \ + (__extension__ \ + ({ register unsigned int __v, __x = (x); \ + if (__builtin_constant_p (__x)) \ + __v = __bswap_constant_32 (__x); \ + else \ + __asm__ ("bswap %0" : "=r" (__v) : "0" (__x)); \ + __v; })) +# endif +# else +# define __bswap_32(x) \ + (__extension__ \ + ({ register unsigned int __x = (x); __bswap_constant_32 (__x); })) +# endif +#else +static __inline unsigned int +__bswap_32 (unsigned int __bsx) +{ + return __bswap_constant_32 (__bsx); +} +#endif + + +#if defined __GNUC__ && __GNUC__ >= 2 +/* Swap bytes in 64 bit value. */ +#define __bswap_constant_64(x) \ + ((((x) & 0xff00000000000000ull) >> 56) \ + | (((x) & 0x00ff000000000000ull) >> 40) \ + | (((x) & 0x0000ff0000000000ull) >> 24) \ + | (((x) & 0x000000ff00000000ull) >> 8) \ + | (((x) & 0x00000000ff000000ull) << 8) \ + | (((x) & 0x0000000000ff0000ull) << 24) \ + | (((x) & 0x000000000000ff00ull) << 40) \ + | (((x) & 0x00000000000000ffull) << 56)) + +# define __bswap_64(x) \ + (__extension__ \ + ({ union { __extension__ unsigned long long int __ll; \ + unsigned long int __l[2]; } __w, __r; \ + if (__builtin_constant_p (x)) \ + __r.__ll = __bswap_constant_64 (x); \ + else \ + { \ + __w.__ll = (x); \ + __r.__l[0] = __bswap_32 (__w.__l[1]); \ + __r.__l[1] = __bswap_32 (__w.__l[0]); \ + } \ + __r.__ll; })) +#endif + +#endif /* _BITS_BYTESWAP_H */ diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c new file mode 100644 index 00000000000..063bb8a4213 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -0,0 +1,867 @@ +/* check.c - Check and repair a PC/MS-DOS file system */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#include +#include +#include +#include +#include +#include + +#include "common.h" +#include "dosfsck.h" +#include "io.h" +#include "fat.h" +#include "file.h" +#include "lfn.h" +#include "check.h" + + +static DOS_FILE *root; + +/* get start field of a dir entry */ +#define FSTART(p,fs) \ + ((unsigned long)CF_LE_W(p->dir_ent.start) | \ + (fs->fat_bits == 32 ? CF_LE_W(p->dir_ent.starthi) << 16 : 0)) + +#define MODIFY(p,i,v) \ + do { \ + if (p->offset) { \ + p->dir_ent.i = v; \ + fs_write(p->offset+offsetof(DIR_ENT,i), \ + sizeof(p->dir_ent.i),&p->dir_ent.i); \ + } \ + } while(0) + +#define MODIFY_START(p,v,fs) \ + do { \ + unsigned long __v = (v); \ + if (!p->offset) { \ + /* writing to fake entry for FAT32 root dir */ \ + if (!__v) die("Oops, deleting FAT32 root dir!"); \ + fs->root_cluster = __v; \ + p->dir_ent.start = CT_LE_W(__v&0xffff); \ + p->dir_ent.starthi = CT_LE_W(__v>>16); \ + __v = CT_LE_L(__v); \ + fs_write((loff_t)offsetof(struct boot_sector,root_cluster), \ + sizeof(((struct boot_sector *)0)->root_cluster), \ + &__v); \ + } \ + else { \ + MODIFY(p,start,CT_LE_W((__v)&0xffff)); \ + if (fs->fat_bits == 32) \ + MODIFY(p,starthi,CT_LE_W((__v)>>16)); \ + } \ + } while(0) + + +loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern) +{ + static int curr_num = 0; + loff_t offset; + + if (fs->root_cluster) { + DIR_ENT d2; + int i = 0, got = 0; + unsigned long clu_num, prev = 0; + loff_t offset2; + + clu_num = fs->root_cluster; + offset = cluster_start(fs,clu_num); + while (clu_num > 0 && clu_num != -1) { + fs_read(offset,sizeof(DIR_ENT),&d2); + if (IS_FREE(d2.name) && d2.attr != VFAT_LN_ATTR) { + got = 1; + break; + } + i += sizeof(DIR_ENT); + offset += sizeof(DIR_ENT); + if ((i % fs->cluster_size) == 0) { + prev = clu_num; + if ((clu_num = next_cluster(fs,clu_num)) == 0 || clu_num == -1) + break; + offset = cluster_start(fs,clu_num); + } + } + if (!got) { + /* no free slot, need to extend root dir: alloc next free cluster + * after previous one */ + if (!prev) + die("Root directory has no cluster allocated!"); + for (clu_num = prev+1; clu_num != prev; clu_num++) { + if (clu_num >= fs->clusters+2) clu_num = 2; + if (!fs->fat[clu_num].value) + break; + } + if (clu_num == prev) + die("Root directory full and no free cluster"); + set_fat(fs,prev,clu_num); + set_fat(fs,clu_num,-1); + set_owner(fs, clu_num, get_owner(fs, fs->root_cluster)); + /* clear new cluster */ + memset( &d2, 0, sizeof(d2) ); + offset = cluster_start(fs,clu_num); + for( i = 0; i < (int)fs->cluster_size; i += sizeof(DIR_ENT) ) + fs_write( offset+i, sizeof(d2), &d2 ); + } + memset(de,0,sizeof(DIR_ENT)); + while (1) { + sprintf(de->name,pattern,curr_num); + clu_num = fs->root_cluster; + i = 0; + offset2 = cluster_start(fs,clu_num); + while (clu_num > 0 && clu_num != -1) { + fs_read(offset2,sizeof(DIR_ENT),&d2); + if (offset2 != offset && + !strncmp(d2.name,de->name,MSDOS_NAME)) + break; + i += sizeof(DIR_ENT); + offset2 += sizeof(DIR_ENT); + if ((i % fs->cluster_size) == 0) { + if ((clu_num = next_cluster(fs,clu_num)) == 0 || + clu_num == -1) + break; + offset2 = cluster_start(fs,clu_num); + } + } + if (clu_num == 0 || clu_num == -1) + break; + if (++curr_num >= 10000) die("Unable to create unique name"); + } + } + else { + DIR_ENT *root; + int next_free = 0, scan; + + root = alloc(fs->root_entries*sizeof(DIR_ENT)); + fs_read(fs->root_start,fs->root_entries*sizeof(DIR_ENT),root); + + while (next_free < (int)fs->root_entries) + if (IS_FREE(root[next_free].name) && + root[next_free].attr != VFAT_LN_ATTR) + break; + else next_free++; + if (next_free == (int)fs->root_entries) + die("Root directory is full."); + offset = fs->root_start+next_free*sizeof(DIR_ENT); + memset(de,0,sizeof(DIR_ENT)); + while (1) { + sprintf(de->name,pattern,curr_num); + for (scan = 0; scan < (int)fs->root_entries; scan++) + if (scan != next_free && + !strncmp(root[scan].name,de->name,MSDOS_NAME)) + break; + if (scan == (int)fs->root_entries) break; + if (++curr_num >= 10000) die("Unable to create unique name"); + } + free(root); + } + ++n_files; + return offset; +} + + +static char *path_name(DOS_FILE *file) +{ +// static char path[PATH_MAX*2]; + static char path[MAX_PATH*2]; + + if (!file) *path = 0; + else { + if (strlen(path_name(file->parent)) > MAX_PATH) + die("Path name too long."); + if (strcmp(path,"/") != 0) strcat(path,"/"); + strcpy(strrchr(path,0),file->lfn?file->lfn:file_name(file->dir_ent.name)); + } + return path; +} + + +static int day_n[] = { 0,31,59,90,120,151,181,212,243,273,304,334,0,0,0,0 }; + /* JanFebMarApr May Jun Jul Aug Sep Oct Nov Dec */ + + +/* Convert a MS-DOS time/date pair to a UNIX date (seconds since 1 1 70). */ + +time_t date_dos2unix(unsigned short time,unsigned short date) +{ + int month,year; + time_t secs; + + month = ((date >> 5) & 15)-1; + year = date >> 9; + secs = (time & 31)*2+60*((time >> 5) & 63)+(time >> 11)*3600+86400* + ((date & 31)-1+day_n[month]+(year/4)+year*365-((year & 3) == 0 && + month < 2 ? 1 : 0)+3653); + /* days since 1.1.70 plus 80's leap day */ + return secs; +} + + +static char *file_stat(DOS_FILE *file) +{ + static char temp[100]; + struct tm *tm; + char tmp[100]; + time_t date; + + date = date_dos2unix(CF_LE_W(file->dir_ent.time),CF_LE_W(file-> + dir_ent.date)); + tm = localtime(&date); + strftime(tmp,99,"%H:%M:%S %b %d %Y",tm); + sprintf(temp," Size %u bytes, date %s",CF_LE_L(file->dir_ent.size),tmp); + return temp; +} + + +static int bad_name(unsigned char *name) +{ + int i, spc, suspicious = 0; + char *bad_chars = atari_format ? "*?\\/:" : "*?<>|\"\\/:"; + + /* Do not complain about (and auto-correct) the extended attribute files + * of OS/2. */ + if (strncmp(name,"EA DATA SF",11) == 0 || + strncmp(name,"WP ROOT SF",11) == 0) return 0; + + for (i = 0; i < 8; i++) { + if (name[i] < ' ' || name[i] == 0x7f) return 1; + if (name[i] > 0x7f) ++suspicious; + if (strchr(bad_chars,name[i])) return 1; + } + + for (i = 8; i < 11; i++) { + if (name[i] < ' ' || name[i] == 0x7f) return 1; + if (name[i] > 0x7f) ++suspicious; + if (strchr(bad_chars,name[i])) return 1; + } + + spc = 0; + for (i = 0; i < 8; i++) { + if (name[i] == ' ') + spc = 1; + else if (spc) + /* non-space after a space not allowed, space terminates the name + * part */ + return 1; + } + + spc = 0; + for (i = 8; i < 11; i++) { + if (name[i] == ' ') + spc = 1; + else if (spc) + /* non-space after a space not allowed, space terminates the name + * part */ + return 1; + } + + /* Under GEMDOS, chars >= 128 are never allowed. */ + if (atari_format && suspicious) + return 1; + + /* Only complain about too much suspicious chars in interactive mode, + * never correct them automatically. The chars are all basically ok, so we + * shouldn't auto-correct such names. */ + if (interactive && suspicious > 6) + return 1; + return 0; +} + + +static void drop_file(DOS_FS *fs,DOS_FILE *file) +{ + unsigned long cluster; + + MODIFY(file,name[0],DELETED_FLAG); + for (cluster = FSTART(file,fs); cluster > 0 && cluster < + fs->clusters+2; cluster = next_cluster(fs,cluster)) + set_owner(fs,cluster,NULL); + --n_files; +} + + +static void truncate_file(DOS_FS *fs,DOS_FILE *file,unsigned long clusters) +{ + int deleting; + unsigned long walk,next,prev; + + walk = FSTART(file,fs); + prev = 0; + if ((deleting = !clusters)) MODIFY_START(file,0,fs); + while (walk > 0 && walk != -1) { + next = next_cluster(fs,walk); + if (deleting) set_fat(fs,walk,0); + else if ((deleting = !--clusters)) set_fat(fs,walk,-1); + prev = walk; + walk = next; + } +} + + +static void auto_rename(DOS_FILE *file) +{ + DOS_FILE *first,*walk; + int number; + + if (!file->offset) return; /* cannot rename FAT32 root dir */ + first = file->parent ? file->parent->first : root; + number = 0; + while (1) { + sprintf(file->dir_ent.name,"FSCK%04d",number); + strncpy(file->dir_ent.ext,"REN",3); + for (walk = first; walk; walk = walk->next) + if (walk != file && !strncmp(walk->dir_ent.name,file->dir_ent. + name,MSDOS_NAME)) break; + if (!walk) { + fs_write(file->offset,MSDOS_NAME,file->dir_ent.name); + return; + } + number++; + } + die("Can't generate a unique name."); +} + + +static void rename_file(DOS_FILE *file) +{ + unsigned char name[46]; + unsigned char *walk,*here; + + if (!file->offset) { + printf( "Cannot rename FAT32 root dir\n" ); + return; /* cannot rename FAT32 root dir */ + } + while (1) { + printf("New name: "); + fflush(stdout); + if (fgets(name,45,stdin)) { + if ((here = strchr(name,'\n'))) *here = 0; + for (walk = strrchr(name,0); walk >= name && (*walk == ' ' || + *walk == '\t'); walk--); + walk[1] = 0; + for (walk = name; *walk == ' ' || *walk == '\t'; walk++); + if (file_cvt(walk,file->dir_ent.name)) { + fs_write(file->offset,MSDOS_NAME,file->dir_ent.name); + return; + } + } + } +} + + +static int handle_dot(DOS_FS *fs,DOS_FILE *file,int dots) +{ + char *name; + + name = strncmp(file->dir_ent.name,MSDOS_DOT,MSDOS_NAME) ? ".." : "."; + if (!(file->dir_ent.attr & ATTR_DIR)) { + printf("%s\n Is a non-directory.\n",path_name(file)); + if (interactive) + printf("1) Drop it\n2) Auto-rename\n3) Rename\n" + "4) Convert to directory\n"); + else printf(" Auto-renaming it.\n"); + switch (interactive ? get_key("1234","?") : '2') { + case '1': + drop_file(fs,file); + return 1; + case '2': + auto_rename(file); + printf(" Renamed to %s\n",file_name(file->dir_ent.name)); + return 0; + case '3': + rename_file(file); + return 0; + case '4': + MODIFY(file,size,CT_LE_L(0)); + MODIFY(file,attr,file->dir_ent.attr | ATTR_DIR); + break; + } + } + if (!dots) { + printf("Root contains directory \"%s\". Dropping it.\n",name); + drop_file(fs,file); + return 1; + } + return 0; +} + + +static int check_file(DOS_FS *fs,DOS_FILE *file) +{ + DOS_FILE *owner; + int restart; + unsigned long expect,curr,this,clusters,prev,walk,clusters2; + + if (file->dir_ent.attr & ATTR_DIR) { + if (CF_LE_L(file->dir_ent.size)) { + printf("%s\n Directory has non-zero size. Fixing it.\n", + path_name(file)); + MODIFY(file,size,CT_LE_L(0)); + } + if (file->parent && !strncmp(file->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) { + expect = FSTART(file->parent,fs); + if (FSTART(file,fs) != expect) { + printf("%s\n Start (%ld) does not point to parent (%ld)\n", + path_name(file),FSTART(file,fs),expect); + MODIFY_START(file,expect,fs); + } + return 0; + } + if (file->parent && !strncmp(file->dir_ent.name,MSDOS_DOTDOT, + MSDOS_NAME)) { + expect = file->parent->parent ? FSTART(file->parent->parent,fs):0; + if (fs->root_cluster && expect == fs->root_cluster) + expect = 0; + if (FSTART(file,fs) != expect) { + printf("%s\n Start (%lu) does not point to .. (%lu)\n", + path_name(file),FSTART(file,fs),expect); + MODIFY_START(file,expect,fs); + } + return 0; + } + if (FSTART(file,fs)==0){ + printf ("%s\n Start does point to root directory. Deleting dir. \n", + path_name(file)); + MODIFY(file,name[0],DELETED_FLAG); + return 0; + } + } + if (FSTART(file,fs) >= fs->clusters+2) { + printf("%s\n Start cluster beyond limit (%lu > %lu). Truncating file.\n", + path_name(file),FSTART(file,fs),fs->clusters+1); + if (!file->offset) + die( "Bad FAT32 root directory! (bad start cluster)\n" ); + MODIFY_START(file,0,fs); + } + clusters = prev = 0; + for (curr = FSTART(file,fs) ? FSTART(file,fs) : + -1; curr != -1; curr = next_cluster(fs,curr)) { + if (!fs->fat[curr].value || bad_cluster(fs,curr)) { + printf("%s\n Contains a %s cluster (%lu). Assuming EOF.\n", + path_name(file),fs->fat[curr].value ? "bad" : "free",curr); + if (prev) set_fat(fs,prev,-1); + else if (!file->offset) + die( "FAT32 root dir starts with a bad cluster!" ); + else MODIFY_START(file,0,fs); + break; + } + if (!(file->dir_ent.attr & ATTR_DIR) && CF_LE_L(file->dir_ent.size) <= + clusters*fs->cluster_size) { + printf("%s\n File size is %u bytes, cluster chain length is > %lu " + "bytes.\n Truncating file to %u bytes.\n",path_name(file), + CF_LE_L(file->dir_ent.size),clusters*fs->cluster_size, + CF_LE_L(file->dir_ent.size)); + truncate_file(fs,file,clusters); + break; + } + if ((owner = get_owner(fs,curr))) { + int do_trunc = 0; + printf("%s and\n",path_name(owner)); + printf("%s\n share clusters.\n",path_name(file)); + clusters2 = 0; + for (walk = FSTART(owner,fs); walk > 0 && walk != -1; walk = + next_cluster(fs,walk)) + if (walk == curr) break; + else clusters2++; + restart = file->dir_ent.attr & ATTR_DIR; + if (!owner->offset) { + printf( " Truncating second to %lu bytes because first " + "is FAT32 root dir.\n", clusters2*fs->cluster_size ); + do_trunc = 2; + } + else if (!file->offset) { + printf( " Truncating first to %lu bytes because second " + "is FAT32 root dir.\n", clusters*fs->cluster_size ); + do_trunc = 1; + } + else if (interactive) + printf("1) Truncate first to %lu bytes%s\n" + "2) Truncate second to %lu bytes\n",clusters*fs->cluster_size, + restart ? " and restart" : "",clusters2*fs->cluster_size); + else printf(" Truncating second to %lu bytes.\n",clusters2* + fs->cluster_size); + if (do_trunc != 2 && + (do_trunc == 1 || + (interactive && get_key("12","?") == '1'))) { + prev = 0; + clusters = 0; + for (this = FSTART(owner,fs); this > 0 && this != -1; this = + next_cluster(fs,this)) { + if (this == curr) { + if (prev) set_fat(fs,prev,-1); + else MODIFY_START(owner,0,fs); + MODIFY(owner,size,CT_LE_L(clusters*fs->cluster_size)); + if (restart) return 1; + while (this > 0 && this != -1) { + set_owner(fs,this,NULL); + this = next_cluster(fs,this); + } + break; + } + clusters++; + prev = this; + } + if (this != curr) + die("Internal error: didn't find cluster %d in chain" + " starting at %d",curr,FSTART(owner,fs)); + } + else { + if (prev) set_fat(fs,prev,-1); + else MODIFY_START(file,0,fs); + break; + } + } + set_owner(fs,curr,file); + clusters++; + prev = curr; + } + if (!(file->dir_ent.attr & ATTR_DIR) && CF_LE_L(file->dir_ent.size) > + clusters*fs->cluster_size) { + printf("%s\n File size is %u bytes, cluster chain length is %lu bytes." + "\n Truncating file to %lu bytes.\n",path_name(file),CF_LE_L(file-> + dir_ent.size),clusters*fs->cluster_size,clusters*fs->cluster_size); + MODIFY(file,size,CT_LE_L(clusters*fs->cluster_size)); + } + return 0; +} + + +static int check_files(DOS_FS *fs,DOS_FILE *start) +{ + while (start) { + if (check_file(fs,start)) return 1; + start = start->next; + } + return 0; +} + + +static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) +{ + DOS_FILE *parent,**walk,**scan; + int dot,dotdot,skip,redo; + int good,bad; + + if (!*root) return 0; + parent = (*root)->parent; + good = bad = 0; + for (walk = root; *walk; walk = &(*walk)->next) + if (bad_name((*walk)->dir_ent.name)) bad++; + else good++; + if (*root && parent && good+bad > 4 && bad > good/2) { + printf("%s\n Has a large number of bad entries. (%d/%d)\n", + path_name(parent),bad,good+bad); + if (!dots) printf( " Not dropping root directory.\n" ); + else if (!interactive) printf(" Not dropping it in auto-mode.\n"); + else if (get_key("yn","Drop directory ? (y/n)") == 'y') { + truncate_file(fs,parent,0); + MODIFY(parent,name[0],DELETED_FLAG); + /* buglet: deleted directory stays in the list. */ + return 1; + } + } + dot = dotdot = redo = 0; + walk = root; + while (*walk) { + if (!strncmp((*walk)->dir_ent.name,MSDOS_DOT,MSDOS_NAME) || + !strncmp((*walk)->dir_ent.name,MSDOS_DOTDOT,MSDOS_NAME)) { + if (handle_dot(fs,*walk,dots)) { + *walk = (*walk)->next; + continue; + } + if (!strncmp((*walk)->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) dot++; + else dotdot++; + } + if (!((*walk)->dir_ent.attr & ATTR_VOLUME) && + bad_name((*walk)->dir_ent.name)) { + printf("%s\n Bad file name.\n",path_name(*walk)); + if (interactive) + printf("1) Drop file\n2) Rename file\n3) Auto-rename\n" + "4) Keep it\n"); + else printf(" Auto-renaming it.\n"); + switch (interactive ? get_key("1234","?") : '3') { + case '1': + drop_file(fs,*walk); + walk = &(*walk)->next; + continue; + case '2': + rename_file(*walk); + redo = 1; + break; + case '3': + auto_rename(*walk); + printf(" Renamed to %s\n",file_name((*walk)->dir_ent. + name)); + break; + case '4': + break; + } + } + /* don't check for duplicates of the volume label */ + if (!((*walk)->dir_ent.attr & ATTR_VOLUME)) { + scan = &(*walk)->next; + skip = 0; + while (*scan && !skip) { + if (!((*scan)->dir_ent.attr & ATTR_VOLUME) && + !strncmp((*walk)->dir_ent.name,(*scan)->dir_ent.name,MSDOS_NAME)) { + printf("%s\n Duplicate directory entry.\n First %s\n", + path_name(*walk),file_stat(*walk)); + printf(" Second %s\n",file_stat(*scan)); + if (interactive) + printf("1) Drop first\n2) Drop second\n3) Rename first\n" + "4) Rename second\n5) Auto-rename first\n" + "6) Auto-rename second\n"); + else printf(" Auto-renaming second.\n"); + switch (interactive ? get_key("123456","?") : '6') { + case '1': + drop_file(fs,*walk); + *walk = (*walk)->next; + skip = 1; + break; + case '2': + drop_file(fs,*scan); + *scan = (*scan)->next; + continue; + case '3': + rename_file(*walk); + printf(" Renamed to %s\n",path_name(*walk)); + redo = 1; + break; + case '4': + rename_file(*scan); + printf(" Renamed to %s\n",path_name(*walk)); + redo = 1; + break; + case '5': + auto_rename(*walk); + printf(" Renamed to %s\n",file_name((*walk)->dir_ent. + name)); + break; + case '6': + auto_rename(*scan); + printf(" Renamed to %s\n",file_name((*scan)->dir_ent. + name)); + break; + } + } + scan = &(*scan)->next; + } + if (skip) continue; + } + if (!redo) walk = &(*walk)->next; + else { + walk = root; + dot = dotdot = redo = 0; + } + } + if (dots && !dot) + printf("%s\n \".\" is missing. Can't fix this yet.\n", + path_name(parent)); + if (dots && !dotdot) + printf("%s\n \"..\" is missing. Can't fix this yet.\n", + path_name(parent)); + return 0; +} + + +static void test_file(DOS_FS *fs,DOS_FILE *file,int read_test) +{ + DOS_FILE *owner; + unsigned long walk,prev,clusters,next_clu; + + prev = clusters = 0; + for (walk = FSTART(file,fs); walk > 0 && walk < fs->clusters+2; + walk = next_clu) { + next_clu = next_cluster(fs,walk); + if ((owner = get_owner(fs,walk))) { + if (owner == file) { + printf("%s\n Circular cluster chain. Truncating to %lu " + "cluster%s.\n",path_name(file),clusters,clusters == 1 ? "" : + "s"); + if (prev) set_fat(fs,prev,-1); + else if (!file->offset) + die( "Bad FAT32 root directory! (bad start cluster)\n" ); + else MODIFY_START(file,0,fs); + } + break; + } + if (bad_cluster(fs,walk)) break; + if (read_test) { + if (fs_test(cluster_start(fs,walk),fs->cluster_size)) { + prev = walk; + clusters++; + } + else { + printf("%s\n Cluster %lu (%lu) is unreadable. Skipping it.\n", + path_name(file),clusters,walk); + if (prev) set_fat(fs,prev,next_cluster(fs,walk)); + else MODIFY_START(file,next_cluster(fs,walk),fs); + set_fat(fs,walk,-2); + } + } + set_owner(fs,walk,file); + } + for (walk = FSTART(file,fs); walk > 0 && walk < fs->clusters+2; + walk = next_cluster(fs,walk)) + if (bad_cluster(fs,walk)) break; + else if (get_owner(fs,walk) == file) set_owner(fs,walk,NULL); + else break; +} + + +static void undelete(DOS_FS *fs,DOS_FILE *file) +{ + unsigned long clusters,left,prev,walk; + + clusters = left = (CF_LE_L(file->dir_ent.size)+fs->cluster_size-1)/ + fs->cluster_size; + prev = 0; + for (walk = FSTART(file,fs); left && walk >= 2 && walk < + fs->clusters+2 && !fs->fat[walk].value; walk++) { + left--; + if (prev) set_fat(fs,prev,walk); + prev = walk; + } + if (prev) set_fat(fs,prev,-1); + else MODIFY_START(file,0,fs); + if (left) + printf("Warning: Did only undelete %lu of %lu cluster%s.\n",clusters-left, + clusters,clusters == 1 ? "" : "s"); + +} + + +static void new_dir( void ) +{ + lfn_reset(); +} + + +static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, + loff_t offset,FDSC **cp) +{ + DOS_FILE *new; + DIR_ENT de; + FD_TYPE type; + + char tmpBuffer[512]; // TMN: + + if (offset) { +// fs_read(offset,sizeof(DIR_ENT),&de); + fs_read(offset,sizeof(tmpBuffer),&tmpBuffer); // TMN: + memcpy(&de, tmpBuffer, sizeof(DIR_ENT)); // TMN: + } else { + memcpy(de.name," ",MSDOS_NAME); + de.attr = ATTR_DIR; + de.size = de.time = de.date = 0; + de.start = CT_LE_W(fs->root_cluster & 0xffff); + de.starthi = CT_LE_W((fs->root_cluster >> 16) & 0xffff); + } + if ((type = file_type(cp,de.name)) != fdt_none) { + if (type == fdt_undelete && (de.attr & ATTR_DIR)) + die("Can't undelete directories."); + file_modify(cp,de.name); + fs_write(offset,1,&de); + } + if (IS_FREE(de.name)) { + lfn_check_orphaned(); + return; + } + if (de.attr == VFAT_LN_ATTR) { + lfn_add_slot(&de,offset); + return; + } + new = qalloc(&mem_queue,sizeof(DOS_FILE)); + new->lfn = lfn_get(&de); + new->offset = offset; + memcpy(&new->dir_ent,&de,sizeof(de)); + new->next = new->first = NULL; + new->parent = parent; + if (type == fdt_undelete) undelete(fs,new); + **chain = new; + *chain = &new->next; + if (list) { + printf("Checking file %s",path_name(new)); + if (new->lfn) + printf(" (%s)", file_name(new->dir_ent.name) ); + printf("\n"); + } + if (offset && + strncmp(de.name,MSDOS_DOT,MSDOS_NAME) != 0 && + strncmp(de.name,MSDOS_DOTDOT,MSDOS_NAME) != 0) + ++n_files; + test_file(fs,new,test); +} + + +static int subdirs(DOS_FS *fs,DOS_FILE *parent,FDSC **cp); + + +static int scan_dir(DOS_FS *fs,DOS_FILE *this,FDSC **cp) +{ + DOS_FILE **chain; + int i; + unsigned long clu_num; + + chain = &this->first; + i = 0; + clu_num = FSTART(this,fs); + new_dir(); + while (clu_num > 0 && clu_num != -1) { + add_file(fs,&chain,this,cluster_start(fs,clu_num)+(i % fs-> + cluster_size),cp); + i += sizeof(DIR_ENT); + if (!(i % fs->cluster_size)) + if ((clu_num = next_cluster(fs,clu_num)) == 0 || clu_num == -1) + break; + } + lfn_check_orphaned(); + if (check_dir(fs,&this->first,this->offset)) return 0; + if (check_files(fs,this->first)) return 1; + return subdirs(fs,this,cp); +} + + +static int subdirs(DOS_FS *fs,DOS_FILE *parent,FDSC **cp) +{ + DOS_FILE *walk; + + for (walk = parent ? parent->first : root; walk; walk = walk->next) + if (walk->dir_ent.attr & ATTR_DIR) + if (strncmp(walk->dir_ent.name,MSDOS_DOT,MSDOS_NAME) && + strncmp(walk->dir_ent.name,MSDOS_DOTDOT,MSDOS_NAME)) + if (scan_dir(fs,walk,file_cd(cp,walk->dir_ent.name))) return 1; + return 0; +} + + +int scan_root(DOS_FS *fs) +{ + DOS_FILE **chain; + int i; + + root = NULL; + chain = &root; + new_dir(); + if (fs->root_cluster) { + add_file(fs,&chain,NULL,0,&fp_root); + } + else { + for (i = 0; i < fs->root_entries; i++) + add_file(fs,&chain,NULL,fs->root_start+i*sizeof(DIR_ENT),&fp_root); + } + lfn_check_orphaned(); + (void) check_dir(fs,&root,0); + if (check_files(fs,root)) return 1; + return subdirs(fs,NULL,&fp_root); +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/check.h b/reactos/lib/fslib/vfatlib/check/check.h new file mode 100644 index 00000000000..38f1c686b5c --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/check.h @@ -0,0 +1,23 @@ +/* check.h - Check and repair a PC/MS-DOS file system */ + +/* Written 1993 by Werner Almesberger */ + + +#ifndef _CHECK_H +#define _CHECK_H + +loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern); + +/* Allocate a free slot in the root directory for a new file. The file name is + constructed after 'pattern', which must include a %d type format for printf + and expand to exactly 11 characters. The name actually used is written into + the 'de' structure, the rest of *de is cleared. The offset returned is to + where in the filesystem the entry belongs. */ + +int scan_root(DOS_FS *fs); + +/* Scans the root directory and recurses into all subdirectories. See check.c + for all the details. Returns a non-zero integer if the file system has to + be checked again. */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/common.c b/reactos/lib/fslib/vfatlib/check/common.c new file mode 100644 index 00000000000..1a481720c14 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/common.c @@ -0,0 +1,110 @@ +/* common.c - Common functions */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#include +#include +#include +#include +#include + +#include "common.h" + + +typedef struct _link { + void *data; + struct _link *next; +} LINK; + + +void die(char *msg,...) +{ + va_list args; + + va_start(args,msg); + vfprintf(stderr,msg,args); + va_end(args); + fprintf(stderr,"\n"); + exit(1); +} + + +void pdie(char *msg,...) +{ + va_list args; + + va_start(args,msg); + vfprintf(stderr,msg,args); + va_end(args); + fprintf(stderr,":%s\n",strerror(errno)); + exit(1); +} + + +void *alloc(int size) +{ + void *this; + + if ((this = malloc(size))) return this; + pdie("malloc"); + return NULL; /* for GCC */ +} + + +void *qalloc(void **root,int size) +{ + LINK *link; + + link = alloc(sizeof(LINK)); + link->next = *root; + *root = link; + return link->data = alloc(size); +} + + +void qfree(void **root) +{ + LINK *this; + + while (*root) { + this = (LINK *) *root; + *root = this->next; + free(this->data); + free(this); + } +} + + +#ifdef min +#undef min +#endif +int min(int a,int b) +{ + return a < b ? a : b; +} + + +char get_key(char *valid,char *prompt) +{ + int ch,okay; + + while (1) { + if (prompt) printf("%s ",prompt); + fflush(stdout); + while (ch = getchar(), ch == ' ' || ch == '\t'); + if (ch == EOF) exit(1); + if (!strchr(valid,okay = ch)) okay = 0; + while (ch = getchar(), ch != '\n' && ch != EOF); + if (ch == EOF) exit(1); + if (okay) return okay; + printf("Invalid input.\n"); + } +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/common.h b/reactos/lib/fslib/vfatlib/check/common.h new file mode 100644 index 00000000000..cbd335795d0 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/common.h @@ -0,0 +1,42 @@ +/* common.h - Common functions */ + +# define MSDOS_FAT12 4084 /* maximum number of clusters in a 12 bit FAT */ + +#include "version.h" + +#ifndef _COMMON_H +#define _COMMON_H + +//void die(char *msg,...) __attribute((noreturn)); +__declspec(noreturn) void die(char *msg,...); + +/* Displays a prinf-style message and terminates the program. */ + +//void pdie(char *msg,...) __attribute((noreturn)); +__declspec(noreturn) void pdie(char *msg,...); + +/* Like die, but appends an error message according to the state of errno. */ + +void *alloc(int size); + +/* mallocs SIZE bytes and returns a pointer to the data. Terminates the program + if malloc fails. */ + +void *qalloc(void **root,int size); + +/* Like alloc, but registers the data area in a list described by ROOT. */ + +void qfree(void **root); + +/* Deallocates all qalloc'ed data areas described by ROOT. */ + +//int min(int a,int b); + +/* Returns the smaller integer value of a and b. */ + +char get_key(char *valid,char *prompt); + +/* Displays PROMPT and waits for user input. Only characters in VALID are + accepted. Terminates the program on EOF. Returns the character. */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/compiler.h b/reactos/lib/fslib/vfatlib/check/compiler.h new file mode 100644 index 00000000000..2d3edfe38b7 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/compiler.h @@ -0,0 +1,158 @@ +#ifndef __LINUX_COMPILER_H +#define __LINUX_COMPILER_H + +#ifndef __ASSEMBLY__ + +#ifdef __CHECKER__ +# define __user __attribute__((noderef, address_space(1))) +# define __kernel /* default address space */ +# define __safe __attribute__((safe)) +# define __force __attribute__((force)) +# define __nocast __attribute__((nocast)) +# define __iomem __attribute__((noderef, address_space(2))) +# define __acquires(x) __attribute__((context(0,1))) +# define __releases(x) __attribute__((context(1,0))) +# define __acquire(x) __context__(1) +# define __release(x) __context__(-1) +# define __cond_lock(x) ((x) ? ({ __context__(1); 1; }) : 0) +extern void __chk_user_ptr(void __user *); +extern void __chk_io_ptr(void __iomem *); +#else +# define __user +# define __kernel +# define __safe +# define __force +# define __nocast +# define __iomem +# define __chk_user_ptr(x) (void)0 +# define __chk_io_ptr(x) (void)0 +//# define __builtin_warning(x, y...) (1) +# define __acquires(x) +# define __releases(x) +# define __acquire(x) (void)0 +# define __release(x) (void)0 +# define __cond_lock(x) (x) +#endif + +#ifdef __KERNEL__ + +#if __GNUC__ > 4 +#error no compiler-gcc.h file for this gcc version +#elif __GNUC__ == 4 +# include +#elif __GNUC__ == 3 +# include +#elif __GNUC__ == 2 +# include +#else +# error Sorry, your compiler is too old/not recognized. +#endif + +/* Intel compiler defines __GNUC__. So we will overwrite implementations + * coming from above header files here + */ +#ifdef __INTEL_COMPILER +# include +#endif + +/* + * Generic compiler-dependent macros required for kernel + * build go below this comment. Actual compiler/compiler version + * specific implementations come from the above header files + */ + +#define likely(x) __builtin_expect(!!(x), 1) +#define unlikely(x) __builtin_expect(!!(x), 0) + +/* Optimization barrier */ +#ifndef barrier +# define barrier() __memory_barrier() +#endif + +#ifndef RELOC_HIDE +# define RELOC_HIDE(ptr, off) \ + ({ unsigned long __ptr; \ + __ptr = (unsigned long) (ptr); \ + (typeof(ptr)) (__ptr + (off)); }) +#endif + +#endif /* __KERNEL__ */ + +#endif /* __ASSEMBLY__ */ + +/* + * Allow us to mark functions as 'deprecated' and have gcc emit a nice + * warning for each use, in hopes of speeding the functions removal. + * Usage is: + * int __deprecated foo(void) + */ +#ifndef __deprecated +# define __deprecated /* unimplemented */ +#endif + +#ifdef MODULE +#define __deprecated_for_modules __deprecated +#else +#define __deprecated_for_modules +#endif + +#ifndef __must_check +#define __must_check +#endif + +/* + * Allow us to avoid 'defined but not used' warnings on functions and data, + * as well as force them to be emitted to the assembly file. + * + * As of gcc 3.3, static functions that are not marked with attribute((used)) + * may be elided from the assembly file. As of gcc 3.3, static data not so + * marked will not be elided, but this may change in a future gcc version. + * + * In prior versions of gcc, such functions and data would be emitted, but + * would be warned about except with attribute((unused)). + */ +#ifndef __attribute_used__ +# define __attribute_used__ /* unimplemented */ +#endif + +/* + * From the GCC manual: + * + * Many functions have no effects except the return value and their + * return value depends only on the parameters and/or global + * variables. Such a function can be subject to common subexpression + * elimination and loop optimization just as an arithmetic operator + * would be. + * [...] + */ +#ifndef __attribute_pure__ +# define __attribute_pure__ /* unimplemented */ +#endif + +/* + * From the GCC manual: + * + * Many functions do not examine any values except their arguments, + * and have no effects except the return value. Basically this is + * just slightly more strict class than the `pure' attribute above, + * since function is not allowed to read global memory. + * + * Note that a function that has pointer arguments and examines the + * data pointed to must _not_ be declared `const'. Likewise, a + * function that calls a non-`const' function usually must not be + * `const'. It does not make sense for a `const' function to return + * `void'. + */ +#ifndef __attribute_const__ +# define __attribute_const__ /* unimplemented */ +#endif + +#ifndef noinline +#define noinline +#endif + +#ifndef __always_inline +#define __always_inline inline +#endif + +#endif /* __LINUX_COMPILER_H */ diff --git a/reactos/lib/fslib/vfatlib/check/dosfsck.h b/reactos/lib/fslib/vfatlib/check/dosfsck.h new file mode 100644 index 00000000000..3789b8fdf7f --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/dosfsck.h @@ -0,0 +1,187 @@ +/* dosfsck.h - Common data structures and global variables */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#ifndef _DOSFSCK_H +#define _DOSFSCK_H + +//#include "types.h" + +#ifdef _WIN32 + +typedef unsigned char __u8; +typedef unsigned short __u16; +typedef unsigned int __u32; +typedef unsigned __int64 __u64; +typedef unsigned short __le16; +typedef unsigned int __le32; +typedef __int64 loff_t; +typedef __int64 ll_t; + +#define CF_LE_W(v) (v) +#define CF_LE_L(v) (v) +#define CT_LE_W(v) (v) +#define CT_LE_L(v) (v) + +#endif + +#define _LINUX_STAT_H /* hack to avoid inclusion of */ +#define _LINUX_STRING_H_ /* hack to avoid inclusion of */ +#define _LINUX_FS_H /* hack to avoid inclusion of */ + +//#include +//# include "types.h" +# include "byteorder.h" + +#include "msdos_fs.h" + +#if 0 +#undef CF_LE_W +#undef CF_LE_L +#undef CT_LE_W +#undef CT_LE_L +#endif + +#if __BYTE_ORDER == __BIG_ENDIAN +#include "byteswap.h" +#if 0 +#define CF_LE_W(v) bswap_16(v) +#define CF_LE_L(v) bswap_32(v) +#define CT_LE_W(v) CF_LE_W(v) +#define CT_LE_L(v) CF_LE_L(v) +#endif +#else +#define CF_LE_W(v) (v) +#define CF_LE_L(v) (v) +#define CT_LE_W(v) (v) +#define CT_LE_L(v) (v) +#endif /* __BIG_ENDIAN */ + +#define VFAT_LN_ATTR (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) + +#include + +/* ++roman: Use own definition of boot sector structure -- the kernel headers' + * name for it is msdos_boot_sector in 2.0 and fat_boot_sector in 2.1 ... */ +struct boot_sector { + __u8 ignored[3]; /* Boot strap short or near jump */ + __u8 system_id[8]; /* Name - can be used to special case + partition manager volumes */ + __u8 sector_size[2]; /* bytes per logical sector */ + __u8 cluster_size; /* sectors/cluster */ + __u16 reserved; /* reserved sectors */ + __u8 fats; /* number of FATs */ + __u8 dir_entries[2]; /* root directory entries */ + __u8 sectors[2]; /* number of sectors */ + __u8 media; /* media code (unused) */ + __u16 fat_length; /* sectors/FAT */ + __u16 secs_track; /* sectors per track */ + __u16 heads; /* number of heads */ + __u32 hidden; /* hidden sectors (unused) */ + __u32 total_sect; /* number of sectors (if sectors == 0) */ + + /* The following fields are only used by FAT32 */ + __u32 fat32_length; /* sectors/FAT */ + __u16 flags; /* bit 8: fat mirroring, low 4: active fat */ + __u8 version[2]; /* major, minor filesystem version */ + __u32 root_cluster; /* first cluster in root directory */ + __u16 info_sector; /* filesystem info sector */ + __u16 backup_boot; /* backup boot sector */ + __u16 reserved2[6]; /* Unused */ + + /* fill up to 512 bytes */ + __u8 junk[448]; +}; + +#include + +struct info_sector { + __u32 magic; /* Magic for info sector ('RRaA') */ + __u8 junk[0x1dc]; + __u32 reserved1; /* Nothing as far as I can tell */ + __u32 signature; /* 0x61417272 ('rrAa') */ + __u32 free_clusters; /* Free cluster count. -1 if unknown */ + __u32 next_cluster; /* Most recently allocated cluster. */ + __u32 reserved2[3]; + __u16 reserved3; + __u16 boot_sign; +}; + +typedef struct { + __u8 name[8],ext[3]; /* name and extension */ + __u8 attr; /* attribute bits */ + __u8 lcase; /* Case for base and extension */ + __u8 ctime_ms; /* Creation time, milliseconds */ + __u16 ctime; /* Creation time */ + __u16 cdate; /* Creation date */ + __u16 adate; /* Last access date */ + __u16 starthi; /* High 16 bits of cluster in FAT32 */ + __u16 time,date,start;/* time, date and first cluster */ + __u32 size; /* file size (in bytes) */ +} DIR_ENT; + +typedef struct _dos_file { + DIR_ENT dir_ent; + char *lfn; + loff_t offset; + struct _dos_file *parent; /* parent directory */ + struct _dos_file *next; /* next entry */ + struct _dos_file *first; /* first entry (directory only) */ +} DOS_FILE; + +typedef struct { + unsigned long value; + unsigned long reserved; + DOS_FILE *owner; + int prev; /* number of previous clusters */ +} FAT_ENTRY; + +typedef struct { + int nfats; + loff_t fat_start; + unsigned int fat_size; /* unit is bytes */ + unsigned int fat_bits; /* size of a FAT entry */ + unsigned int eff_fat_bits; /* # of used bits in a FAT entry */ + unsigned long root_cluster; /* 0 for old-style root dir */ + loff_t root_start; + unsigned int root_entries; + loff_t data_start; + unsigned int cluster_size; + unsigned long clusters; + loff_t fsinfo_start; /* 0 if not present */ + long free_clusters; + loff_t backupboot_start; /* 0 if not present */ + FAT_ENTRY *fat; +} DOS_FS; + +#ifndef offsetof +#define offsetof(t,e) ((int)&(((t *)0)->e)) +#endif + +extern int interactive,list,verbose,test,write_immed; +extern int atari_format; +extern unsigned n_files; +extern void *mem_queue; + +/* value to use as end-of-file marker */ +#define FAT_EOF(fs) ((atari_format ? 0xfff : 0xff8) | FAT_EXTD(fs)) +#define FAT_IS_EOF(fs,v) ((unsigned long)(v) >= (0xff8|FAT_EXTD(fs))) +/* value to mark bad clusters */ +#define FAT_BAD(fs) (0xff7 | FAT_EXTD(fs)) +/* range of values used for bad clusters */ +#define FAT_MIN_BAD(fs) ((atari_format ? 0xff0 : 0xff7) | FAT_EXTD(fs)) +#define FAT_MAX_BAD(fs) ((atari_format ? 0xff7 : 0xff7) | FAT_EXTD(fs)) +#define FAT_IS_BAD(fs,v) ((v) >= FAT_MIN_BAD(fs) && (v) <= FAT_MAX_BAD(fs)) + +/* return -16 as a number with fs->fat_bits bits */ +#define FAT_EXTD(fs) (((1 << fs->eff_fat_bits)-1) & ~0xf) + +#endif + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/reactos/lib/fslib/vfatlib/check/fat.c new file mode 100644 index 00000000000..1975a12ad3d --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/fat.c @@ -0,0 +1,366 @@ +/* fat.c - Read/write access to the FAT */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#include +#include +#include +//#include + +#include "common.h" +#include "dosfsck.h" +#include "io.h" +#include "check.h" +#include "fat.h" + +#pragma warning(disable: 4018) + +static void get_fat(FAT_ENTRY *entry,void *fat,unsigned long cluster,DOS_FS *fs) +{ + unsigned char *ptr; + + switch(fs->fat_bits) { + case 12: + ptr = &((unsigned char *) fat)[cluster*3/2]; + entry->value = 0xfff & (cluster & 1 ? (ptr[0] >> 4) | (ptr[1] << 4) : + (ptr[0] | ptr[1] << 8)); + break; + case 16: + entry->value = CF_LE_W(((unsigned short *) fat)[cluster]); + break; + case 32: + /* According to M$, the high 4 bits of a FAT32 entry are reserved and + * are not part of the cluster number. So we cut them off. */ + { + unsigned long e = CF_LE_L(((unsigned int *) fat)[cluster]); + entry->value = e & 0xfffffff; + entry->reserved = e >> 28; + } + break; + default: + die("Bad FAT entry size: %d bits.",fs->fat_bits); + } + entry->owner = NULL; +} + + +void read_fat(DOS_FS *fs) +{ + int eff_size; + unsigned long i; + void *first,*second,*use; + int first_ok,second_ok; + + eff_size = ((fs->clusters+2)*fs->fat_bits+7)/8; + // TMN: Must round up to disk-sector boundary. For now, assume 512-byte disk. + if (eff_size % 512) { + eff_size += 512 - (eff_size % 512); + } + first = alloc(eff_size); + fs_read(fs->fat_start,eff_size,first); + use = first; + if (fs->nfats > 1) { + second = alloc(eff_size); + fs_read(fs->fat_start+fs->fat_size,eff_size,second); + } + else + second = NULL; + if (second && memcmp(first,second,eff_size) != 0) { + FAT_ENTRY first_media, second_media; + get_fat(&first_media,first,0,fs); + get_fat(&second_media,second,0,fs); + first_ok = (first_media.value & FAT_EXTD(fs)) == FAT_EXTD(fs); + second_ok = (second_media.value & FAT_EXTD(fs)) == FAT_EXTD(fs); + if (first_ok && !second_ok) { + printf("FATs differ - using first FAT.\n"); + fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); + } + if (!first_ok && second_ok) { + printf("FATs differ - using second FAT.\n"); + fs_write(fs->fat_start,eff_size,use = second); + } + if (first_ok && second_ok) { + if (interactive) { + printf("FATs differ but appear to be intact. Use which FAT ?\n" + "1) Use first FAT\n2) Use second FAT\n"); + if (get_key("12","?") == '1') + fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); + else fs_write(fs->fat_start,eff_size,use = second); + } + else { + printf("FATs differ but appear to be intact. Using first " + "FAT.\n"); + fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); + } + } + if (!first_ok && !second_ok) { + printf("Both FATs appear to be corrupt. Giving up.\n"); + exit(1); + } + } + fs->fat = qalloc(&mem_queue,sizeof(FAT_ENTRY)*(fs->clusters+2)); + for (i = 2; i < fs->clusters+2; i++) get_fat(&fs->fat[i],use,i,fs); + for (i = 2; i < fs->clusters+2; i++) + if (fs->fat[i].value >= fs->clusters+2 && + (fs->fat[i].value < FAT_MIN_BAD(fs))) { + printf("Cluster %ld out of range (%ld > %ld). Setting to EOF.\n", + i-2,fs->fat[i].value,fs->clusters+2-1); + set_fat(fs,i,-1); + } + free(first); + if (second) + free(second); +} + + +void set_fat(DOS_FS *fs,unsigned long cluster,unsigned long new) +{ + unsigned char data[4]; + int size; + loff_t offs; + + if ((long)new == -1) + new = FAT_EOF(fs); + else if ((long)new == -2) + new = FAT_BAD(fs); + switch( fs->fat_bits ) { + case 12: + offs = fs->fat_start+cluster*3/2; + if (cluster & 1) { + data[0] = ((new & 0xf) << 4) | (fs->fat[cluster-1].value >> 8); + data[1] = new >> 4; + } + else { + data[0] = new & 0xff; + data[1] = (new >> 8) | (cluster == fs->clusters-1 ? 0 : + (0xff & fs->fat[cluster+1].value) << 4); + } + size = 2; + break; + case 16: + offs = fs->fat_start+cluster*2; + *(unsigned short *) data = CT_LE_W(new); + size = 2; + break; + case 32: + offs = fs->fat_start+cluster*4; + /* According to M$, the high 4 bits of a FAT32 entry are reserved and + * are not part of the cluster number. So we never touch them. */ + *(unsigned long *) data = CT_LE_L( (new & 0xfffffff) | + (fs->fat[cluster].reserved << 28) ); + size = 4; + break; + default: + die("Bad FAT entry size: %d bits.",fs->fat_bits); + } + fs->fat[cluster].value = new; + fs_write(offs,size,&data); + fs_write(offs+fs->fat_size,size,&data); +} + + +int bad_cluster(DOS_FS *fs,unsigned long cluster) +{ + return FAT_IS_BAD(fs,fs->fat[cluster].value); +} + + +unsigned long next_cluster(DOS_FS *fs,unsigned long cluster) +{ + unsigned long value; + + value = fs->fat[cluster].value; + if (FAT_IS_BAD(fs,value)) + die("Internal error: next_cluster on bad cluster"); + return FAT_IS_EOF(fs,value) ? -1 : value; +} + + +loff_t cluster_start(DOS_FS *fs,unsigned long cluster) +{ + return fs->data_start+((loff_t)cluster-2)*fs->cluster_size; +} + + +void set_owner(DOS_FS *fs,unsigned long cluster,DOS_FILE *owner) +{ + if (owner && fs->fat[cluster].owner) + die("Internal error: attempt to change file owner"); + fs->fat[cluster].owner = owner; +} + + +DOS_FILE *get_owner(DOS_FS *fs,unsigned long cluster) +{ + return fs->fat[cluster].owner; +} + + +void fix_bad(DOS_FS *fs) +{ + unsigned long i; + + if (verbose) + printf("Checking for bad clusters.\n"); + for (i = 2; i < fs->clusters+2; i++) + if (!get_owner(fs,i) && !FAT_IS_BAD(fs,fs->fat[i].value)) + if (!fs_test(cluster_start(fs,i),fs->cluster_size)) { + printf("Cluster %lu is unreadable.\n",i); + set_fat(fs,i,-2); + } +} + + +void reclaim_free(DOS_FS *fs) +{ + int reclaimed; + unsigned long i; + + if (verbose) + printf("Checking for unused clusters.\n"); + reclaimed = 0; + for (i = 2; i < fs->clusters+2; i++) + if (!get_owner(fs,i) && fs->fat[i].value && + !FAT_IS_BAD(fs,fs->fat[i].value)) { + set_fat(fs,i,0); + reclaimed++; + } + if (reclaimed) + printf("Reclaimed %d unused cluster%s (%d bytes).\n",reclaimed, + reclaimed == 1 ? "" : "s",reclaimed*fs->cluster_size); +} + + +static void tag_free(DOS_FS *fs,DOS_FILE *ptr) +{ + DOS_FILE *owner; + int prev; + unsigned long i,walk; + + for (i = 2; i < fs->clusters+2; i++) + if (fs->fat[i].value && !FAT_IS_BAD(fs,fs->fat[i].value) && + !get_owner(fs,i) && !fs->fat[i].prev) { + prev = 0; + for (walk = i; walk > 0 && walk != -1; + walk = next_cluster(fs,walk)) { + if (!(owner = get_owner(fs,walk))) set_owner(fs,walk,ptr); + else if (owner != ptr) + die("Internal error: free chain collides with file"); + else { + set_fat(fs,prev,-1); + break; + } + prev = walk; + } + } +} + + +void reclaim_file(DOS_FS *fs) +{ + DOS_FILE dummy; + int reclaimed,files,changed; + unsigned long i,next,walk; + + if (verbose) + printf("Reclaiming unconnected clusters.\n"); + for (i = 2; i < fs->clusters+2; i++) fs->fat[i].prev = 0; + for (i = 2; i < fs->clusters+2; i++) { + next = fs->fat[i].value; + if (!get_owner(fs,i) && next && next < fs->clusters+2) { + if (get_owner(fs,next) || !fs->fat[next].value || + FAT_IS_BAD(fs,fs->fat[next].value)) set_fat(fs,i,-1); + else fs->fat[next].prev++; + } + } + do { + tag_free(fs,&dummy); + changed = 0; + for (i = 2; i < fs->clusters+2; i++) + if (fs->fat[i].value && !FAT_IS_BAD(fs,fs->fat[i].value) && + !get_owner(fs, i)) { + if (!fs->fat[fs->fat[i].value].prev--) + die("Internal error: prev going below zero"); + set_fat(fs,i,-1); + changed = 1; + printf("Broke cycle at cluster %lu in free chain.\n",i); + break; + } + } + while (changed); + files = reclaimed = 0; + for (i = 2; i < fs->clusters+2; i++) + if (get_owner(fs,i) == &dummy && !fs->fat[i].prev) { + DIR_ENT de; + loff_t offset; + files++; + offset = alloc_rootdir_entry(fs,&de,"FSCK%04dREC"); + de.start = CT_LE_W(i&0xffff); + if (fs->fat_bits == 32) + de.starthi = CT_LE_W(i>>16); + for (walk = i; walk > 0 && walk != -1; + walk = next_cluster(fs,walk)) { + de.size = CT_LE_L(CF_LE_L(de.size)+fs->cluster_size); + reclaimed++; + } + fs_write(offset,sizeof(DIR_ENT),&de); + } + if (reclaimed) + printf("Reclaimed %d unused cluster%s (%d bytes) in %d chain%s.\n", + reclaimed,reclaimed == 1 ? "" : "s",reclaimed*fs->cluster_size,files, + files == 1 ? "" : "s"); +} + + +unsigned long update_free(DOS_FS *fs) +{ + unsigned long i; + unsigned long free = 0; + int do_set = 0; + + for (i = 2; i < fs->clusters+2; i++) + if (!get_owner(fs,i) && !FAT_IS_BAD(fs,fs->fat[i].value)) + ++free; + + if (!fs->fsinfo_start) + return free; + + if (verbose) + printf("Checking free cluster summary.\n"); + if (fs->free_clusters >= 0) { + if (free != fs->free_clusters) { + printf( "Free cluster summary wrong (%ld vs. really %ld)\n", + fs->free_clusters,free); + if (interactive) + printf( "1) Correct\n2) Don't correct\n" ); + else printf( " Auto-correcting.\n" ); + if (!interactive || get_key("12","?") == '1') + do_set = 1; + } + } + else { + printf( "Free cluster summary uninitialized (should be %ld)\n", free ); + if (interactive) + printf( "1) Set it\n2) Leave it uninitialized\n" ); + else printf( " Auto-setting.\n" ); + if (!interactive || get_key("12","?") == '1') + do_set = 1; + } + + if (do_set) { + fs->free_clusters = free; + free = CT_LE_L(free); + fs_write(fs->fsinfo_start+offsetof(struct info_sector,free_clusters), + sizeof(free),&free); + } + + return free; +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/fat.h b/reactos/lib/fslib/vfatlib/check/fat.h new file mode 100644 index 00000000000..8c2312d9e64 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/fat.h @@ -0,0 +1,64 @@ +/* fat.h - Read/write access to the FAT */ + +/* Written 1993 by Werner Almesberger */ + + +#ifndef _FAT_H +#define _FAT_H + +void read_fat(DOS_FS *fs); + +/* Loads the FAT of the file system described by FS. Initializes the FAT, + replaces broken FATs and rejects invalid cluster entries. */ + +void set_fat(DOS_FS *fs,unsigned long cluster,unsigned long new); + +/* Changes the value of the CLUSTERth cluster of the FAT of FS to NEW. Special + values of NEW are -1 (EOF, 0xff8 or 0xfff8) and -2 (bad sector, 0xff7 or + 0xfff7) */ + +int bad_cluster(DOS_FS *fs,unsigned long cluster); + +/* Returns a non-zero integer if the CLUSTERth cluster is marked as bad or zero + otherwise. */ + +unsigned long next_cluster(DOS_FS *fs,unsigned long cluster); + +/* Returns the number of the cluster following CLUSTER, or -1 if this is the + last cluster of the respective cluster chain. CLUSTER must not be a bad + cluster. */ + +loff_t cluster_start(DOS_FS *fs,unsigned long cluster); + +/* Returns the byte offset of CLUSTER, relative to the respective device. */ + +void set_owner(DOS_FS *fs,unsigned long cluster,DOS_FILE *owner); + +/* Sets the owner pointer of the respective cluster to OWNER. If OWNER was NULL + before, it can be set to NULL or any non-NULL value. Otherwise, only NULL is + accepted as the new value. */ + +DOS_FILE *get_owner(DOS_FS *fs,unsigned long cluster); + +/* Returns the owner of the repective cluster or NULL if the cluster has no + owner. */ + +void fix_bad(DOS_FS *fs); + +/* Scans the disk for currently unused bad clusters and marks them as bad. */ + +void reclaim_free(DOS_FS *fs); + +/* Marks all allocated, but unused clusters as free. */ + +void reclaim_file(DOS_FS *fs); + +/* Scans the FAT for chains of allocated, but unused clusters and creates files + for them in the root directory. Also tries to fix all inconsistencies (e.g. + loops, shared clusters, etc.) in the process. */ + +unsigned long update_free(DOS_FS *fs); + +/* Updates free cluster count in FSINFO sector. */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/file.c b/reactos/lib/fslib/vfatlib/check/file.c new file mode 100644 index 00000000000..9d6b4ff0c03 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/file.c @@ -0,0 +1,251 @@ +/* file.c - Additional file attributes */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#include +#include +#include +#include +//#include + +#define _LINUX_STAT_H /* hack to avoid inclusion of */ +#define _LINUX_STRING_H_ /* hack to avoid inclusion of */ +#define _LINUX_FS_H /* hack to avoid inclusion of */ + +//#include +//#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) +//# define __KERNEL__ +//# include +//# undef __KERNEL__ +//#endif + +#include "dosfsck.h" +#include "msdos_fs.h" + +#include "common.h" +#include "file.h" + + +FDSC *fp_root = NULL; + + +static void put_char(char **p,unsigned char c) +{ + if ((c >= ' ' && c < 0x7f) || c >= 0xa0) *(*p)++ = c; + else { + *(*p)++ = '\\'; + *(*p)++ = '0'+(c >> 6); + *(*p)++ = '0'+((c >> 3) & 7); + *(*p)++ = '0'+(c & 7); + } +} + + +char *file_name(unsigned char *fixed) +{ + static char path[MSDOS_NAME*4+2]; + char *p; + int i,j; + + p = path; + for (i = j = 0; i < 8; i++) + if (fixed[i] != ' ') { + while (j++ < i) *p++ = ' '; + put_char(&p,fixed[i]); + } + if (strncmp(fixed+8," ",3)) { + *p++ = '.'; + for (i = j = 0; i < 3; i++) + if (fixed[i+8] != ' ') { + while (j++ < i) *p++ = ' '; + put_char(&p,fixed[i+8]); + } + } + *p = 0; + return path; +} + + +int file_cvt(unsigned char *name,unsigned char *fixed) +{ + unsigned char c; + int size,ext,cnt; + + size = 8; + ext = 0; + while (*name) { + c = *name; + if (c < ' ' || c > 0x7e || strchr("*?<>|\"/",c)) { + printf("Invalid character in name. Use \\ooo for special " + "characters.\n"); + return 0; + } + if (c == '.') { + if (ext) { + printf("Duplicate dots in name.\n"); + return 0; + } + while (size--) *fixed++ = ' '; + size = 3; + ext = 1; + name++; + continue; + } + if (c == '\\') { + c = 0; + for (cnt = 3; cnt; cnt--) { + if (*name < '0' || *name > '7') { + printf("Invalid octal character.\n"); + return 0; + } + c = c*8+*name++-'0'; + } + if (cnt < 4) { + printf("Expected three octal digits.\n"); + return 0; + } + name += 3; + } + if (islower(c)) c = toupper(c); + if (size) { + *fixed++ = c; + size--; + } + name++; + } + if (*name || size == 8) return 0; + if (!ext) { + while (size--) *fixed++ = ' '; + size = 3; + } + while (size--) *fixed++ = ' '; + return 1; +} + + +void file_add(char *path,FD_TYPE type) +{ + FDSC **current,*walk; + char name[MSDOS_NAME]; + char *here; + + current = &fp_root; + if (*path != '/') die("%s: Absolute path required.",path); + path++; + while (1) { + if ((here = strchr(path,'/'))) *here = 0; + if (!file_cvt(path,name)) exit(2); + for (walk = *current; walk; walk = walk->next) + if (!here && (!strncmp(name,walk->name,MSDOS_NAME) || (type == + fdt_undelete && !strncmp(name+1,walk->name+1,MSDOS_NAME-1)))) + die("Ambiguous name: \"%s\"",path); + else if (here && !strncmp(name,walk->name,MSDOS_NAME)) break; + if (!walk) { + walk = alloc(sizeof(FDSC)); + strncpy(walk->name,name,MSDOS_NAME); + walk->type = here ? fdt_none : type; + walk->first = NULL; + walk->next = *current; + *current = walk; + } + current = &walk->first; + if (!here) break; + *here = '/'; + path = here+1; + } +} + + +FDSC **file_cd(FDSC **curr,char *fixed) +{ + FDSC **walk; + + if (!curr || !*curr) return NULL; + for (walk = curr; *walk; walk = &(*walk)->next) + if (!strncmp((*walk)->name,fixed,MSDOS_NAME) && (*walk)->first) + return &(*walk)->first; + return NULL; +} + + +static FDSC **file_find(FDSC **dir,char *fixed) +{ + if (!dir || !*dir) return NULL; + if (*(unsigned char *) fixed == DELETED_FLAG) { + while (*dir) { + if (!strncmp((*dir)->name+1,fixed+1,MSDOS_NAME-1) && !(*dir)->first) + return dir; + dir = &(*dir)->next; + } + return NULL; + } + while (*dir) { + if (!strncmp((*dir)->name,fixed,MSDOS_NAME) && !(*dir)->first) + return dir; + dir = &(*dir)->next; + } + return NULL; +} + + +FD_TYPE file_type(FDSC **curr,char *fixed) +{ + FDSC **this; + + if ((this = file_find(curr,fixed))) return (*this)->type; + return fdt_none; +} + + +void file_modify(FDSC **curr,char *fixed) +{ + FDSC **this,*next; + + if (!(this = file_find(curr,fixed))) + die("Internal error: file_find failed"); + switch ((*this)->type) { + case fdt_drop: + printf("Dropping %s\n",file_name(fixed)); + *(unsigned char *) fixed = DELETED_FLAG; + break; + case fdt_undelete: + *fixed = *(*this)->name; + printf("Undeleting %s\n",file_name(fixed)); + break; + default: + die("Internal error: file_modify"); + } + next = (*this)->next; + free(*this); + *this = next; +} + + +static void report_unused(FDSC *this) +{ + FDSC *next; + + while (this) { + next = this->next; + if (this->first) report_unused(this->first); + else if (this->type != fdt_none) + printf("Warning: did not %s file %s\n",this->type == fdt_drop ? + "drop" : "undelete",file_name(this->name)); + free(this); + this = next; + } +} + + +void file_unused(void) +{ + report_unused(fp_root); +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/file.h b/reactos/lib/fslib/vfatlib/check/file.h new file mode 100644 index 00000000000..d7f1386801d --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/file.h @@ -0,0 +1,55 @@ +/* file.h - Additional file attributes */ + +/* Written 1993 by Werner Almesberger */ + + +#ifndef _FILE_H +#define _FILE_H + +typedef enum { fdt_none,fdt_drop,fdt_undelete } FD_TYPE; + +typedef struct _fptr { + char name[MSDOS_NAME]; + FD_TYPE type; + struct _fptr *first; /* first entry */ + struct _fptr *next; /* next file in directory */ +} FDSC; + + +extern FDSC *fp_root; + + +char *file_name(unsigned char *fixed); + +/* Returns a pointer to a pretty-printed representation of a fixed MS-DOS file + name. */ + +int file_cvt(unsigned char *name,unsigned char *fixed); + +/* Converts a pretty-printed file name to the fixed MS-DOS format. Returns a + non-zero integer on success, zero on failure. */ + +void file_add(char *path,FD_TYPE type); + +/* Define special attributes for a path. TYPE can be either FDT_DROP or + FDT_UNDELETE. */ + +FDSC **file_cd(FDSC **curr,char *fixed); + +/* Returns a pointer to the directory descriptor of the subdirectory FIXED of + CURR, or NULL if no such subdirectory exists. */ + +FD_TYPE file_type(FDSC **curr,char *fixed); + +/* Returns the attribute of the file FIXED in directory CURR or FDT_NONE if no + such file exists or if CURR is NULL. */ + +void file_modify(FDSC **curr,char *fixed); + +/* Performs the necessary operation on the entry of CURR that is named FIXED. */ + +void file_unused(void); + +/* Displays warnings for all unused file attributes. */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/io.c b/reactos/lib/fslib/vfatlib/check/io.c new file mode 100644 index 00000000000..0ccf41d77c7 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/io.c @@ -0,0 +1,445 @@ +/* io.c - Virtual disk input/output */ + +/* Written 1993 by Werner Almesberger */ + +/* + * Thu Feb 26 01:15:36 CET 1998: Martin Schulze + * Fixed nasty bug that caused every file with a name like + * xxxxxxxx.xxx to be treated as bad name that needed to be fixed. + */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + +#include +#include +#include +//#include +#include +//#include +#include +#include +#include +//#include + + +#ifdef _WIN32 +#define _WIN32_WINNT 0x0400 +#include +#include +#define __LITTLE_ENDIAN 1234 +#define __BIG_ENDIAN 4321 +#define __BYTE_ORDER __LITTLE_ENDIAN +#define inline +#define __attribute__(x) +#define BLOCK_SIZE 512 +#endif + + +#include "dosfsck.h" +#include "common.h" +#include "io.h" + + +typedef struct _change { + void *data; + loff_t pos; + int size; + struct _change *next; +} CHANGE; + + +static CHANGE *changes,*last; +static int fd,did_change = 0; + +unsigned device_no; + +static int WIN32open(const char *path, int oflag, ...); +#define open WIN32open +static int WIN32close(int fd); +#define close WIN32close +static int WIN32read(int fd, void *buf, unsigned int len); +#define read WIN32read +static int WIN32write(int fd, void *buf, unsigned int len); +#define write WIN32write +static loff_t WIN32llseek(int fd, loff_t offset, int whence); +#ifdef llseek +#undef llseek +#endif +#define llseek WIN32llseek + +//static int is_device = 0; + +void fs_open(char *path,int rw) +{ +#ifdef _WIN32 + static char dev_buf[] = "\\\\.\\X:"; +#else + struct stat stbuf; +#endif + + if (path[1] == ':' && path[2] == '\0') { + dev_buf[4] = path[0]; + path = dev_buf; +// is_device = 1; + } + + if ((fd = open(path,rw ? O_RDWR : O_RDONLY)) < 0) + pdie("open %s",path); + changes = last = NULL; + did_change = 0; + +#if 0 + if (fstat(fd,&stbuf) < 0) + pdie("fstat %s",path); + device_no = S_ISBLK(stbuf.st_mode) ? (stbuf.st_rdev >> 8) & 0xff : 0; +#endif +} + + +void fs_read(loff_t pos,int size,void *data) +{ + CHANGE *walk; + int got; +#if 1 // TMN + const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; // TMN: + const loff_t seekpos_aligned = pos - (pos % 512); // TMN: + const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN: + const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; // TMN: + char* tmpBuf = malloc(readsize_aligned); // TMN: + if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",pos); + if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %I64d",size,pos); + assert(got >= size); + got = size; + assert(seek_delta + size <= readsize); + memcpy(data, tmpBuf+seek_delta, size); + free(tmpBuf); +#else // TMN: + if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); + if ((got = read(fd,data,size)) < 0) pdie("Read %d bytes at %lld",size,pos); +#endif // TMN: + if (got != size) die("Got %d bytes instead of %d at %I64d",got,size,pos); + for (walk = changes; walk; walk = walk->next) { + if (walk->pos < pos+size && walk->pos+walk->size > pos) { + if (walk->pos < pos) + memcpy(data,(char *) walk->data+pos-walk->pos,min((size_t)size, + (size_t)(walk->size-pos+walk->pos))); + else memcpy((char *) data+walk->pos-pos,walk->data,min((size_t)walk->size, + (size_t)(size+pos-walk->pos))); + } + } +} + + +int fs_test(loff_t pos,int size) +{ + void *scratch; + int okay; + +#if 1 // TMN + const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; // TMN: + const loff_t seekpos_aligned = pos - (pos % 512); // TMN: + scratch = alloc(readsize_aligned); + if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos); + okay = read(fd,scratch,readsize_aligned) == (int)readsize_aligned; + free(scratch); +#else // TMN: + if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); + scratch = alloc(size); + okay = read(fd,scratch,size) == size; + free(scratch); +#endif // TMN: + return okay; +} + + +void fs_write(loff_t pos,int size,void *data) +{ + CHANGE *new; + int did; + +#if 1 //SAE + if (write_immed) { + void *scratch; + const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; + const loff_t seekpos_aligned = pos - (pos % 512); + const size_t seek_delta = (size_t)(pos - seekpos_aligned); + boolean use_read = (seek_delta != 0) || ((readsize_aligned-size) != 0); + + /* Aloc temp buffer if write is not aligned */ + if (use_read) + scratch = alloc(readsize_aligned); + else + scratch = data; + + did_change = 1; + if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",seekpos_aligned); + + if (use_read) + { + /* Read aligned data */ + if (read(fd,scratch,readsize_aligned) < 0) pdie("Read %d bytes at %I64d",size,pos); + + /* Patch data in memory */ + memcpy((char *)scratch+seek_delta, data, size); + } + + /* Write it back */ + if ((did = write(fd,scratch,readsize_aligned)) == (int)readsize_aligned) + { + if (use_read) free(scratch); + return; + } + if (did < 0) pdie("Write %d bytes at %I64d",size,pos); + die("Wrote %d bytes instead of %d at %I64d",did,size,pos); + } + + new = alloc(sizeof(CHANGE)); + new->pos = pos; + memcpy(new->data = alloc(new->size = size),data,size); + new->next = NULL; + if (last) last->next = new; + else changes = new; + last = new; + +#else //SAE + if (write_immed) { + did_change = 1; + if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); + if ((did = write(fd,data,size)) == size) return; + if (did < 0) pdie("Write %d bytes at %lld",size,pos); + die("Wrote %d bytes instead of %d at %lld",did,size,pos); + } + new = alloc(sizeof(CHANGE)); + new->pos = pos; + memcpy(new->data = alloc(new->size = size),data,size); + new->next = NULL; + if (last) last->next = new; + else changes = new; + last = new; +#endif //SAE +} + + +static void fs_flush(void) +{ + CHANGE *this; + //int size; + int old_write_immed = write_immed; + + /* Disable writes to the list now */ + write_immed = 1; + + while (changes) { + this = changes; + changes = changes->next; +#if 0 + if (llseek(fd,this->pos,0) != this->pos) + fprintf(stderr,"Seek to %lld failed: %s\n Did not write %d bytes.\n", + (__int64)this->pos,strerror(errno),this->size); + else if ((size = write(fd,this->data,this->size)) < 0) + fprintf(stderr,"Writing %d bytes at %lld failed: %s\n",this->size, + (__int64)this->pos,strerror(errno)); + else if (size != this->size) + fprintf(stderr,"Wrote %d bytes instead of %d bytes at %lld." + "\n",size,this->size,(__int64)this->pos); +#else + fs_write(this->pos, this->size, this->data); +#endif + + free(this->data); + free(this); + } + + /* Restore values */ + write_immed = old_write_immed; +} + + +int fs_close(int write) +{ + CHANGE *next; + int changed; + + changed = !!changes; + if (write) fs_flush(); + else while (changes) { + next = changes->next; + free(changes->data); + free(changes); + changes = next; + } + if (close(fd) < 0) pdie("closing file system"); + return changed || did_change; +} + + +int fs_changed(void) +{ + return !!changes || did_change; +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ + + +#define O_SHORT_LIVED _O_SHORT_LIVED +//#define O_ACCMODE 3 +#define O_NONE 3 +#define O_BACKUP 0x10000 +#define O_SHARED 0x20000 + +static int WIN32open(const char *path, int oflag, ...) +{ + HANDLE fh; + DWORD desiredAccess = 0; + DWORD shareMode = 0; + DWORD creationDisposition = 0; + DWORD flagsAttributes = FILE_ATTRIBUTE_NORMAL; + SECURITY_ATTRIBUTES securityAttributes; + va_list ap; + int pmode; + int trunc = FALSE; + + securityAttributes.nLength = sizeof(securityAttributes); + securityAttributes.lpSecurityDescriptor = NULL; + securityAttributes.bInheritHandle = oflag & O_NOINHERIT ? FALSE : TRUE; + switch (oflag & O_ACCMODE) { + case O_RDONLY: + desiredAccess = GENERIC_READ; +// shareMode = FILE_SHARE_READ; + shareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; // TMN: + break; + case O_WRONLY: + desiredAccess = GENERIC_WRITE; + shareMode = 0; + break; + case O_RDWR: + desiredAccess = GENERIC_READ|GENERIC_WRITE; + shareMode = 0; + break; + case O_NONE: + desiredAccess = 0; + shareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; + } + if (oflag & O_APPEND) { + desiredAccess |= FILE_APPEND_DATA|SYNCHRONIZE; + shareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; + } + if (oflag & O_SHARED) + shareMode |= FILE_SHARE_READ|FILE_SHARE_WRITE; + switch (oflag & (O_CREAT|O_EXCL|O_TRUNC)) { + case 0: + case O_EXCL: + creationDisposition = OPEN_EXISTING; + break; + case O_CREAT: + creationDisposition = OPEN_ALWAYS; + break; + case O_CREAT|O_EXCL: + case O_CREAT|O_TRUNC|O_EXCL: + creationDisposition = CREATE_NEW; + break; + case O_TRUNC: + case O_TRUNC|O_EXCL: + creationDisposition = TRUNCATE_EXISTING; + break; + case O_CREAT|O_TRUNC: + creationDisposition = OPEN_ALWAYS; + trunc = TRUE; + break; + } + if (oflag & O_CREAT) { + va_start(ap, oflag); + pmode = va_arg(ap, int); + va_end(ap); + if ((pmode & 0222) == 0) + flagsAttributes |= FILE_ATTRIBUTE_READONLY; + } + if (oflag & O_TEMPORARY) { + flagsAttributes |= FILE_FLAG_DELETE_ON_CLOSE; + desiredAccess |= DELETE; + } + if (oflag & O_SHORT_LIVED) + flagsAttributes |= FILE_ATTRIBUTE_TEMPORARY; + if (oflag & O_SEQUENTIAL) + flagsAttributes |= FILE_FLAG_SEQUENTIAL_SCAN; + else if (oflag & O_RANDOM) + flagsAttributes |= FILE_FLAG_RANDOM_ACCESS; + if (oflag & O_BACKUP) + flagsAttributes |= FILE_FLAG_BACKUP_SEMANTICS; + if ((fh = CreateFile(path, desiredAccess, shareMode, &securityAttributes, + creationDisposition, flagsAttributes, NULL)) == INVALID_HANDLE_VALUE) { + errno = GetLastError(); + return -1; + } + if (trunc) { + if (!SetEndOfFile(fh)) { + errno = GetLastError(); + CloseHandle(fh); + DeleteFile(path); + return -1; + } + } + return (int)fh; +} + +static int WIN32close(int fd) +{ + if (!CloseHandle((HANDLE)fd)) { + errno = GetLastError(); + return -1; + } + return 0; +} + +static int WIN32read(int fd, void *buf, unsigned int len) +{ + DWORD actualLen; + + if (!ReadFile((HANDLE)fd, buf, (DWORD)len, &actualLen, NULL)) { + errno = GetLastError(); + if (errno == ERROR_BROKEN_PIPE) + return 0; + else + return -1; + } + return (int)actualLen; +} + +static int WIN32write(int fd, void *buf, unsigned int len) +{ + DWORD actualLen; + + if (!WriteFile((HANDLE)fd, buf, (DWORD)len, &actualLen, NULL)) { + errno = GetLastError(); + return -1; + } + return (int)actualLen; +} + +static loff_t WIN32llseek(int fd, loff_t offset, int whence) +{ + long lo, hi; + DWORD err; + + lo = (long)(offset & 0xffffffff); + hi = (long)(offset >> 32); + lo = SetFilePointer((HANDLE)fd, lo, &hi, whence); + if (lo == 0xFFFFFFFF && (err = GetLastError()) != NO_ERROR) { + errno = err; + return -1; + } + return ((loff_t)hi << 32) | (__u32)lo; +} + +int fsctl(int fd, int code) +{ + DWORD ret; + if (!DeviceIoControl((HANDLE)fd, code, NULL, 0, NULL, 0, &ret, NULL)) { + errno = GetLastError(); + return -1; + } + return 0; +} diff --git a/reactos/lib/fslib/vfatlib/check/io.h b/reactos/lib/fslib/vfatlib/check/io.h new file mode 100644 index 00000000000..cdf3c586ec8 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/io.h @@ -0,0 +1,54 @@ +/* io.h - Virtual disk input/output */ + +/* Written 1993 by Werner Almesberger */ + +/* FAT32, VFAT, Atari format support, and various fixes additions May 1998 + * by Roman Hodek */ + + +#ifndef _IO_H +#define _IO_H + +//#include /* for loff_t */ +#include "dosfsck.h" + +/* In earlier versions, an own llseek() was used, but glibc lseek() is + * sufficient (or even better :) for 64 bit offsets in the meantime */ +#define llseek lseek + +void fs_open(char *path,int rw); + +/* Opens the file system PATH. If RW is zero, the file system is opened + read-only, otherwise, it is opened read-write. */ + +void fs_read(loff_t pos,int size,void *data); + +/* Reads SIZE bytes starting at POS into DATA. Performs all applicable + changes. */ + +int fs_test(loff_t pos,int size); + +/* Returns a non-zero integer if SIZE bytes starting at POS can be read without + errors. Otherwise, it returns zero. */ + +void fs_write(loff_t pos,int size,void *data); + +/* If write_immed is non-zero, SIZE bytes are written from DATA to the disk, + starting at POS. If write_immed is zero, the change is added to a list in + memory. */ + +int fs_close(int write); + +/* Closes the file system, performs all pending changes if WRITE is non-zero + and removes the list of changes. Returns a non-zero integer if the file + system has been changed since the last fs_open, zero otherwise. */ + +int fs_changed(void); + +/* Determines whether the file system has changed. See fs_close. */ + +extern unsigned device_no; + +/* Major number of device (0 if file) and size (in 512 byte sectors) */ + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/reactos/lib/fslib/vfatlib/check/lfn.c new file mode 100644 index 00000000000..ba352314c3e --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/lfn.c @@ -0,0 +1,480 @@ +/* lfn.c - Functions for handling VFAT long filenames */ + +/* Written 1998 by Roman Hodek */ + +#include +#include +#include +#include +#include + +#include "common.h" +#include "io.h" +#include "dosfsck.h" +#include "lfn.h" +#include "file.h" + +typedef struct { + __u8 id; /* sequence number for slot */ + __u8 name0_4[10]; /* first 5 characters in name */ + __u8 attr; /* attribute byte */ + __u8 reserved; /* always 0 */ + __u8 alias_checksum; /* checksum for 8.3 alias */ + __u8 name5_10[12]; /* 6 more characters in name */ + __u16 start; /* starting cluster number, 0 in long slots */ + __u8 name11_12[4]; /* last 2 characters in name */ +} LFN_ENT; + +#define LFN_ID_START 0x40 +#define LFN_ID_SLOTMASK 0x1f + +#define CHARS_PER_LFN 13 + +/* These modul-global vars represent the state of the LFN parser */ +unsigned char *lfn_unicode = NULL; +unsigned char lfn_checksum; +int lfn_slot = -1; +loff_t *lfn_offsets = NULL; +int lfn_parts = 0; + +static unsigned char fat_uni2esc[64] = { + '0', '1', '2', '3', '4', '5', '6', '7', + '8', '9', 'A', 'B', 'C', 'D', 'E', 'F', + 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', + 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', + 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', + 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', + 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', + 'u', 'v', 'w', 'x', 'y', 'z', '+', '-' +}; + +/* This defines which unicode chars are directly convertable to ISO-8859-1 */ +#define UNICODE_CONVERTABLE(cl,ch) (ch == 0 && (cl < 0x80 || cl >= 0xa0)) + +/* for maxlen param */ +#define UNTIL_0 INT_MAX + +static void copy_lfn_part( char *dst, LFN_ENT *lfn ); +static char *cnv_unicode( const unsigned char *uni, int maxlen, int use_q ); + +/* Convert name part in 'lfn' from unicode to ASCII */ +static __inline char* CNV_THIS_PART(LFN_ENT *lfn) +{ \ + char __part_uni[CHARS_PER_LFN*2]; + copy_lfn_part( __part_uni, lfn ); + cnv_unicode( __part_uni, CHARS_PER_LFN, 0 ); +} + +/* Convert name parts collected so far (from previous slots) from unicode to + * ASCII */ +#define CNV_PARTS_SO_FAR() \ + (cnv_unicode( lfn_unicode+(lfn_slot*CHARS_PER_LFN*2), \ + lfn_parts*CHARS_PER_LFN, 0 )) + +/* This function converts an unicode string to a normal ASCII string, assuming + * ISO-8859-1 charset. Characters not in 8859-1 are converted to the same + * escape notation as used by the kernel, i.e. the uuencode-like ":xxx" */ +static char *cnv_unicode( const unsigned char *uni, int maxlen, int use_q ) +{ + const unsigned char *up; + unsigned char *out, *cp; + int len, val; + + for( len = 0, up = uni; (up-uni)/2 < maxlen && (up[0] || up[1]); up += 2 ){ + if (UNICODE_CONVERTABLE(up[0],up[1])) + ++len; + else + len += 4; + } + cp = out = use_q ? qalloc( &mem_queue, len+1 ) : alloc( len+1 ); + + for( up = uni; (up-uni)/2 < maxlen && (up[0] || up[1]); up += 2 ) { + if (UNICODE_CONVERTABLE(up[0],up[1])) + *cp++ = up[0]; + else { + /* here the same escape notation is used as in the Linux kernel */ + *cp++ = ':'; + val = (up[1] << 8) + up[0]; + cp[2] = fat_uni2esc[val & 0x3f]; + val >>= 6; + cp[1] = fat_uni2esc[val & 0x3f]; + val >>= 6; + cp[0] = fat_uni2esc[val & 0x3f]; + cp += 3; + } + } + *cp = 0; + + return( out ); +} + + +static void copy_lfn_part( char *dst, LFN_ENT *lfn ) +{ + memcpy( dst, lfn->name0_4, 10 ); + memcpy( dst+10, lfn->name5_10, 12 ); + memcpy( dst+22, lfn->name11_12, 4 ); +} + + +static void clear_lfn_slots( int start, int end ) +{ + int i; + LFN_ENT empty; + + /* New dir entry is zeroed except first byte, which is set to 0xe5. + * This is to avoid that some FAT-reading OSes (not Linux! ;) stop reading + * a directory at the first zero entry... + */ + memset( &empty, 0, sizeof(empty) ); + empty.id = DELETED_FLAG; + + for( i = start; i <= end; ++i ) { + fs_write( lfn_offsets[i], sizeof(LFN_ENT), &empty ); + } +} + +void lfn_reset( void ) +{ + if (lfn_unicode) + free( lfn_unicode ); + lfn_unicode = NULL; + if (lfn_offsets) + free( lfn_offsets ); + lfn_offsets = NULL; + lfn_slot = -1; +} + + +/* This function is only called with de->attr == VFAT_LN_ATTR. It stores part + * of the long name. */ +void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) +{ + LFN_ENT *lfn = (LFN_ENT *)de; + unsigned offset; + + if (de->attr != VFAT_LN_ATTR) + die("lfn_add_slot called with non-LFN directory entry"); + + if (lfn->id & LFN_ID_START) { + if (lfn_slot != -1) { + int can_clear = 0; + /* There is already a LFN "in progess", so it is an error that a + * new start entry is here. */ + /* Causes: 1) if slot# == expected: start bit set mysteriously, 2) + * old LFN overwritten by new one */ + /* Fixes: 1) delete previous LFN 2) if slot# == expected and + * checksum ok: clear start bit */ + /* XXX: Should delay that until next LFN known (then can better + * display the name) */ + printf( "A new long file name starts within an old one.\n" ); + if ((lfn->id & LFN_ID_SLOTMASK) == lfn_slot && + lfn->alias_checksum == lfn_checksum) { + char *part1 = CNV_THIS_PART(lfn); + char *part2 = CNV_PARTS_SO_FAR(); + printf( " It could be that the LFN start bit is wrong here\n" + " if \"%s\" seems to match \"%s\".\n", part1, part2 ); + free( part1 ); + free( part2 ); + can_clear = 1; + } + if (interactive) { + printf( "1: Delete previous LFN\n2: Leave it as it is.\n" ); + if (can_clear) + printf( "3: Clear start bit and concatenate LFNs\n" ); + } + else printf( " Not auto-correcting this.\n" ); + if (interactive) { + switch( get_key( can_clear ? "123" : "12", "?" )) { + case '1': + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + break; + case '2': + break; + case '3': + lfn->id &= ~LFN_ID_START; + fs_write( dir_offset+offsetof(LFN_ENT,id), + sizeof(lfn->id), &lfn->id ); + break; + } + } + } + lfn_slot = lfn->id & LFN_ID_SLOTMASK; + lfn_checksum = lfn->alias_checksum; + lfn_unicode = alloc( (lfn_slot*CHARS_PER_LFN+1)*2 ); + lfn_offsets = alloc( lfn_slot*sizeof(loff_t) ); + lfn_parts = 0; + } + else if (lfn_slot == -1) { + /* No LFN in progress, but slot found; start bit missing */ + /* Causes: 1) start bit got lost, 2) Previous slot with start bit got + * lost */ + /* Fixes: 1) delete LFN, 2) set start bit */ + char *part = CNV_THIS_PART(lfn); + printf( "Long filename fragment \"%s\" found outside a LFN " + "sequence.\n (Maybe the start bit is missing on the " + "last fragment)\n", part ); + if (interactive) { + printf( "1: Delete fragment\n2: Leave it as it is.\n" + "3: Set start bit\n" ); + } + else printf( " Not auto-correcting this.\n" ); + if (interactive) { + switch( get_key( "123", "?" )) { + case '1': + if (!lfn_offsets) + lfn_offsets = alloc( sizeof(loff_t) ); + lfn_offsets[0] = dir_offset; + clear_lfn_slots( 0, 0 ); + lfn_reset(); + return; + case '2': + lfn_reset(); + return; + case '3': + lfn->id |= LFN_ID_START; + fs_write( dir_offset+offsetof(LFN_ENT,id), + sizeof(lfn->id), &lfn->id ); + lfn_slot = lfn->id & LFN_ID_SLOTMASK; + lfn_checksum = lfn->alias_checksum; + lfn_unicode = alloc( (lfn_slot*CHARS_PER_LFN+1)*2 ); + lfn_offsets = alloc( lfn_slot*sizeof(loff_t) ); + lfn_parts = 0; + break; + } + } + } + else if ((lfn->id & LFN_ID_SLOTMASK) != lfn_slot) { + /* wrong sequence number */ + /* Causes: 1) seq-no destroyed */ + /* Fixes: 1) delete LFN, 2) fix number (maybe only if following parts + * are ok?, maybe only if checksum is ok?) (Attention: space + * for name was allocated before!) */ + int can_fix = 0; + printf( "Unexpected long filename sequence number " + "(%d vs. expected %d).\n", + (lfn->id & LFN_ID_SLOTMASK), lfn_slot ); + if (lfn->alias_checksum == lfn_checksum) { + char *part1 = CNV_THIS_PART(lfn); + char *part2 = CNV_PARTS_SO_FAR(); + printf( " It could be that just the number is wrong\n" + " if \"%s\" seems to match \"%s\".\n", part1, part2 ); + free( part1 ); + free( part2 ); + can_fix = 1; + } + if (interactive) { + printf( "1: Delete LFN\n2: Leave it as it is (and ignore LFN so far)\n" ); + if (can_fix) + printf( "3: Correct sequence number\n" ); + } + else printf( " Not auto-correcting this.\n" ); + if (interactive) { + switch( get_key( can_fix ? "123" : "12", "?" )) { + case '1': + lfn_offsets[lfn_parts++] = dir_offset; + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + return; + case '2': + lfn_reset(); + return; + case '3': + lfn->id = (lfn->id & ~LFN_ID_SLOTMASK) | lfn_slot; + fs_write( dir_offset+offsetof(LFN_ENT,id), + sizeof(lfn->id), &lfn->id ); + break; + } + } + } + + if (lfn->alias_checksum != lfn_checksum) { + /* checksum mismatch */ + /* Causes: 1) checksum field here destroyed */ + /* Fixes: 1) delete LFN, 2) fix checksum */ + printf( "Checksum in long filename part wrong " + "(%02x vs. expected %02x).\n", + lfn->alias_checksum, lfn_checksum ); + if (interactive) { + printf( "1: Delete LFN\n2: Leave it as it is.\n" + "3: Correct checksum\n" ); + } + else printf( " Not auto-correcting this.\n" ); + if (interactive) { + switch( get_key( "123", "?" )) { + case '1': + lfn_offsets[lfn_parts++] = dir_offset; + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + return; + case '2': + break; + case '3': + lfn->alias_checksum = lfn_checksum; + fs_write( dir_offset+offsetof(LFN_ENT,alias_checksum), + sizeof(lfn->alias_checksum), &lfn->alias_checksum ); + break; + } + } + } + + if (lfn_slot != -1) { + lfn_slot--; + offset = lfn_slot * CHARS_PER_LFN*2; + copy_lfn_part( lfn_unicode+offset, lfn ); + if (lfn->id & LFN_ID_START) + lfn_unicode[offset+26] = lfn_unicode[offset+27] = 0; + lfn_offsets[lfn_parts++] = dir_offset; + } + + if (lfn->reserved != 0) { + printf( "Reserved field in VFAT long filename slot is not 0 " + "(but 0x%02x).\n", lfn->reserved ); + if (interactive) + printf( "1: Fix.\n2: Leave it.\n" ); + else printf( "Auto-setting to 0.\n" ); + if (!interactive || get_key("12","?") == '1') { + lfn->reserved = 0; + fs_write( dir_offset+offsetof(LFN_ENT,reserved), + sizeof(lfn->reserved), &lfn->reserved ); + } + } + if (lfn->start != CT_LE_W(0)) { + printf( "Start cluster field in VFAT long filename slot is not 0 " + "(but 0x%04x).\n", lfn->start ); + if (interactive) + printf( "1: Fix.\n2: Leave it.\n" ); + else printf( "Auto-setting to 0.\n" ); + if (!interactive || get_key("12","?") == '1') { + lfn->start = CT_LE_W(0); + fs_write( dir_offset+offsetof(LFN_ENT,start), + sizeof(lfn->start),&lfn->start ); + } + } +} + + +/* This function is always called when de->attr != VFAT_LN_ATTR is found, to + * retrieve the previously constructed LFN. */ +char *lfn_get( DIR_ENT *de ) +{ + char *lfn; + __u8 sum; + int i; + + if (de->attr == VFAT_LN_ATTR) + die("lfn_get called with LFN directory entry"); + +#if 0 + if (de->lcase) + printf( "lcase=%02x\n",de->lcase ); +#endif + + if (lfn_slot == -1) + /* no long name for this file */ + return NULL; + + if (lfn_slot != 0) { + /* The long name isn't finished yet. */ + /* Causes: 1) LFN slot overwritten by non-VFAT aware tool */ + /* Fixes: 1) delete LFN 2) move overwriting entry to somewhere else + * and let user enter missing part of LFN (hard to do :-() + * 3) renumber entries and truncate name */ + char *long_name = CNV_PARTS_SO_FAR(); + char *short_name = file_name(de->name); + printf( "Unfinished long file name \"%s\".\n" + " (Start may have been overwritten by %s)\n", + long_name, short_name ); + free( long_name ); + if (interactive) { + printf( "1: Delete LFN\n2: Leave it as it is.\n" + "3: Fix numbering (truncates long name and attaches " + "it to short name %s)\n", short_name ); + } + else printf( " Not auto-correcting this.\n" ); + if (interactive) { + switch( get_key( "123", "?" )) { + case '1': + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + return NULL; + case '2': + lfn_reset(); + return NULL; + case '3': + for( i = 0; i < lfn_parts; ++i ) { + __u8 id = (lfn_parts-i) | (i==0 ? LFN_ID_START : 0); + fs_write( lfn_offsets[i]+offsetof(LFN_ENT,id), + sizeof(id), &id ); + } + memmove( lfn_unicode, lfn_unicode+lfn_slot*CHARS_PER_LFN*2, + lfn_parts*CHARS_PER_LFN*2 ); + break; + } + } + } + + for (sum = 0, i = 0; i < 11; i++) + sum = (((sum&1) << 7) | ((sum&0xfe) >> 1)) + de->name[i]; + if (sum != lfn_checksum) { + /* checksum doesn't match, long name doesn't apply to this alias */ + /* Causes: 1) alias renamed */ + /* Fixes: 1) Fix checksum in LFN entries */ + char *long_name = CNV_PARTS_SO_FAR(); + char *short_name = file_name(de->name); + printf( "Wrong checksum for long file name \"%s\".\n" + " (Short name %s may have changed without updating the long name)\n", + long_name, short_name ); + free( long_name ); + if (interactive) { + printf( "1: Delete LFN\n2: Leave it as it is.\n" + "3: Fix checksum (attaches to short name %s)\n", + short_name ); + } + else printf( " Not auto-correcting this.\n" ); + if (interactive) { + switch( get_key( "123", "?" )) { + case '1': + clear_lfn_slots( 0, lfn_parts-1 ); + lfn_reset(); + return NULL; + case '2': + lfn_reset(); + return NULL; + case '3': + for( i = 0; i < lfn_parts; ++i ) { + fs_write( lfn_offsets[i]+offsetof(LFN_ENT,alias_checksum), + sizeof(sum), &sum ); + } + break; + } + } + } + + lfn = cnv_unicode( lfn_unicode, UNTIL_0, 1 ); + lfn_reset(); + return( lfn ); +} + +void lfn_check_orphaned(void) +{ + char *long_name; + + if (lfn_slot == -1) + return; + + long_name = CNV_PARTS_SO_FAR(); + printf("Orphaned long file name part \"%s\"\n", long_name); + if (interactive) + printf( "1: Delete.\n2: Leave it.\n" ); + else printf( " Auto-deleting.\n" ); + if (!interactive || get_key("12","?") == '1') { + clear_lfn_slots(0, lfn_parts - 1); + } + lfn_reset(); +} + +/* Local Variables: */ +/* tab-width: 8 */ +/* End: */ diff --git a/reactos/lib/fslib/vfatlib/check/lfn.h b/reactos/lib/fslib/vfatlib/check/lfn.h new file mode 100644 index 00000000000..21726ef858b --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/lfn.h @@ -0,0 +1,20 @@ +/* lfn.h - Functions for handling VFAT long filenames */ + +/* Written 1998 by Roman Hodek */ + + +#ifndef _LFN_H +#define _LFN_H + +void lfn_reset( void ); +/* Reset the state of the LFN parser. */ + +void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ); +/* Process a dir slot that is a VFAT LFN entry. */ + +char *lfn_get( DIR_ENT *de ); +/* Retrieve the long name for the proper dir entry. */ + +void lfn_check_orphaned(void); + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/msdos_fs.h b/reactos/lib/fslib/vfatlib/check/msdos_fs.h new file mode 100644 index 00000000000..b955808df9a --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/msdos_fs.h @@ -0,0 +1,182 @@ +#ifndef _LINUX_MSDOS_FS_H +#define _LINUX_MSDOS_FS_H + +/* + * The MS-DOS filesystem constants/structures + */ +#include "byteorder.h" + +#define SECTOR_SIZE 512 /* sector size (bytes) */ +#define SECTOR_BITS 9 /* log2(SECTOR_SIZE) */ +#define MSDOS_DPB (MSDOS_DPS) /* dir entries per block */ +#define MSDOS_DPB_BITS 4 /* log2(MSDOS_DPB) */ +#define MSDOS_DPS (SECTOR_SIZE / sizeof(struct msdos_dir_entry)) +#define MSDOS_DPS_BITS 4 /* log2(MSDOS_DPS) */ +#if 0 +#define CF_LE_W(v) le16_to_cpu(v) +#define CF_LE_L(v) le32_to_cpu(v) +#define CT_LE_W(v) cpu_to_le16(v) +#define CT_LE_L(v) cpu_to_le32(v) +#endif + +#define MSDOS_SUPER_MAGIC 0x4d44 /* MD */ + +#define MSDOS_ROOT_INO 1 /* == MINIX_ROOT_INO */ +#define MSDOS_DIR_BITS 5 /* log2(sizeof(struct msdos_dir_entry)) */ + +/* directory limit */ +#define FAT_MAX_DIR_ENTRIES (65536) +#define FAT_MAX_DIR_SIZE (FAT_MAX_DIR_ENTRIES << MSDOS_DIR_BITS) + +#define ATTR_NONE 0 /* no attribute bits */ +#define ATTR_RO 1 /* read-only */ +#define ATTR_HIDDEN 2 /* hidden */ +#define ATTR_SYS 4 /* system */ +#define ATTR_VOLUME 8 /* volume label */ +#define ATTR_DIR 16 /* directory */ +#define ATTR_ARCH 32 /* archived */ + +/* attribute bits that are copied "as is" */ +#define ATTR_UNUSED (ATTR_VOLUME | ATTR_ARCH | ATTR_SYS | ATTR_HIDDEN) +/* bits that are used by the Windows 95/Windows NT extended FAT */ +#define ATTR_EXT (ATTR_RO | ATTR_HIDDEN | ATTR_SYS | ATTR_VOLUME) + +#define CASE_LOWER_BASE 8 /* base is lower case */ +#define CASE_LOWER_EXT 16 /* extension is lower case */ + +#define DELETED_FLAG 0xe5 /* marks file as deleted when in name[0] */ +#define IS_FREE(n) (!*(n) || *(n) == DELETED_FLAG) + +/* valid file mode bits */ +#define MSDOS_VALID_MODE (S_IFREG | S_IFDIR | S_IRWXU | S_IRWXG | S_IRWXO) +/* Convert attribute bits and a mask to the UNIX mode. */ +#define MSDOS_MKMODE(a, m) (m & (a & ATTR_RO ? S_IRUGO|S_IXUGO : S_IRWXUGO)) + +#define MSDOS_NAME 11 /* maximum name length */ +#define MSDOS_LONGNAME 256 /* maximum name length */ +#define MSDOS_SLOTS 21 /* max # of slots for short and long names */ +#define MSDOS_DOT ". " /* ".", padded to MSDOS_NAME chars */ +#define MSDOS_DOTDOT ".. " /* "..", padded to MSDOS_NAME chars */ + +/* media of boot sector */ +#define FAT_VALID_MEDIA(x) ((0xF8 <= (x) && (x) <= 0xFF) || (x) == 0xF0) +#define FAT_FIRST_ENT(s, x) ((MSDOS_SB(s)->fat_bits == 32 ? 0x0FFFFF00 : \ + MSDOS_SB(s)->fat_bits == 16 ? 0xFF00 : 0xF00) | (x)) + +/* start of data cluster's entry (number of reserved clusters) */ +#define FAT_START_ENT 2 + +/* maximum number of clusters */ +#define MAX_FAT12 0xFF4 +#define MAX_FAT16 0xFFF4 +#define MAX_FAT32 0x0FFFFFF6 +#define MAX_FAT(s) (MSDOS_SB(s)->fat_bits == 32 ? MAX_FAT32 : \ + MSDOS_SB(s)->fat_bits == 16 ? MAX_FAT16 : MAX_FAT12) + +/* bad cluster mark */ +#define BAD_FAT12 0xFF7 +#define BAD_FAT16 0xFFF7 +#define BAD_FAT32 0x0FFFFFF7 + +/* standard EOF */ +#define EOF_FAT12 0xFFF +#define EOF_FAT16 0xFFFF +#define EOF_FAT32 0x0FFFFFFF + +#define FAT_ENT_FREE (0) +#define FAT_ENT_BAD (BAD_FAT32) +#define FAT_ENT_EOF (EOF_FAT32) + +#define FAT_FSINFO_SIG1 0x41615252 +#define FAT_FSINFO_SIG2 0x61417272 +#define IS_FSINFO(x) (le32_to_cpu((x)->signature1) == FAT_FSINFO_SIG1 \ + && le32_to_cpu((x)->signature2) == FAT_FSINFO_SIG2) + +/* + * ioctl commands + */ +#define VFAT_IOCTL_READDIR_BOTH _IOR('r', 1, struct dirent [2]) +#define VFAT_IOCTL_READDIR_SHORT _IOR('r', 2, struct dirent [2]) +/* has used 0x72 ('r') in collision, so skip a few */ +#define FAT_IOCTL_GET_ATTRIBUTES _IOR('r', 0x10, __u32) +#define FAT_IOCTL_SET_ATTRIBUTES _IOW('r', 0x11, __u32) + +/* + * vfat shortname flags + */ +#define VFAT_SFN_DISPLAY_LOWER 0x0001 /* convert to lowercase for display */ +#define VFAT_SFN_DISPLAY_WIN95 0x0002 /* emulate win95 rule for display */ +#define VFAT_SFN_DISPLAY_WINNT 0x0004 /* emulate winnt rule for display */ +#define VFAT_SFN_CREATE_WIN95 0x0100 /* emulate win95 rule for create */ +#define VFAT_SFN_CREATE_WINNT 0x0200 /* emulate winnt rule for create */ + +struct fat_boot_sector { + __u8 ignored[3]; /* Boot strap short or near jump */ + __u8 system_id[8]; /* Name - can be used to special case + partition manager volumes */ + __u8 sector_size[2]; /* bytes per logical sector */ + __u8 sec_per_clus; /* sectors/cluster */ + __le16 reserved; /* reserved sectors */ + __u8 fats; /* number of FATs */ + __u8 dir_entries[2]; /* root directory entries */ + __u8 sectors[2]; /* number of sectors */ + __u8 media; /* media code */ + __le16 fat_length; /* sectors/FAT */ + __le16 secs_track; /* sectors per track */ + __le16 heads; /* number of heads */ + __le32 hidden; /* hidden sectors (unused) */ + __le32 total_sect; /* number of sectors (if sectors == 0) */ + + /* The following fields are only used by FAT32 */ + __le32 fat32_length; /* sectors/FAT */ + __le16 flags; /* bit 8: fat mirroring, low 4: active fat */ + __u8 version[2]; /* major, minor filesystem version */ + __le32 root_cluster; /* first cluster in root directory */ + __le16 info_sector; /* filesystem info sector */ + __le16 backup_boot; /* backup boot sector */ + __le16 reserved2[6]; /* Unused */ +}; + +struct fat_boot_fsinfo { + __le32 signature1; /* 0x41615252L */ + __le32 reserved1[120]; /* Nothing as far as I can tell */ + __le32 signature2; /* 0x61417272L */ + __le32 free_clusters; /* Free cluster count. -1 if unknown */ + __le32 next_cluster; /* Most recently allocated cluster */ + __le32 reserved2[4]; +}; + +struct msdos_dir_entry { + __u8 name[8],ext[3]; /* name and extension */ + __u8 attr; /* attribute bits */ + __u8 lcase; /* Case for base and extension */ + __u8 ctime_cs; /* Creation time, centiseconds (0-199) */ + __le16 ctime; /* Creation time */ + __le16 cdate; /* Creation date */ + __le16 adate; /* Last access date */ + __le16 starthi; /* High 16 bits of cluster in FAT32 */ + __le16 time,date,start;/* time, date and first cluster */ + __le32 size; /* file size (in bytes) */ +}; + +/* Up to 13 characters of the name */ +struct msdos_dir_slot { + __u8 id; /* sequence number for slot */ + __u8 name0_4[10]; /* first 5 characters in name */ + __u8 attr; /* attribute byte */ + __u8 reserved; /* always 0 */ + __u8 alias_checksum; /* checksum for 8.3 alias */ + __u8 name5_10[12]; /* 6 more characters in name */ + __le16 start; /* starting cluster number, 0 in long slots */ + __u8 name11_12[4]; /* last 2 characters in name */ +}; + +struct fat_slot_info { + loff_t i_pos; /* on-disk position of directory entry */ + loff_t slot_off; /* offset for slot or de start */ + int nr_slots; /* number of slots + 1(de) in filename */ + struct msdos_dir_entry *de; + struct buffer_head *bh; +}; + +#endif diff --git a/reactos/lib/fslib/vfatlib/check/swab.h b/reactos/lib/fslib/vfatlib/check/swab.h new file mode 100644 index 00000000000..31bd29157f0 --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/swab.h @@ -0,0 +1,192 @@ +#ifndef _LINUX_BYTEORDER_SWAB_H +#define _LINUX_BYTEORDER_SWAB_H + +/* + * linux/byteorder/swab.h + * Byte-swapping, independently from CPU endianness + * swabXX[ps]?(foo) + * + * Francois-Rene Rideau 19971205 + * separated swab functions from cpu_to_XX, + * to clean up support for bizarre-endian architectures. + * + * See asm-i386/byteorder.h and suches for examples of how to provide + * architecture-dependent optimized versions + * + */ + +#include "compiler.h" + +/* casts are necessary for constants, because we never know how for sure + * how U/UL/ULL map to __u16, __u32, __u64. At least not in a portable way. + */ +#define ___swab16(x) \ +({ \ + __u16 __x = (x); \ + ((__u16)( \ + (((__u16)(__x) & (__u16)0x00ffU) << 8) | \ + (((__u16)(__x) & (__u16)0xff00U) >> 8) )); \ +}) + +#define ___swab32(x) \ +({ \ + __u32 __x = (x); \ + ((__u32)( \ + (((__u32)(__x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(__x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(__x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(__x) & (__u32)0xff000000UL) >> 24) )); \ +}) + +#define ___swab64(x) \ +({ \ + __u64 __x = (x); \ + ((__u64)( \ + (__u64)(((__u64)(__x) & (__u64)0x00000000000000ffULL) << 56) | \ + (__u64)(((__u64)(__x) & (__u64)0x000000000000ff00ULL) << 40) | \ + (__u64)(((__u64)(__x) & (__u64)0x0000000000ff0000ULL) << 24) | \ + (__u64)(((__u64)(__x) & (__u64)0x00000000ff000000ULL) << 8) | \ + (__u64)(((__u64)(__x) & (__u64)0x000000ff00000000ULL) >> 8) | \ + (__u64)(((__u64)(__x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + (__u64)(((__u64)(__x) & (__u64)0x00ff000000000000ULL) >> 40) | \ + (__u64)(((__u64)(__x) & (__u64)0xff00000000000000ULL) >> 56) )); \ +}) + +#define ___constant_swab16(x) \ + ((__u16)( \ + (((__u16)(x) & (__u16)0x00ffU) << 8) | \ + (((__u16)(x) & (__u16)0xff00U) >> 8) )) +#define ___constant_swab32(x) \ + ((__u32)( \ + (((__u32)(x) & (__u32)0x000000ffUL) << 24) | \ + (((__u32)(x) & (__u32)0x0000ff00UL) << 8) | \ + (((__u32)(x) & (__u32)0x00ff0000UL) >> 8) | \ + (((__u32)(x) & (__u32)0xff000000UL) >> 24) )) +#define ___constant_swab64(x) \ + ((__u64)( \ + (__u64)(((__u64)(x) & (__u64)0x00000000000000ffULL) << 56) | \ + (__u64)(((__u64)(x) & (__u64)0x000000000000ff00ULL) << 40) | \ + (__u64)(((__u64)(x) & (__u64)0x0000000000ff0000ULL) << 24) | \ + (__u64)(((__u64)(x) & (__u64)0x00000000ff000000ULL) << 8) | \ + (__u64)(((__u64)(x) & (__u64)0x000000ff00000000ULL) >> 8) | \ + (__u64)(((__u64)(x) & (__u64)0x0000ff0000000000ULL) >> 24) | \ + (__u64)(((__u64)(x) & (__u64)0x00ff000000000000ULL) >> 40) | \ + (__u64)(((__u64)(x) & (__u64)0xff00000000000000ULL) >> 56) )) + +/* + * provide defaults when no architecture-specific optimization is detected + */ +#ifndef __arch__swab16 +# define __arch__swab16(x) ({ __u16 __tmp = (x) ; ___swab16(__tmp); }) +#endif +#ifndef __arch__swab32 +# define __arch__swab32(x) ({ __u32 __tmp = (x) ; ___swab32(__tmp); }) +#endif +#ifndef __arch__swab64 +# define __arch__swab64(x) ({ __u64 __tmp = (x) ; ___swab64(__tmp); }) +#endif + +#ifndef __arch__swab16p +# define __arch__swab16p(x) __arch__swab16(*(x)) +#endif +#ifndef __arch__swab32p +# define __arch__swab32p(x) __arch__swab32(*(x)) +#endif +#ifndef __arch__swab64p +# define __arch__swab64p(x) __arch__swab64(*(x)) +#endif + +#ifndef __arch__swab16s +# define __arch__swab16s(x) do { *(x) = __arch__swab16p((x)); } while (0) +#endif +#ifndef __arch__swab32s +# define __arch__swab32s(x) do { *(x) = __arch__swab32p((x)); } while (0) +#endif +#ifndef __arch__swab64s +# define __arch__swab64s(x) do { *(x) = __arch__swab64p((x)); } while (0) +#endif + + +/* + * Allow constant folding + */ +#if defined(__GNUC__) && (__GNUC__ >= 2) && defined(__OPTIMIZE__) +# define __swab16(x) \ +(__builtin_constant_p((__u16)(x)) ? \ + ___swab16((x)) : \ + __fswab16((x))) +# define __swab32(x) \ +(__builtin_constant_p((__u32)(x)) ? \ + ___swab32((x)) : \ + __fswab32((x))) +# define __swab64(x) \ +(__builtin_constant_p((__u64)(x)) ? \ + ___swab64((x)) : \ + __fswab64((x))) +#else +# define __swab16(x) __fswab16(x) +# define __swab32(x) __fswab32(x) +# define __swab64(x) __fswab64(x) +#endif /* OPTIMIZE */ + + +static __inline__ __attribute_const__ __u16 __fswab16(__u16 x) +{ + return __arch__swab16(x); +} +static __inline__ __u16 __swab16p(const __u16 *x) +{ + return __arch__swab16p(x); +} +static __inline__ void __swab16s(__u16 *addr) +{ + __arch__swab16s(addr); +} + +static __inline__ __attribute_const__ __u32 __fswab32(__u32 x) +{ + return __arch__swab32(x); +} +static __inline__ __u32 __swab32p(const __u32 *x) +{ + return __arch__swab32p(x); +} +static __inline__ void __swab32s(__u32 *addr) +{ + __arch__swab32s(addr); +} + +#ifdef __BYTEORDER_HAS_U64__ +static __inline__ __attribute_const__ __u64 __fswab64(__u64 x) +{ +# ifdef __SWAB_64_THRU_32__ + __u32 h = x >> 32; + __u32 l = x & ((1ULL<<32)-1); + return (((__u64)__swab32(l)) << 32) | ((__u64)(__swab32(h))); +# else + return __arch__swab64(x); +# endif +} +static __inline__ __u64 __swab64p(const __u64 *x) +{ + return __arch__swab64p(x); +} +static __inline__ void __swab64s(__u64 *addr) +{ + __arch__swab64s(addr); +} +#endif /* __BYTEORDER_HAS_U64__ */ + +#if defined(__KERNEL__) +#define swab16 __swab16 +#define swab32 __swab32 +#define swab64 __swab64 +#define swab16p __swab16p +#define swab32p __swab32p +#define swab64p __swab64p +#define swab16s __swab16s +#define swab32s __swab32s +#define swab64s __swab64s +#endif + +#endif /* _LINUX_BYTEORDER_SWAB_H */ diff --git a/reactos/lib/fslib/vfatlib/check/version.h b/reactos/lib/fslib/vfatlib/check/version.h new file mode 100644 index 00000000000..4ef269483fe --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/version.h @@ -0,0 +1,8 @@ +#ifndef _version_h +#define _version_h + +#define VERSION "2.8" +#define VERSION_DATE "28 Feb 2001" + +#endif /* _version_h */ + diff --git a/reactos/lib/fslib/vfatlib/check/vfat.h b/reactos/lib/fslib/vfatlib/check/vfat.h new file mode 100755 index 00000000000..72953d8216b --- /dev/null +++ b/reactos/lib/fslib/vfatlib/check/vfat.h @@ -0,0 +1,744 @@ +/* $Id: vfat.h 16656 2005-07-20 02:52:52Z ion $ */ + +#include +#include +#include +#include +#include +#include +#include + +#define USE_ROS_CC_AND_FS + +#include +struct _BootSector +{ + unsigned char magic0, res0, magic1; + unsigned char OEMName[8]; + unsigned short BytesPerSector; + unsigned char SectorsPerCluster; + unsigned short ReservedSectors; + unsigned char FATCount; + unsigned short RootEntries, Sectors; + unsigned char Media; + unsigned short FATSectors, SectorsPerTrack, Heads; + unsigned long HiddenSectors, SectorsHuge; + unsigned char Drive, Res1, Sig; + unsigned long VolumeID; + unsigned char VolumeLabel[11], SysType[8]; + unsigned char Res2[448]; + unsigned short Signatur1; +}; + +struct _BootSector32 +{ + unsigned char magic0, res0, magic1; // 0 + unsigned char OEMName[8]; // 3 + unsigned short BytesPerSector; // 11 + unsigned char SectorsPerCluster; // 13 + unsigned short ReservedSectors; // 14 + unsigned char FATCount; // 16 + unsigned short RootEntries, Sectors; // 17 + unsigned char Media; // 21 + unsigned short FATSectors, SectorsPerTrack, Heads; // 22 + unsigned long HiddenSectors, SectorsHuge; // 28 + unsigned long FATSectors32; // 36 + unsigned short ExtFlag; // 40 + unsigned short FSVersion; // 42 + unsigned long RootCluster; // 44 + unsigned short FSInfoSector; // 48 + unsigned short BootBackup; // 50 + unsigned char Res3[12]; // 52 + unsigned char Drive; // 64 + unsigned char Res4; // 65 + unsigned char ExtBootSignature; // 66 + unsigned long VolumeID; // 67 + unsigned char VolumeLabel[11], SysType[8]; // 71 + unsigned char Res2[420]; // 90 + unsigned short Signature1; // 510 +}; + +struct _BootSectorFatX +{ + unsigned char SysType[4]; // 0 + unsigned long VolumeID; // 4 + unsigned long SectorsPerCluster; // 8 + unsigned short FATCount; // 12 + unsigned long Unknown; // 14 + unsigned char Unused[4078]; // 18 +}; + +struct _FsInfoSector +{ + unsigned long ExtBootSignature2; // 0 + unsigned char Res6[480]; // 4 + unsigned long FSINFOSignature; // 484 + unsigned long FreeCluster; // 488 + unsigned long NextCluster; // 492 + unsigned char Res7[12]; // 496 + unsigned long Signatur2; // 508 +}; + +typedef struct _BootSector BootSector; + +struct _FATDirEntry +{ + union + { + struct { unsigned char Filename[8], Ext[3]; }; + unsigned char ShortName[11]; + }; + unsigned char Attrib; + unsigned char lCase; + unsigned char CreationTimeMs; + unsigned short CreationTime,CreationDate,AccessDate; + unsigned short FirstClusterHigh; // higher + unsigned short UpdateTime; //time create/update + unsigned short UpdateDate; //date create/update + unsigned short FirstCluster; + unsigned long FileSize; +}; + +typedef struct _FATDirEntry FAT_DIR_ENTRY, *PFAT_DIR_ENTRY; + +struct _FATXDirEntry +{ + unsigned char FilenameLength; // 0 + unsigned char Attrib; // 1 + unsigned char Filename[42]; // 2 + unsigned long FirstCluster; // 44 + unsigned long FileSize; // 48 + unsigned short UpdateTime; // 52 + unsigned short UpdateDate; // 54 + unsigned short CreationTime; // 56 + unsigned short CreationDate; // 58 + unsigned short AccessTime; // 60 + unsigned short AccessDate; // 62 +}; + +struct _slot +{ + unsigned char id; // sequence number for slot + WCHAR name0_4[5]; // first 5 characters in name + unsigned char attr; // attribute byte + unsigned char reserved; // always 0 + unsigned char alias_checksum; // checksum for 8.3 alias + WCHAR name5_10[6]; // 6 more characters in name + unsigned char start[2]; // starting cluster number + WCHAR name11_12[2]; // last 2 characters in name +}; + +typedef struct _slot slot; + +#include + +#define VFAT_CASE_LOWER_BASE 8 // base is lower case +#define VFAT_CASE_LOWER_EXT 16 // extension is lower case + +#define LONGNAME_MAX_LENGTH 256 // max length for a long filename + +#define ENTRY_DELETED(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_DELETED(&((DirEntry)->FatX)) : FAT_ENTRY_DELETED(&((DirEntry)->Fat))) +#define ENTRY_VOLUME(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_VOLUME(&((DirEntry)->FatX)) : FAT_ENTRY_VOLUME(&((DirEntry)->Fat))) +#define ENTRY_END(DeviceExt, DirEntry) ((DeviceExt)->Flags & VCB_IS_FATX ? FATX_ENTRY_END(&((DirEntry)->FatX)) : FAT_ENTRY_END(&((DirEntry)->Fat))) + +#define FAT_ENTRY_DELETED(DirEntry) ((DirEntry)->Filename[0] == 0xe5) +#define FAT_ENTRY_END(DirEntry) ((DirEntry)->Filename[0] == 0) +#define FAT_ENTRY_LONG(DirEntry) (((DirEntry)->Attrib & 0x3f) == 0x0f) +#define FAT_ENTRY_VOLUME(DirEntry) (((DirEntry)->Attrib & 0x1f) == 0x08) + +#define FATX_ENTRY_DELETED(DirEntry) ((DirEntry)->FilenameLength == 0xe5) +#define FATX_ENTRY_END(DirEntry) ((DirEntry)->FilenameLength == 0xff) +#define FATX_ENTRY_LONG(DirEntry) (FALSE) +#define FATX_ENTRY_VOLUME(DirEntry) (((DirEntry)->Attrib & 0x1f) == 0x08) + +#define FAT_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof (FAT_DIR_ENTRY)) +#define FATX_ENTRIES_PER_PAGE (PAGE_SIZE / sizeof (FATX_DIR_ENTRY)) + +typedef struct _FATXDirEntry FATX_DIR_ENTRY, *PFATX_DIR_ENTRY; + +union _DIR_ENTRY +{ + FAT_DIR_ENTRY Fat; + FATX_DIR_ENTRY FatX; +}; + +typedef union _DIR_ENTRY DIR_ENTRY, *PDIR_ENTRY; + +#define BLOCKSIZE 512 + +#define FAT16 (1) +#define FAT12 (2) +#define FAT32 (3) +#define FATX16 (4) +#define FATX32 (5) + +#define VCB_VOLUME_LOCKED 0x0001 +#define VCB_DISMOUNT_PENDING 0x0002 +#define VCB_IS_FATX 0x0004 +#define VCB_IS_DIRTY 0x4000 /* Volume is dirty */ +#define VCB_CLEAR_DIRTY 0x8000 /* Clean dirty flag at shutdown */ + +typedef struct +{ + ULONG VolumeID; + ULONG FATStart; + ULONG FATCount; + ULONG FATSectors; + ULONG rootDirectorySectors; + ULONG rootStart; + ULONG dataStart; + ULONG RootCluster; + ULONG SectorsPerCluster; + ULONG BytesPerSector; + ULONG BytesPerCluster; + ULONG NumberOfClusters; + ULONG FatType; + ULONG Sectors; + BOOLEAN FixedMedia; +} FATINFO, *PFATINFO; + +struct _VFATFCB; +struct _VFAT_DIRENTRY_CONTEXT; + +typedef struct _HASHENTRY +{ + ULONG Hash; + struct _VFATFCB* self; + struct _HASHENTRY* next; +} +HASHENTRY; + +#define FCB_HASH_TABLE_SIZE 65536 + +typedef struct DEVICE_EXTENSION *PDEVICE_EXTENSION; + +typedef NTSTATUS (*PGET_NEXT_CLUSTER)(PDEVICE_EXTENSION,ULONG,PULONG); +typedef NTSTATUS (*PFIND_AND_MARK_AVAILABLE_CLUSTER)(PDEVICE_EXTENSION,PULONG); +typedef NTSTATUS (*PWRITE_CLUSTER)(PDEVICE_EXTENSION,ULONG,ULONG,PULONG); + +typedef NTSTATUS (*PGET_NEXT_DIR_ENTRY)(PVOID*,PVOID*,struct _VFATFCB*,struct _VFAT_DIRENTRY_CONTEXT*,BOOLEAN); + +typedef struct DEVICE_EXTENSION +{ + ERESOURCE DirResource; + ERESOURCE FatResource; + + KSPIN_LOCK FcbListLock; + LIST_ENTRY FcbListHead; + ULONG HashTableSize; + struct _HASHENTRY** FcbHashTable; + + PDEVICE_OBJECT StorageDevice; + PFILE_OBJECT FATFileObject; + FATINFO FatInfo; + ULONG LastAvailableCluster; + ULONG AvailableClusters; + BOOLEAN AvailableClustersValid; + ULONG Flags; + struct _VFATFCB * VolumeFcb; + + /* Pointers to functions for manipulating FAT. */ + PGET_NEXT_CLUSTER GetNextCluster; + PFIND_AND_MARK_AVAILABLE_CLUSTER FindAndMarkAvailableCluster; + PWRITE_CLUSTER WriteCluster; + ULONG CleanShutBitMask; + + /* Pointers to functions for manipulating directory entries. */ + PGET_NEXT_DIR_ENTRY GetNextDirEntry; + + ULONG BaseDateYear; + + LIST_ENTRY VolumeListEntry; +} DEVICE_EXTENSION, VCB, *PVCB; + +typedef struct +{ + PDRIVER_OBJECT DriverObject; + PDEVICE_OBJECT DeviceObject; + ULONG Flags; + ERESOURCE VolumeListLock; + LIST_ENTRY VolumeListHead; + NPAGED_LOOKASIDE_LIST FcbLookasideList; + NPAGED_LOOKASIDE_LIST CcbLookasideList; + NPAGED_LOOKASIDE_LIST IrpContextLookasideList; + FAST_IO_DISPATCH FastIoDispatch; + CACHE_MANAGER_CALLBACKS CacheMgrCallbacks; +} VFAT_GLOBAL_DATA, *PVFAT_GLOBAL_DATA; + +extern PVFAT_GLOBAL_DATA VfatGlobalData; + +#define FCB_CACHE_INITIALIZED 0x0001 +#define FCB_DELETE_PENDING 0x0002 +#define FCB_IS_FAT 0x0004 +#define FCB_IS_PAGE_FILE 0x0008 +#define FCB_IS_VOLUME 0x0010 +#define FCB_IS_DIRTY 0x0020 +#define FCB_IS_FATX_ENTRY 0x0040 + +typedef struct _VFATFCB +{ + /* FCB header required by ROS/NT */ + FSRTL_COMMON_FCB_HEADER RFCB; + SECTION_OBJECT_POINTERS SectionObjectPointers; + ERESOURCE MainResource; + ERESOURCE PagingIoResource; + /* end FCB header required by ROS/NT */ + + /* directory entry for this file or directory */ + DIR_ENTRY entry; + + /* Pointer to attributes in entry */ + PUCHAR Attributes; + + /* long file name, points into PathNameBuffer */ + UNICODE_STRING LongNameU; + + /* short file name */ + UNICODE_STRING ShortNameU; + + /* directory name, points into PathNameBuffer */ + UNICODE_STRING DirNameU; + + /* path + long file name 260 max*/ + UNICODE_STRING PathNameU; + + /* buffer for PathNameU */ + PWCHAR PathNameBuffer; + + /* buffer for ShortNameU */ + WCHAR ShortNameBuffer[13]; + + /* */ + LONG RefCount; + + /* List of FCB's for this volume */ + LIST_ENTRY FcbListEntry; + + /* pointer to the parent fcb */ + struct _VFATFCB* parentFcb; + + /* Flags for the fcb */ + ULONG Flags; + + /* pointer to the file object which has initialized the fcb */ + PFILE_OBJECT FileObject; + + /* Directory index for the short name entry */ + ULONG dirIndex; + + /* Directory index where the long name starts */ + ULONG startIndex; + + /* Share access for the file object */ + SHARE_ACCESS FCBShareAccess; + + /* Incremented on IRP_MJ_CREATE, decremented on IRP_MJ_CLEANUP */ + ULONG OpenHandleCount; + + /* Entry into the hash table for the path + long name */ + HASHENTRY Hash; + + /* Entry into the hash table for the path + short name */ + HASHENTRY ShortHash; + + /* List of byte-range locks for this file */ + FILE_LOCK FileLock; + + /* + * Optimalization: caching of last read/write cluster+offset pair. Can't + * be in VFATCCB because it must be reset everytime the allocated clusters + * change. + */ + FAST_MUTEX LastMutex; + ULONG LastCluster; + ULONG LastOffset; +} VFATFCB, *PVFATFCB; + +typedef struct _VFATCCB +{ + LARGE_INTEGER CurrentByteOffset; + /* for DirectoryControl */ + ULONG Entry; + /* for DirectoryControl */ + UNICODE_STRING SearchPattern; +} VFATCCB, *PVFATCCB; + +#ifndef TAG +#define TAG(A, B, C, D) (ULONG)(((A)<<0) + ((B)<<8) + ((C)<<16) + ((D)<<24)) +#endif + +#define TAG_CCB TAG('V', 'C', 'C', 'B') +#define TAG_FCB TAG('V', 'F', 'C', 'B') +#define TAG_IRP TAG('V', 'I', 'R', 'P') + +#define ENTRIES_PER_SECTOR (BLOCKSIZE / sizeof(FATDirEntry)) + +typedef struct __DOSTIME +{ + USHORT Second:5; + USHORT Minute:6; + USHORT Hour:5; +} +DOSTIME, *PDOSTIME; + +typedef struct __DOSDATE +{ + USHORT Day:5; + USHORT Month:4; + USHORT Year:5; +} +DOSDATE, *PDOSDATE; + +#define IRPCONTEXT_CANWAIT 0x0001 +#define IRPCONTEXT_PENDINGRETURNED 0x0002 + +typedef struct +{ + PIRP Irp; + PDEVICE_OBJECT DeviceObject; + PDEVICE_EXTENSION DeviceExt; + ULONG Flags; + WORK_QUEUE_ITEM WorkQueueItem; + PIO_STACK_LOCATION Stack; + UCHAR MajorFunction; + UCHAR MinorFunction; + PFILE_OBJECT FileObject; + ULONG RefCount; + KEVENT Event; +} VFAT_IRP_CONTEXT, *PVFAT_IRP_CONTEXT; + +typedef struct _VFAT_DIRENTRY_CONTEXT +{ + ULONG StartIndex; + ULONG DirIndex; + DIR_ENTRY DirEntry; + UNICODE_STRING LongNameU; + UNICODE_STRING ShortNameU; +} VFAT_DIRENTRY_CONTEXT, *PVFAT_DIRENTRY_CONTEXT; + + +/* ------------------------------------------------------ shutdown.c */ + +NTSTATUS STDCALL VfatShutdown (PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +/* -------------------------------------------------------- volume.c */ + +NTSTATUS VfatQueryVolumeInformation (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatSetVolumeInformation (PVFAT_IRP_CONTEXT IrpContext); + +/* ------------------------------------------------------ blockdev.c */ + +NTSTATUS VfatReadDisk(IN PDEVICE_OBJECT pDeviceObject, + IN PLARGE_INTEGER ReadOffset, + IN ULONG ReadLength, + IN PUCHAR Buffer, + IN BOOLEAN Override); + +NTSTATUS VfatReadDiskPartial (IN PVFAT_IRP_CONTEXT IrpContext, + IN PLARGE_INTEGER ReadOffset, + IN ULONG ReadLength, + IN ULONG BufferOffset, + IN BOOLEAN Wait); + +NTSTATUS VfatWriteDiskPartial(IN PVFAT_IRP_CONTEXT IrpContext, + IN PLARGE_INTEGER WriteOffset, + IN ULONG WriteLength, + IN ULONG BufferOffset, + IN BOOLEAN Wait); + +NTSTATUS VfatBlockDeviceIoControl (IN PDEVICE_OBJECT DeviceObject, + IN ULONG CtlCode, + IN PVOID InputBuffer, + IN ULONG InputBufferSize, + IN OUT PVOID OutputBuffer, + IN OUT PULONG pOutputBufferSize, + IN BOOLEAN Override); + +/* ----------------------------------------------------------- dir.c */ + +NTSTATUS VfatDirectoryControl (PVFAT_IRP_CONTEXT); + +BOOLEAN FsdDosDateTimeToSystemTime (PDEVICE_EXTENSION DeviceExt, + USHORT DosDate, + USHORT DosTime, + PLARGE_INTEGER SystemTime); + +BOOLEAN FsdSystemTimeToDosDateTime (PDEVICE_EXTENSION DeviceExt, + PLARGE_INTEGER SystemTime, + USHORT *pDosDate, + USHORT *pDosTime); + +/* -------------------------------------------------------- create.c */ + +NTSTATUS VfatCreate (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatOpenFile (PDEVICE_EXTENSION DeviceExt, + PFILE_OBJECT FileObject, + PVFATFCB* parentFcb); + +NTSTATUS FindFile (PDEVICE_EXTENSION DeviceExt, + PVFATFCB Parent, + PUNICODE_STRING FileToFindU, + PVFAT_DIRENTRY_CONTEXT DirContext, + BOOLEAN First); + +VOID vfat8Dot3ToString (PFAT_DIR_ENTRY pEntry, + PUNICODE_STRING NameU); + +NTSTATUS ReadVolumeLabel(PDEVICE_EXTENSION DeviceExt, + PVPB Vpb); + +/* --------------------------------------------------------- close.c */ + +NTSTATUS VfatClose (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatCloseFile(PDEVICE_EXTENSION DeviceExt, + PFILE_OBJECT FileObject); + +/* ------------------------------------------------------- cleanup.c */ + +NTSTATUS VfatCleanup (PVFAT_IRP_CONTEXT IrpContext); + +/* --------------------------------------------------------- fastio.c */ + +VOID +VfatInitFastIoRoutines(PFAST_IO_DISPATCH FastIoDispatch); + +BOOLEAN NTAPI +VfatAcquireForLazyWrite(IN PVOID Context, + IN BOOLEAN Wait); + +VOID NTAPI +VfatReleaseFromLazyWrite(IN PVOID Context); + +BOOLEAN NTAPI +VfatAcquireForReadAhead(IN PVOID Context, + IN BOOLEAN Wait); + +VOID NTAPI +VfatReleaseFromReadAhead(IN PVOID Context); + +/* --------------------------------------------------------- fsctl.c */ + +NTSTATUS VfatFileSystemControl (PVFAT_IRP_CONTEXT IrpContext); + +/* --------------------------------------------------------- finfo.c */ + +NTSTATUS VfatQueryInformation (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatSetInformation (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS +VfatSetAllocationSizeInformation(PFILE_OBJECT FileObject, + PVFATFCB Fcb, + PDEVICE_EXTENSION DeviceExt, + PLARGE_INTEGER AllocationSize); + +/* --------------------------------------------------------- iface.c */ + +NTSTATUS STDCALL DriverEntry (PDRIVER_OBJECT DriverObject, + PUNICODE_STRING RegistryPath); + +/* --------------------------------------------------------- dirwr.c */ + +NTSTATUS VfatAddEntry (PDEVICE_EXTENSION DeviceExt, + PUNICODE_STRING PathNameU, + PVFATFCB* Fcb, + PVFATFCB ParentFcb, + ULONG RequestedOptions, + UCHAR ReqAttr); + +NTSTATUS VfatUpdateEntry (PVFATFCB pFcb); + +NTSTATUS VfatDelEntry(PDEVICE_EXTENSION, PVFATFCB); + +BOOLEAN +vfatFindDirSpace(PDEVICE_EXTENSION DeviceExt, + PVFATFCB pDirFcb, + ULONG nbSlots, + PULONG start); + +/* -------------------------------------------------------- string.c */ + +VOID +vfatSplitPathName(PUNICODE_STRING PathNameU, + PUNICODE_STRING DirNameU, + PUNICODE_STRING FileNameU); + +BOOLEAN vfatIsLongIllegal(WCHAR c); + +BOOLEAN wstrcmpjoki (PWSTR s1, + PWSTR s2); + +/* ----------------------------------------------------------- fat.c */ + +NTSTATUS FAT12GetNextCluster(PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS FAT12FindAndMarkAvailableCluster(PDEVICE_EXTENSION DeviceExt, + PULONG Cluster); + +NTSTATUS FAT12WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue, + PULONG OldValue); + +NTSTATUS FAT16GetNextCluster(PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS FAT16FindAndMarkAvailableCluster(PDEVICE_EXTENSION DeviceExt, + PULONG Cluster); + +NTSTATUS FAT16WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue, + PULONG OldValue); + +NTSTATUS FAT32GetNextCluster(PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS FAT32FindAndMarkAvailableCluster(PDEVICE_EXTENSION DeviceExt, + PULONG Cluster); + +NTSTATUS FAT32WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue, + PULONG OldValue); + +NTSTATUS OffsetToCluster (PDEVICE_EXTENSION DeviceExt, + ULONG FirstCluster, + ULONG FileOffset, + PULONG Cluster, + BOOLEAN Extend); + +ULONGLONG ClusterToSector (PDEVICE_EXTENSION DeviceExt, + ULONG Cluster); + +NTSTATUS GetNextCluster (PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS GetNextClusterExtend (PDEVICE_EXTENSION DeviceExt, + ULONG CurrentCluster, + PULONG NextCluster); + +NTSTATUS CountAvailableClusters (PDEVICE_EXTENSION DeviceExt, + PLARGE_INTEGER Clusters); + +NTSTATUS +WriteCluster(PDEVICE_EXTENSION DeviceExt, + ULONG ClusterToWrite, + ULONG NewValue); + +/* ------------------------------------------------------ direntry.c */ + +ULONG vfatDirEntryGetFirstCluster (PDEVICE_EXTENSION pDeviceExt, + PDIR_ENTRY pDirEntry); + +BOOLEAN VfatIsDirectoryEmpty(PVFATFCB Fcb); + +NTSTATUS FATGetNextDirEntry(PVOID * pContext, + PVOID * pPage, + IN PVFATFCB pDirFcb, + IN PVFAT_DIRENTRY_CONTEXT DirContext, + BOOLEAN First); + +NTSTATUS FATXGetNextDirEntry(PVOID * pContext, + PVOID * pPage, + IN PVFATFCB pDirFcb, + IN PVFAT_DIRENTRY_CONTEXT DirContext, + BOOLEAN First); + +/* ----------------------------------------------------------- fcb.c */ + +PVFATFCB vfatNewFCB (PDEVICE_EXTENSION pVCB, + PUNICODE_STRING pFileNameU); + +VOID vfatDestroyFCB (PVFATFCB pFCB); + +VOID vfatDestroyCCB(PVFATCCB pCcb); + +VOID vfatGrabFCB (PDEVICE_EXTENSION pVCB, + PVFATFCB pFCB); + +VOID vfatReleaseFCB (PDEVICE_EXTENSION pVCB, + PVFATFCB pFCB); + +VOID vfatAddFCBToTable (PDEVICE_EXTENSION pVCB, + PVFATFCB pFCB); + +PVFATFCB vfatGrabFCBFromTable (PDEVICE_EXTENSION pDeviceExt, + PUNICODE_STRING pFileNameU); + +PVFATFCB vfatMakeRootFCB (PDEVICE_EXTENSION pVCB); + +PVFATFCB vfatOpenRootFCB (PDEVICE_EXTENSION pVCB); + +BOOLEAN vfatFCBIsDirectory (PVFATFCB FCB); + +BOOLEAN vfatFCBIsRoot(PVFATFCB FCB); + +NTSTATUS vfatAttachFCBToFileObject (PDEVICE_EXTENSION vcb, + PVFATFCB fcb, + PFILE_OBJECT fileObject); + +NTSTATUS vfatDirFindFile (PDEVICE_EXTENSION pVCB, + PVFATFCB parentFCB, + PUNICODE_STRING FileToFindU, + PVFATFCB * fileFCB); + +NTSTATUS vfatGetFCBForFile (PDEVICE_EXTENSION pVCB, + PVFATFCB *pParentFCB, + PVFATFCB *pFCB, + PUNICODE_STRING pFileNameU); + +NTSTATUS vfatMakeFCBFromDirEntry (PVCB vcb, + PVFATFCB directoryFCB, + PVFAT_DIRENTRY_CONTEXT DirContext, + PVFATFCB * fileFCB); + +/* ------------------------------------------------------------ rw.c */ + +NTSTATUS VfatRead (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatWrite (PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS NextCluster(PDEVICE_EXTENSION DeviceExt, + ULONG FirstCluster, + PULONG CurrentCluster, + BOOLEAN Extend); + +/* ----------------------------------------------------------- misc.c */ + +NTSTATUS VfatQueueRequest(PVFAT_IRP_CONTEXT IrpContext); + +PVFAT_IRP_CONTEXT VfatAllocateIrpContext(PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +VOID VfatFreeIrpContext(PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS STDCALL VfatBuildRequest (PDEVICE_OBJECT DeviceObject, + PIRP Irp); + +PVOID VfatGetUserBuffer(IN PIRP); + +NTSTATUS VfatLockUserBuffer(IN PIRP, IN ULONG, + IN LOCK_OPERATION); + +NTSTATUS +VfatSetExtendedAttributes(PFILE_OBJECT FileObject, + PVOID Ea, + ULONG EaLength); +/* ------------------------------------------------------------- flush.c */ + +NTSTATUS VfatFlush(PVFAT_IRP_CONTEXT IrpContext); + +NTSTATUS VfatFlushVolume(PDEVICE_EXTENSION DeviceExt, PVFATFCB VolumeFcb); + + +/* EOF */ From 05636664e003dceb9e883f2a5916e06df5dda1b0 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 3 Aug 2008 19:09:43 +0000 Subject: [PATCH 118/304] - [Stupid] warning fixes. - Bugfix: CNV_THIS_PART was not returning any value, when in reality it should have returned a pointer to the converted string. svn path=/trunk/; revision=35082 --- reactos/lib/fslib/vfatlib/check/boot.c | 2 +- reactos/lib/fslib/vfatlib/check/check.c | 50 ++++++++++++------------- reactos/lib/fslib/vfatlib/check/fat.c | 2 +- reactos/lib/fslib/vfatlib/check/file.c | 12 +++--- reactos/lib/fslib/vfatlib/check/file.h | 2 +- reactos/lib/fslib/vfatlib/check/lfn.c | 6 +-- 6 files changed, 37 insertions(+), 37 deletions(-) diff --git a/reactos/lib/fslib/vfatlib/check/boot.c b/reactos/lib/fslib/vfatlib/check/boot.c index c5a7416a1d0..29deccd4f4a 100644 --- a/reactos/lib/fslib/vfatlib/check/boot.c +++ b/reactos/lib/fslib/vfatlib/check/boot.c @@ -65,7 +65,7 @@ static void dump_boot(DOS_FS *fs,struct boot_sector *b,unsigned lss) printf("Boot sector contents:\n"); if (!atari_format) { char id[9]; - strncpy(id,b->system_id,8); + strncpy(id,(char*)b->system_id,8); id[8] = 0; printf("System ID \"%s\"\n",id); } diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c index 063bb8a4213..b4778968533 100644 --- a/reactos/lib/fslib/vfatlib/check/check.c +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -111,14 +111,14 @@ loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern) } memset(de,0,sizeof(DIR_ENT)); while (1) { - sprintf(de->name,pattern,curr_num); + sprintf((char*)de->name,pattern,curr_num); clu_num = fs->root_cluster; i = 0; offset2 = cluster_start(fs,clu_num); while (clu_num > 0 && clu_num != -1) { fs_read(offset2,sizeof(DIR_ENT),&d2); if (offset2 != offset && - !strncmp(d2.name,de->name,MSDOS_NAME)) + !strncmp((char*)d2.name,(char*)de->name,MSDOS_NAME)) break; i += sizeof(DIR_ENT); offset2 += sizeof(DIR_ENT); @@ -151,10 +151,10 @@ loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern) offset = fs->root_start+next_free*sizeof(DIR_ENT); memset(de,0,sizeof(DIR_ENT)); while (1) { - sprintf(de->name,pattern,curr_num); + sprintf((char*)de->name,pattern,curr_num); for (scan = 0; scan < (int)fs->root_entries; scan++) if (scan != next_free && - !strncmp(root[scan].name,de->name,MSDOS_NAME)) + !strncmp((char*)root[scan].name,(char*)de->name,MSDOS_NAME)) break; if (scan == (int)fs->root_entries) break; if (++curr_num >= 10000) die("Unable to create unique name"); @@ -226,8 +226,8 @@ static int bad_name(unsigned char *name) /* Do not complain about (and auto-correct) the extended attribute files * of OS/2. */ - if (strncmp(name,"EA DATA SF",11) == 0 || - strncmp(name,"WP ROOT SF",11) == 0) return 0; + if (strncmp((char*)name,"EA DATA SF",11) == 0 || + strncmp((char*)name,"WP ROOT SF",11) == 0) return 0; for (i = 0; i < 8; i++) { if (name[i] < ' ' || name[i] == 0x7f) return 1; @@ -313,10 +313,10 @@ static void auto_rename(DOS_FILE *file) first = file->parent ? file->parent->first : root; number = 0; while (1) { - sprintf(file->dir_ent.name,"FSCK%04d",number); - strncpy(file->dir_ent.ext,"REN",3); + sprintf((char*)file->dir_ent.name,"FSCK%04d",number); + strncpy((char*)file->dir_ent.ext,"REN",3); for (walk = first; walk; walk = walk->next) - if (walk != file && !strncmp(walk->dir_ent.name,file->dir_ent. + if (walk != file && !strncmp((char*)walk->dir_ent.name,(char*)file->dir_ent. name,MSDOS_NAME)) break; if (!walk) { fs_write(file->offset,MSDOS_NAME,file->dir_ent.name); @@ -340,9 +340,9 @@ static void rename_file(DOS_FILE *file) while (1) { printf("New name: "); fflush(stdout); - if (fgets(name,45,stdin)) { - if ((here = strchr(name,'\n'))) *here = 0; - for (walk = strrchr(name,0); walk >= name && (*walk == ' ' || + if (fgets((char*)name,45,stdin)) { + if ((here = (unsigned char*)strchr((char*)name,'\n'))) *here = 0; + for (walk = (unsigned char*)strrchr((char*)name,0); walk >= name && (*walk == ' ' || *walk == '\t'); walk--); walk[1] = 0; for (walk = name; *walk == ' ' || *walk == '\t'; walk++); @@ -359,7 +359,7 @@ static int handle_dot(DOS_FS *fs,DOS_FILE *file,int dots) { char *name; - name = strncmp(file->dir_ent.name,MSDOS_DOT,MSDOS_NAME) ? ".." : "."; + name = strncmp((char*)file->dir_ent.name,MSDOS_DOT,MSDOS_NAME) ? ".." : "."; if (!(file->dir_ent.attr & ATTR_DIR)) { printf("%s\n Is a non-directory.\n",path_name(file)); if (interactive) @@ -404,7 +404,7 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) path_name(file)); MODIFY(file,size,CT_LE_L(0)); } - if (file->parent && !strncmp(file->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) { + if (file->parent && !strncmp((char*)file->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) { expect = FSTART(file->parent,fs); if (FSTART(file,fs) != expect) { printf("%s\n Start (%ld) does not point to parent (%ld)\n", @@ -413,7 +413,7 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) } return 0; } - if (file->parent && !strncmp(file->dir_ent.name,MSDOS_DOTDOT, + if (file->parent && !strncmp((char*)file->dir_ent.name,MSDOS_DOTDOT, MSDOS_NAME)) { expect = file->parent->parent ? FSTART(file->parent->parent,fs):0; if (fs->root_cluster && expect == fs->root_cluster) @@ -569,13 +569,13 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) dot = dotdot = redo = 0; walk = root; while (*walk) { - if (!strncmp((*walk)->dir_ent.name,MSDOS_DOT,MSDOS_NAME) || - !strncmp((*walk)->dir_ent.name,MSDOS_DOTDOT,MSDOS_NAME)) { + if (!strncmp((char*)(*walk)->dir_ent.name,MSDOS_DOT,MSDOS_NAME) || + !strncmp((char*)(*walk)->dir_ent.name,MSDOS_DOTDOT,MSDOS_NAME)) { if (handle_dot(fs,*walk,dots)) { *walk = (*walk)->next; continue; } - if (!strncmp((*walk)->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) dot++; + if (!strncmp((char*)(*walk)->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) dot++; else dotdot++; } if (!((*walk)->dir_ent.attr & ATTR_VOLUME) && @@ -609,7 +609,7 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) skip = 0; while (*scan && !skip) { if (!((*scan)->dir_ent.attr & ATTR_VOLUME) && - !strncmp((*walk)->dir_ent.name,(*scan)->dir_ent.name,MSDOS_NAME)) { + !strncmp((char*)(*walk)->dir_ent.name,(char*)(*scan)->dir_ent.name,MSDOS_NAME)) { printf("%s\n Duplicate directory entry.\n First %s\n", path_name(*walk),file_stat(*walk)); printf(" Second %s\n",file_stat(*scan)); @@ -763,7 +763,7 @@ static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, de.start = CT_LE_W(fs->root_cluster & 0xffff); de.starthi = CT_LE_W((fs->root_cluster >> 16) & 0xffff); } - if ((type = file_type(cp,de.name)) != fdt_none) { + if ((type = file_type(cp,(char*)de.name)) != fdt_none) { if (type == fdt_undelete && (de.attr & ATTR_DIR)) die("Can't undelete directories."); file_modify(cp,de.name); @@ -793,8 +793,8 @@ static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, printf("\n"); } if (offset && - strncmp(de.name,MSDOS_DOT,MSDOS_NAME) != 0 && - strncmp(de.name,MSDOS_DOTDOT,MSDOS_NAME) != 0) + strncmp((char*)de.name,MSDOS_DOT,MSDOS_NAME) != 0 && + strncmp((char*)de.name,MSDOS_DOTDOT,MSDOS_NAME) != 0) ++n_files; test_file(fs,new,test); } @@ -834,9 +834,9 @@ static int subdirs(DOS_FS *fs,DOS_FILE *parent,FDSC **cp) for (walk = parent ? parent->first : root; walk; walk = walk->next) if (walk->dir_ent.attr & ATTR_DIR) - if (strncmp(walk->dir_ent.name,MSDOS_DOT,MSDOS_NAME) && - strncmp(walk->dir_ent.name,MSDOS_DOTDOT,MSDOS_NAME)) - if (scan_dir(fs,walk,file_cd(cp,walk->dir_ent.name))) return 1; + if (strncmp((char*)walk->dir_ent.name,MSDOS_DOT,MSDOS_NAME) && + strncmp((char*)walk->dir_ent.name,MSDOS_DOTDOT,MSDOS_NAME)) + if (scan_dir(fs,walk,file_cd(cp,(char*)walk->dir_ent.name))) return 1; return 0; } diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/reactos/lib/fslib/vfatlib/check/fat.c index 1975a12ad3d..c6a3f5a2be3 100644 --- a/reactos/lib/fslib/vfatlib/check/fat.c +++ b/reactos/lib/fslib/vfatlib/check/fat.c @@ -17,7 +17,7 @@ #include "check.h" #include "fat.h" -#pragma warning(disable: 4018) +//#pragma warning(disable: 4018) static void get_fat(FAT_ENTRY *entry,void *fat,unsigned long cluster,DOS_FS *fs) { diff --git a/reactos/lib/fslib/vfatlib/check/file.c b/reactos/lib/fslib/vfatlib/check/file.c index 9d6b4ff0c03..77000a6e64f 100644 --- a/reactos/lib/fslib/vfatlib/check/file.c +++ b/reactos/lib/fslib/vfatlib/check/file.c @@ -57,7 +57,7 @@ char *file_name(unsigned char *fixed) while (j++ < i) *p++ = ' '; put_char(&p,fixed[i]); } - if (strncmp(fixed+8," ",3)) { + if (strncmp((char*)fixed+8," ",3)) { *p++ = '.'; for (i = j = 0; i < 3; i++) if (fixed[i+8] != ' ') { @@ -138,7 +138,7 @@ void file_add(char *path,FD_TYPE type) path++; while (1) { if ((here = strchr(path,'/'))) *here = 0; - if (!file_cvt(path,name)) exit(2); + if (!file_cvt((unsigned char*)path,(unsigned char *)name)) exit(2); for (walk = *current; walk; walk = walk->next) if (!here && (!strncmp(name,walk->name,MSDOS_NAME) || (type == fdt_undelete && !strncmp(name+1,walk->name+1,MSDOS_NAME-1)))) @@ -201,16 +201,16 @@ FD_TYPE file_type(FDSC **curr,char *fixed) } -void file_modify(FDSC **curr,char *fixed) +void file_modify(FDSC **curr,unsigned char *fixed) { FDSC **this,*next; - if (!(this = file_find(curr,fixed))) + if (!(this = file_find(curr,(char *)fixed))) die("Internal error: file_find failed"); switch ((*this)->type) { case fdt_drop: printf("Dropping %s\n",file_name(fixed)); - *(unsigned char *) fixed = DELETED_FLAG; + *fixed = DELETED_FLAG; break; case fdt_undelete: *fixed = *(*this)->name; @@ -234,7 +234,7 @@ static void report_unused(FDSC *this) if (this->first) report_unused(this->first); else if (this->type != fdt_none) printf("Warning: did not %s file %s\n",this->type == fdt_drop ? - "drop" : "undelete",file_name(this->name)); + "drop" : "undelete",file_name((unsigned char*)this->name)); free(this); this = next; } diff --git a/reactos/lib/fslib/vfatlib/check/file.h b/reactos/lib/fslib/vfatlib/check/file.h index d7f1386801d..43b5620f8e6 100644 --- a/reactos/lib/fslib/vfatlib/check/file.h +++ b/reactos/lib/fslib/vfatlib/check/file.h @@ -44,7 +44,7 @@ FD_TYPE file_type(FDSC **curr,char *fixed); /* Returns the attribute of the file FIXED in directory CURR or FDT_NONE if no such file exists or if CURR is NULL. */ -void file_modify(FDSC **curr,char *fixed); +void file_modify(FDSC **curr,unsigned char *fixed); /* Performs the necessary operation on the entry of CURR that is named FIXED. */ diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/reactos/lib/fslib/vfatlib/check/lfn.c index ba352314c3e..9bd72487c2c 100644 --- a/reactos/lib/fslib/vfatlib/check/lfn.c +++ b/reactos/lib/fslib/vfatlib/check/lfn.c @@ -62,7 +62,7 @@ static __inline char* CNV_THIS_PART(LFN_ENT *lfn) { \ char __part_uni[CHARS_PER_LFN*2]; copy_lfn_part( __part_uni, lfn ); - cnv_unicode( __part_uni, CHARS_PER_LFN, 0 ); + return cnv_unicode( (unsigned char*)__part_uni, CHARS_PER_LFN, 0 ); } /* Convert name parts collected so far (from previous slots) from unicode to @@ -105,7 +105,7 @@ static char *cnv_unicode( const unsigned char *uni, int maxlen, int use_q ) } *cp = 0; - return( out ); + return (char *)out; } @@ -322,7 +322,7 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) if (lfn_slot != -1) { lfn_slot--; offset = lfn_slot * CHARS_PER_LFN*2; - copy_lfn_part( lfn_unicode+offset, lfn ); + copy_lfn_part( (char*)lfn_unicode+offset, lfn ); if (lfn->id & LFN_ID_START) lfn_unicode[offset+26] = lfn_unicode[offset+27] = 0; lfn_offsets[lfn_parts++] = dir_offset; From 18d666a782e8cde3afead96929e1a76b2472e658 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sun, 3 Aug 2008 19:14:44 +0000 Subject: [PATCH 119/304] - Reapply 29440 to dbghelp and use strtoui64 instead of non-existing strtoull. Now dbghelp loads again (broken 7 months ago in revision 31339). svn path=/trunk/; revision=35083 --- reactos/dll/win32/dbghelp/stabs.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/dbghelp/stabs.c b/reactos/dll/win32/dbghelp/stabs.c index 9955b7eac62..d68c9dc166b 100644 --- a/reactos/dll/win32/dbghelp/stabs.c +++ b/reactos/dll/win32/dbghelp/stabs.c @@ -63,6 +63,8 @@ WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_stabs); +UINT64 _strtoui64( const char *nptr, char **endptr, int base ); + #ifndef N_UNDF #define N_UNDF 0x00 #endif @@ -466,13 +468,13 @@ static int stabs_pts_read_range_value(struct ParseTypedefData* ptd, struct pts_r break; case '-': prv->sign = -1; - prv->val = strtoull(++ptd->ptr, &last, 10); + prv->val = _strtoui64(++ptd->ptr, &last, 10); ptd->ptr = last; break; case '+': default: prv->sign = 1; - prv->val = strtoull(ptd->ptr, &last, 10); + prv->val = _strtoui64(ptd->ptr, &last, 10); ptd->ptr = last; break; } From ee1c77756d58aa3506ebaa952e51134453f7ac01 Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Sun, 3 Aug 2008 19:24:09 +0000 Subject: [PATCH 120/304] Fix NtQueryOpenSubKeys prototype. svn path=/trunk/; revision=35084 --- reactos/include/ndk/cmfuncs.h | 2 +- reactos/ntoskrnl/config/ntapi.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/ndk/cmfuncs.h b/reactos/include/ndk/cmfuncs.h index f8aac16d104..b9cd568d22a 100644 --- a/reactos/include/ndk/cmfuncs.h +++ b/reactos/include/ndk/cmfuncs.h @@ -234,7 +234,7 @@ NTSTATUS NTAPI NtQueryOpenSubKeys( IN POBJECT_ATTRIBUTES TargetKey, - IN ULONG HandleCount + OUT PULONG HandleCount ); NTSTATUS diff --git a/reactos/ntoskrnl/config/ntapi.c b/reactos/ntoskrnl/config/ntapi.c index f177ececa49..62a2232d9a1 100644 --- a/reactos/ntoskrnl/config/ntapi.c +++ b/reactos/ntoskrnl/config/ntapi.c @@ -930,7 +930,7 @@ NtQueryMultipleValueKey(IN HANDLE KeyHandle, NTSTATUS NTAPI NtQueryOpenSubKeys(IN POBJECT_ATTRIBUTES TargetKey, - IN ULONG HandleCount) + OUT PULONG HandleCount) { UNIMPLEMENTED; return STATUS_NOT_IMPLEMENTED; From d425d03d5bb9872979f264f1c05811d24f25bc24 Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Sun, 3 Aug 2008 19:30:09 +0000 Subject: [PATCH 121/304] - Set better/updated default values - Remove the non-existent "TechBot.Commands.RBuild" project, it breaks the auomatic conversion of the solution to MSVS 2008 svn path=/trunk/; revision=35085 --- irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs | 2 +- irc/TechBot/TechBot.Commands.Common/Settings.settings | 2 +- irc/TechBot/TechBot.Commands.Common/app.config | 2 +- irc/TechBot/TechBot.IRCLibrary/app.config | 2 +- irc/TechBot/TechBot.Library/Settings.Designer.cs | 4 ++-- irc/TechBot/TechBot.Library/Settings.settings | 4 ++-- irc/TechBot/TechBot.Library/app.config | 4 ++-- irc/TechBot/TechBot.sln | 6 ------ irc/TechBot/TechBot/App.config | 6 +++--- 9 files changed, 13 insertions(+), 19 deletions(-) diff --git a/irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs b/irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs index bb247b4ccd5..d05b1de36c9 100644 --- a/irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs +++ b/irc/TechBot/TechBot.Commands.Common/Settings.Designer.cs @@ -61,7 +61,7 @@ namespace TechBot.Commands.Common { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("svn://svn.reactos.org/trunk/reactos")] + [global::System.Configuration.DefaultSettingValueAttribute("svn://svn.reactos.org/reactos/trunk")] public string SVNRoot { get { return ((string)(this["SVNRoot"])); diff --git a/irc/TechBot/TechBot.Commands.Common/Settings.settings b/irc/TechBot/TechBot.Commands.Common/Settings.settings index 1971c3a6757..4ee296b8e5a 100644 --- a/irc/TechBot/TechBot.Commands.Common/Settings.settings +++ b/irc/TechBot/TechBot.Commands.Common/Settings.settings @@ -15,7 +15,7 @@ C:\Ros\current\irc\TechBot\Resources\wm.xml - svn://svn.reactos.org/trunk/reactos + svn://svn.reactos.org/reactos/trunk \ No newline at end of file diff --git a/irc/TechBot/TechBot.Commands.Common/app.config b/irc/TechBot/TechBot.Commands.Common/app.config index b2c11aecdf3..479a2cdc49d 100644 --- a/irc/TechBot/TechBot.Commands.Common/app.config +++ b/irc/TechBot/TechBot.Commands.Common/app.config @@ -20,7 +20,7 @@ C:\Ros\current\irc\TechBot\Resources\wm.xml - svn://svn.reactos.org/trunk/reactos + svn://svn.reactos.org/reactos/trunk diff --git a/irc/TechBot/TechBot.IRCLibrary/app.config b/irc/TechBot/TechBot.IRCLibrary/app.config index 5a7d239a864..b4e2a174a9f 100644 --- a/irc/TechBot/TechBot.IRCLibrary/app.config +++ b/irc/TechBot/TechBot.IRCLibrary/app.config @@ -8,7 +8,7 @@ - @ + ! diff --git a/irc/TechBot/TechBot.Library/Settings.Designer.cs b/irc/TechBot/TechBot.Library/Settings.Designer.cs index 8387bfcfec5..1a4445e28b2 100644 --- a/irc/TechBot/TechBot.Library/Settings.Designer.cs +++ b/irc/TechBot/TechBot.Library/Settings.Designer.cs @@ -61,7 +61,7 @@ namespace TechBot.Library { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("svn://svn.reactos.org/trunk/reactos")] + [global::System.Configuration.DefaultSettingValueAttribute("svn://svn.reactos.org/reactos/trunk")] public string SVNRoot { get { return ((string)(this["SVNRoot"])); @@ -70,7 +70,7 @@ namespace TechBot.Library { [global::System.Configuration.ApplicationScopedSettingAttribute()] [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Configuration.DefaultSettingValueAttribute("@")] + [global::System.Configuration.DefaultSettingValueAttribute("!")] public string CommandPrefix { get { return ((string)(this["CommandPrefix"])); diff --git a/irc/TechBot/TechBot.Library/Settings.settings b/irc/TechBot/TechBot.Library/Settings.settings index 25503d743cd..2673cc50cb1 100644 --- a/irc/TechBot/TechBot.Library/Settings.settings +++ b/irc/TechBot/TechBot.Library/Settings.settings @@ -15,10 +15,10 @@ C:\Ros\current\irc\TechBot\Resources\wm.xml - svn://svn.reactos.org/trunk/reactos + svn://svn.reactos.org/reactos/trunk - @ + ! \ No newline at end of file diff --git a/irc/TechBot/TechBot.Library/app.config b/irc/TechBot/TechBot.Library/app.config index aaaf277fac6..cc2cba5b4ee 100644 --- a/irc/TechBot/TechBot.Library/app.config +++ b/irc/TechBot/TechBot.Library/app.config @@ -20,10 +20,10 @@ C:\Ros\current\irc\TechBot\Resources\wm.xml - svn://svn.reactos.org/trunk/reactos + svn://svn.reactos.org/reactos/trunk - @ + ! diff --git a/irc/TechBot/TechBot.sln b/irc/TechBot/TechBot.sln index 77c5baa4e47..3c794500893 100644 --- a/irc/TechBot/TechBot.sln +++ b/irc/TechBot/TechBot.sln @@ -17,8 +17,6 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot.Commands.Common", " EndProject Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot.Commands.MSDN", "TechBot.Commands.MSDN\TechBot.Commands.MSDN.csproj", "{ADBF1ED6-A586-4707-BD59-4CD53448D0FE}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TechBot.Commands.RBuild", "TechBot.Commands.RBuild\TechBot.Commands.RBuild.csproj", "{D676FEDE-62DD-4B4D-94C6-308598E827F9}" -EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -57,10 +55,6 @@ Global {ADBF1ED6-A586-4707-BD59-4CD53448D0FE}.Debug|Any CPU.Build.0 = Debug|Any CPU {ADBF1ED6-A586-4707-BD59-4CD53448D0FE}.Release|Any CPU.ActiveCfg = Release|Any CPU {ADBF1ED6-A586-4707-BD59-4CD53448D0FE}.Release|Any CPU.Build.0 = Release|Any CPU - {D676FEDE-62DD-4B4D-94C6-308598E827F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D676FEDE-62DD-4B4D-94C6-308598E827F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D676FEDE-62DD-4B4D-94C6-308598E827F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D676FEDE-62DD-4B4D-94C6-308598E827F9}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/irc/TechBot/TechBot/App.config b/irc/TechBot/TechBot/App.config index 77d88dd389e..652f7444d66 100644 --- a/irc/TechBot/TechBot/App.config +++ b/irc/TechBot/TechBot/App.config @@ -6,9 +6,9 @@ - + - + @@ -17,7 +17,7 @@ - + From 089e7fccd23474fd0449ae094a9b85fb71877ee3 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 3 Aug 2008 20:04:26 +0000 Subject: [PATCH 122/304] Implemented ghost feature to TechBot svn path=/trunk/; revision=35086 --- irc/TechBot/TechBot.IRCLibrary/IRC.cs | 1 + irc/TechBot/TechBot.IRCLibrary/IrcClient.cs | 2 ++ 2 files changed, 3 insertions(+) diff --git a/irc/TechBot/TechBot.IRCLibrary/IRC.cs b/irc/TechBot/TechBot.IRCLibrary/IRC.cs index 488b6b28d08..f1abf5b5746 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IRC.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IRC.cs @@ -17,6 +17,7 @@ namespace TechBot.IRCLibrary public const string PRIVMSG = "PRIVMSG"; public const string USER = "USER"; public const string PASS = "PASS"; + public const string GHOST = "NS GHOST"; public const string RPL_NAMREPLY = "353"; public const string RPL_ENDOFNAMES = "366"; diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs index ecd7b7ac719..7851d6fa366 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs @@ -639,6 +639,8 @@ namespace TechBot.IRCLibrary if (password != null) SubmitPassword(password); ChangeNick(nickname); + /* Before we send our nickname, just ghost it */ + SendMessage(new IrcMessage(IRC.GHOST, nickname)); /* OLD: USER */ /* NEW: USER */ SendMessage(new IrcMessage(IRC.USER, String.Format("{0} 0 * :{1}", From 35d4b52b92a322c8c3e6bd5e3234413ff370e8e8 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sun, 3 Aug 2008 20:05:47 +0000 Subject: [PATCH 123/304] - Update ros.diff svn path=/trunk/; revision=35087 --- reactos/dll/win32/dbghelp/dbghelp_ros.diff | 29 ++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/reactos/dll/win32/dbghelp/dbghelp_ros.diff b/reactos/dll/win32/dbghelp/dbghelp_ros.diff index b3c91c1e4f5..84da02c94b7 100644 --- a/reactos/dll/win32/dbghelp/dbghelp_ros.diff +++ b/reactos/dll/win32/dbghelp/dbghelp_ros.diff @@ -48,3 +48,32 @@ Index: symbol.c * SymEnumSymbolsW (DBGHELP.@) * */ +Index: stabs.c +=================================================================== +--- stabs.c (revision 35085) ++++ stabs.c (working copy) +@@ -63,8 +63,6 @@ + + WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_stabs); + +-UINT64 _strtoui64( const char *nptr, char **endptr, int base ); +- + #ifndef N_UNDF + #define N_UNDF 0x00 + #endif +@@ -468,13 +466,13 @@ + break; + case '-': + prv->sign = -1; +- prv->val = _strtoui64(++ptd->ptr, &last, 10); ++ prv->val = strtoull(++ptd->ptr, &last, 10); + ptd->ptr = last; + break; + case '+': + default: + prv->sign = 1; +- prv->val = _strtoui64(ptd->ptr, &last, 10); ++ prv->val = strtoull(ptd->ptr, &last, 10); + ptd->ptr = last; + break; + } From 33bbf518a59f31dc576ed5083984b31bf7b08c92 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 3 Aug 2008 20:06:40 +0000 Subject: [PATCH 124/304] Fixed ident svn path=/trunk/; revision=35088 --- irc/TechBot/TechBot.IRCLibrary/IRC.cs | 2 +- irc/TechBot/TechBot.IRCLibrary/IrcClient.cs | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/irc/TechBot/TechBot.IRCLibrary/IRC.cs b/irc/TechBot/TechBot.IRCLibrary/IRC.cs index f1abf5b5746..0fee5f29ac0 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IRC.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IRC.cs @@ -17,7 +17,7 @@ namespace TechBot.IRCLibrary public const string PRIVMSG = "PRIVMSG"; public const string USER = "USER"; public const string PASS = "PASS"; - public const string GHOST = "NS GHOST"; + public const string GHOST = "NS GHOST"; public const string RPL_NAMREPLY = "353"; public const string RPL_ENDOFNAMES = "366"; diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs index 7851d6fa366..8d07e50e5d8 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs @@ -639,8 +639,8 @@ namespace TechBot.IRCLibrary if (password != null) SubmitPassword(password); ChangeNick(nickname); - /* Before we send our nickname, just ghost it */ - SendMessage(new IrcMessage(IRC.GHOST, nickname)); + /* Before we send our nickname, just ghost it */ + SendMessage(new IrcMessage(IRC.GHOST, nickname)); /* OLD: USER */ /* NEW: USER */ SendMessage(new IrcMessage(IRC.USER, String.Format("{0} 0 * :{1}", From 3473e20496c39b3e55f0ee21afa7656397dd3ce2 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Sun, 3 Aug 2008 20:08:54 +0000 Subject: [PATCH 125/304] - ...fix ros.diff svn path=/trunk/; revision=35089 --- reactos/dll/win32/dbghelp/dbghelp_ros.diff | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/reactos/dll/win32/dbghelp/dbghelp_ros.diff b/reactos/dll/win32/dbghelp/dbghelp_ros.diff index 84da02c94b7..6e26820208e 100644 --- a/reactos/dll/win32/dbghelp/dbghelp_ros.diff +++ b/reactos/dll/win32/dbghelp/dbghelp_ros.diff @@ -56,8 +56,8 @@ Index: stabs.c WINE_DEFAULT_DEBUG_CHANNEL(dbghelp_stabs); --UINT64 _strtoui64( const char *nptr, char **endptr, int base ); -- ++UINT64 _strtoui64( const char *nptr, char **endptr, int base ); ++ #ifndef N_UNDF #define N_UNDF 0x00 #endif @@ -65,15 +65,15 @@ Index: stabs.c break; case '-': prv->sign = -1; -- prv->val = _strtoui64(++ptd->ptr, &last, 10); -+ prv->val = strtoull(++ptd->ptr, &last, 10); +- prv->val = strtoull(++ptd->ptr, &last, 10); ++ prv->val = _strtoui64(++ptd->ptr, &last, 10); ptd->ptr = last; break; case '+': default: prv->sign = 1; -- prv->val = _strtoui64(ptd->ptr, &last, 10); -+ prv->val = strtoull(ptd->ptr, &last, 10); +- prv->val = strtoull(ptd->ptr, &last, 10); ++ prv->val = _strtoui64(ptd->ptr, &last, 10); ptd->ptr = last; break; } From 555a6a340ff6a94ccc39ab9a03e62d3bcaa4b975 Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 3 Aug 2008 20:49:33 +0000 Subject: [PATCH 126/304] Allow spaces in commands svn path=/trunk/; revision=35090 --- irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs b/irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs index 14e62fd8fa4..f74ea806be4 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IrcMessage.cs @@ -419,7 +419,7 @@ namespace TechBot.IRCLibrary { foreach (char c in command) { - if (!Char.IsLetter(c)) + if (!Char.IsLetter(c) && !Char.IsWhiteSpace(c)) { return false; } From c17bb07ec34b749f305afc235ed4a1f4c86c37fe Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Sun, 3 Aug 2008 21:34:12 +0000 Subject: [PATCH 127/304] - Changed ghost command (using NickServ) - Ghost before registering svn path=/trunk/; revision=35091 --- irc/TechBot/TechBot.IRCLibrary/IRC.cs | 2 +- irc/TechBot/TechBot.IRCLibrary/IrcClient.cs | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/irc/TechBot/TechBot.IRCLibrary/IRC.cs b/irc/TechBot/TechBot.IRCLibrary/IRC.cs index 0fee5f29ac0..f125ecea6d1 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IRC.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IRC.cs @@ -17,7 +17,7 @@ namespace TechBot.IRCLibrary public const string PRIVMSG = "PRIVMSG"; public const string USER = "USER"; public const string PASS = "PASS"; - public const string GHOST = "NS GHOST"; + public const string GHOST = "MSG NICKSERV GHOST"; public const string RPL_NAMREPLY = "353"; public const string RPL_ENDOFNAMES = "366"; diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs index 8d07e50e5d8..6682bd7c4e4 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs @@ -637,10 +637,13 @@ namespace TechBot.IRCLibrary throw new ArgumentNullException("nickname", "Nickname cannot be null."); firstPingReceived = false; if (password != null) + { + /* First ghost ourself and then register */ + if (nickname != null) + SendMessage(new IrcMessage(IRC.GHOST, nickname + " " + password)); SubmitPassword(password); + } ChangeNick(nickname); - /* Before we send our nickname, just ghost it */ - SendMessage(new IrcMessage(IRC.GHOST, nickname)); /* OLD: USER */ /* NEW: USER */ SendMessage(new IrcMessage(IRC.USER, String.Format("{0} 0 * :{1}", From 989d740b15974829886930d0093dc2a556aabad1 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Mon, 4 Aug 2008 08:21:11 +0000 Subject: [PATCH 128/304] - Export KiBugCheckData svn path=/trunk/; revision=35092 --- reactos/ntoskrnl/ntoskrnl_i386.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ntoskrnl_i386.def b/reactos/ntoskrnl/ntoskrnl_i386.def index 8097c6783cd..88e78ee4de7 100644 --- a/reactos/ntoskrnl/ntoskrnl_i386.def +++ b/reactos/ntoskrnl/ntoskrnl_i386.def @@ -694,7 +694,7 @@ KeWaitForSingleObject@20 @KefReleaseSpinLockFromDpcLevel@4 Kei386EoiHelper@0 @KiAcquireSpinLock@4 -;KiBugCheckData DATA +KiBugCheckData DATA KiCheckForKernelApcDelivery@0 KiCoprocessorError@0 KiDeliverApc@12 From 9303485cbe4953cce1840708995fe4cd4dcb4bfc Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 4 Aug 2008 10:00:32 +0000 Subject: [PATCH 129/304] - Implement read/write support via Native API. - Reorganize headers so that only vfatlib.h is included instead of hundred various different headers. svn path=/trunk/; revision=35093 --- reactos/lib/fslib/vfatlib/check/boot.c | 10 +- reactos/lib/fslib/vfatlib/check/check.c | 16 +- reactos/lib/fslib/vfatlib/check/common.c | 9 +- reactos/lib/fslib/vfatlib/check/fat.c | 13 +- reactos/lib/fslib/vfatlib/check/file.c | 25 +- reactos/lib/fslib/vfatlib/check/io.c | 293 +++++++---------------- reactos/lib/fslib/vfatlib/check/io.h | 2 +- reactos/lib/fslib/vfatlib/check/lfn.c | 15 +- 8 files changed, 104 insertions(+), 279 deletions(-) diff --git a/reactos/lib/fslib/vfatlib/check/boot.c b/reactos/lib/fslib/vfatlib/check/boot.c index 29deccd4f4a..a1ea445d1ab 100644 --- a/reactos/lib/fslib/vfatlib/check/boot.c +++ b/reactos/lib/fslib/vfatlib/check/boot.c @@ -5,14 +5,10 @@ /* FAT32, VFAT, Atari format support, and various fixes additions May 1998 * by Roman Hodek */ -#include -#include -#include +#include "vfatlib.h" -#include "common.h" -#include "dosfsck.h" -#include "io.h" -#include "boot.h" +#define NDEBUG +#include #define ROUND_TO_MULTIPLE(n,m) ((n) && (m) ? (n)+(m)-1-((n)-1)%(m) : 0) diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c index b4778968533..059acf0945f 100644 --- a/reactos/lib/fslib/vfatlib/check/check.c +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -6,20 +6,12 @@ * by Roman Hodek */ -#include -#include -#include -#include +#include "vfatlib.h" #include -#include -#include "common.h" -#include "dosfsck.h" -#include "io.h" -#include "fat.h" -#include "file.h" -#include "lfn.h" -#include "check.h" +#define NDEBUG +#include + static DOS_FILE *root; diff --git a/reactos/lib/fslib/vfatlib/check/common.c b/reactos/lib/fslib/vfatlib/check/common.c index 1a481720c14..5be6f803a23 100644 --- a/reactos/lib/fslib/vfatlib/check/common.c +++ b/reactos/lib/fslib/vfatlib/check/common.c @@ -6,13 +6,10 @@ * by Roman Hodek */ -#include -#include -#include -#include -#include +#include "vfatlib.h" -#include "common.h" +#define NDEBUG +#include typedef struct _link { diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/reactos/lib/fslib/vfatlib/check/fat.c index c6a3f5a2be3..60907fa4409 100644 --- a/reactos/lib/fslib/vfatlib/check/fat.c +++ b/reactos/lib/fslib/vfatlib/check/fat.c @@ -6,16 +6,11 @@ * by Roman Hodek */ -#include -#include -#include -//#include +#include "vfatlib.h" + +#define NDEBUG +#include -#include "common.h" -#include "dosfsck.h" -#include "io.h" -#include "check.h" -#include "fat.h" //#pragma warning(disable: 4018) diff --git a/reactos/lib/fslib/vfatlib/check/file.c b/reactos/lib/fslib/vfatlib/check/file.c index 77000a6e64f..5e758bf2518 100644 --- a/reactos/lib/fslib/vfatlib/check/file.c +++ b/reactos/lib/fslib/vfatlib/check/file.c @@ -6,29 +6,10 @@ * by Roman Hodek */ -#include -#include -#include -#include -//#include - -#define _LINUX_STAT_H /* hack to avoid inclusion of */ -#define _LINUX_STRING_H_ /* hack to avoid inclusion of */ -#define _LINUX_FS_H /* hack to avoid inclusion of */ - -//#include -//#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 0) -//# define __KERNEL__ -//# include -//# undef __KERNEL__ -//#endif - -#include "dosfsck.h" -#include "msdos_fs.h" - -#include "common.h" -#include "file.h" +#include "vfatlib.h" +#define NDEBUG +#include FDSC *fp_root = NULL; diff --git a/reactos/lib/fslib/vfatlib/check/io.c b/reactos/lib/fslib/vfatlib/check/io.c index 0ccf41d77c7..eb365e182e8 100644 --- a/reactos/lib/fslib/vfatlib/check/io.c +++ b/reactos/lib/fslib/vfatlib/check/io.c @@ -11,35 +11,11 @@ /* FAT32, VFAT, Atari format support, and various fixes additions May 1998 * by Roman Hodek */ -#include -#include -#include -//#include -#include -//#include -#include -#include -#include -//#include +#include "vfatlib.h" -#ifdef _WIN32 -#define _WIN32_WINNT 0x0400 -#include -#include -#define __LITTLE_ENDIAN 1234 -#define __BIG_ENDIAN 4321 -#define __BYTE_ORDER __LITTLE_ENDIAN -#define inline -#define __attribute__(x) -#define BLOCK_SIZE 512 -#endif - - -#include "dosfsck.h" -#include "common.h" -#include "io.h" - +#define NDEBUG +#include typedef struct _change { void *data; @@ -50,19 +26,19 @@ typedef struct _change { static CHANGE *changes,*last; -static int fd,did_change = 0; +static int did_change = 0; +static HANDLE fd; +static LARGE_INTEGER CurrentOffset; unsigned device_no; -static int WIN32open(const char *path, int oflag, ...); -#define open WIN32open -static int WIN32close(int fd); +static int WIN32close(HANDLE fd); #define close WIN32close -static int WIN32read(int fd, void *buf, unsigned int len); +static int WIN32read(HANDLE fd, void *buf, unsigned int len); #define read WIN32read -static int WIN32write(int fd, void *buf, unsigned int len); +static int WIN32write(HANDLE fd, void *buf, unsigned int len); #define write WIN32write -static loff_t WIN32llseek(int fd, loff_t offset, int whence); +static loff_t WIN32llseek(HANDLE fd, loff_t offset, int whence); #ifdef llseek #undef llseek #endif @@ -70,30 +46,34 @@ static loff_t WIN32llseek(int fd, loff_t offset, int whence); //static int is_device = 0; -void fs_open(char *path,int rw) +void fs_open(PUNICODE_STRING DriveRoot,int rw) { -#ifdef _WIN32 - static char dev_buf[] = "\\\\.\\X:"; -#else - struct stat stbuf; -#endif + OBJECT_ATTRIBUTES ObjectAttributes; + IO_STATUS_BLOCK Iosb; + NTSTATUS Status; - if (path[1] == ':' && path[2] == '\0') { - dev_buf[4] = path[0]; - path = dev_buf; -// is_device = 1; - } + InitializeObjectAttributes(&ObjectAttributes, + DriveRoot, + 0, + NULL, + NULL); + + Status = NtOpenFile(&fd, + FILE_GENERIC_READ | (rw ? FILE_GENERIC_WRITE : 0), + &ObjectAttributes, + &Iosb, + rw ? 0 : FILE_SHARE_READ, + FILE_SYNCHRONOUS_IO_ALERT); + if (!NT_SUCCESS(Status)) + { + DPRINT("NtOpenFile() failed with status 0x%.08x\n", Status); + return; + } + + CurrentOffset.QuadPart = 0LL; - if ((fd = open(path,rw ? O_RDWR : O_RDONLY)) < 0) - pdie("open %s",path); changes = last = NULL; did_change = 0; - -#if 0 - if (fstat(fd,&stbuf) < 0) - pdie("fstat %s",path); - device_no = S_ISBLK(stbuf.st_mode) ? (stbuf.st_rdev >> 8) & 0xff : 0; -#endif } @@ -224,7 +204,6 @@ void fs_write(loff_t pos,int size,void *data) static void fs_flush(void) { CHANGE *this; - //int size; int old_write_immed = write_immed; /* Disable writes to the list now */ @@ -233,19 +212,8 @@ static void fs_flush(void) while (changes) { this = changes; changes = changes->next; -#if 0 - if (llseek(fd,this->pos,0) != this->pos) - fprintf(stderr,"Seek to %lld failed: %s\n Did not write %d bytes.\n", - (__int64)this->pos,strerror(errno),this->size); - else if ((size = write(fd,this->data,this->size)) < 0) - fprintf(stderr,"Writing %d bytes at %lld failed: %s\n",this->size, - (__int64)this->pos,strerror(errno)); - else if (size != this->size) - fprintf(stderr,"Wrote %d bytes instead of %d bytes at %lld." - "\n",size,this->size,(__int64)this->pos); -#else + fs_write(this->pos, this->size, this->data); -#endif free(this->data); free(this); @@ -283,163 +251,64 @@ int fs_changed(void) /* tab-width: 8 */ /* End: */ - -#define O_SHORT_LIVED _O_SHORT_LIVED -//#define O_ACCMODE 3 -#define O_NONE 3 -#define O_BACKUP 0x10000 -#define O_SHARED 0x20000 - -static int WIN32open(const char *path, int oflag, ...) +static int WIN32close(HANDLE FileHandle) { - HANDLE fh; - DWORD desiredAccess = 0; - DWORD shareMode = 0; - DWORD creationDisposition = 0; - DWORD flagsAttributes = FILE_ATTRIBUTE_NORMAL; - SECURITY_ATTRIBUTES securityAttributes; - va_list ap; - int pmode; - int trunc = FALSE; + if (!NT_SUCCESS(NtClose(FileHandle))) return -1; - securityAttributes.nLength = sizeof(securityAttributes); - securityAttributes.lpSecurityDescriptor = NULL; - securityAttributes.bInheritHandle = oflag & O_NOINHERIT ? FALSE : TRUE; - switch (oflag & O_ACCMODE) { - case O_RDONLY: - desiredAccess = GENERIC_READ; -// shareMode = FILE_SHARE_READ; - shareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; // TMN: - break; - case O_WRONLY: - desiredAccess = GENERIC_WRITE; - shareMode = 0; - break; - case O_RDWR: - desiredAccess = GENERIC_READ|GENERIC_WRITE; - shareMode = 0; - break; - case O_NONE: - desiredAccess = 0; - shareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; - } - if (oflag & O_APPEND) { - desiredAccess |= FILE_APPEND_DATA|SYNCHRONIZE; - shareMode = FILE_SHARE_READ|FILE_SHARE_WRITE; - } - if (oflag & O_SHARED) - shareMode |= FILE_SHARE_READ|FILE_SHARE_WRITE; - switch (oflag & (O_CREAT|O_EXCL|O_TRUNC)) { - case 0: - case O_EXCL: - creationDisposition = OPEN_EXISTING; - break; - case O_CREAT: - creationDisposition = OPEN_ALWAYS; - break; - case O_CREAT|O_EXCL: - case O_CREAT|O_TRUNC|O_EXCL: - creationDisposition = CREATE_NEW; - break; - case O_TRUNC: - case O_TRUNC|O_EXCL: - creationDisposition = TRUNCATE_EXISTING; - break; - case O_CREAT|O_TRUNC: - creationDisposition = OPEN_ALWAYS; - trunc = TRUE; - break; - } - if (oflag & O_CREAT) { - va_start(ap, oflag); - pmode = va_arg(ap, int); - va_end(ap); - if ((pmode & 0222) == 0) - flagsAttributes |= FILE_ATTRIBUTE_READONLY; - } - if (oflag & O_TEMPORARY) { - flagsAttributes |= FILE_FLAG_DELETE_ON_CLOSE; - desiredAccess |= DELETE; - } - if (oflag & O_SHORT_LIVED) - flagsAttributes |= FILE_ATTRIBUTE_TEMPORARY; - if (oflag & O_SEQUENTIAL) - flagsAttributes |= FILE_FLAG_SEQUENTIAL_SCAN; - else if (oflag & O_RANDOM) - flagsAttributes |= FILE_FLAG_RANDOM_ACCESS; - if (oflag & O_BACKUP) - flagsAttributes |= FILE_FLAG_BACKUP_SEMANTICS; - if ((fh = CreateFile(path, desiredAccess, shareMode, &securityAttributes, - creationDisposition, flagsAttributes, NULL)) == INVALID_HANDLE_VALUE) { - errno = GetLastError(); - return -1; - } - if (trunc) { - if (!SetEndOfFile(fh)) { - errno = GetLastError(); - CloseHandle(fh); - DeleteFile(path); - return -1; - } - } - return (int)fh; + return 0; } -static int WIN32close(int fd) +static int WIN32read(HANDLE FileHandle, void *buf, unsigned int len) { - if (!CloseHandle((HANDLE)fd)) { - errno = GetLastError(); - return -1; - } - return 0; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; + + Status = NtReadFile(FileHandle, + NULL, + NULL, + NULL, + &IoStatusBlock, + buf, + len, + &CurrentOffset, + NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT("NtReadFile() failed (Status %lx)\n", Status); + return -1; + } + + CurrentOffset.QuadPart += len; + return (int)len; } -static int WIN32read(int fd, void *buf, unsigned int len) +static int WIN32write(HANDLE FileHandle, void *buf, unsigned int len) { - DWORD actualLen; + IO_STATUS_BLOCK IoStatusBlock; + NTSTATUS Status; - if (!ReadFile((HANDLE)fd, buf, (DWORD)len, &actualLen, NULL)) { - errno = GetLastError(); - if (errno == ERROR_BROKEN_PIPE) - return 0; - else - return -1; - } - return (int)actualLen; + Status = NtWriteFile(FileHandle, + NULL, + NULL, + NULL, + &IoStatusBlock, + buf, + len, + &CurrentOffset, + NULL); + if (!NT_SUCCESS(Status)) + { + DPRINT("NtWriteFile() failed (Status %lx)\n", Status); + return -1; + } + + CurrentOffset.QuadPart += len; + return (int)len; } -static int WIN32write(int fd, void *buf, unsigned int len) +static loff_t WIN32llseek(HANDLE fd, loff_t offset, int whence) { - DWORD actualLen; + CurrentOffset.QuadPart = (ULONGLONG)offset; - if (!WriteFile((HANDLE)fd, buf, (DWORD)len, &actualLen, NULL)) { - errno = GetLastError(); - return -1; - } - return (int)actualLen; -} - -static loff_t WIN32llseek(int fd, loff_t offset, int whence) -{ - long lo, hi; - DWORD err; - - lo = (long)(offset & 0xffffffff); - hi = (long)(offset >> 32); - lo = SetFilePointer((HANDLE)fd, lo, &hi, whence); - if (lo == 0xFFFFFFFF && (err = GetLastError()) != NO_ERROR) { - errno = err; - return -1; - } - return ((loff_t)hi << 32) | (__u32)lo; -} - -int fsctl(int fd, int code) -{ - DWORD ret; - if (!DeviceIoControl((HANDLE)fd, code, NULL, 0, NULL, 0, &ret, NULL)) { - errno = GetLastError(); - return -1; - } - return 0; + return offset; } diff --git a/reactos/lib/fslib/vfatlib/check/io.h b/reactos/lib/fslib/vfatlib/check/io.h index cdf3c586ec8..a53e8749004 100644 --- a/reactos/lib/fslib/vfatlib/check/io.h +++ b/reactos/lib/fslib/vfatlib/check/io.h @@ -16,7 +16,7 @@ * sufficient (or even better :) for 64 bit offsets in the meantime */ #define llseek lseek -void fs_open(char *path,int rw); +void fs_open(PUNICODE_STRING DriveRoot,int rw); /* Opens the file system PATH. If RW is zero, the file system is opened read-only, otherwise, it is opened read-write. */ diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/reactos/lib/fslib/vfatlib/check/lfn.c index 9bd72487c2c..dd091bd0b69 100644 --- a/reactos/lib/fslib/vfatlib/check/lfn.c +++ b/reactos/lib/fslib/vfatlib/check/lfn.c @@ -2,17 +2,12 @@ /* Written 1998 by Roman Hodek */ -#include -#include -#include -#include -#include +#include "vfatlib.h" -#include "common.h" -#include "io.h" -#include "dosfsck.h" -#include "lfn.h" -#include "file.h" +#include // for INT_MAX definition + +#define NDEBUG +#include typedef struct { __u8 id; /* sequence number for slot */ From 4f2f126a85223436939c32da64ccdcdd91dfe0ff Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Mon, 4 Aug 2008 10:32:03 +0000 Subject: [PATCH 130/304] - Update Russian translation svn path=/trunk/; revision=35094 --- reactos/dll/win32/shell32/lang/ru-RU.rc | 32 ++++++++++++------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 44ca07c9892..35beb9c9a1b 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -207,18 +207,18 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type of file:", 14004, 8, 35, 50, 10 - LTEXT "Folder", 14005, 68, 35, 160, 10 - LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT " :", 14004, 8, 35, 50, 10 + LTEXT "", 14005, 68, 35, 160, 10 + LTEXT ":", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 315, 10 - LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT ":", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT ":", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT ":", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 - AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 + AUTOCHECKBOX "& ", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&", 14022, 126, 150, 50, 10 END SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 @@ -699,13 +699,13 @@ BEGIN IDS_LNK_FILE "" IDS_SYS_FILE " " - IDS_OPEN_VERB "Open" - IDS_RUNAS_VERB "Run as " - IDS_EDIT_VERB "Edit" - IDS_FIND_VERB "Find" - IDS_PRINT_VERB "Print" - IDS_PLAY_VERB "Play" - IDS_PREVIEW_VERB "Preview" + IDS_OPEN_VERB "" + IDS_RUNAS_VERB " " + IDS_EDIT_VERB "" + IDS_FIND_VERB "" + IDS_PRINT_VERB "" + IDS_PLAY_VERB "" + IDS_PREVIEW_VERB "" - IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_FILE_FOLDER "%u , %u " END From c2aea64e7d11e88a8cd73b20f9f1a06ce025e7c7 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Mon, 4 Aug 2008 12:41:25 +0000 Subject: [PATCH 131/304] - Update & fix Russian translation svn path=/trunk/; revision=35095 --- reactos/base/setup/reactos/lang/ru-RU.rc | 56 ++++++++++++------------ 1 file changed, 28 insertions(+), 28 deletions(-) diff --git a/reactos/base/setup/reactos/lang/ru-RU.rc b/reactos/base/setup/reactos/lang/ru-RU.rc index 8e4126ed563..587b429083c 100644 --- a/reactos/base/setup/reactos/lang/ru-RU.rc +++ b/reactos/base/setup/reactos/lang/ru-RU.rc @@ -8,10 +8,10 @@ CAPTION " FONT 8, "MS Shell Dlg" BEGIN LTEXT " ReactOS.", IDC_STARTTITLE, 115, 8, 195, 24 - LTEXT " ReactOS ! "\ - " CD "\ - " ReactOS.", IDC_STATIC, 115, 40, 195, 100 - LTEXT " .", IDC_STATIC, 115, 169, 195, 17 + LTEXT " ReactOS ! "\ + " CD "\ + " ReactOS.", IDC_STATIC, 115, 40, 195, 100 + LTEXT " """" .", IDC_STATIC, 115, 169, 195, 17 END IDD_LANGSELPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -24,7 +24,7 @@ BEGIN CONTROL "", IDC_LANGUAGES, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 107, 176, 142 CONTROL " :", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 142, 106, 11 CONTROL "", IDC_KEYLAYOUT, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 141, 176, 81 - LTEXT " .", IDC_STATIC, 10, 180 ,297, 10 + LTEXT " """".", IDC_STATIC, 10, 180 ,297, 10 END IDD_TYPEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -32,10 +32,10 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION " ReactOS" FONT 8, "MS Shell Dlg" BEGIN - CONTROL " ", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 - CONTROL " ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 - CONTROL " ReactOS", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 - LTEXT " .", IDC_STATIC, 10, 180 ,297, 10 + CONTROL " ", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL " ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 + CONTROL " ReactOS", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 + LTEXT " """".", IDC_STATIC, 10, 180 ,297, 10 END IDD_DEVICEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -50,7 +50,7 @@ BEGIN CONTROL "", IDC_DISPLAY, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 35, 150, 80 LTEXT ":", IDC_STATIC, 20,55, 80, 10 CONTROL "", IDC_KEYBOARD, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 55, 150, 80 - LTEXT " .", IDC_STATIC, 10, 180 ,277, 20 + LTEXT " """".", IDC_STATIC, 10, 180 ,277, 20 END IDD_DRIVEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 @@ -58,12 +58,12 @@ STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYS CAPTION " ReactOS" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "Partition for ReactOS installation", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176 + CONTROL " ReactOS", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176 LISTBOX IDC_PARTITION, 20,12,278,142,LBS_HASSTRINGS | WS_VSCROLL PUSHBUTTON "&", IDC_PARTCREATE, 20,155,50,15 PUSHBUTTON "&", IDC_PARTDELETE, 76,155,50,15 - PUSHBUTTON "& ...", IDC_PARTMOREOPTS, 218,155,80,15 - LTEXT " .", IDC_STATIC, 10, 180 ,277, 20 + PUSHBUTTON "& ...", IDC_PARTMOREOPTS, 176,155,122,15 + LTEXT " """".", IDC_STATIC, 10, 180 ,277, 20 END IDD_BOOTOPTIONS DIALOGEX DISCARDABLE 0, 0, 305, 105 @@ -72,12 +72,12 @@ CAPTION " FONT 8, "MS Shell Dlg" BEGIN CONTROL " ", IDC_STATIC, "Button", BS_GROUPBOX, 4,1,298,30 - EDITTEXT IDC_PATH, 10,11,278,13, WS_VISIBLE + EDITTEXT IDC_PATH, 10,12,283,14, WS_VISIBLE CONTROL " ", IDC_STATIC, "Button", BS_GROUPBOX, 4,36,298,41 - CONTROL " (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 - CONTROL " ", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 + CONTROL " (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,49,278,11 + CONTROL " ", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,60,278,11 END IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 @@ -95,34 +95,34 @@ END IDD_RESTARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION " ReactOS" +CAPTION " ReactOS" FONT 8, "MS Shell Dlg" BEGIN - CONTROL " ReactOS", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL " ReactOS", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 LTEXT " ReactOS .", IDC_STATIC, 20, 50, 277, 10 - LTEXT " .", IDC_STATIC, 20, 80, 277, 10 + LTEXT " """" .", IDC_STATIC, 20, 80, 277, 10 CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 - LTEXT " . "\ - " .", IDC_STATIC, 10, 180, 297, 20 + LTEXT " . "\ + " """".", IDC_STATIC, 10, 176, 297, 20 END STRINGTABLE BEGIN - IDS_LANGTITLE " " + IDS_LANGTITLE " " IDS_LANGSUBTITLE " ." IDS_TYPETITLE " ReactOS" - IDS_TYPESUBTITLE " ." + IDS_TYPESUBTITLE " ." IDS_DEVICETITLE " " IDS_DEVICESUBTITLE " ." IDS_DRIVETITLE " " - IDS_DRIVESUBTITLE " , ." - IDS_PROCESSTITLE " , " - IDS_PROCESSSUBTITLE " , , " + IDS_DRIVESUBTITLE " , ." + IDS_PROCESSTITLE " , " + IDS_PROCESSSUBTITLE " , , " IDS_RESTARTTITLE " " IDS_RESTARTSUBTITLE " , " - IDS_ABORTSETUP " ReactOS . , ReactOS . ?" - IDS_ABORTSETUP2 " ?" + IDS_ABORTSETUP "ReactOS . , ReactOS. , ?" + IDS_ABORTSETUP2 " ?" END /* EOF */ From 578b10c107e0f2befd334078be0d303085109c7d Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 4 Aug 2008 13:43:10 +0000 Subject: [PATCH 132/304] - create a resource string for "create link" - implement a custom context menu for the control panel items - action "create link is not yet implemented svn path=/trunk/; revision=35096 --- reactos/dll/win32/shell32/cpanelfolder.c | 197 ++++++++++++++++++++++- reactos/dll/win32/shell32/lang/bg-BG.rc | 1 + reactos/dll/win32/shell32/lang/ca-ES.rc | 2 +- reactos/dll/win32/shell32/lang/cs-CZ.rc | 1 + reactos/dll/win32/shell32/lang/da-DK.rc | 1 + reactos/dll/win32/shell32/lang/de-DE.rc | 1 + reactos/dll/win32/shell32/lang/el-GR.rc | 1 + reactos/dll/win32/shell32/lang/en-GB.rc | 1 + reactos/dll/win32/shell32/lang/en-US.rc | 1 + reactos/dll/win32/shell32/lang/es-ES.rc | 1 + reactos/dll/win32/shell32/lang/fi-FI.rc | 1 + reactos/dll/win32/shell32/lang/fr-FR.rc | 1 + reactos/dll/win32/shell32/lang/hu-HU.rc | 1 + reactos/dll/win32/shell32/lang/it-IT.rc | 1 + reactos/dll/win32/shell32/lang/ja-JP.rc | 1 + reactos/dll/win32/shell32/lang/ko-KR.rc | 1 + reactos/dll/win32/shell32/lang/nl-NL.rc | 1 + reactos/dll/win32/shell32/lang/no-NO.rc | 1 + reactos/dll/win32/shell32/lang/pl-PL.rc | 1 + reactos/dll/win32/shell32/lang/pt-BR.rc | 1 + reactos/dll/win32/shell32/lang/pt-PT.rc | 1 + reactos/dll/win32/shell32/lang/ru-RU.rc | 1 + reactos/dll/win32/shell32/lang/sk-SK.rc | 1 + reactos/dll/win32/shell32/lang/sl-SI.rc | 1 + reactos/dll/win32/shell32/lang/sv-SE.rc | 1 + reactos/dll/win32/shell32/lang/tr-TR.rc | 1 + reactos/dll/win32/shell32/lang/uk-UA.rc | 3 +- reactos/dll/win32/shell32/lang/zh-CN.rc | 1 + reactos/dll/win32/shell32/lang/zh-TW.rc | 1 + reactos/dll/win32/shell32/shresdef.h | 2 + 30 files changed, 225 insertions(+), 5 deletions(-) diff --git a/reactos/dll/win32/shell32/cpanelfolder.c b/reactos/dll/win32/shell32/cpanelfolder.c index a5cb0328d85..853e8593549 100644 --- a/reactos/dll/win32/shell32/cpanelfolder.c +++ b/reactos/dll/win32/shell32/cpanelfolder.c @@ -18,7 +18,7 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#include "config.h" +#include "wine/config.h" #include "wine/port.h" #include @@ -63,24 +63,33 @@ typedef struct { const IPersistFolder2Vtbl *lpVtblPersistFolder2; const IShellExecuteHookWVtbl *lpVtblShellExecuteHookW; const IShellExecuteHookAVtbl *lpVtblShellExecuteHookA; - + const IContextMenu2Vtbl *lpVtblContextMenu; IUnknown *pUnkOuter; /* used for aggregation */ /* both paths are parsible from the desktop */ LPITEMIDLIST pidlRoot; /* absolute pidl */ int dwAttributes; /* attributes returned by GetAttributesOf FIXME: use it */ + LPCITEMIDLIST *apidl; + UINT cidl; } ICPanelImpl; static const IShellFolder2Vtbl vt_ShellFolder2; static const IPersistFolder2Vtbl vt_PersistFolder2; static const IShellExecuteHookWVtbl vt_ShellExecuteHookW; static const IShellExecuteHookAVtbl vt_ShellExecuteHookA; +static const IContextMenu2Vtbl vt_ContextMenu; static inline ICPanelImpl *impl_from_IPersistFolder2( IPersistFolder2 *iface ) { return (ICPanelImpl *)((char*)iface - FIELD_OFFSET(ICPanelImpl, lpVtblPersistFolder2)); } +static inline ICPanelImpl *impl_from_IContextMenu( IContextMenu2 *iface ) +{ + return (ICPanelImpl *)((char*)iface - FIELD_OFFSET(ICPanelImpl, lpVtblContextMenu)); +} + + static inline ICPanelImpl *impl_from_IShellExecuteHookW( IShellExecuteHookW *iface ) { return (ICPanelImpl *)((char*)iface - FIELD_OFFSET(ICPanelImpl, lpVtblShellExecuteHookW)); @@ -105,6 +114,7 @@ static inline ICPanelImpl *impl_from_IShellExecuteHookA( IShellExecuteHookA *ifa #define _IShellExecuteHookW_(This) (IShellExecuteHookW*)&(This->lpVtblShellExecuteHookW) #define _IShellExecuteHookA_(This) (IShellExecuteHookA*)&(This->lpVtblShellExecuteHookA) + /*********************************************************************** * IShellFolder [ControlPanel] implementation */ @@ -135,10 +145,13 @@ HRESULT WINAPI IControlPanel_Constructor(IUnknown* pUnkOuter, REFIID riid, LPVOI return E_OUTOFMEMORY; sf->ref = 0; + sf->apidl = NULL; + sf->cidl = 0; sf->lpVtbl = &vt_ShellFolder2; sf->lpVtblPersistFolder2 = &vt_PersistFolder2; sf->lpVtblShellExecuteHookW = &vt_ShellExecuteHookW; sf->lpVtblShellExecuteHookA = &vt_ShellExecuteHookA; + sf->lpVtblContextMenu = &vt_ContextMenu; sf->pidlRoot = _ILCreateControlPanel(); /* my qualified pidl */ sf->pUnkOuter = pUnkOuter ? pUnkOuter : _IUnknown_ (sf); @@ -611,7 +624,10 @@ ISF_ControlPanel_fnGetUIObjectOf(IShellFolder2 * iface, *ppvOut = NULL; if (IsEqualIID(riid, &IID_IContextMenu) &&(cidl >= 1)) { - hr = CDefFolderMenu_Create2(This->pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)iface, NULL, 0, NULL, (IContextMenu**)&pObj); + pObj = (IUnknown*)(&This->lpVtblContextMenu); + This->apidl = apidl; + This->cidl = cidl; + IUnknown_AddRef(pObj); } else if (IsEqualIID(riid, &IID_IDataObject) &&(cidl >= 1)) { pObj = (LPUNKNOWN) IDataObject_Constructor(hwndOwner, This->pidlRoot, apidl, cidl); hr = S_OK; @@ -1100,3 +1116,178 @@ static const IShellExecuteHookAVtbl vt_ShellExecuteHookA = IShellExecuteHookA_fnRelease, IShellExecuteHookA_fnExecute }; + +/************************************************************************** +* IContextMenu2 Implementation +*/ + +/************************************************************************ + * ICPanel_IContextMenu_QueryInterface + */ +static HRESULT WINAPI ICPanel_IContextMenu2_QueryInterface(IContextMenu2 * iface, REFIID iid, LPVOID * ppvObject) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)\n", This); + + return IUnknown_QueryInterface(_IUnknown_(This), iid, ppvObject); +} + +/************************************************************************ + * ICPanel_IContextMenu_AddRef + */ +static ULONG WINAPI ICPanel_IContextMenu2_AddRef(IContextMenu2 * iface) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_AddRef(_IUnknown_(This)); +} + +/************************************************************************ + * ICPanel_IContextMenu_Release + */ +static ULONG WINAPI ICPanel_IContextMenu2_Release(IContextMenu2 * iface) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_Release(_IUnknown_(This)); +} + +/************************************************************************** +* ICPanel_IContextMenu_QueryContextMenu() +*/ +static HRESULT WINAPI ICPanel_IContextMenu2_QueryContextMenu( + IContextMenu2 *iface, + HMENU hMenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + char szBuffer[30] = {0}; + ULONG Count = 1; + + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringA(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + Count++; + } + + if (LoadStringA(shell32_hInstance, IDS_CREATELINK, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + if (Count) + { + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_SEPARATOR, NULL, MFS_DEFAULT); + } + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + Count++; + } + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + + +/************************************************************************** +* ICPanel_IContextMenu_InvokeCommand() +*/ +static HRESULT WINAPI ICPanel_IContextMenu2_InvokeCommand( + IContextMenu2 *iface, + LPCMINVOKECOMMANDINFO lpcmi) +{ + WCHAR szBuffer[100]; + SHELLEXECUTEINFOW sei; + ICPanelImpl *This = impl_from_IContextMenu(iface); + + sprintfW(szBuffer, L"verb %p\n", lpcmi->lpVerb); + MessageBoxW(NULL, szBuffer, L"invoke", MB_OK); + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) + { + ZeroMemory(&sei, sizeof(sei)); + sei.cbSize = sizeof(sei); + sei.fMask = SEE_MASK_INVOKEIDLIST; + sei.lpIDList = ILCombine(This->pidlRoot, This->apidl[0]); + sei.hwnd = lpcmi->hwnd; + sei.nShow = SW_SHOWNORMAL; + sei.lpVerb = L"open"; + ShellExecuteExW(&sei); + if (sei.hInstApp <= (HINSTANCE)32) + return E_FAIL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(2)) + { + /* FIXME + * retrieve CSIDL_DESKTOPDIRECTORY path, + * retrieve name from pidl and create a link there + */ + FIXME("implement shortcuthandling\n"); + return NOERROR; + } + + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + return S_OK; +} + +/************************************************************************** + * ICPanel_IContextMenu_GetCommandString() + * + */ +static HRESULT WINAPI ICPanel_IContextMenu2_GetCommandString( + IContextMenu2 *iface, + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + + FIXME("unknown command string\n"); + return E_FAIL; +} + + + +/************************************************************************** +* ICPanel_IContextMenu_HandleMenuMsg() +*/ +static HRESULT WINAPI ICPanel_IContextMenu2_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + ICPanelImpl *This = impl_from_IContextMenu(iface); + + TRACE("ICPanel_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static const IContextMenu2Vtbl vt_ContextMenu = +{ + ICPanel_IContextMenu2_QueryInterface, + ICPanel_IContextMenu2_AddRef, + ICPanel_IContextMenu2_Release, + ICPanel_IContextMenu2_QueryContextMenu, + ICPanel_IContextMenu2_InvokeCommand, + ICPanel_IContextMenu2_GetCommandString, + ICPanel_IContextMenu2_HandleMenuMsg +}; + diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 3b57fa6eac5..8e1e95fe688 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -611,6 +611,7 @@ BEGIN IDS_VIEW_DETAILS "&" IDS_SELECT "" IDS_OPEN "" + IDS_CREATELINK " &" IDS_CREATEFOLDER_DENIED " : ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index fe88c5fb5f5..98375d0f01c 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -608,7 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" - + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" IDS_DELETEITEM_CAPTION "Confirm file deletion" diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 6fb71a9c049..9811b2b87d8 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -610,6 +610,7 @@ BEGIN IDS_VIEW_DETAILS "&Podrobnosti" IDS_SELECT "Vybrat" IDS_OPEN "Otevt" + IDS_CREATELINK "Vytvoit zstupc&e" IDS_CREATEFOLDER_DENIED "Nelze vytvoit novou sloku, protoe pstup byl odepen." IDS_CREATEFOLDER_CAPTION "Chyba pi pokusu vytvoit nov adres" diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index fbcbefc351b..2456d37c66f 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index f632c26d6b3..477f2593318 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -610,6 +610,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Auswhlen" IDS_OPEN "ffnen" + IDS_CREATELINK "&Verknpfung erstellen" IDS_CREATEFOLDER_DENIED "Es konnte kein neues Verzeichnis erstellt werden: Zugriff verweigert." IDS_CREATEFOLDER_CAPTION "Es trat ein Fehler beim Erstellen eines neuen Verzeichnisses auf." diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 7ba9d76efb4..6cc5616f975 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&" IDS_SELECT "" IDS_OPEN "" + IDS_CREATELINK " &" IDS_CREATEFOLDER_DENIED " : ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 969a7ebf1b9..65cfda4b430 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index edc3c0ee685..2bb84f00698 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -609,6 +609,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index ef989d6204d..a138db0813f 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -610,6 +610,7 @@ BEGIN IDS_VIEW_DETAILS "&Detalles" IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" + IDS_CREATELINK "C&rear acceso directo" IDS_CREATEFOLDER_DENIED "No se puede crear nueva carpeta: Permiso denegado." IDS_CREATEFOLDER_CAPTION "Error durante la creacin de una nueva carpeta" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 40497b06191..1f815ef8ec6 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Tiedot" IDS_SELECT "Valitse" IDS_OPEN "Avaa" + IDS_CREATELINK "Lu&o Linkki" IDS_CREATEFOLDER_DENIED "Uutta kansiota ei voitu luoda: Oikeudet eivt riit." IDS_CREATEFOLDER_CAPTION "Virhe luotaessa uutta kansiota" diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index b356a420052..92633562c7c 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -612,6 +612,7 @@ BEGIN IDS_VIEW_DETAILS "&Dtails" IDS_SELECT "Slectionner" IDS_OPEN "Ouvrir" + IDS_CREATELINK "Crer un &lien" IDS_CREATEFOLDER_DENIED "Impossible de crer le nouveau dossier : permission refuse." IDS_CREATEFOLDER_CAPTION "Erreur lors de la cration du nouveau dossier" diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 585efe9e5ed..8b871c32f77 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -611,6 +611,7 @@ BEGIN IDS_VIEW_DETAILS "Rszletek" IDS_SELECT "Kivlaszt" IDS_OPEN "Megnyit" + IDS_CREATELINK "Parancsikon ltrehozsa" IDS_CREATEFOLDER_DENIED "Nem hozhat ltre j mappa: Nincs hozz engedlyed." IDS_CREATEFOLDER_CAPTION "Hiba a mappa ltrehozsakor" diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index f98e06696fc..4c0d83f1a07 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -609,6 +609,7 @@ BEGIN IDS_VIEW_DETAILS "&Dettagli" IDS_SELECT "Selezione" IDS_OPEN "Apri" + IDS_CREATELINK "&Crea Collegamento" IDS_CREATEFOLDER_DENIED "Impossibile creare la cartella: Accesso negato." IDS_CREATEFOLDER_CAPTION "Errore durante la creazione della cartella" diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index a3355332a30..dc8bf8a2dd4 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "ڍ(&D)" IDS_SELECT "I" IDS_OPEN "J" + IDS_CREATELINK "V[gJbg̍쐬(&L)" IDS_CREATEFOLDER_DENIED "VtH_쐬ł܂ł: ANZX܂B" IDS_CREATEFOLDER_CAPTION "VtH_̍쐬ɃG[܂" diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index c62952cc37b..496b721e241 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 1a1b051658e..f89f4605ddd 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index e514e4eb1f3..07fa132814f 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -587,6 +587,7 @@ BEGIN IDS_VIEW_DETAILS "&Detaljer" IDS_SELECT "Velg" IDS_OPEN "pne" + IDS_CREATELINK "&Opprett snarvei" IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet." IDS_CREATEFOLDER_CAPTION "Klarte ikke opprette ny mappe" diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index f477fc58442..68522c6d701 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -614,6 +614,7 @@ BEGIN IDS_VIEW_DETAILS "&Szczegy" IDS_SELECT "Zaznacz" IDS_OPEN "Otwrz" + IDS_CREATELINK "Utwrz &Skrt" IDS_CREATEFOLDER_DENIED "Nie mog utworzy nowego katalogu: Brak dostpu." IDS_CREATEFOLDER_CAPTION "Bd przy tworzeniu nowego katalogu." diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index d8d97b405ed..de84fa3f517 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -610,6 +610,7 @@ BEGIN IDS_VIEW_DETAILS "&Detalhes" IDS_SELECT "Selecionar" IDS_OPEN "Abrir" + IDS_CREATELINK "Criar a&talho" IDS_CREATEFOLDER_DENIED "No pode criar nova pasta: Permisso negada." IDS_CREATEFOLDER_CAPTION "Erro durante a criao da nova pasta" diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 30ba78f5171..4f65147eb95 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -610,6 +610,7 @@ BEGIN IDS_VIEW_DETAILS "&Detalhes" IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "No possvel criar nova pasta: Permisso negada." IDS_CREATEFOLDER_CAPTION "Erro durante a criao da nova pasta" diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 35beb9c9a1b..b6075d2eab1 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -607,6 +607,7 @@ BEGIN IDS_VIEW_DETAILS "&" IDS_SELECT "&" IDS_OPEN "&" + IDS_CREATELINK " &" IDS_CREATEFOLDER_DENIED " - ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 320f517fa20..c9f2b04b1b1 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -614,6 +614,7 @@ BEGIN IDS_VIEW_DETAILS "&Podrobnosti" IDS_SELECT "Vybra" IDS_OPEN "Otvori" + IDS_CREATELINK "Vytvori o&dkaz" IDS_CREATEFOLDER_DENIED "Nie je mon vytvori nov prieinok: Prstup zamietnut." IDS_CREATEFOLDER_CAPTION "Chyba poas vytvrania novho prieinka" diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index 5c056ed4f76..e1213815764 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 1e3c461ece5..75a0fb2a894 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index ba81db6e160..ede4a62b3f8 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -608,6 +608,7 @@ BEGIN IDS_VIEW_DETAILS "&Ayrntl" IDS_SELECT "Se" IDS_OPEN "A" + IDS_CREATELINK "Ksayol O&lutur" IDS_CREATEFOLDER_DENIED "Yeni dizin oluturulamyor: Eriim engellendi." IDS_CREATEFOLDER_CAPTION "Dizin oluturma srasnda hata" diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 3ad14b59912..32648cc4544 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -600,6 +600,7 @@ BEGIN IDS_DESKTOP " " IDS_MYCOMPUTER "̳ '" IDS_RECYCLEBIN_FOLDER_NAME "" + IDS_CONTROLPANEL " " /* context menus */ IDS_VIEW_LARGE "& " @@ -608,7 +609,7 @@ BEGIN IDS_VIEW_DETAILS "&" IDS_SELECT "&" IDS_OPEN "³&" - IDS_CONTROLPANEL " " + IDS_CREATELINK " &" IDS_CREATEFOLDER_DENIED " : ³ ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 8b71835dfb6..c912ddcb42d 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -597,6 +597,7 @@ BEGIN IDS_VIEW_DETAILS "ϸϢ(&D)" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "ݷʽ(&L)" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index 5de2f94924c..014550ea030 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -609,6 +609,7 @@ BEGIN IDS_VIEW_DETAILS "&Details" IDS_SELECT "Select" IDS_OPEN "Open" + IDS_CREATELINK "Create &Link" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index aaa96e51853..4be17316838 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -141,6 +141,8 @@ #define IDS_PLAY_VERB 305 #define IDS_PREVIEW_VERB 306 #define IDS_FILE_FOLDER 307 +#define IDS_CREATELINK 308 + /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 From 65c33891f60cee407950598ce207160262e80922 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 4 Aug 2008 13:47:11 +0000 Subject: [PATCH 133/304] - remove debugging msgbox - fix default menu item state svn path=/trunk/; revision=35097 --- reactos/dll/win32/shell32/cpanelfolder.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/reactos/dll/win32/shell32/cpanelfolder.c b/reactos/dll/win32/shell32/cpanelfolder.c index 853e8593549..8a4e42e25b3 100644 --- a/reactos/dll/win32/shell32/cpanelfolder.c +++ b/reactos/dll/win32/shell32/cpanelfolder.c @@ -1187,11 +1187,11 @@ static HRESULT WINAPI ICPanel_IContextMenu2_QueryContextMenu( { if (Count) { - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_SEPARATOR, NULL, MFS_DEFAULT); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_SEPARATOR, NULL, MFS_ENABLED); } szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); Count++; } return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); @@ -1205,13 +1205,9 @@ static HRESULT WINAPI ICPanel_IContextMenu2_InvokeCommand( IContextMenu2 *iface, LPCMINVOKECOMMANDINFO lpcmi) { - WCHAR szBuffer[100]; SHELLEXECUTEINFOW sei; ICPanelImpl *This = impl_from_IContextMenu(iface); - sprintfW(szBuffer, L"verb %p\n", lpcmi->lpVerb); - MessageBoxW(NULL, szBuffer, L"invoke", MB_OK); - if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) { ZeroMemory(&sei, sizeof(sei)); From 489d4d8089f805f9957b31573bef47f9257784a6 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Mon, 4 Aug 2008 14:16:01 +0000 Subject: [PATCH 134/304] - cmd_label: If a label is given on the command line, don't truncate it to only 12 characters; NTFS supports up to 32. Also, use _tcsncat, since _tcsncpy won't always nul-terminate. - Don't show the old volume information if a label was given on the command line. (Bug 3621) - If setting the label was unsuccessful, give an error message. svn path=/trunk/; revision=35098 --- reactos/base/shell/cmd/label.c | 41 +++++++++++++++++++--------------- 1 file changed, 23 insertions(+), 18 deletions(-) diff --git a/reactos/base/shell/cmd/label.c b/reactos/base/shell/cmd/label.c index f87d294b873..745ff900dcd 100644 --- a/reactos/base/shell/cmd/label.c +++ b/reactos/base/shell/cmd/label.c @@ -57,7 +57,7 @@ INT cmd_label (LPTSTR cmd, LPTSTR param) szRootPath[0] = szCurPath[0]; } - _tcsncpy (szLabel, param, 12); + _tcsncat(szLabel, param, 79); /* check root path */ if (!IsValidPathName (szRootPath)) @@ -67,30 +67,35 @@ INT cmd_label (LPTSTR cmd, LPTSTR param) return 1; } - GetVolumeInformation(szRootPath, szOldLabel, 80, &dwSerialNr, - NULL, NULL, NULL, 0); - - /* print drive info */ - if (szOldLabel[0] != _T('\0')) - { - ConOutResPrintf(STRING_LABEL_HELP2, _totupper(szRootPath[0]), szOldLabel); - } - else - { - ConOutResPrintf(STRING_LABEL_HELP3, _totupper(szRootPath[0])); - } - - /* print the volume serial number */ - ConOutResPrintf(STRING_LABEL_HELP4, HIWORD(dwSerialNr), LOWORD(dwSerialNr)); - if (szLabel[0] == _T('\0')) { + GetVolumeInformation(szRootPath, szOldLabel, 80, &dwSerialNr, + NULL, NULL, NULL, 0); + + /* print drive info */ + if (szOldLabel[0] != _T('\0')) + { + ConOutResPrintf(STRING_LABEL_HELP2, _totupper(szRootPath[0]), szOldLabel); + } + else + { + ConOutResPrintf(STRING_LABEL_HELP3, _totupper(szRootPath[0])); + } + + /* print the volume serial number */ + ConOutResPrintf(STRING_LABEL_HELP4, HIWORD(dwSerialNr), LOWORD(dwSerialNr)); + ConOutResPuts(STRING_LABEL_HELP5); ConInString(szLabel, 80); } - SetVolumeLabel(szRootPath, szLabel); + if (!SetVolumeLabel(szRootPath, szLabel)) + { + ConOutFormatMessage(GetLastError()); + nErrorLevel = 1; + return 1; + } return 0; } From 7d50619c45abd9b0d658295b834a883163e7432d Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Mon, 4 Aug 2008 14:20:16 +0000 Subject: [PATCH 135/304] - Update Russian translation svn path=/trunk/; revision=35099 --- reactos/dll/cpl/main/lang/ru-RU.rc | 140 ++++++++++++++--------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/reactos/dll/cpl/main/lang/ru-RU.rc b/reactos/dll/cpl/main/lang/ru-RU.rc index 9b61b28d018..a3124561861 100644 --- a/reactos/dll/cpl/main/lang/ru-RU.rc +++ b/reactos/dll/cpl/main/lang/ru-RU.rc @@ -5,24 +5,24 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX " ", -1, 5, 5, 230, 150 - ICON IDI_REPEAT_DELAY, IDC_ICON_REPEAT_DELAY, 15, 15, 15, 15 - LTEXT "& :", -1, 40, 15, 160, 10 - LTEXT "", -1, 25, 30, 28, 10 - LTEXT "", -1, 200, 30, 25, 10 - CONTROL "",IDC_SLIDER_REPEAT_DELAY, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 30, 130, 17 + GROUPBOX " ", -1, 5, 5, 236, 150 + ICON IDI_REPEAT_DELAY, IDC_ICON_REPEAT_DELAY, 15, 20, 15, 15 + LTEXT "& :", -1, 51, 20, 160, 10 + LTEXT "", -1, 50, 42, 35, 11 + LTEXT "", -1, 190, 42, 33, 10 + CONTROL "",IDC_SLIDER_REPEAT_DELAY, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 84, 35, 102, 17 ICON IDI_REPEAT_RATE, IDC_ICON_REPEAT_RATE, 15, 70, 15, 15 - LTEXT "& :", -1, 40, 70, 100, 10 - LTEXT "", -1, 40, 85, 20, 10 - LTEXT "", -1, 200, 85, 20, 10 - CONTROL "",IDC_SLIDER_REPEAT_RATE, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 85, 130, 17 - LTEXT "& , , :", -1, 15, 105, 200, 22 - EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 130, 200, 15, WS_CHILD | WS_VISIBLE | WS_GROUP - GROUPBOX " ", -1, 5, 165, 230, 50 - LTEXT "", IDC_TEXT_CURSOR_BLINK, 20, 185, 1, 8 - LTEXT "", -1, 40, 185, 30, 10 - LTEXT "", -1, 200, 185, 30, 10 - CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 185, 130, 17 + LTEXT "& :", -1, 51, 70, 100, 10 + LTEXT "", -1, 60, 91, 22, 10 + LTEXT "", -1, 191, 91, 22, 10 + CONTROL "",IDC_SLIDER_REPEAT_RATE, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 84, 85, 102, 17 + LTEXT "& , , :", -1, 15, 105, 216, 22 + EDITTEXT IDC_EDIT_REPEAT_RATE, 15, 130, 213, 15, WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX " ", -1, 5, 160, 236, 50 + LTEXT "", IDC_TEXT_CURSOR_BLINK, 23, 180, 1, 8 + LTEXT "", -1, 45, 180, 30, 10 + LTEXT "", -1, 205, 180, 30, 10 + CONTROL "",IDC_SLIDER_CURSOR_BLINK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 70, 180, 130, 17 END IDD_HARDWARE DIALOGEX 0, 0, 246, 228 @@ -32,17 +32,17 @@ FONT 8, "MS Shell Dlg" BEGIN END -IDD_CLICK_LOCK DIALOGEX 0, 0, 246, 100 +IDD_CLICK_LOCK DIALOGEX 0, 0, 234, 100 STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" BEGIN - LTEXT "", -1, 35, 50, 30, 10 - LTEXT "", -1, 140, 50, 30, 10 - CONTROL "",IDC_SLIDER_CLICK_LOCK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 65, 50, 70, 17 - PUSHBUTTON "&OK", IDOK, 120, 75, 50, 15 - PUSHBUTTON "&", IDCANCEL, 175, 75, 50, 15 - LTEXT "&Adjust how long you need to hold down a mouse or trackball button before your click is locked",-1,60,15,170,30 + LTEXT "", -1, 60, 50, 30, 10 + LTEXT "", -1, 165, 50, 30, 10 + CONTROL "",IDC_SLIDER_CLICK_LOCK, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 90, 50, 70, 17 + PUSHBUTTON "&OK", IDOK, 120, 79, 50, 15 + PUSHBUTTON "&", IDCANCEL, 177, 79, 50, 15 + LTEXT "&, , .",-1,60,15,170,30 ICON IDI_LOOK_KEY, IDC_ICON_CLICK_LOCK, 15, 15, 15, 15 END @@ -51,20 +51,20 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION " " FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX " ", -1, 5, 5, 230, 70 - CHECKBOX "& ", IDC_SWAP_MOUSE_BUTTONS, 10, 15, 140, 10 - CONTROL "", IDC_IMAGE_SWAP_MOUSE, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 165, 15, 65, 57, WS_EX_STATICEDGE - LTEXT " , . , .", -1, 10, 30, 150, 30 - GROUPBOX " ", -1, 5, 75, 230, 70 - LTEXT " . , .", -1, 10, 85, 150, 30 - LTEXT "&: ", -1, 10, 120, 90, 8 - LTEXT "", -1, 140, 120, 30, 8 - CONTROL "",IDC_SLIDER_DOUBLE_CLICK_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 67, 121, 70, 17 - CONTROL "", IDC_IMAGE_DOUBLE_CLICK_SPEED, "Static", SS_ICON | SS_NOTIFY | SS_CENTERIMAGE | WS_VISIBLE, 165, 85, 65, 57, WS_EX_STATICEDGE - GROUPBOX " ", -1, 5, 150, 230, 70 - CHECKBOX "& ", IDC_CHECK_CLICK_LOCK, 10, 160, 84, 20 - PUSHBUTTON "&...", IDC_BUTTON_CLICK_LOCK, 170, 160, 55, 14 - LTEXT " . . .", -1, 10, 180, 200, 30 + GROUPBOX " ", -1, 5, 5, 236, 70 + CHECKBOX "& ", IDC_SWAP_MOUSE_BUTTONS, 14, 17, 140, 10 + CONTROL "", IDC_IMAGE_SWAP_MOUSE, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 176, 16, 58, 51, WS_EX_STATICEDGE + LTEXT " , . , .", -1, 12, 30, 150, 38 + GROUPBOX " ", -1, 5, 79, 236, 70 + LTEXT " . , .", -1, 12, 89, 160, 35 + LTEXT "&: ", -1, 12, 124, 61, 10 + LTEXT "", -1, 146, 124, 24, 10 + CONTROL "",IDC_SLIDER_DOUBLE_CLICK_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 71, 125, 70, 17 + CONTROL "", IDC_IMAGE_DOUBLE_CLICK_SPEED, "Static", SS_ICON | SS_NOTIFY | SS_CENTERIMAGE | WS_VISIBLE, 176, 90, 58, 51, WS_EX_STATICEDGE + GROUPBOX " ", -1, 5, 153, 236, 70 + CHECKBOX "& ", IDC_CHECK_CLICK_LOCK, 14, 164, 99, 17 + PUSHBUTTON "&...", IDC_BUTTON_CLICK_LOCK, 173, 165, 55, 14 + LTEXT " . . .", -1, 12, 183, 222, 36 END IDD_PAGE_POINTER DIALOGEX 0, 0, 246, 228 @@ -72,27 +72,27 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "", -1, 5, 5, 170, 45 - COMBOBOX IDC_COMBO_CURSOR_SCHEME, 10, 15, 160, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP - PUSHBUTTON " &...", IDC_BUTTON_SAVEAS_SCHEME, 60, 30, 65, 15 - PUSHBUTTON "&", IDC_BUTTON_DELETE_SCHEME, 130, 30, 40, 15 - CONTROL "", IDC_IMAGE_CURRENT_CURSOR, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 190, 9, 45, 41, WS_EX_STATICEDGE + GROUPBOX "", -1, 5, 5, 183, 45 + COMBOBOX IDC_COMBO_CURSOR_SCHEME, 10, 15, 172, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + PUSHBUTTON " &...", IDC_BUTTON_SAVEAS_SCHEME, 58, 30, 70, 14 + PUSHBUTTON "&", IDC_BUTTON_DELETE_SCHEME, 132, 30, 50, 14 + CONTROL "", IDC_IMAGE_CURRENT_CURSOR, "Static", SS_ICON | SS_CENTERIMAGE | WS_VISIBLE, 195, 9, 45, 41, WS_EX_STATICEDGE LTEXT "&", -1, 5, 60, 40, 10 - LISTBOX IDC_LISTBOX_CURSOR, 5, 70, 230, 120, WS_VISIBLE | WS_BORDER | WS_TABSTOP | WS_VSCROLL | LBS_OWNERDRAWFIXED | LBS_NOTIFY - CHECKBOX " & ", IDC_CHECK_DROP_SHADOW, 5, 203, 105, 10 - PUSHBUTTON "& ", IDC_BUTTON_USE_DEFAULT_CURSOR, 115, 200, 60, 15 - PUSHBUTTON "&", IDC_BUTTON_BROWSE_CURSOR, 180, 200, 55, 15 + LISTBOX IDC_LISTBOX_CURSOR, 5, 70, 235, 125, WS_VISIBLE | WS_BORDER | WS_TABSTOP | WS_VSCROLL | LBS_OWNERDRAWFIXED | LBS_NOTIFY + CHECKBOX " & ", IDC_CHECK_DROP_SHADOW, 5, 203, 108, 10 + PUSHBUTTON "& ", IDC_BUTTON_USE_DEFAULT_CURSOR, 116, 200, 64, 14 + PUSHBUTTON "&", IDC_BUTTON_BROWSE_CURSOR, 185, 200, 55, 14 END -IDD_CURSOR_SCHEME_SAVEAS DIALOGEX 0, 0, 200, 75 +IDD_CURSOR_SCHEME_SAVEAS DIALOGEX 0, 0, 200, 65 STYLE DS_SHELLFONT | WS_CAPTION | WS_SYSMENU CAPTION " " FONT 8, "MS Shell Dlg" BEGIN - LTEXT " :", -1, 5, 5, 100, 10 - EDITTEXT IDC_EDIT_SCHEME_NAME, 5, 15, 180, 15, WS_CHILD | WS_VISIBLE | WS_GROUP - PUSHBUTTON "&OK", IDOK, 60, 45, 50, 15 - PUSHBUTTON "&", IDCANCEL, 115, 45, 50, 15 + LTEXT " :", -1, 5, 5, 190, 10 + EDITTEXT IDC_EDIT_SCHEME_NAME, 5, 18, 190, 15, WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&OK", IDOK, 90, 45, 50, 15 + PUSHBUTTON "&", IDCANCEL, 145, 45, 50, 15 END @@ -101,28 +101,28 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION " " FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "", -1, 5, 5, 230, 60 + GROUPBOX "", -1, 5, 5, 236, 60 LTEXT "& :", -1, 60, 15, 150, 10 LTEXT "", -1, 60, 30, 20, 10 CONTROL "",IDC_SLIDER_MOUSE_SPEED, "msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 90, 30, 70, 17 LTEXT "", -1, 170, 30, 20, 10 - ICON IDI_MOUSE_SPEED, IDC_ICON_MOUSE_SPEED, 15, 15, 15, 15 + ICON IDI_MOUSE_SPEED, IDC_ICON_MOUSE_SPEED, 15, 18, 15, 15 CHECKBOX "& ", IDC_CHECK_POINTER_PRECISION, 20, 50, 205, 10 - GROUPBOX " ", -1, 5, 65, 230, 40 + GROUPBOX " ", -1, 5, 71, 236, 42 CHECKBOX "& , ", - IDC_CHECK_SNAP_TO, 40, 82, 170, 20, BS_MULTILINE | BS_TOP - ICON IDI_MOUSE_BUTTON, IDC_ICON_SNAP_TO, 15, 75, 15, 15 - GROUPBOX "", -1, 5, 105, 230, 95 - CHECKBOX "& ", IDC_CHECK_POINTER_TRAIL, 40, 115, 135, 10 - LTEXT "", IDC_TEXT_TRAIL_SHORT, 54, 130, 30, 10 - LTEXT "", IDC_TEXT_TRAIL_LONG, 160, 130, 30, 10 - ICON IDI_MOUSE_TRAILS, IDC_ICON_POINTER_TRAIL, 15, 115, 15, 15 - CONTROL "", IDC_SLIDER_POINTER_TRAIL ,"msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 82, 130, 70, 17 - CHECKBOX "& ", IDC_CHECK_HIDE_POINTER, 40, 150, 190, 20 - ICON IDI_MOUSE_SPEED, IDC_ICON_HIDE_POINTER, 15, 145, 15, 15 + IDC_CHECK_SNAP_TO, 44, 88, 170, 20, BS_MULTILINE | BS_TOP + ICON IDI_MOUSE_BUTTON, IDC_ICON_SNAP_TO, 15, 83, 15, 15 + GROUPBOX "", -1, 5, 118, 236, 104 + CHECKBOX "& ", IDC_CHECK_POINTER_TRAIL, 44, 135, 135, 10 + LTEXT "", IDC_TEXT_TRAIL_SHORT, 54, 149, 30, 10 + LTEXT "", IDC_TEXT_TRAIL_LONG, 160, 149, 30, 10 + ICON IDI_MOUSE_TRAILS, IDC_ICON_POINTER_TRAIL, 15, 134, 15, 15 + CONTROL "", IDC_SLIDER_POINTER_TRAIL ,"msctls_trackbar32", TBS_AUTOTICKS | WS_TABSTOP, 82, 146, 70, 17 + CHECKBOX "& ", IDC_CHECK_HIDE_POINTER, 44, 164, 190, 20 + ICON IDI_MOUSE_SPEED, IDC_ICON_HIDE_POINTER, 15, 167, 15, 15 CHECKBOX " & CTRL", - IDC_CHECK_SHOW_POINTER, 40, 175, 170, 20, BS_MULTILINE | BS_TOP - ICON IDI_MOUSE_POINTER, IDC_ICON_SHOW_POINTER, 15, 170, 15, 15 + IDC_CHECK_SHOW_POINTER, 44, 197, 186, 20, BS_MULTILINE | BS_TOP + ICON IDI_MOUSE_POINTER, IDC_ICON_SHOW_POINTER, 15, 194, 15, 15 END IDD_PAGE_WHEEL DIALOGEX 0, 0, 246, 228 @@ -130,9 +130,9 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "", -1, 5, 5, 230, 80 - ICON IDI_MOUSE_WHEEL, IDC_ICON_WHEEL, 20, 20, 32, 32 - LTEXT " :", -1, 20, 15, 212, 10 + GROUPBOX "", -1, 5, 5, 236, 80 + ICON IDI_MOUSE_WHEEL, IDC_ICON_WHEEL, 20, 28, 32, 32 + LTEXT " :", -1, 20, 17, 212, 10 RADIOBUTTON " &:", IDC_RADIO_WHEEL_SCROLL_LINES, 60, 30, 150, 10, WS_VISIBLE | WS_GROUP | WS_TABSTOP RADIOBUTTON " &", IDC_RADIO_WHEEL_SCROLL_PAGE, 60, 65, 90, 10 EDITTEXT IDC_EDIT_WHEEL_SCROLL_LINES, 70, 45, 56, 12, ES_RIGHT | WS_VISIBLE | WS_GROUP | WS_TABSTOP From 3841e5960457ae6cadc86a3392458a13e2777d94 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 4 Aug 2008 14:54:53 +0000 Subject: [PATCH 136/304] - implement executing control panel item by its CLSID - should make applets like folder options, antivir(not a true applet) start svn path=/trunk/; revision=35100 --- reactos/dll/win32/shell32/cpanelfolder.c | 62 ++++++++++++++++++++++-- 1 file changed, 58 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/shell32/cpanelfolder.c b/reactos/dll/win32/shell32/cpanelfolder.c index 8a4e42e25b3..7e2d60b506f 100644 --- a/reactos/dll/win32/shell32/cpanelfolder.c +++ b/reactos/dll/win32/shell32/cpanelfolder.c @@ -984,6 +984,45 @@ static ULONG STDMETHODCALLTYPE IShellExecuteHookW_fnRelease(IShellExecuteHookW* return IUnknown_Release(This->pUnkOuter); } +HRESULT +ExecuteAppletFromCLSID(LPOLESTR pOleStr) +{ + WCHAR szCmd[MAX_PATH]; + WCHAR szExpCmd[MAX_PATH]; + PROCESS_INFORMATION pi; + STARTUPINFOW si; + WCHAR szBuffer[90] = { 'C', 'L', 'S', 'I', 'D', '\\', 0 }; + DWORD dwType, dwSize; + + wcscpy(&szBuffer[6], pOleStr); + wcscat(szBuffer, L"\\shell\\open\\command"); + + dwSize = sizeof(szCmd); + if (RegGetValueW(HKEY_CLASSES_ROOT, szBuffer, NULL, RRF_RT_REG_SZ, &dwType, (PVOID)szCmd, &dwSize) != ERROR_SUCCESS) + { + ERR("RegGetValueW failed with %u\n", GetLastError()); + return E_FAIL; + } + +#if 0 + if (dwType != RRF_RT_REG_SZ && dwType != RRF_RT_REG_EXPAND_SZ) + return E_FAIL; +#endif + + if (!ExpandEnvironmentStringsW(szCmd, szExpCmd, sizeof(szExpCmd)/sizeof(WCHAR))) + return E_FAIL; + + ZeroMemory(&si, sizeof(si)); + si.cb = sizeof(si); + if (!CreateProcessW(NULL, szExpCmd, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi)) + return E_FAIL; + + CloseHandle(pi.hProcess); + CloseHandle(pi.hThread); + return S_OK; +} + + static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LPSHELLEXECUTEINFOW psei) { static const WCHAR wCplopen[] = {'c','p','l','o','p','e','n','\0'}; @@ -994,18 +1033,33 @@ static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LP WCHAR path[MAX_PATH]; WCHAR params[MAX_PATH]; BOOL ret; + HRESULT hr; int l; TRACE("(%p)->execute(%p)\n", This, psei); if (!psei) - return E_INVALIDARG; + return E_INVALIDARG; pcpanel = _ILGetCPanelPointer(ILFindLastID(psei->lpIDList)); if (!pcpanel) - return E_INVALIDARG; + { + LPOLESTR pOleStr; + IID * iid = _ILGetGUIDPointer(ILFindLastID(psei->lpIDList)); + if (!iid) + return E_INVALIDARG; + if (StringFromCLSID(iid, &pOleStr) == S_OK) + { + + hr = ExecuteAppletFromCLSID(pOleStr); + CoTaskMemFree(pOleStr); + return hr; + } + + return E_INVALIDARG; + } path[0] = '\"'; /* Return value from MultiByteToWideChar includes terminating NUL, which * compensates for the starting double quote we just put in */ @@ -1025,9 +1079,9 @@ static HRESULT WINAPI IShellExecuteHookW_fnExecute(IShellExecuteHookW* iface, LP ret = ShellExecuteExW(&sei_tmp); if (ret) - return S_OK; + return S_OK; else - return S_FALSE; + return S_FALSE; } static const IShellExecuteHookWVtbl vt_ShellExecuteHookW = From 9a37df12d72237588d645d480f0bf55e588d6322 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Mon, 4 Aug 2008 15:48:46 +0000 Subject: [PATCH 137/304] - Export KeI386MachineType and KeInitializeThreadedDpc - Stubplement and export IoEnumerateRegisteredFiltersList, IoGetPagingIoPriority, KdRefreshDebuggerNotPresent, KeAcquireInStackQueuedSpinLockForDpc, KeReleaseInStackQueuedSpinLockForDpc, KeAcquireSpinLockForDpc, KeReleaseSpinLockForDpc, KeRegisterNmiCallback, KeDeregisterNmiCallback, KeInitializeCrashDumpHeader, KeTestSpinLock and MmAllocatePagesForMdlEx - Add IO_PAGING_PRIORITY enumeration and PNMI_CALLBACK prototype to headers svn path=/trunk/; revision=35103 --- reactos/include/ddk/winddk.h | 14 ++++++++ reactos/ntoskrnl/io/iomgr/irp.c | 13 +++++++ reactos/ntoskrnl/io/iomgr/volume.c | 13 +++++++ reactos/ntoskrnl/kd/kdmain.c | 13 +++++++ reactos/ntoskrnl/kd64/kdapi.c | 11 ++++++ reactos/ntoskrnl/ke/bug.c | 38 +++++++++++++++++++++ reactos/ntoskrnl/ke/spinlock.c | 55 ++++++++++++++++++++++++++++++ reactos/ntoskrnl/mm/mdlsup.c | 16 +++++++++ reactos/ntoskrnl/ntoskrnl_i386.def | 28 +++++++-------- 9 files changed, 187 insertions(+), 14 deletions(-) diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index 208294937e0..da2dfe0e1f4 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -747,6 +747,15 @@ typedef struct _KUSER_SHARED_DATA #define IRP_MN_REGINFO_EX 0x0b +typedef enum _IO_PAGING_PRIORITY +{ + IoPagingPriorityInvalid, + IoPagingPriorityNormal, + IoPagingPriorityHigh, + IoPagingPriorityReserved1, + IoPagingPriorityReserved2 +} IO_PAGING_PRIORITY; + typedef enum _IO_ALLOCATION_ACTION { KeepObject = 1, DeallocateObject, @@ -4856,6 +4865,11 @@ typedef struct _KBUGCHECK_CALLBACK_RECORD { UCHAR State; } KBUGCHECK_CALLBACK_RECORD, *PKBUGCHECK_CALLBACK_RECORD; +typedef BOOLEAN +(DDKAPI *PNMI_CALLBACK)( + IN PVOID Context, + IN BOOLEAN Handled); + /* * VOID * KeInitializeCallbackRecord( diff --git a/reactos/ntoskrnl/io/iomgr/irp.c b/reactos/ntoskrnl/io/iomgr/irp.c index b204045d015..4b6842d84d8 100644 --- a/reactos/ntoskrnl/io/iomgr/irp.c +++ b/reactos/ntoskrnl/io/iomgr/irp.c @@ -1534,6 +1534,19 @@ IoFreeIrp(IN PIRP Irp) } } +/* + * @unimplemented + */ +IO_PAGING_PRIORITY +NTAPI +IoGetPagingIoPriority(IN PIRP Irp) +{ + UNIMPLEMENTED; + + /* Lie and say this isn't a paging IRP -- FIXME! */ + return IoPagingPriorityInvalid; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/io/iomgr/volume.c b/reactos/ntoskrnl/io/iomgr/volume.c index 01e940d5ae8..14adb252c10 100644 --- a/reactos/ntoskrnl/io/iomgr/volume.c +++ b/reactos/ntoskrnl/io/iomgr/volume.c @@ -645,6 +645,19 @@ IopMountVolume(IN PDEVICE_OBJECT DeviceObject, /* PUBLIC FUNCTIONS **********************************************************/ +/* + * @unimplemented + */ +NTSTATUS +NTAPI +IoEnumerateRegisteredFiltersList(IN PDRIVER_OBJECT *DriverObjectList, + IN ULONG DriverObjectListSize, + OUT PULONG ActualNumberDriverObjects) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/kd/kdmain.c b/reactos/ntoskrnl/kd/kdmain.c index 22836886792..eacf3ef8e7d 100644 --- a/reactos/ntoskrnl/kd/kdmain.c +++ b/reactos/ntoskrnl/kd/kdmain.c @@ -207,6 +207,19 @@ KdpCallGdb(IN PKTRAP_FRAME TrapFrame, /* PUBLIC FUNCTIONS *********************************************************/ +/* + * @implemented + */ +BOOLEAN +NTAPI +KdRefreshDebuggerNotPresent(VOID) +{ + UNIMPLEMENTED; + + /* Just return whatever was set previously -- FIXME! */ + return KdDebuggerNotPresent; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/kd64/kdapi.c b/reactos/ntoskrnl/kd64/kdapi.c index e8854d64546..f06250838c7 100644 --- a/reactos/ntoskrnl/kd64/kdapi.c +++ b/reactos/ntoskrnl/kd64/kdapi.c @@ -1300,6 +1300,17 @@ KdDisableDebugger(VOID) return STATUS_SUCCESS; } +/* + * @unimplemented + */ +BOOLEAN +NTAPI +KdRefreshDebuggerNotPresent(VOID) +{ + /* HACK */ + return KdDebuggerNotPresent; +} + NTSTATUS NTAPI NtQueryDebugFilterState(ULONG ComponentId, diff --git a/reactos/ntoskrnl/ke/bug.c b/reactos/ntoskrnl/ke/bug.c index 73cb0ae3671..3d431d5be17 100644 --- a/reactos/ntoskrnl/ke/bug.c +++ b/reactos/ntoskrnl/ke/bug.c @@ -1207,6 +1207,21 @@ KeBugCheckWithTf(IN ULONG BugCheckCode, /* PUBLIC FUNCTIONS **********************************************************/ +/* + * @unimplemented + */ +NTSTATUS +NTAPI +KeInitializeCrashDumpHeader(IN ULONG Type, + IN ULONG Flags, + OUT PVOID Buffer, + IN ULONG BufferSize, + OUT ULONG BufferNeeded OPTIONAL) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + /* * @implemented */ @@ -1262,6 +1277,17 @@ KeDeregisterBugCheckReasonCallback( return Status; } +/* + * @unimplemented + */ +NTSTATUS +NTAPI +KeDeregisterNmiCallback(PVOID Handle) +{ + UNIMPLEMENTED; + return STATUS_UNSUCCESSFUL; +} + /* * @implemented */ @@ -1332,6 +1358,18 @@ KeRegisterBugCheckReasonCallback( return Status; } +/* + * @unimplemented + */ +PVOID +NTAPI +KeRegisterNmiCallback(IN PNMI_CALLBACK CallbackRoutine, + IN PVOID Context) +{ + UNIMPLEMENTED; + return NULL; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/ke/spinlock.c b/reactos/ntoskrnl/ke/spinlock.c index 84ed9307c5f..d4be3b5fac3 100644 --- a/reactos/ntoskrnl/ke/spinlock.c +++ b/reactos/ntoskrnl/ke/spinlock.c @@ -260,4 +260,59 @@ KeReleaseInterruptSpinLock(IN PKINTERRUPT Interrupt, KeLowerIrql(OldIrql); } +/* + * @unimplemented + */ +KIRQL +FASTCALL +KeAcquireSpinLockForDpc(IN PKSPIN_LOCK SpinLock) +{ + UNIMPLEMENTED; + return 0; +} + +/* + * @unimplemented + */ +VOID +FASTCALL +KeReleaseSpinLockForDpc(IN PKSPIN_LOCK SpinLock, + IN KIRQL OldIrql) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +KIRQL +FASTCALL +KeAcquireInStackQueuedSpinLockForDpc(IN PKSPIN_LOCK SpinLock, + IN PKLOCK_QUEUE_HANDLE LockHandle) +{ + UNIMPLEMENTED; + return 0; +} + +/* + * @unimplemented + */ +VOID +FASTCALL +KeReleaseInStackQueuedSpinLockForDpc(IN PKLOCK_QUEUE_HANDLE LockHandle) +{ + UNIMPLEMENTED; +} + +/* + * @unimplemented + */ +BOOLEAN +FASTCALL +KeTestSpinLock(IN PKSPIN_LOCK SpinLock) +{ + UNIMPLEMENTED; + return FALSE; +} + /* EOF */ diff --git a/reactos/ntoskrnl/mm/mdlsup.c b/reactos/ntoskrnl/mm/mdlsup.c index 307dbd5efe7..df52db6787c 100644 --- a/reactos/ntoskrnl/mm/mdlsup.c +++ b/reactos/ntoskrnl/mm/mdlsup.c @@ -615,6 +615,22 @@ MmAllocatePagesForMdl(IN PHYSICAL_ADDRESS LowAddress, return Mdl; } +/* + * @unimplemented + */ +PMDL +NTAPI +MmAllocatePagesForMdlEx(IN PHYSICAL_ADDRESS LowAddress, + IN PHYSICAL_ADDRESS HighAddress, + IN PHYSICAL_ADDRESS SkipBytes, + IN SIZE_T Totalbytes, + IN MEMORY_CACHING_TYPE CacheType, + IN ULONG Flags) +{ + UNIMPLEMENTED; + return NULL; +} + /* * @implemented */ diff --git a/reactos/ntoskrnl/ntoskrnl_i386.def b/reactos/ntoskrnl/ntoskrnl_i386.def index 88e78ee4de7..730b4740f21 100644 --- a/reactos/ntoskrnl/ntoskrnl_i386.def +++ b/reactos/ntoskrnl/ntoskrnl_i386.def @@ -388,7 +388,7 @@ IoDisconnectInterrupt@4 IoDriverObjectType DATA IoEnqueueIrp@4 IoEnumerateDeviceObjectList@16 -;IoEnumerateRegisteredFiltersList +IoEnumerateRegisteredFiltersList@12 IoFastQueryNetworkAttributes@20 IoFileObjectType=_IoFileObjectType IoForwardAndCatchIrp@8=IoForwardIrpSynchronously@8 @@ -416,7 +416,7 @@ IoGetDriverObjectExtension@8 IoGetFileObjectGenericMapping@0 IoGetInitialStack@0 IoGetLowerDeviceObject@4 -;IoGetPagingIoPriority +IoGetPagingIoPriority@4 IoGetRelatedDeviceObject@4 IoGetRequestorProcess@4 IoGetRequestorProcessId@4 @@ -535,7 +535,7 @@ KdEnableDebugger@0 KdEnteredDebugger KdPollBreakIn@0 KdPowerTransition@4 -;KdRefreshDebuggerNotPresent +KdRefreshDebuggerNotPresent@0 KdSystemDebugControl@28 Ke386CallBios@8 ;Ke386IoSetAccessProcess @@ -544,10 +544,10 @@ Ke386CallBios@8 @KeAcquireGuardedMutex@4 @KeAcquireGuardedMutexUnsafe@4 @KeAcquireInStackQueuedSpinLockAtDpcLevel@8 -;KeAcquireInStackQueuedSpinLockForDpc +@KeAcquireInStackQueuedSpinLockForDpc@8 KeAcquireInterruptSpinLock@4 KeAcquireSpinLockAtDpcLevel@4 -;KeAcquireSpinLockForDpc +@KeAcquireSpinLockForDpc@4 KeAddSystemServiceTable@20 KeAreAllApcsDisabled@0 KeAreApcsDisabled@0 @@ -561,7 +561,7 @@ KeConnectInterrupt@4 KeDelayExecutionThread@12 KeDeregisterBugCheckCallback@4 KeDeregisterBugCheckReasonCallback@4 -;KeDeregisterNmiCallback +KeDeregisterNmiCallback@4 KeDetachProcess@0 KeDisconnectInterrupt@4 KeEnterCriticalRegion@0=_KeEnterCriticalRegion@0 @@ -581,12 +581,12 @@ KeI386AllocateGdtSelectors@8 ;KeI386Call16BitFunction KeI386FlatToGdtSelector@12 ;KeI386GetLid -;KeI386MachineType DATA +KeI386MachineType DATA KeI386ReleaseGdtSelectors@8 ;KeI386ReleaseLid ;KeI386SetGdtSelector KeInitializeApc@32 -;KeInitializeCrashDumpHeader +KeInitializeCrashDumpHeader@20 KeInitializeDeviceQueue@4 KeInitializeDpc@12 KeInitializeEvent@12 @@ -597,7 +597,7 @@ KeInitializeMutex@8 KeInitializeQueue@8 KeInitializeSemaphore@12 KeInitializeSpinLock@4 -;KeInitializeThreadedDpc +KeInitializeThreadedDpc@12 KeInitializeTimer@4 KeInitializeTimerEx@8 KeInsertByKeyDeviceQueue@12 @@ -634,16 +634,16 @@ KeReadStateSemaphore@4 KeReadStateTimer@4 KeRegisterBugCheckCallback@20 KeRegisterBugCheckReasonCallback@16 -;KeRegisterNmiCallback +KeRegisterNmiCallback@8 @KeReleaseGuardedMutex@4 @KeReleaseGuardedMutexUnsafe@4 -;KeReleaseInStackQueuedSpinLockForDpc +@KeReleaseInStackQueuedSpinLockForDpc@4 @KeReleaseInStackQueuedSpinLockFromDpcLevel@4 KeReleaseInterruptSpinLock@8 KeReleaseMutant@16 KeReleaseMutex@8 KeReleaseSemaphore@16 -;KeReleaseSpinLockForDpc +@KeReleaseSpinLockForDpc@8 KeReleaseSpinLockFromDpcLevel@4 KeRemoveByKeyDeviceQueue@8 KeRemoveByKeyDeviceQueueIfBusy@8 @@ -679,7 +679,7 @@ KeSetTimerEx@20 KeStackAttachProcess@8 KeSynchronizeExecution@12 KeTerminateThread@4 -;KeTestSpinLock +@KeTestSpinLock@4 KeTickCount DATA @KeTryToAcquireGuardedMutex@4 @KeTryToAcquireSpinLockAtDpcLevel@4 @@ -727,7 +727,7 @@ MmAllocateContiguousMemorySpecifyCache@32 MmAllocateMappingAddress@8 MmAllocateNonCachedMemory@4 MmAllocatePagesForMdl@28 -;MmAllocatePagesForMdlEx +MmAllocatePagesForMdlEx@36 MmBuildMdlForNonPagedPool@4 MmCanFileBeTruncated@8 ;MmCommitSessionMappedView From 799a04653bb08312e01b088cd5ed28fcc7e2b7f7 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 4 Aug 2008 16:04:56 +0000 Subject: [PATCH 138/304] - Get rid of crt dependencies. - Fix all printfs to VfatPrint function (which calls appropriate callback). svn path=/trunk/; revision=35104 --- reactos/lib/fslib/vfatlib/check/boot.c | 86 ++++++++-------- reactos/lib/fslib/vfatlib/check/check.c | 111 +++++++++++---------- reactos/lib/fslib/vfatlib/check/check.h | 2 +- reactos/lib/fslib/vfatlib/check/common.c | 44 +++++--- reactos/lib/fslib/vfatlib/check/common.h | 6 +- reactos/lib/fslib/vfatlib/check/dosfsck.h | 5 +- reactos/lib/fslib/vfatlib/check/fat.c | 46 ++++----- reactos/lib/fslib/vfatlib/check/file.c | 20 ++-- reactos/lib/fslib/vfatlib/check/io.c | 8 +- reactos/lib/fslib/vfatlib/check/lfn.c | 64 ++++++------ reactos/lib/fslib/vfatlib/check/msdos_fs.h | 2 + 11 files changed, 215 insertions(+), 179 deletions(-) diff --git a/reactos/lib/fslib/vfatlib/check/boot.c b/reactos/lib/fslib/vfatlib/check/boot.c index a1ea445d1ab..9a12eef8ddd 100644 --- a/reactos/lib/fslib/vfatlib/check/boot.c +++ b/reactos/lib/fslib/vfatlib/check/boot.c @@ -58,55 +58,55 @@ static void dump_boot(DOS_FS *fs,struct boot_sector *b,unsigned lss) { unsigned short sectors; - printf("Boot sector contents:\n"); + VfatPrint("Boot sector contents:\n"); if (!atari_format) { char id[9]; strncpy(id,(char*)b->system_id,8); id[8] = 0; - printf("System ID \"%s\"\n",id); + VfatPrint("System ID \"%s\"\n",id); } else { /* On Atari, a 24 bit serial number is stored at offset 8 of the boot * sector */ - printf("Serial number 0x%x\n", + VfatPrint("Serial number 0x%x\n", b->system_id[5] | (b->system_id[6]<<8) | (b->system_id[7]<<16)); } - printf("Media byte 0x%02x (%s)\n",b->media,get_media_descr(b->media)); - printf("%10d bytes per logical sector\n",GET_UNALIGNED_W(b->sector_size)); - printf("%10d bytes per cluster\n",fs->cluster_size); - printf("%10d reserved sector%s\n",CF_LE_W(b->reserved), + VfatPrint("Media byte 0x%02x (%s)\n",b->media,get_media_descr(b->media)); + VfatPrint("%10d bytes per logical sector\n",GET_UNALIGNED_W(b->sector_size)); + VfatPrint("%10d bytes per cluster\n",fs->cluster_size); + VfatPrint("%10d reserved sector%s\n",CF_LE_W(b->reserved), CF_LE_W(b->reserved) == 1 ? "" : "s"); - printf("First FAT starts at byte %llu (sector %llu)\n", + VfatPrint("First FAT starts at byte %llu (sector %llu)\n", (__u64)fs->fat_start, (__u64)fs->fat_start/lss); - printf("%10d FATs, %d bit entries\n",b->fats,fs->fat_bits); - printf("%10d bytes per FAT (= %u sectors)\n",fs->fat_size, + VfatPrint("%10d FATs, %d bit entries\n",b->fats,fs->fat_bits); + VfatPrint("%10d bytes per FAT (= %u sectors)\n",fs->fat_size, fs->fat_size/lss); if (!fs->root_cluster) { - printf("Root directory starts at byte %llu (sector %llu)\n", + VfatPrint("Root directory starts at byte %llu (sector %llu)\n", (__u64)fs->root_start, (__u64)fs->root_start/lss); - printf("%10d root directory entries\n",fs->root_entries); + VfatPrint("%10d root directory entries\n",fs->root_entries); } else { - printf( "Root directory start at cluster %lu (arbitrary size)\n", + VfatPrint( "Root directory start at cluster %lu (arbitrary size)\n", fs->root_cluster); } - printf("Data area starts at byte %llu (sector %llu)\n", + VfatPrint("Data area starts at byte %llu (sector %llu)\n", (__u64)fs->data_start, (__u64)fs->data_start/lss); - printf("%10lu data clusters (%llu bytes)\n",fs->clusters, + VfatPrint("%10lu data clusters (%llu bytes)\n",fs->clusters, (__u64)fs->clusters*fs->cluster_size); - printf("%u sectors/track, %u heads\n",CF_LE_W(b->secs_track), + VfatPrint("%u sectors/track, %u heads\n",CF_LE_W(b->secs_track), CF_LE_W(b->heads)); - printf("%10u hidden sectors\n", + VfatPrint("%10u hidden sectors\n", atari_format ? /* On Atari, the hidden field is only 16 bit wide and unused */ (((unsigned char *)&b->hidden)[0] | ((unsigned char *)&b->hidden)[1] << 8) : CF_LE_L(b->hidden)); sectors = GET_UNALIGNED_W( b->sectors ); - printf("%10u sectors total\n", sectors ? sectors : CF_LE_L(b->total_sect)); + VfatPrint("%10u sectors total\n", sectors ? sectors : CF_LE_L(b->total_sect)); } static void check_backup_boot(DOS_FS *fs, struct boot_sector *b, int lss) @@ -114,14 +114,14 @@ static void check_backup_boot(DOS_FS *fs, struct boot_sector *b, int lss) struct boot_sector b2; if (!fs->backupboot_start) { - printf( "There is no backup boot sector.\n" ); + VfatPrint( "There is no backup boot sector.\n" ); if (CF_LE_W(b->reserved) < 3) { - printf( "And there is no space for creating one!\n" ); + VfatPrint( "And there is no space for creating one!\n" ); return; } if (interactive) - printf( "1) Create one\n2) Do without a backup\n" ); - else printf( " Auto-creating backup boot block.\n" ); + VfatPrint( "1) Create one\n2) Do without a backup\n" ); + else VfatPrint( " Auto-creating backup boot block.\n" ); if (!interactive || get_key("12","?") == '1') { int bbs; /* The usual place for the backup boot sector is sector 6. Choose @@ -138,7 +138,7 @@ static void check_backup_boot(DOS_FS *fs, struct boot_sector *b, int lss) fs_write(fs->backupboot_start,sizeof(*b),b); fs_write((off_t)offsetof(struct boot_sector,backup_boot), sizeof(b->backup_boot),&b->backup_boot); - printf( "Created backup of boot sector in sector %d\n", bbs ); + VfatPrint( "Created backup of boot sector in sector %d\n", bbs ); return; } else return; @@ -151,27 +151,27 @@ static void check_backup_boot(DOS_FS *fs, struct boot_sector *b, int lss) int i, pos, first = 1; char buf[20]; - printf( "There are differences between boot sector and its backup.\n" ); - printf( "Differences: (offset:original/backup)\n " ); + VfatPrint( "There are differences between boot sector and its backup.\n" ); + VfatPrint( "Differences: (offset:original/backup)\n " ); pos = 2; for( p = (__u8 *)b, q = (__u8 *)&b2, i = 0; i < sizeof(b2); ++p, ++q, ++i ) { if (*p != *q) { sprintf( buf, "%s%u:%02x/%02x", first ? "" : ", ", (unsigned)(p-(__u8 *)b), *p, *q ); - if (pos + strlen(buf) > 78) printf( "\n " ), pos = 2; - printf( "%s", buf ); + if (pos + strlen(buf) > 78) VfatPrint( "\n " ), pos = 2; + VfatPrint( "%s", buf ); pos += strlen(buf); first = 0; } } - printf( "\n" ); + VfatPrint( "\n" ); if (interactive) - printf( "1) Copy original to backup\n" + VfatPrint( "1) Copy original to backup\n" "2) Copy backup to original\n" "3) No action\n" ); - else printf( " Not automatically fixing this.\n" ); + else VfatPrint( " Not automatically fixing this.\n" ); switch (interactive ? get_key("123","?") : '3') { case '1': fs_write(fs->backupboot_start,sizeof(*b),b); @@ -199,10 +199,10 @@ static void read_fsinfo(DOS_FS *fs, struct boot_sector *b,int lss) struct info_sector i; if (!b->info_sector) { - printf( "No FSINFO sector\n" ); + VfatPrint( "No FSINFO sector\n" ); if (interactive) - printf( "1) Create one\n2) Do without FSINFO\n" ); - else printf( " Not automatically creating it.\n" ); + VfatPrint( "1) Create one\n2) Do without FSINFO\n" ); + else VfatPrint( " Not automatically creating it.\n" ); if (interactive && get_key("12","?") == '1') { /* search for a free reserved sector (not boot sector and not * backup boot sector) */ @@ -221,7 +221,7 @@ static void read_fsinfo(DOS_FS *fs, struct boot_sector *b,int lss) sizeof(b->info_sector),&b->info_sector); } else { - printf( "No free reserved sector found -- " + VfatPrint( "No free reserved sector found -- " "no space for FSINFO sector!\n" ); return; } @@ -235,22 +235,22 @@ static void read_fsinfo(DOS_FS *fs, struct boot_sector *b,int lss) if (i.magic != CT_LE_L(0x41615252) || i.signature != CT_LE_L(0x61417272) || i.boot_sign != CT_LE_W(0xaa55)) { - printf( "FSINFO sector has bad magic number(s):\n" ); + VfatPrint( "FSINFO sector has bad magic number(s):\n" ); if (i.magic != CT_LE_L(0x41615252)) - printf( " Offset %llu: 0x%08x != expected 0x%08x\n", + VfatPrint( " Offset %llu: 0x%08x != expected 0x%08x\n", (__u64)offsetof(struct info_sector,magic), CF_LE_L(i.magic),0x41615252); if (i.signature != CT_LE_L(0x61417272)) - printf( " Offset %llu: 0x%08x != expected 0x%08x\n", + VfatPrint( " Offset %llu: 0x%08x != expected 0x%08x\n", (__u64)offsetof(struct info_sector,signature), CF_LE_L(i.signature),0x61417272); if (i.boot_sign != CT_LE_W(0xaa55)) - printf( " Offset %llu: 0x%04x != expected 0x%04x\n", + VfatPrint( " Offset %llu: 0x%04x != expected 0x%04x\n", (__u64)offsetof(struct info_sector,boot_sign), CF_LE_W(i.boot_sign),0xaa55); if (interactive) - printf( "1) Correct\n2) Don't correct (FSINFO invalid then)\n" ); - else printf( " Auto-correcting it.\n" ); + VfatPrint( "1) Correct\n2) Don't correct (FSINFO invalid then)\n" ); + else VfatPrint( " Auto-correcting it.\n" ); if (!interactive || get_key("12","?") == '1') { init_fsinfo(&i); fs_write(fs->fsinfo_start,sizeof(i),&i); @@ -280,7 +280,7 @@ void read_boot(DOS_FS *fs) fs->nfats = b.fats; sectors = GET_UNALIGNED_W(b.sectors); total_sectors = sectors ? sectors : CF_LE_L(b.total_sect); - if (verbose) printf("Checking we can access the last sector of the filesystem\n"); + if (verbose) VfatPrint("Checking we can access the last sector of the filesystem\n"); /* Can't access last odd sector anyway, so round down */ fs_test((loff_t)((total_sectors & ~1)-1)*(loff_t)logical_sector_size, logical_sector_size); @@ -306,12 +306,12 @@ void read_boot(DOS_FS *fs) * (root_entries != 0), we handle the root dir the old way. Give a * warning, but convertig to a root dir in a cluster chain seems * to complex for now... */ - printf( "Warning: FAT32 root dir not in cluster chain! " + VfatPrint( "Warning: FAT32 root dir not in cluster chain! " "Compability mode...\n" ); else if (!fs->root_cluster && !fs->root_entries) die("No root directory!"); else if (fs->root_cluster && fs->root_entries) - printf( "Warning: FAT32 root dir is in a cluster chain, but " + VfatPrint( "Warning: FAT32 root dir is in a cluster chain, but " "a separate root dir\n" " area is defined. Cannot fix this easily.\n" ); diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c index 059acf0945f..09a223be1a0 100644 --- a/reactos/lib/fslib/vfatlib/check/check.c +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -198,15 +198,22 @@ time_t date_dos2unix(unsigned short time,unsigned short date) static char *file_stat(DOS_FILE *file) { static char temp[100]; - struct tm *tm; char tmp[100]; time_t date; + LARGE_INTEGER time; + TIME_FIELDS time_fields; date = date_dos2unix(CF_LE_W(file->dir_ent.time),CF_LE_W(file-> dir_ent.date)); - tm = localtime(&date); - strftime(tmp,99,"%H:%M:%S %b %d %Y",tm); - sprintf(temp," Size %u bytes, date %s",CF_LE_L(file->dir_ent.size),tmp); + + RtlSecondsSince1970ToTime(date, &time); + RtlTimeToTimeFields(&time, &time_fields); + + _snprintf(tmp, sizeof(tmp), "%d:%d:%d %d.%d.%d", + time_fields.Hour, time_fields.Minute, time_fields.Second, + time_fields.Day, time_fields.Month, time_fields.Year); + + _snprintf(temp, sizeof(temp), " Size %u bytes, date %s",CF_LE_L(file->dir_ent.size),tmp); return temp; } @@ -322,15 +329,16 @@ static void auto_rename(DOS_FILE *file) static void rename_file(DOS_FILE *file) { - unsigned char name[46]; - unsigned char *walk,*here; + //unsigned char name[46]; + //unsigned char *walk,*here; if (!file->offset) { - printf( "Cannot rename FAT32 root dir\n" ); + VfatPrint( "Cannot rename FAT32 root dir\n" ); return; /* cannot rename FAT32 root dir */ } while (1) { - printf("New name: "); + VfatPrint("New name: "); +#if 0 fflush(stdout); if (fgets((char*)name,45,stdin)) { if ((here = (unsigned char*)strchr((char*)name,'\n'))) *here = 0; @@ -343,6 +351,9 @@ static void rename_file(DOS_FILE *file) return; } } +#else + return; +#endif } } @@ -353,18 +364,18 @@ static int handle_dot(DOS_FS *fs,DOS_FILE *file,int dots) name = strncmp((char*)file->dir_ent.name,MSDOS_DOT,MSDOS_NAME) ? ".." : "."; if (!(file->dir_ent.attr & ATTR_DIR)) { - printf("%s\n Is a non-directory.\n",path_name(file)); + VfatPrint("%s\n Is a non-directory.\n",path_name(file)); if (interactive) - printf("1) Drop it\n2) Auto-rename\n3) Rename\n" + VfatPrint("1) Drop it\n2) Auto-rename\n3) Rename\n" "4) Convert to directory\n"); - else printf(" Auto-renaming it.\n"); + else VfatPrint(" Auto-renaming it.\n"); switch (interactive ? get_key("1234","?") : '2') { case '1': drop_file(fs,file); return 1; case '2': auto_rename(file); - printf(" Renamed to %s\n",file_name(file->dir_ent.name)); + VfatPrint(" Renamed to %s\n",file_name(file->dir_ent.name)); return 0; case '3': rename_file(file); @@ -376,7 +387,7 @@ static int handle_dot(DOS_FS *fs,DOS_FILE *file,int dots) } } if (!dots) { - printf("Root contains directory \"%s\". Dropping it.\n",name); + VfatPrint("Root contains directory \"%s\". Dropping it.\n",name); drop_file(fs,file); return 1; } @@ -392,14 +403,14 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) if (file->dir_ent.attr & ATTR_DIR) { if (CF_LE_L(file->dir_ent.size)) { - printf("%s\n Directory has non-zero size. Fixing it.\n", + VfatPrint("%s\n Directory has non-zero size. Fixing it.\n", path_name(file)); MODIFY(file,size,CT_LE_L(0)); } if (file->parent && !strncmp((char*)file->dir_ent.name,MSDOS_DOT,MSDOS_NAME)) { expect = FSTART(file->parent,fs); if (FSTART(file,fs) != expect) { - printf("%s\n Start (%ld) does not point to parent (%ld)\n", + VfatPrint("%s\n Start (%ld) does not point to parent (%ld)\n", path_name(file),FSTART(file,fs),expect); MODIFY_START(file,expect,fs); } @@ -411,21 +422,21 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) if (fs->root_cluster && expect == fs->root_cluster) expect = 0; if (FSTART(file,fs) != expect) { - printf("%s\n Start (%lu) does not point to .. (%lu)\n", + VfatPrint("%s\n Start (%lu) does not point to .. (%lu)\n", path_name(file),FSTART(file,fs),expect); MODIFY_START(file,expect,fs); } return 0; } if (FSTART(file,fs)==0){ - printf ("%s\n Start does point to root directory. Deleting dir. \n", + VfatPrint ("%s\n Start does point to root directory. Deleting dir. \n", path_name(file)); MODIFY(file,name[0],DELETED_FLAG); return 0; } } if (FSTART(file,fs) >= fs->clusters+2) { - printf("%s\n Start cluster beyond limit (%lu > %lu). Truncating file.\n", + VfatPrint("%s\n Start cluster beyond limit (%lu > %lu). Truncating file.\n", path_name(file),FSTART(file,fs),fs->clusters+1); if (!file->offset) die( "Bad FAT32 root directory! (bad start cluster)\n" ); @@ -435,7 +446,7 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) for (curr = FSTART(file,fs) ? FSTART(file,fs) : -1; curr != -1; curr = next_cluster(fs,curr)) { if (!fs->fat[curr].value || bad_cluster(fs,curr)) { - printf("%s\n Contains a %s cluster (%lu). Assuming EOF.\n", + VfatPrint("%s\n Contains a %s cluster (%lu). Assuming EOF.\n", path_name(file),fs->fat[curr].value ? "bad" : "free",curr); if (prev) set_fat(fs,prev,-1); else if (!file->offset) @@ -445,7 +456,7 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) } if (!(file->dir_ent.attr & ATTR_DIR) && CF_LE_L(file->dir_ent.size) <= clusters*fs->cluster_size) { - printf("%s\n File size is %u bytes, cluster chain length is > %lu " + VfatPrint("%s\n File size is %u bytes, cluster chain length is > %lu " "bytes.\n Truncating file to %u bytes.\n",path_name(file), CF_LE_L(file->dir_ent.size),clusters*fs->cluster_size, CF_LE_L(file->dir_ent.size)); @@ -454,8 +465,8 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) } if ((owner = get_owner(fs,curr))) { int do_trunc = 0; - printf("%s and\n",path_name(owner)); - printf("%s\n share clusters.\n",path_name(file)); + VfatPrint("%s and\n",path_name(owner)); + VfatPrint("%s\n share clusters.\n",path_name(file)); clusters2 = 0; for (walk = FSTART(owner,fs); walk > 0 && walk != -1; walk = next_cluster(fs,walk)) @@ -463,20 +474,20 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) else clusters2++; restart = file->dir_ent.attr & ATTR_DIR; if (!owner->offset) { - printf( " Truncating second to %lu bytes because first " + VfatPrint( " Truncating second to %lu bytes because first " "is FAT32 root dir.\n", clusters2*fs->cluster_size ); do_trunc = 2; } else if (!file->offset) { - printf( " Truncating first to %lu bytes because second " + VfatPrint( " Truncating first to %lu bytes because second " "is FAT32 root dir.\n", clusters*fs->cluster_size ); do_trunc = 1; } else if (interactive) - printf("1) Truncate first to %lu bytes%s\n" + VfatPrint("1) Truncate first to %lu bytes%s\n" "2) Truncate second to %lu bytes\n",clusters*fs->cluster_size, restart ? " and restart" : "",clusters2*fs->cluster_size); - else printf(" Truncating second to %lu bytes.\n",clusters2* + else VfatPrint(" Truncating second to %lu bytes.\n",clusters2* fs->cluster_size); if (do_trunc != 2 && (do_trunc == 1 || @@ -515,7 +526,7 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) } if (!(file->dir_ent.attr & ATTR_DIR) && CF_LE_L(file->dir_ent.size) > clusters*fs->cluster_size) { - printf("%s\n File size is %u bytes, cluster chain length is %lu bytes." + VfatPrint("%s\n File size is %u bytes, cluster chain length is %lu bytes." "\n Truncating file to %lu bytes.\n",path_name(file),CF_LE_L(file-> dir_ent.size),clusters*fs->cluster_size,clusters*fs->cluster_size); MODIFY(file,size,CT_LE_L(clusters*fs->cluster_size)); @@ -547,10 +558,10 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) if (bad_name((*walk)->dir_ent.name)) bad++; else good++; if (*root && parent && good+bad > 4 && bad > good/2) { - printf("%s\n Has a large number of bad entries. (%d/%d)\n", + VfatPrint("%s\n Has a large number of bad entries. (%d/%d)\n", path_name(parent),bad,good+bad); - if (!dots) printf( " Not dropping root directory.\n" ); - else if (!interactive) printf(" Not dropping it in auto-mode.\n"); + if (!dots) VfatPrint( " Not dropping root directory.\n" ); + else if (!interactive) VfatPrint(" Not dropping it in auto-mode.\n"); else if (get_key("yn","Drop directory ? (y/n)") == 'y') { truncate_file(fs,parent,0); MODIFY(parent,name[0],DELETED_FLAG); @@ -572,11 +583,11 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) } if (!((*walk)->dir_ent.attr & ATTR_VOLUME) && bad_name((*walk)->dir_ent.name)) { - printf("%s\n Bad file name.\n",path_name(*walk)); + VfatPrint("%s\n Bad file name.\n",path_name(*walk)); if (interactive) - printf("1) Drop file\n2) Rename file\n3) Auto-rename\n" + VfatPrint("1) Drop file\n2) Rename file\n3) Auto-rename\n" "4) Keep it\n"); - else printf(" Auto-renaming it.\n"); + else VfatPrint(" Auto-renaming it.\n"); switch (interactive ? get_key("1234","?") : '3') { case '1': drop_file(fs,*walk); @@ -588,7 +599,7 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) break; case '3': auto_rename(*walk); - printf(" Renamed to %s\n",file_name((*walk)->dir_ent. + VfatPrint(" Renamed to %s\n",file_name((*walk)->dir_ent. name)); break; case '4': @@ -602,14 +613,14 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) while (*scan && !skip) { if (!((*scan)->dir_ent.attr & ATTR_VOLUME) && !strncmp((char*)(*walk)->dir_ent.name,(char*)(*scan)->dir_ent.name,MSDOS_NAME)) { - printf("%s\n Duplicate directory entry.\n First %s\n", + VfatPrint("%s\n Duplicate directory entry.\n First %s\n", path_name(*walk),file_stat(*walk)); - printf(" Second %s\n",file_stat(*scan)); + VfatPrint(" Second %s\n",file_stat(*scan)); if (interactive) - printf("1) Drop first\n2) Drop second\n3) Rename first\n" + VfatPrint("1) Drop first\n2) Drop second\n3) Rename first\n" "4) Rename second\n5) Auto-rename first\n" "6) Auto-rename second\n"); - else printf(" Auto-renaming second.\n"); + else VfatPrint(" Auto-renaming second.\n"); switch (interactive ? get_key("123456","?") : '6') { case '1': drop_file(fs,*walk); @@ -622,22 +633,22 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) continue; case '3': rename_file(*walk); - printf(" Renamed to %s\n",path_name(*walk)); + VfatPrint(" Renamed to %s\n",path_name(*walk)); redo = 1; break; case '4': rename_file(*scan); - printf(" Renamed to %s\n",path_name(*walk)); + VfatPrint(" Renamed to %s\n",path_name(*walk)); redo = 1; break; case '5': auto_rename(*walk); - printf(" Renamed to %s\n",file_name((*walk)->dir_ent. + VfatPrint(" Renamed to %s\n",file_name((*walk)->dir_ent. name)); break; case '6': auto_rename(*scan); - printf(" Renamed to %s\n",file_name((*scan)->dir_ent. + VfatPrint(" Renamed to %s\n",file_name((*scan)->dir_ent. name)); break; } @@ -653,10 +664,10 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) } } if (dots && !dot) - printf("%s\n \".\" is missing. Can't fix this yet.\n", + VfatPrint("%s\n \".\" is missing. Can't fix this yet.\n", path_name(parent)); if (dots && !dotdot) - printf("%s\n \"..\" is missing. Can't fix this yet.\n", + VfatPrint("%s\n \"..\" is missing. Can't fix this yet.\n", path_name(parent)); return 0; } @@ -673,7 +684,7 @@ static void test_file(DOS_FS *fs,DOS_FILE *file,int read_test) next_clu = next_cluster(fs,walk); if ((owner = get_owner(fs,walk))) { if (owner == file) { - printf("%s\n Circular cluster chain. Truncating to %lu " + VfatPrint("%s\n Circular cluster chain. Truncating to %lu " "cluster%s.\n",path_name(file),clusters,clusters == 1 ? "" : "s"); if (prev) set_fat(fs,prev,-1); @@ -690,7 +701,7 @@ static void test_file(DOS_FS *fs,DOS_FILE *file,int read_test) clusters++; } else { - printf("%s\n Cluster %lu (%lu) is unreadable. Skipping it.\n", + VfatPrint("%s\n Cluster %lu (%lu) is unreadable. Skipping it.\n", path_name(file),clusters,walk); if (prev) set_fat(fs,prev,next_cluster(fs,walk)); else MODIFY_START(file,next_cluster(fs,walk),fs); @@ -723,7 +734,7 @@ static void undelete(DOS_FS *fs,DOS_FILE *file) if (prev) set_fat(fs,prev,-1); else MODIFY_START(file,0,fs); if (left) - printf("Warning: Did only undelete %lu of %lu cluster%s.\n",clusters-left, + VfatPrint("Warning: Did only undelete %lu of %lu cluster%s.\n",clusters-left, clusters,clusters == 1 ? "" : "s"); } @@ -779,10 +790,10 @@ static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, **chain = new; *chain = &new->next; if (list) { - printf("Checking file %s",path_name(new)); + VfatPrint("Checking file %s",path_name(new)); if (new->lfn) - printf(" (%s)", file_name(new->dir_ent.name) ); - printf("\n"); + VfatPrint(" (%s)", file_name(new->dir_ent.name) ); + VfatPrint("\n"); } if (offset && strncmp((char*)de.name,MSDOS_DOT,MSDOS_NAME) != 0 && diff --git a/reactos/lib/fslib/vfatlib/check/check.h b/reactos/lib/fslib/vfatlib/check/check.h index 38f1c686b5c..be3bfea5bc1 100644 --- a/reactos/lib/fslib/vfatlib/check/check.h +++ b/reactos/lib/fslib/vfatlib/check/check.h @@ -9,7 +9,7 @@ loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern); /* Allocate a free slot in the root directory for a new file. The file name is - constructed after 'pattern', which must include a %d type format for printf + constructed after 'pattern', which must include a %d type format for VfatPrint and expand to exactly 11 characters. The name actually used is written into the 'de' structure, the rest of *de is cleared. The offset returned is to where in the filesystem the entry belongs. */ diff --git a/reactos/lib/fslib/vfatlib/check/common.c b/reactos/lib/fslib/vfatlib/check/common.c index 5be6f803a23..527041a6256 100644 --- a/reactos/lib/fslib/vfatlib/check/common.c +++ b/reactos/lib/fslib/vfatlib/check/common.c @@ -23,34 +23,48 @@ void die(char *msg,...) va_list args; va_start(args,msg); - vfprintf(stderr,msg,args); + //vfprintf(stderr,msg,args); + DPRINT1("Unrecoverable problem!\n"); va_end(args); - fprintf(stderr,"\n"); - exit(1); + //fprintf(stderr,"\n"); + //exit(1); } - void pdie(char *msg,...) { va_list args; va_start(args,msg); - vfprintf(stderr,msg,args); + //vfprintf(stderr,msg,args); + DPRINT1("Unrecoverable problem!\n"); va_end(args); - fprintf(stderr,":%s\n",strerror(errno)); - exit(1); + //fprintf(stderr,":%s\n",strerror(errno)); + //exit(1); + DbgBreakPoint(); } void *alloc(int size) { - void *this; + void *ptr; - if ((this = malloc(size))) return this; - pdie("malloc"); - return NULL; /* for GCC */ + ptr = RtlAllocateHeap(RtlGetProcessHeap (), + 0, + size); + + if (ptr == NULL) + { + DPRINT1("Allocation failed!\n"); + return NULL; + } + + return ptr; } +void free(void *ptr) +{ + RtlFreeHeap(RtlGetProcessHeap(), 0, ptr); +} void *qalloc(void **root,int size) { @@ -87,10 +101,11 @@ int min(int a,int b) char get_key(char *valid,char *prompt) { +#if 0 int ch,okay; while (1) { - if (prompt) printf("%s ",prompt); + if (prompt) VfatPrint("%s ",prompt); fflush(stdout); while (ch = getchar(), ch == ' ' || ch == '\t'); if (ch == EOF) exit(1); @@ -98,8 +113,11 @@ char get_key(char *valid,char *prompt) while (ch = getchar(), ch != '\n' && ch != EOF); if (ch == EOF) exit(1); if (okay) return okay; - printf("Invalid input.\n"); + VfatPrint("Invalid input.\n"); } +#else + return 0; +#endif } /* Local Variables: */ diff --git a/reactos/lib/fslib/vfatlib/check/common.h b/reactos/lib/fslib/vfatlib/check/common.h index cbd335795d0..db29ca42ee6 100644 --- a/reactos/lib/fslib/vfatlib/check/common.h +++ b/reactos/lib/fslib/vfatlib/check/common.h @@ -8,17 +8,17 @@ #define _COMMON_H //void die(char *msg,...) __attribute((noreturn)); -__declspec(noreturn) void die(char *msg,...); +void die(char *msg,...); /* Displays a prinf-style message and terminates the program. */ //void pdie(char *msg,...) __attribute((noreturn)); -__declspec(noreturn) void pdie(char *msg,...); +void pdie(char *msg,...); /* Like die, but appends an error message according to the state of errno. */ void *alloc(int size); - +void free(void *ptr); /* mallocs SIZE bytes and returns a pointer to the data. Terminates the program if malloc fails. */ diff --git a/reactos/lib/fslib/vfatlib/check/dosfsck.h b/reactos/lib/fslib/vfatlib/check/dosfsck.h index 3789b8fdf7f..eb9360eeaab 100644 --- a/reactos/lib/fslib/vfatlib/check/dosfsck.h +++ b/reactos/lib/fslib/vfatlib/check/dosfsck.h @@ -35,7 +35,10 @@ typedef __int64 ll_t; //#include //# include "types.h" -# include "byteorder.h" + +#ifdef _M_IX86 +#include "byteorder.h" +#endif #include "msdos_fs.h" diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/reactos/lib/fslib/vfatlib/check/fat.c index 60907fa4409..86ad5067185 100644 --- a/reactos/lib/fslib/vfatlib/check/fat.c +++ b/reactos/lib/fslib/vfatlib/check/fat.c @@ -71,30 +71,30 @@ void read_fat(DOS_FS *fs) first_ok = (first_media.value & FAT_EXTD(fs)) == FAT_EXTD(fs); second_ok = (second_media.value & FAT_EXTD(fs)) == FAT_EXTD(fs); if (first_ok && !second_ok) { - printf("FATs differ - using first FAT.\n"); + VfatPrint("FATs differ - using first FAT.\n"); fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); } if (!first_ok && second_ok) { - printf("FATs differ - using second FAT.\n"); + VfatPrint("FATs differ - using second FAT.\n"); fs_write(fs->fat_start,eff_size,use = second); } if (first_ok && second_ok) { if (interactive) { - printf("FATs differ but appear to be intact. Use which FAT ?\n" + VfatPrint("FATs differ but appear to be intact. Use which FAT ?\n" "1) Use first FAT\n2) Use second FAT\n"); if (get_key("12","?") == '1') fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); else fs_write(fs->fat_start,eff_size,use = second); } else { - printf("FATs differ but appear to be intact. Using first " + VfatPrint("FATs differ but appear to be intact. Using first " "FAT.\n"); fs_write(fs->fat_start+fs->fat_size,eff_size,use = first); } } if (!first_ok && !second_ok) { - printf("Both FATs appear to be corrupt. Giving up.\n"); - exit(1); + VfatPrint("Both FATs appear to be corrupt. Giving up.\n"); + //exit(1); } } fs->fat = qalloc(&mem_queue,sizeof(FAT_ENTRY)*(fs->clusters+2)); @@ -102,7 +102,7 @@ void read_fat(DOS_FS *fs) for (i = 2; i < fs->clusters+2; i++) if (fs->fat[i].value >= fs->clusters+2 && (fs->fat[i].value < FAT_MIN_BAD(fs))) { - printf("Cluster %ld out of range (%ld > %ld). Setting to EOF.\n", + VfatPrint("Cluster %ld out of range (%ld > %ld). Setting to EOF.\n", i-2,fs->fat[i].value,fs->clusters+2-1); set_fat(fs,i,-1); } @@ -115,8 +115,8 @@ void read_fat(DOS_FS *fs) void set_fat(DOS_FS *fs,unsigned long cluster,unsigned long new) { unsigned char data[4]; - int size; - loff_t offs; + int size = 0; + loff_t offs = 0LL; if ((long)new == -1) new = FAT_EOF(fs); @@ -200,11 +200,11 @@ void fix_bad(DOS_FS *fs) unsigned long i; if (verbose) - printf("Checking for bad clusters.\n"); + VfatPrint("Checking for bad clusters.\n"); for (i = 2; i < fs->clusters+2; i++) if (!get_owner(fs,i) && !FAT_IS_BAD(fs,fs->fat[i].value)) if (!fs_test(cluster_start(fs,i),fs->cluster_size)) { - printf("Cluster %lu is unreadable.\n",i); + VfatPrint("Cluster %lu is unreadable.\n",i); set_fat(fs,i,-2); } } @@ -216,7 +216,7 @@ void reclaim_free(DOS_FS *fs) unsigned long i; if (verbose) - printf("Checking for unused clusters.\n"); + VfatPrint("Checking for unused clusters.\n"); reclaimed = 0; for (i = 2; i < fs->clusters+2; i++) if (!get_owner(fs,i) && fs->fat[i].value && @@ -225,7 +225,7 @@ void reclaim_free(DOS_FS *fs) reclaimed++; } if (reclaimed) - printf("Reclaimed %d unused cluster%s (%d bytes).\n",reclaimed, + VfatPrint("Reclaimed %d unused cluster%s (%d bytes).\n",reclaimed, reclaimed == 1 ? "" : "s",reclaimed*fs->cluster_size); } @@ -262,7 +262,7 @@ void reclaim_file(DOS_FS *fs) unsigned long i,next,walk; if (verbose) - printf("Reclaiming unconnected clusters.\n"); + VfatPrint("Reclaiming unconnected clusters.\n"); for (i = 2; i < fs->clusters+2; i++) fs->fat[i].prev = 0; for (i = 2; i < fs->clusters+2; i++) { next = fs->fat[i].value; @@ -282,7 +282,7 @@ void reclaim_file(DOS_FS *fs) die("Internal error: prev going below zero"); set_fat(fs,i,-1); changed = 1; - printf("Broke cycle at cluster %lu in free chain.\n",i); + VfatPrint("Broke cycle at cluster %lu in free chain.\n",i); break; } } @@ -305,7 +305,7 @@ void reclaim_file(DOS_FS *fs) fs_write(offset,sizeof(DIR_ENT),&de); } if (reclaimed) - printf("Reclaimed %d unused cluster%s (%d bytes) in %d chain%s.\n", + VfatPrint("Reclaimed %d unused cluster%s (%d bytes) in %d chain%s.\n", reclaimed,reclaimed == 1 ? "" : "s",reclaimed*fs->cluster_size,files, files == 1 ? "" : "s"); } @@ -325,23 +325,23 @@ unsigned long update_free(DOS_FS *fs) return free; if (verbose) - printf("Checking free cluster summary.\n"); + VfatPrint("Checking free cluster summary.\n"); if (fs->free_clusters >= 0) { if (free != fs->free_clusters) { - printf( "Free cluster summary wrong (%ld vs. really %ld)\n", + VfatPrint( "Free cluster summary wrong (%ld vs. really %ld)\n", fs->free_clusters,free); if (interactive) - printf( "1) Correct\n2) Don't correct\n" ); - else printf( " Auto-correcting.\n" ); + VfatPrint( "1) Correct\n2) Don't correct\n" ); + else VfatPrint( " Auto-correcting.\n" ); if (!interactive || get_key("12","?") == '1') do_set = 1; } } else { - printf( "Free cluster summary uninitialized (should be %ld)\n", free ); + VfatPrint( "Free cluster summary uninitialized (should be %ld)\n", free ); if (interactive) - printf( "1) Set it\n2) Leave it uninitialized\n" ); - else printf( " Auto-setting.\n" ); + VfatPrint( "1) Set it\n2) Leave it uninitialized\n" ); + else VfatPrint( " Auto-setting.\n" ); if (!interactive || get_key("12","?") == '1') do_set = 1; } diff --git a/reactos/lib/fslib/vfatlib/check/file.c b/reactos/lib/fslib/vfatlib/check/file.c index 5e758bf2518..4cb2efb12fe 100644 --- a/reactos/lib/fslib/vfatlib/check/file.c +++ b/reactos/lib/fslib/vfatlib/check/file.c @@ -5,6 +5,9 @@ /* FAT32, VFAT, Atari format support, and various fixes additions May 1998 * by Roman Hodek */ +/* Need to define this so that islower isn't inlined + (ntdll doesn't export isctype) */ +#define __NO_CTYPE_INLINES #include "vfatlib.h" @@ -50,7 +53,6 @@ char *file_name(unsigned char *fixed) return path; } - int file_cvt(unsigned char *name,unsigned char *fixed) { unsigned char c; @@ -61,13 +63,13 @@ int file_cvt(unsigned char *name,unsigned char *fixed) while (*name) { c = *name; if (c < ' ' || c > 0x7e || strchr("*?<>|\"/",c)) { - printf("Invalid character in name. Use \\ooo for special " + VfatPrint("Invalid character in name. Use \\ooo for special " "characters.\n"); return 0; } if (c == '.') { if (ext) { - printf("Duplicate dots in name.\n"); + VfatPrint("Duplicate dots in name.\n"); return 0; } while (size--) *fixed++ = ' '; @@ -80,13 +82,13 @@ int file_cvt(unsigned char *name,unsigned char *fixed) c = 0; for (cnt = 3; cnt; cnt--) { if (*name < '0' || *name > '7') { - printf("Invalid octal character.\n"); + VfatPrint("Invalid octal character.\n"); return 0; } c = c*8+*name++-'0'; } if (cnt < 4) { - printf("Expected three octal digits.\n"); + VfatPrint("Expected three octal digits.\n"); return 0; } name += 3; @@ -119,7 +121,7 @@ void file_add(char *path,FD_TYPE type) path++; while (1) { if ((here = strchr(path,'/'))) *here = 0; - if (!file_cvt((unsigned char*)path,(unsigned char *)name)) exit(2); + if (!file_cvt((unsigned char*)path,(unsigned char *)name)) {return; /*exit(2);*/} for (walk = *current; walk; walk = walk->next) if (!here && (!strncmp(name,walk->name,MSDOS_NAME) || (type == fdt_undelete && !strncmp(name+1,walk->name+1,MSDOS_NAME-1)))) @@ -190,12 +192,12 @@ void file_modify(FDSC **curr,unsigned char *fixed) die("Internal error: file_find failed"); switch ((*this)->type) { case fdt_drop: - printf("Dropping %s\n",file_name(fixed)); + VfatPrint("Dropping %s\n",file_name(fixed)); *fixed = DELETED_FLAG; break; case fdt_undelete: *fixed = *(*this)->name; - printf("Undeleting %s\n",file_name(fixed)); + VfatPrint("Undeleting %s\n",file_name(fixed)); break; default: die("Internal error: file_modify"); @@ -214,7 +216,7 @@ static void report_unused(FDSC *this) next = this->next; if (this->first) report_unused(this->first); else if (this->type != fdt_none) - printf("Warning: did not %s file %s\n",this->type == fdt_drop ? + VfatPrint("Warning: did not %s file %s\n",this->type == fdt_drop ? "drop" : "undelete",file_name((unsigned char*)this->name)); free(this); this = next; diff --git a/reactos/lib/fslib/vfatlib/check/io.c b/reactos/lib/fslib/vfatlib/check/io.c index eb365e182e8..eb47b166013 100644 --- a/reactos/lib/fslib/vfatlib/check/io.c +++ b/reactos/lib/fslib/vfatlib/check/io.c @@ -66,7 +66,7 @@ void fs_open(PUNICODE_STRING DriveRoot,int rw) FILE_SYNCHRONOUS_IO_ALERT); if (!NT_SUCCESS(Status)) { - DPRINT("NtOpenFile() failed with status 0x%.08x\n", Status); + DPRINT1("NtOpenFile() failed with status 0x%.08x\n", Status); return; } @@ -86,7 +86,7 @@ void fs_read(loff_t pos,int size,void *data) const loff_t seekpos_aligned = pos - (pos % 512); // TMN: const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN: const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; // TMN: - char* tmpBuf = malloc(readsize_aligned); // TMN: + char* tmpBuf = alloc(readsize_aligned); // TMN: if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",pos); if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %I64d",size,pos); assert(got >= size); @@ -274,7 +274,7 @@ static int WIN32read(HANDLE FileHandle, void *buf, unsigned int len) NULL); if (!NT_SUCCESS(Status)) { - DPRINT("NtReadFile() failed (Status %lx)\n", Status); + DPRINT1("NtReadFile() failed (Status %lx)\n", Status); return -1; } @@ -298,7 +298,7 @@ static int WIN32write(HANDLE FileHandle, void *buf, unsigned int len) NULL); if (!NT_SUCCESS(Status)) { - DPRINT("NtWriteFile() failed (Status %lx)\n", Status); + DPRINT1("NtWriteFile() failed (Status %lx)\n", Status); return -1; } diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/reactos/lib/fslib/vfatlib/check/lfn.c index dd091bd0b69..71d95b2bbf2 100644 --- a/reactos/lib/fslib/vfatlib/check/lfn.c +++ b/reactos/lib/fslib/vfatlib/check/lfn.c @@ -162,23 +162,23 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) * checksum ok: clear start bit */ /* XXX: Should delay that until next LFN known (then can better * display the name) */ - printf( "A new long file name starts within an old one.\n" ); + VfatPrint( "A new long file name starts within an old one.\n" ); if ((lfn->id & LFN_ID_SLOTMASK) == lfn_slot && lfn->alias_checksum == lfn_checksum) { char *part1 = CNV_THIS_PART(lfn); char *part2 = CNV_PARTS_SO_FAR(); - printf( " It could be that the LFN start bit is wrong here\n" + VfatPrint( " It could be that the LFN start bit is wrong here\n" " if \"%s\" seems to match \"%s\".\n", part1, part2 ); free( part1 ); free( part2 ); can_clear = 1; } if (interactive) { - printf( "1: Delete previous LFN\n2: Leave it as it is.\n" ); + VfatPrint( "1: Delete previous LFN\n2: Leave it as it is.\n" ); if (can_clear) - printf( "3: Clear start bit and concatenate LFNs\n" ); + VfatPrint( "3: Clear start bit and concatenate LFNs\n" ); } - else printf( " Not auto-correcting this.\n" ); + else VfatPrint( " Not auto-correcting this.\n" ); if (interactive) { switch( get_key( can_clear ? "123" : "12", "?" )) { case '1': @@ -207,14 +207,14 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) * lost */ /* Fixes: 1) delete LFN, 2) set start bit */ char *part = CNV_THIS_PART(lfn); - printf( "Long filename fragment \"%s\" found outside a LFN " + VfatPrint( "Long filename fragment \"%s\" found outside a LFN " "sequence.\n (Maybe the start bit is missing on the " "last fragment)\n", part ); if (interactive) { - printf( "1: Delete fragment\n2: Leave it as it is.\n" + VfatPrint( "1: Delete fragment\n2: Leave it as it is.\n" "3: Set start bit\n" ); } - else printf( " Not auto-correcting this.\n" ); + else VfatPrint( " Not auto-correcting this.\n" ); if (interactive) { switch( get_key( "123", "?" )) { case '1': @@ -247,24 +247,24 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) * are ok?, maybe only if checksum is ok?) (Attention: space * for name was allocated before!) */ int can_fix = 0; - printf( "Unexpected long filename sequence number " + VfatPrint( "Unexpected long filename sequence number " "(%d vs. expected %d).\n", (lfn->id & LFN_ID_SLOTMASK), lfn_slot ); if (lfn->alias_checksum == lfn_checksum) { char *part1 = CNV_THIS_PART(lfn); char *part2 = CNV_PARTS_SO_FAR(); - printf( " It could be that just the number is wrong\n" + VfatPrint( " It could be that just the number is wrong\n" " if \"%s\" seems to match \"%s\".\n", part1, part2 ); free( part1 ); free( part2 ); can_fix = 1; } if (interactive) { - printf( "1: Delete LFN\n2: Leave it as it is (and ignore LFN so far)\n" ); + VfatPrint( "1: Delete LFN\n2: Leave it as it is (and ignore LFN so far)\n" ); if (can_fix) - printf( "3: Correct sequence number\n" ); + VfatPrint( "3: Correct sequence number\n" ); } - else printf( " Not auto-correcting this.\n" ); + else VfatPrint( " Not auto-correcting this.\n" ); if (interactive) { switch( get_key( can_fix ? "123" : "12", "?" )) { case '1': @@ -288,14 +288,14 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) /* checksum mismatch */ /* Causes: 1) checksum field here destroyed */ /* Fixes: 1) delete LFN, 2) fix checksum */ - printf( "Checksum in long filename part wrong " + VfatPrint( "Checksum in long filename part wrong " "(%02x vs. expected %02x).\n", lfn->alias_checksum, lfn_checksum ); if (interactive) { - printf( "1: Delete LFN\n2: Leave it as it is.\n" + VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" "3: Correct checksum\n" ); } - else printf( " Not auto-correcting this.\n" ); + else VfatPrint( " Not auto-correcting this.\n" ); if (interactive) { switch( get_key( "123", "?" )) { case '1': @@ -324,11 +324,11 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) } if (lfn->reserved != 0) { - printf( "Reserved field in VFAT long filename slot is not 0 " + VfatPrint( "Reserved field in VFAT long filename slot is not 0 " "(but 0x%02x).\n", lfn->reserved ); if (interactive) - printf( "1: Fix.\n2: Leave it.\n" ); - else printf( "Auto-setting to 0.\n" ); + VfatPrint( "1: Fix.\n2: Leave it.\n" ); + else VfatPrint( "Auto-setting to 0.\n" ); if (!interactive || get_key("12","?") == '1') { lfn->reserved = 0; fs_write( dir_offset+offsetof(LFN_ENT,reserved), @@ -336,11 +336,11 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) } } if (lfn->start != CT_LE_W(0)) { - printf( "Start cluster field in VFAT long filename slot is not 0 " + VfatPrint( "Start cluster field in VFAT long filename slot is not 0 " "(but 0x%04x).\n", lfn->start ); if (interactive) - printf( "1: Fix.\n2: Leave it.\n" ); - else printf( "Auto-setting to 0.\n" ); + VfatPrint( "1: Fix.\n2: Leave it.\n" ); + else VfatPrint( "Auto-setting to 0.\n" ); if (!interactive || get_key("12","?") == '1') { lfn->start = CT_LE_W(0); fs_write( dir_offset+offsetof(LFN_ENT,start), @@ -363,7 +363,7 @@ char *lfn_get( DIR_ENT *de ) #if 0 if (de->lcase) - printf( "lcase=%02x\n",de->lcase ); + VfatPrint( "lcase=%02x\n",de->lcase ); #endif if (lfn_slot == -1) @@ -378,16 +378,16 @@ char *lfn_get( DIR_ENT *de ) * 3) renumber entries and truncate name */ char *long_name = CNV_PARTS_SO_FAR(); char *short_name = file_name(de->name); - printf( "Unfinished long file name \"%s\".\n" + VfatPrint( "Unfinished long file name \"%s\".\n" " (Start may have been overwritten by %s)\n", long_name, short_name ); free( long_name ); if (interactive) { - printf( "1: Delete LFN\n2: Leave it as it is.\n" + VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" "3: Fix numbering (truncates long name and attaches " "it to short name %s)\n", short_name ); } - else printf( " Not auto-correcting this.\n" ); + else VfatPrint( " Not auto-correcting this.\n" ); if (interactive) { switch( get_key( "123", "?" )) { case '1': @@ -418,16 +418,16 @@ char *lfn_get( DIR_ENT *de ) /* Fixes: 1) Fix checksum in LFN entries */ char *long_name = CNV_PARTS_SO_FAR(); char *short_name = file_name(de->name); - printf( "Wrong checksum for long file name \"%s\".\n" + VfatPrint( "Wrong checksum for long file name \"%s\".\n" " (Short name %s may have changed without updating the long name)\n", long_name, short_name ); free( long_name ); if (interactive) { - printf( "1: Delete LFN\n2: Leave it as it is.\n" + VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" "3: Fix checksum (attaches to short name %s)\n", short_name ); } - else printf( " Not auto-correcting this.\n" ); + else VfatPrint( " Not auto-correcting this.\n" ); if (interactive) { switch( get_key( "123", "?" )) { case '1': @@ -460,10 +460,10 @@ void lfn_check_orphaned(void) return; long_name = CNV_PARTS_SO_FAR(); - printf("Orphaned long file name part \"%s\"\n", long_name); + VfatPrint("Orphaned long file name part \"%s\"\n", long_name); if (interactive) - printf( "1: Delete.\n2: Leave it.\n" ); - else printf( " Auto-deleting.\n" ); + VfatPrint( "1: Delete.\n2: Leave it.\n" ); + else VfatPrint( " Auto-deleting.\n" ); if (!interactive || get_key("12","?") == '1') { clear_lfn_slots(0, lfn_parts - 1); } diff --git a/reactos/lib/fslib/vfatlib/check/msdos_fs.h b/reactos/lib/fslib/vfatlib/check/msdos_fs.h index b955808df9a..92ef07bfbb7 100644 --- a/reactos/lib/fslib/vfatlib/check/msdos_fs.h +++ b/reactos/lib/fslib/vfatlib/check/msdos_fs.h @@ -4,7 +4,9 @@ /* * The MS-DOS filesystem constants/structures */ +#ifdef _M_IX86 #include "byteorder.h" +#endif #define SECTOR_SIZE 512 /* sector size (bytes) */ #define SECTOR_BITS 9 /* log2(SECTOR_SIZE) */ From befc1d3a5a78a464d91c1c96cbd0b2cfd8c1bcdc Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 4 Aug 2008 16:08:03 +0000 Subject: [PATCH 139/304] - Call ChkDsk function with NT pathname, not DOS pathname. svn path=/trunk/; revision=35105 --- reactos/base/system/autochk/autochk.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/reactos/base/system/autochk/autochk.c b/reactos/base/system/autochk/autochk.c index 8fa15d403df..b0de270e717 100644 --- a/reactos/base/system/autochk/autochk.c +++ b/reactos/base/system/autochk/autochk.c @@ -277,6 +277,7 @@ CheckVolume( ANSI_STRING ChkdskFunctionName = RTL_CONSTANT_STRING("ChkdskEx"); PVOID Provider; CHKDSKEX ChkdskFunc; + WCHAR NtDrivePath[64]; UNICODE_STRING DrivePathU; NTSTATUS Status; @@ -315,7 +316,11 @@ CheckVolume( /* Call provider */ //PrintString(" Verifying volume %S\n", DrivePath); - RtlInitUnicodeString(&DrivePathU, DrivePath); + swprintf(NtDrivePath, L"\\??\\"); + wcscat(NtDrivePath, DrivePath); + NtDrivePath[wcslen(NtDrivePath)-1] = 0; + RtlInitUnicodeString(&DrivePathU, NtDrivePath); + Status = ChkdskFunc(&DrivePathU, TRUE, // FixErrors TRUE, // Verbose From 99961c62979580098e4f8ef458664499938b4c4c Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Mon, 4 Aug 2008 17:01:35 +0000 Subject: [PATCH 140/304] - Fix a typo svn path=/trunk/; revision=35108 --- reactos/include/ndk/i386/ketypes.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/ndk/i386/ketypes.h b/reactos/include/ndk/i386/ketypes.h index 414ef1df675..d165f72c924 100644 --- a/reactos/include/ndk/i386/ketypes.h +++ b/reactos/include/ndk/i386/ketypes.h @@ -654,7 +654,7 @@ typedef struct _KIPCR USHORT MinorVersion; KAFFINITY SetMember; ULONG StallScaleFactor; - UCHAR SparedUnused; + UCHAR SpareUnused; UCHAR Number; UCHAR Reserved; UCHAR L2CacheAssociativity; From f143cab0bb2594367f93b26aef0b4014e7b48d03 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Mon, 4 Aug 2008 17:08:52 +0000 Subject: [PATCH 141/304] - Add a function in kernel32 for translating STD_*_HANDLE constants to actual handles, for those APIs which accept either. Replace code in 8 APIs that already did this translation. - Call it in WriteFile, ReadFile, and FlushFileBuffers, which previously did not. svn path=/trunk/; revision=35109 --- reactos/dll/win32/kernel32/file/file.c | 17 +---- reactos/dll/win32/kernel32/file/rw.c | 4 + reactos/dll/win32/kernel32/include/kernel32.h | 2 + reactos/dll/win32/kernel32/misc/handle.c | 75 +++++-------------- reactos/dll/win32/kernel32/synch/wait.c | 72 +----------------- 5 files changed, 31 insertions(+), 139 deletions(-) diff --git a/reactos/dll/win32/kernel32/file/file.c b/reactos/dll/win32/kernel32/file/file.c index 50dfeff582e..804d6054d5c 100644 --- a/reactos/dll/win32/kernel32/file/file.c +++ b/reactos/dll/win32/kernel32/file/file.c @@ -353,6 +353,8 @@ FlushFileBuffers(HANDLE hFile) NTSTATUS errCode; IO_STATUS_BLOCK IoStatusBlock; + hFile = TranslateStdHandle(hFile); + if (IsConsoleHandle(hFile)) { return FALSE; @@ -561,20 +563,7 @@ GetFileType(HANDLE hFile) NTSTATUS Status; /* Get real handle */ - switch ((ULONG)hFile) - { - case STD_INPUT_HANDLE: - hFile = NtCurrentPeb()->ProcessParameters->StandardInput; - break; - - case STD_OUTPUT_HANDLE: - hFile = NtCurrentPeb()->ProcessParameters->StandardOutput; - break; - - case STD_ERROR_HANDLE: - hFile = NtCurrentPeb()->ProcessParameters->StandardError; - break; - } + hFile = TranslateStdHandle(hFile); /* Check for console handle */ if (IsConsoleHandle(hFile)) diff --git a/reactos/dll/win32/kernel32/file/rw.c b/reactos/dll/win32/kernel32/file/rw.c index f570e571614..4b7437e5007 100644 --- a/reactos/dll/win32/kernel32/file/rw.c +++ b/reactos/dll/win32/kernel32/file/rw.c @@ -37,6 +37,8 @@ WriteFile(IN HANDLE hFile, *lpNumberOfBytesWritten = 0; } + hFile = TranslateStdHandle(hFile); + if (IsConsoleHandle(hFile)) { return WriteConsoleA(hFile, @@ -142,6 +144,8 @@ ReadFile(IN HANDLE hFile, *lpNumberOfBytesRead = 0; } + hFile = TranslateStdHandle(hFile); + if (IsConsoleHandle(hFile)) { return ReadConsoleA(hFile, diff --git a/reactos/dll/win32/kernel32/include/kernel32.h b/reactos/dll/win32/kernel32/include/kernel32.h index 5ba86675750..f843e910499 100755 --- a/reactos/dll/win32/kernel32/include/kernel32.h +++ b/reactos/dll/win32/kernel32/include/kernel32.h @@ -73,6 +73,8 @@ HANDLE STDCALL OpenConsoleW (LPCWSTR wsName, PTEB GetTeb(VOID); +HANDLE FASTCALL TranslateStdHandle(HANDLE hHandle); + PWCHAR FilenameA2W(LPCSTR NameA, BOOL alloc); DWORD FilenameW2A_FitOrFail(LPSTR DestA, INT destLen, LPCWSTR SourceW, INT sourceLen); diff --git a/reactos/dll/win32/kernel32/misc/handle.c b/reactos/dll/win32/kernel32/misc/handle.c index 1a61ba19043..b78bf5c27f2 100644 --- a/reactos/dll/win32/kernel32/misc/handle.c +++ b/reactos/dll/win32/kernel32/misc/handle.c @@ -26,6 +26,21 @@ DuplicateConsoleHandle (HANDLE hConsole, /* FUNCTIONS *****************************************************************/ +HANDLE FASTCALL +TranslateStdHandle(HANDLE hHandle) +{ + PRTL_USER_PROCESS_PARAMETERS Ppb = NtCurrentPeb()->ProcessParameters; + + switch ((ULONG)hHandle) + { + case STD_INPUT_HANDLE: return Ppb->StandardInput; + case STD_OUTPUT_HANDLE: return Ppb->StandardOutput; + case STD_ERROR_HANDLE: return Ppb->StandardError; + } + + return hHandle; +} + /* * @implemented */ @@ -33,25 +48,12 @@ BOOL WINAPI GetHandleInformation (HANDLE hObject, LPDWORD lpdwFlags) { - PRTL_USER_PROCESS_PARAMETERS Ppb; OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo; ULONG BytesWritten; NTSTATUS Status; DWORD Flags; - Ppb = NtCurrentPeb()->ProcessParameters; - switch ((ULONG)hObject) - { - case STD_INPUT_HANDLE: - hObject = Ppb->StandardInput; - break; - case STD_OUTPUT_HANDLE: - hObject = Ppb->StandardOutput; - break; - case STD_ERROR_HANDLE: - hObject = Ppb->StandardError; - break; - } + hObject = TranslateStdHandle(hObject); Status = NtQueryObject (hObject, ObjectHandleFlagInformation, @@ -86,24 +88,11 @@ SetHandleInformation (HANDLE hObject, DWORD dwMask, DWORD dwFlags) { - PRTL_USER_PROCESS_PARAMETERS Ppb; OBJECT_HANDLE_ATTRIBUTE_INFORMATION HandleInfo; ULONG BytesWritten; NTSTATUS Status; - Ppb = NtCurrentPeb()->ProcessParameters; - switch ((ULONG)hObject) - { - case STD_INPUT_HANDLE: - hObject = Ppb->StandardInput; - break; - case STD_OUTPUT_HANDLE: - hObject = Ppb->StandardOutput; - break; - case STD_ERROR_HANDLE: - hObject = Ppb->StandardError; - break; - } + hObject = TranslateStdHandle(hObject); Status = NtQueryObject (hObject, ObjectHandleFlagInformation, @@ -149,22 +138,9 @@ BOOL STDCALL CloseHandle(HANDLE hObject) * If the function fails, the return value is zero */ { - PRTL_USER_PROCESS_PARAMETERS Ppb; NTSTATUS Status; - Ppb = NtCurrentPeb()->ProcessParameters; - switch ((ULONG)hObject) - { - case STD_INPUT_HANDLE: - hObject = Ppb->StandardInput; - break; - case STD_OUTPUT_HANDLE: - hObject = Ppb->StandardOutput; - break; - case STD_ERROR_HANDLE: - hObject = Ppb->StandardError; - break; - } + hObject = TranslateStdHandle(hObject); if (IsConsoleHandle(hObject)) { @@ -193,23 +169,10 @@ BOOL STDCALL DuplicateHandle(HANDLE hSourceProcessHandle, BOOL bInheritHandle, DWORD dwOptions) { - PRTL_USER_PROCESS_PARAMETERS Ppb; DWORD SourceProcessId, TargetProcessId; NTSTATUS Status; - Ppb = NtCurrentPeb()->ProcessParameters; - switch ((ULONG)hSourceHandle) - { - case STD_INPUT_HANDLE: - hSourceHandle = Ppb->StandardInput; - break; - case STD_OUTPUT_HANDLE: - hSourceHandle = Ppb->StandardOutput; - break; - case STD_ERROR_HANDLE: - hSourceHandle = Ppb->StandardError; - break; - } + hSourceHandle = TranslateStdHandle(hSourceHandle); if (IsConsoleHandle(hSourceHandle)) { diff --git a/reactos/dll/win32/kernel32/synch/wait.c b/reactos/dll/win32/kernel32/synch/wait.c index 8fc75321dcf..6fea3011a05 100644 --- a/reactos/dll/win32/kernel32/synch/wait.c +++ b/reactos/dll/win32/kernel32/synch/wait.c @@ -41,29 +41,7 @@ WaitForSingleObjectEx(IN HANDLE hHandle, NTSTATUS Status; /* Get real handle */ - switch ((ULONG)hHandle) - { - /* Input handle */ - case STD_INPUT_HANDLE: - - /* Read it from the PEB */ - hHandle = NtCurrentPeb()->ProcessParameters->StandardInput; - break; - - /* Output handle */ - case STD_OUTPUT_HANDLE: - - /* Read it from the PEB */ - hHandle = NtCurrentPeb()->ProcessParameters->StandardOutput; - break; - - /* Error handle */ - case STD_ERROR_HANDLE: - - /* Read it from the PEB */ - hHandle = NtCurrentPeb()->ProcessParameters->StandardError; - break; - } + hHandle = TranslateStdHandle(hHandle); /* Check for console handle */ if ((IsConsoleHandle(hHandle)) && (VerifyConsoleIoHandle(hHandle))) @@ -163,26 +141,7 @@ WaitForMultipleObjectsEx(IN DWORD nCount, for (i = 0; i < nCount; i++) { /* Check what kind of handle this is */ - switch ((ULONG)HandleBuffer[i]) - { - /* Input handle */ - case STD_INPUT_HANDLE: - HandleBuffer[i] = NtCurrentPeb()-> - ProcessParameters->StandardInput; - break; - - /* Output handle */ - case STD_OUTPUT_HANDLE: - HandleBuffer[i] = NtCurrentPeb()-> - ProcessParameters->StandardOutput; - break; - - /* Error handle */ - case STD_ERROR_HANDLE: - HandleBuffer[i] = NtCurrentPeb()-> - ProcessParameters->StandardError; - break; - } + HandleBuffer[i] = TranslateStdHandle(HandleBuffer[i]); /* Check for console handle */ if ((IsConsoleHandle(HandleBuffer[i])) && @@ -249,32 +208,7 @@ SignalObjectAndWait(IN HANDLE hObjectToSignal, NTSTATUS Status; /* Get real handle */ - switch ((ULONG)hObjectToWaitOn) - { - /* Input handle */ - case STD_INPUT_HANDLE: - - /* Read it from the PEB */ - hObjectToWaitOn = NtCurrentPeb()-> - ProcessParameters->StandardInput; - break; - - /* Output handle */ - case STD_OUTPUT_HANDLE: - - /* Read it from the PEB */ - hObjectToWaitOn = NtCurrentPeb()-> - ProcessParameters->StandardOutput; - break; - - /* Error handle */ - case STD_ERROR_HANDLE: - - /* Read it from the PEB */ - hObjectToWaitOn = NtCurrentPeb()-> - ProcessParameters->StandardError; - break; - } + hObjectToWaitOn = TranslateStdHandle(hObjectToWaitOn); /* Check for console handle */ if ((IsConsoleHandle(hObjectToWaitOn)) && From 40d661edfb8a9d875b28eb0f5f85fd00f9cc4380 Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Mon, 4 Aug 2008 17:26:03 +0000 Subject: [PATCH 142/304] - handle servname being NULL - patch by Yuri Sidorov See issue #3627 for more details. svn path=/trunk/; revision=35111 --- reactos/dll/win32/ws2_32/misc/ns.c | 37 +++++++++++++++++------------- 1 file changed, 21 insertions(+), 16 deletions(-) diff --git a/reactos/dll/win32/ws2_32/misc/ns.c b/reactos/dll/win32/ws2_32/misc/ns.c index bf2cda5a8b2..1db254dee9b 100644 --- a/reactos/dll/win32/ws2_32/misc/ns.c +++ b/reactos/dll/win32/ws2_32/misc/ns.c @@ -1407,28 +1407,33 @@ getaddrinfo(const char FAR * nodename, if (!WSAINITIALIZED) return WSANOTINITIALISED; - /* converting port number */ - port = strtoul(servname, NULL, 10); - /* service name was specified? */ - if (port == 0) + if (servname) { - /* protocol was specified? */ - if (hints && hints->ai_protocol) + /* converting port number */ + port = strtoul(servname, NULL, 10); + /* service name was specified? */ + if (port == 0) { - pent = getprotobynumber(hints->ai_protocol); - if (pent == NULL) - return WSAEINVAL; - proto = pent->p_name; + /* protocol was specified? */ + if (hints && hints->ai_protocol) + { + pent = getprotobynumber(hints->ai_protocol); + if (pent == NULL) + return WSAEINVAL; + proto = pent->p_name; + } + else + proto = NULL; + se = getservbyname(servname, proto); + if (se == NULL) + return WSATYPE_NOT_FOUND; + port = se->s_port; } else - proto = NULL; - se = getservbyname(servname, proto); - if (se == NULL) - return WSAHOST_NOT_FOUND; - port = se->s_port; + port = htons(port); } else - port = htons(port); + port = 0; if (nodename) { From 1138fdcb707b783b3ab2fe84a90af6eabc9fb7cb Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Mon, 4 Aug 2008 18:56:22 +0000 Subject: [PATCH 143/304] =?UTF-8?q?Vytis=20Gird=C5=BEijauskas=20=20-=20Correctly=20call=20control=20panel=20?= =?UTF-8?q?applets=20from=20explorer.=20-=20See=20issue=20#3629=20for=20mo?= =?UTF-8?q?re=20details.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit svn path=/trunk/; revision=35112 --- reactos/base/shell/explorer/taskbar/desktopbar.cpp | 4 ++-- reactos/base/shell/explorer/utility/utility.cpp | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/reactos/base/shell/explorer/taskbar/desktopbar.cpp b/reactos/base/shell/explorer/taskbar/desktopbar.cpp index cf31ab61f3e..6b1b8418580 100644 --- a/reactos/base/shell/explorer/taskbar/desktopbar.cpp +++ b/reactos/base/shell/explorer/taskbar/desktopbar.cpp @@ -405,11 +405,11 @@ int DesktopBar::Command(int id, int code) break; case ID_ABOUT_EXPLORER: - explorer_about(_hwnd); + explorer_about(g_Globals._hwndDesktop); break; case ID_DESKTOPBAR_SETTINGS: - ExplorerPropertySheet(_hwnd); + ExplorerPropertySheet(g_Globals._hwndDesktop); break; case ID_MINIMIZE_ALL: diff --git a/reactos/base/shell/explorer/utility/utility.cpp b/reactos/base/shell/explorer/utility/utility.cpp index fdb74c2738d..bc928bed1e3 100644 --- a/reactos/base/shell/explorer/utility/utility.cpp +++ b/reactos/base/shell/explorer/utility/utility.cpp @@ -382,10 +382,12 @@ BOOL RunDLL(HWND hwnd, LPCTSTR dllname, LPCSTR procname, LPCTSTR cmdline, UINT n BOOL launch_cpanel(HWND hwnd, LPCTSTR applet) { - //launch_file(_hwnd, applet, SW_SHOWNORMAL); // This would be enough, but we want the to use the most direct and fastest call. - //launch_file(_hwnd, String(TEXT("rundll32.exe /d shell32.dll,Control_RunDLL "))+applet, SW_SHOWNORMAL); + TCHAR parameters[MAX_PATH]; + + _tcscpy(parameters, TEXT("shell32.dll,Control_RunDLL ")); + _tcscat(parameters, applet); - return RunDLL(hwnd, TEXT("shell32"), CONTROL_RUNDLL, applet, SW_SHOWNORMAL); + return ((int)ShellExecute(hwnd, TEXT("open"), TEXT("rundll32.exe"), parameters, NULL, SW_SHOWDEFAULT) > 32); } From 7da20624903d808dd9dc5df4643f3917e71d4c6f Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Mon, 4 Aug 2008 20:40:34 +0000 Subject: [PATCH 144/304] - Fill combo box with languages and keyboard layouts. - Store data in structure for preselection of values. - TODO: preselect keyboard layout after language selection / default language svn path=/trunk/; revision=35113 --- reactos/base/setup/reactos/reactos.c | 101 ++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 3 deletions(-) diff --git a/reactos/base/setup/reactos/reactos.c b/reactos/base/setup/reactos/reactos.c index bdd091be8ec..ed32279ac8e 100644 --- a/reactos/base/setup/reactos/reactos.c +++ b/reactos/base/setup/reactos/reactos.c @@ -26,6 +26,7 @@ */ #include +#include #include #include #include @@ -37,19 +38,40 @@ HFONT hTitleFont; +typedef struct _LANG +{ + TCHAR LangId[9]; + TCHAR LangName[128]; + LONG DefaultKBLayout; +} LANG, *PLANG; + +typedef struct _KBLAYOUT +{ + TCHAR LayoutId[9]; + TCHAR LayoutName[128]; + TCHAR DllName[128]; +} KBLAYOUT, *PKBLAYOUT; + struct { + // Settings LONG DestDiskNumber; // physical disk LONG DestPartNumber; // partition on disk LONG DestPartSize; // if partition doesn't exist, size of partition LONG FSType; // file system type on partition LONG MBRInstallType; // install bootloader LONG FormatPart; // type of format the partition - WCHAR SelectedLangId[4]; // selected language + TCHAR SelectedLangId[9]; // selected language + TCHAR SelectedKBLayout[9]; // selected kayboard layout WCHAR InstallationDirectory[MAX_PATH]; // installation directory on hdd - WCHAR DefaultLang[20]; // default language - WCHAR DefaultKBLayout[20]; // default keyboard layout BOOLEAN RepairUpdateFlag; // flag for update/repair an installed reactos + // txtsetup.sif data + TCHAR DefaultLang[20]; // default language + TCHAR DefaultKBLayout[20]; // default keyboard layout + PLANG pLanguages; + LONG LangCount; + PKBLAYOUT pKbLayouts; + LONG KbLayoutCount; } SetupData; typedef struct _IMGINFO @@ -202,6 +224,7 @@ LangSelDlgProc(HWND hwndDlg, LPARAM lParam) { PIMGINFO pImgInfo; + LONG i; pImgInfo = (PIMGINFO)GetWindowLongPtr(hwndDlg, DWLP_USER); switch (uMsg) { @@ -236,6 +259,10 @@ LangSelDlgProc(HWND hwndDlg, WM_SETFONT, (WPARAM)hTitleFont, (LPARAM)TRUE);*/ + for (i=0; i< SetupData.LangCount;i++) + (void)ComboBox_AddString(GetDlgItem(hwndDlg,IDC_LANGUAGES),SetupData.pLanguages[i].LangName); + for (i=0; i< SetupData.KbLayoutCount;i++) + (void)ComboBox_AddString(GetDlgItem(hwndDlg,IDC_KEYLAYOUT),SetupData.pKbLayouts[i].LayoutName); } break; case WM_DRAWITEM: @@ -566,6 +593,72 @@ RestartDlgProc(HWND hwndDlg, return FALSE; } +void LoadSetupData() +{ + WCHAR szPath[MAX_PATH]; + WCHAR *ch; + HINF hTxtsetupSif; + INFCONTEXT InfContext; + //TCHAR szValue[MAX_PATH]; + DWORD LineLength; + LONG Count; + //HKEY hKey; + + GetModuleFileNameW(NULL,szPath,MAX_PATH); + ch = strrchrW(szPath,L'\\'); + if (ch != NULL) + *ch = L'\0'; + + wcscat(szPath, L"\\txtsetup.sif"); + hTxtsetupSif = SetupOpenInfFileW(szPath, NULL, INF_STYLE_OLDNT, NULL); + if (hTxtsetupSif != INVALID_HANDLE_VALUE) + { + // get language list + Count = SetupGetLineCount(hTxtsetupSif, _T("Language")); + if (Count > 0) + { + // TODO: alloc memory for all entries and read entries + SetupData.pLanguages = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LANG) * Count); + if (SetupData.pLanguages != NULL) + { + SetupData.LangCount = Count; + Count = 0; + if (SetupFindFirstLine(hTxtsetupSif, _T("Language"), + NULL,&InfContext)) + do + { + SetupGetStringField(&InfContext, 0, SetupData.pLanguages[Count].LangId, sizeof(SetupData.pLanguages[Count].LangId) / sizeof(TCHAR), &LineLength); + SetupGetStringField(&InfContext, 1, SetupData.pLanguages[Count].LangName, sizeof(SetupData.pLanguages[Count].LangName) / sizeof(TCHAR), &LineLength); + ++Count; + } + while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount); + } + } + // get keyboard layout list + Count = SetupGetLineCount(hTxtsetupSif, _T("KeyboardLayout")); + if (Count > 0) + { + // TODO: alloc memory for all entries and read entries + SetupData.pKbLayouts = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(KBLAYOUT) * Count); + if (SetupData.pKbLayouts != NULL) + { + SetupData.KbLayoutCount = Count; + Count = 0; + if (SetupFindFirstLine(hTxtsetupSif, _T("KeyboardLayout"), + NULL,&InfContext)) + do + { + SetupGetStringField(&InfContext, 0, SetupData.pKbLayouts[Count].LayoutId, sizeof(SetupData.pKbLayouts[Count].LayoutId) / sizeof(TCHAR), &LineLength); + SetupGetStringField(&InfContext, 1, SetupData.pKbLayouts[Count].LayoutName, sizeof(SetupData.pKbLayouts[Count].LayoutName) / sizeof(TCHAR), &LineLength); + ++Count; + } + while (SetupFindNextLine(&InfContext, &InfContext) && Count < SetupData.LangCount); + } + } + SetupCloseInfFile(hTxtsetupSif); + } +} + BOOL isUnattendSetup() { WCHAR szPath[MAX_PATH]; @@ -621,6 +714,8 @@ WinMain(HINSTANCE hInst, LoadString(hInst,IDS_ABORTSETUP, abort_msg, sizeof(abort_msg)/sizeof(TCHAR)); LoadString(hInst,IDS_ABORTSETUP2, abort_title,sizeof(abort_title)/sizeof(TCHAR)); + LoadSetupData(); + /* Create the Start page, until setup is working */ psp.dwSize = sizeof(PROPSHEETPAGE); psp.dwFlags = PSP_DEFAULT | PSP_HIDEHEADER; From 0fd48bec891f00ece0026276c51a9b935b2e8ea7 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 4 Aug 2008 21:51:32 +0000 Subject: [PATCH 145/304] - implement "create link" verb for control panel items svn path=/trunk/; revision=35115 --- reactos/dll/win32/shell32/cpanelfolder.c | 76 ++++++++++++++++++++---- 1 file changed, 66 insertions(+), 10 deletions(-) diff --git a/reactos/dll/win32/shell32/cpanelfolder.c b/reactos/dll/win32/shell32/cpanelfolder.c index 7e2d60b506f..36aadb03a06 100644 --- a/reactos/dll/win32/shell32/cpanelfolder.c +++ b/reactos/dll/win32/shell32/cpanelfolder.c @@ -1260,8 +1260,18 @@ static HRESULT WINAPI ICPanel_IContextMenu2_InvokeCommand( LPCMINVOKECOMMANDINFO lpcmi) { SHELLEXECUTEINFOW sei; + WCHAR szPath[MAX_PATH]; + char szTarget[MAX_PATH]; + STRRET strret; + WCHAR* pszPath; + INT Length, cLength; + PIDLCPanelStruct *pcpanel; + IPersistFile * ppf; + IShellLinkA * isl; ICPanelImpl *This = impl_from_IContextMenu(iface); + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) { ZeroMemory(&sei, sizeof(sei)); @@ -1277,17 +1287,63 @@ static HRESULT WINAPI ICPanel_IContextMenu2_InvokeCommand( } else if (lpcmi->lpVerb == MAKEINTRESOURCE(2)) { - /* FIXME - * retrieve CSIDL_DESKTOPDIRECTORY path, - * retrieve name from pidl and create a link there - */ - FIXME("implement shortcuthandling\n"); - return NOERROR; + if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_DESKTOPDIRECTORY, FALSE)) + return E_FAIL; + + pszPath = PathAddBackslashW(szPath); + if (!pszPath) + return E_FAIL; + + if (IShellFolder_GetDisplayNameOf((IShellFolder*)This, This->apidl[0], SHGDN_FORPARSING, &strret) != S_OK) + return E_FAIL; + + Length = MAX_PATH - (pszPath - szPath); + cLength = strlen(strret.u.cStr); + if (Length < cLength + 5) + { + FIXME("\n"); + return E_FAIL; + } + + if (MultiByteToWideChar(CP_ACP, 0, strret.u.cStr, cLength +1, pszPath, Length)) + { + pszPath += cLength; + Length -= cLength; + } + + if (Length > 10) + { + wcscpy(pszPath, L" - "); + cLength = LoadStringW(shell32_hInstance, IDS_LNK_FILE, &pszPath[3], Length -4) + 3; + if (cLength + 5 > Length) + cLength = Length - 5; + Length -= cLength; + pszPath += cLength; + } + wcscpy(pszPath, L".lnk"); + + pcpanel = _ILGetCPanelPointer(ILFindLastID(This->apidl[0])); + if (pcpanel) + { + strncpy(szTarget, pcpanel->szName, MAX_PATH); + } + else + { + FIXME("\n"); + return E_FAIL; + } + if (SUCCEEDED(IShellLink_Constructor(NULL, &IID_IShellLinkA, (LPVOID*)&isl))) + { + IShellLinkA_SetPath(isl, szTarget); + if (SUCCEEDED(IShellLinkA_QueryInterface(isl, &IID_IPersistFile, (LPVOID*)&ppf))) + { + IPersistFile_Save(ppf, szPath, TRUE); + IPersistFile_Release(ppf); + } + IShellLinkA_Release(isl); + } + return NOERROR; } - - - TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); - return S_OK; } From 1dbbf02a7e30d9bcb797a30157e93483951f4840 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Tue, 5 Aug 2008 04:05:28 +0000 Subject: [PATCH 146/304] - Patch by Yuriy Sidorov , NtUserToUnicodeEx should return zero if key in lpKeyState array is not pressed. svn path=/trunk/; revision=35117 --- .../subsystems/win32/win32k/ntuser/keyboard.c | 41 +++++++++++-------- 1 file changed, 24 insertions(+), 17 deletions(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/keyboard.c b/reactos/subsystems/win32/win32k/ntuser/keyboard.c index 32690487c0e..c035d8ca4f9 100644 --- a/reactos/subsystems/win32/win32k/ntuser/keyboard.c +++ b/reactos/subsystems/win32/win32k/ntuser/keyboard.c @@ -711,25 +711,32 @@ NtUserToUnicodeEx( DPRINT1( "Couldn't copy key state from caller.\n" ); RETURN(0); } - OutPwszBuff = ExAllocatePoolWithTag(NonPagedPool,sizeof(WCHAR) * cchBuff, TAG_STRING); - if( !OutPwszBuff ) + + /* Virtual code is correct and key is pressed currently? */ + if (wVirtKey < 0x100 && KeyStateBuf[wVirtKey] & KS_DOWN_BIT) { - DPRINT1( "ExAllocatePool(%d) failed\n", sizeof(WCHAR) * cchBuff); - RETURN(0); + OutPwszBuff = ExAllocatePoolWithTag(NonPagedPool,sizeof(WCHAR) * cchBuff, TAG_STRING); + if( !OutPwszBuff ) + { + DPRINT1( "ExAllocatePool(%d) failed\n", sizeof(WCHAR) * cchBuff); + RETURN(0); + } + RtlZeroMemory( OutPwszBuff, sizeof( WCHAR ) * cchBuff ); + + ret = ToUnicodeInner( wVirtKey, + wScanCode, + KeyStateBuf, + OutPwszBuff, + cchBuff, + wFlags, + PsGetCurrentThreadWin32Thread() ? + PsGetCurrentThreadWin32Thread()->KeyboardLayout->KBTables : 0 ); + + MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff); + ExFreePool(OutPwszBuff); } - RtlZeroMemory( OutPwszBuff, sizeof( WCHAR ) * cchBuff ); - - ret = ToUnicodeInner( wVirtKey, - wScanCode, - KeyStateBuf, - OutPwszBuff, - cchBuff, - wFlags, - PsGetCurrentThreadWin32Thread() ? - PsGetCurrentThreadWin32Thread()->KeyboardLayout->KBTables : 0 ); - - MmCopyToCaller(pwszBuff,OutPwszBuff,sizeof(WCHAR)*cchBuff); - ExFreePool(OutPwszBuff); + else + ret = 0; RETURN(ret); From f69bc6aa5f9d945a7f5cbbd10c31d8b6ea71f6d9 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Tue, 5 Aug 2008 07:36:10 +0000 Subject: [PATCH 147/304] return TRUE in Encrypt and DecryptFile as wine does even if the functions are unimplemented svn path=/trunk/; revision=35118 --- reactos/dll/win32/advapi32/sec/sec.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/advapi32/sec/sec.c b/reactos/dll/win32/advapi32/sec/sec.c index e1dee615345..8eea6e427a1 100644 --- a/reactos/dll/win32/advapi32/sec/sec.c +++ b/reactos/dll/win32/advapi32/sec/sec.c @@ -571,7 +571,7 @@ BOOL WINAPI DecryptFileW(LPCWSTR lpFileName, DWORD dwReserved) { FIXME("%s(%S) not implemented!\n", __FUNCTION__, lpFileName); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + return TRUE; } /* @@ -604,7 +604,7 @@ BOOL WINAPI EncryptFileW(LPCWSTR lpFileName) { FIXME("%s() not implemented!\n", __FUNCTION__); SetLastError(ERROR_CALL_NOT_IMPLEMENTED); - return FALSE; + return TRUE; } /* From e6daa6f38a3fbf0f12f412023a2fe3b7aa47ac27 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Tue, 5 Aug 2008 10:17:58 +0000 Subject: [PATCH 148/304] Vytis Girdzijauskas - Lithuanian translation of inf files added. - See issue #3556 for more details. svn path=/trunk/; revision=35119 --- reactos/media/inf/NET_NIC.inf | Bin 2002 -> 2118 bytes reactos/media/inf/cdrom.inf | Bin 1778 -> 1904 bytes reactos/media/inf/cpu.inf | Bin 2748 -> 3038 bytes reactos/media/inf/display.inf | Bin 4338 -> 4652 bytes reactos/media/inf/fdc.inf | Bin 3964 -> 4358 bytes reactos/media/inf/hdc.inf | Bin 4990 -> 5462 bytes reactos/media/inf/keyboard.inf | Bin 4166 -> 4438 bytes reactos/media/inf/machine.inf | Bin 19456 -> 23288 bytes reactos/media/inf/msmouse.inf | Bin 10848 -> 12092 bytes reactos/media/inf/netisa.inf | Bin 3196 -> 3448 bytes reactos/media/inf/ports.inf | Bin 5848 -> 6500 bytes reactos/media/inf/scsi.inf | Bin 4216 -> 4576 bytes reactos/media/inf/usb.inf | Bin 2634 -> 2872 bytes reactos/media/inf/usbport.inf | Bin 8812 -> 9754 bytes reactos/media/inf/usbstor.inf | Bin 2934 -> 3194 bytes 15 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/media/inf/NET_NIC.inf b/reactos/media/inf/NET_NIC.inf index bb2c02149a1225195d4d81c4c9fba34dd8d414fd..0105ef0876d87b1a87f7c17e4b9aa61aada9852a 100644 GIT binary patch delta 64 zcmcb_e@tM*CHBcLSVh?N7z`Lp7>p**XEW3YVaR02W5{O6VaR7tU`S+00pbFN5{6WU QBA`qn5Gyh8GH@{f04i4w4*&oF delta 7 OcmX>maEX7zC3XM};sZed diff --git a/reactos/media/inf/cdrom.inf b/reactos/media/inf/cdrom.inf index 4d578a04a2e353a9916c53dd55a1adc84faefba5..8fe949976741f492c69adc1f5efc1a80dbf230d6 100644 GIT binary patch delta 64 zcmeyw`+;u*2ixRHtTL08*rF!)vC2)J#ufwQOR*X;m@~vqc4W1e(q}AUNM*=lNN30d Ql9>#NK&-^T%fQ6|09}a>MgRZ+ delta 17 Ycmeys_lb7{2is&Wwh~6J$<1t~05@3$ZvX%Q diff --git a/reactos/media/inf/cpu.inf b/reactos/media/inf/cpu.inf index cac82b6224dd33db46aeae65b3a736101da6c80e..97c13988df928f61e0c11af7678691bce5ce77ae 100644 GIT binary patch delta 114 zcmdlZdQW`AB96(^*ku;);a~#NQjA8EH?rGL_TyyZ%x5TK$YdyGD4zVD%~!Ml$jfI) nW=Lfy2GTH@LN58qIqZBIB|w#VKwQkAz<^aHgAxNT0~Z4TTZJ4~ delta 16 Ycmca7zDIP!B96%ixFk03;b39{06ew^5dZ)H diff --git a/reactos/media/inf/display.inf b/reactos/media/inf/display.inf index 3b8d18532fa45c2494736934cd1372e4579c562b..4139994ae035f7116ced0e5450ff40c2a1ee1464 100644 GIT binary patch delta 178 zcmeyQxJG5eCxOW`_@o$(CNJbQR19NCWXNQwVn|`gXHWpLQ-HXDp@boop$I4rl$)$C zpg8#z51)1kke>&{#Xxmscy$#|HssTF3uY(7H>ZFh V2k44yhD62^2609u23`g(1_0mqCA0tl delta 7 OcmZ3Z@=0;SCjkHs)dQ9Q diff --git a/reactos/media/inf/fdc.inf b/reactos/media/inf/fdc.inf index 22625e6548d6cd33b66aa92827169045c0b74c39..88d037ccb86781cf345efa3cf9e579cb925d5347 100644 GIT binary patch delta 248 zcmew(*QT_ghJUgcw-lq%WJ7La{Tzl&hGIqq27SgNhE#?;hIAl54=Ps1kjRk3kOJgo z1L;g4FLQDuw`OQCLkW$To$%xvf>Mk|lRfz~^}QJ~8B!Ta7>XIQfLMVc1;{UE$Of~^7!nzBz#`c| zIupptoIICL(=ZsQK9M00D3i!g1Y~Cd*&tmC44w=w46Z;LP3L4wUi*05x&j!SfjV*O x2Aiw_w5<$iOFBa-LlV$lkZsvuSAg6IoiG3oiUVc< diff --git a/reactos/media/inf/keyboard.inf b/reactos/media/inf/keyboard.inf index 82333a2f8cb9a568cdd6b661e3530caa92bcf65e..8e4265e7a18b8610bd58c650dc4905243e83acc0 100644 GIT binary patch delta 108 zcmX@6a7}50o4{l%eko=n2J^|$e1@Xl3^@#m3}pz7HNaaoP2 z*>F*8X-QrxQj{vL94=F$MiXaMDf~Ir``&OmgW4RyK(F^d(%}qMWto&7`haW>5It8 z^RA&Dh`ugKS(6ns9SFD(SWeKTPS!OPb2}y6>080sAU&m;8h(pJ=(BTUucm`$w*bzp zgG`OYjTTAm1Y+}R4qGC*bKX6MyQ|JpozM8oVI915n9~TRnURK>-mY!(c4y31M?^naw=)Q(@%ftWM7M%iJqj{=V-LMjiaJ)fZ%s303` zOg=*vP#av!iYGJ5mdX?I0LVQHWNkzg iz%D_ySDbP39@V7DH#9|vFeF$4-Pz)dN({UVTnqpA2#vl((2@`1bp zFrCei$XEiBpZu5G+$Wf!6e#1z;L2dcU;u^+48=gP6oyowSs;@V8FGObzgbEQybN3n E0Pyi2rT_o{ delta 7 Ocmew%^+#eu4G#bh%L88k diff --git a/reactos/media/inf/ports.inf b/reactos/media/inf/ports.inf index c22f0b05f3b3f3981ef3d28cb501fd1a53d9c216..4a435ad5ed808d92f66d336b8eece1891cfa34d5 100644 GIT binary patch delta 360 zcmcbi`^0F&4YA3`ctzOt7z`Lp7>p+S3+Vd#F_bdoGZZtVGGsI4Fl2(+5K;liD`HRp zidHhD1Lf0!yi^8WMpQLfK>c|@xe}nN;>mjj^d(Dx`tlgW85I~1a+yFIG$%I-i%w1u zRnSMZGZAP)G0>hOpb3d!)6sMS^_h~aM^Q+0@;zaN$*%lvO{cx7uVzzPAO(12J^{{oT|pb3?&SS40#MGK(YwP&IGbE8HyPc7(y9>8JvK0 hB4Z*$HbXv8u9Tq+sH%9fExWxH8TuHM7O2yE&$mNawW(W#X!3g854mn&Ih`z6l`WO!(=(dX+jvrGfdv6 PI8OpoSc!p`fr|kE+8I8D delta 11 ScmbQ`^TuVvKewIM|qt7|bX4a;lmKGn6nSGUPF&0LdaCI}^yx1hO+36c|Do uf*G8Ev_4}ILn=@_9U(jUJy*O=B2axUSPY~um7y3zZ6#1liGi1aiva-0-y6OF delta 7 Ocmew*@l9+)88-kAngdV( From 0449b6bfed3b9104fed004b8673826d092472fea Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Tue, 5 Aug 2008 11:24:47 +0000 Subject: [PATCH 149/304] Bug 3555: Syssetup: Adjust size of controls for italian translation by Carlo Bramini Bug 3588: spanish files by Javier Remacha Bug 3600: Czech translation update by Radek liska. Inf File Update will come later. Bug 3630: usetup and shell32 pl translation update by Maciej Bialas svn path=/trunk/; revision=35120 --- reactos/base/applications/calc/lang/cs-CZ.rc | 16 +- reactos/base/applications/calc/lang/es-ES.rc | 224 +++++++++--------- reactos/base/setup/usetup/lang/pl-PL.h | 2 +- reactos/base/setup/vmwinst/lang/cs-CZ.rc | 2 +- reactos/base/shell/explorer-new/explorer.rc | 1 + reactos/base/shell/explorer-new/lang/cs-CZ.rc | 64 +++++ reactos/base/shell/explorer/explorer-cz.rc | 6 +- reactos/boot/freeldr/fdebug/fdebug.rc | 1 + reactos/boot/freeldr/fdebug/lang/cs-CZ.rc | 192 +++++++++++++++ reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc | 204 ++++++++++++++++ reactos/dll/cpl/appwiz-new/rsrc.rc | 1 + reactos/dll/cpl/appwiz/lang/cs-CZ.rc | 174 ++++++++++++++ reactos/dll/cpl/appwiz/rsrc.rc | 1 + reactos/dll/cpl/console/lang/cs-CZ.rc | 145 ++++++++++++ reactos/dll/cpl/console/rsrc.rc | 3 +- reactos/dll/cpl/desk/lang/cs-CZ.rc | 11 +- reactos/dll/cpl/desk/lang/es-ES.rc | 4 +- reactos/dll/cpl/joy/lang/cs-CZ.rc | 89 +++++++ reactos/dll/cpl/joy/rsrc.rc | 1 + reactos/dll/cpl/liccpa/lang/cs-CZ.rc | 32 +++ reactos/dll/cpl/liccpa/rsrc.rc | 1 + reactos/dll/cpl/main/lang/cs-CZ.rc | 20 +- reactos/dll/cpl/ncpa/lang/cs-CZ.rc | 58 +++-- reactos/dll/cpl/sysdm/lang/cs-CZ.rc | 6 +- reactos/dll/cpl/timedate/lang/cs-CZ.rc | 4 +- reactos/dll/shellext/deskadp/lang/cs-CZ.rc | 53 +++++ reactos/dll/shellext/deskadp/rsrc.rc | 1 + reactos/dll/shellext/deskmon/lang/cs-CZ.rc | 27 +++ reactos/dll/shellext/deskmon/rsrc.rc | 1 + reactos/dll/shellext/slayer/lang/cs-CZ.rc | 43 ++++ reactos/dll/shellext/slayer/rsrc.rc | 1 + reactos/dll/win32/shell32/lang/es-ES.rc | 36 +-- reactos/dll/win32/shell32/lang/pl-PL.rc | 2 +- reactos/dll/win32/syssetup/lang/it-IT.rc | 4 +- 34 files changed, 1241 insertions(+), 189 deletions(-) create mode 100644 reactos/base/shell/explorer-new/lang/cs-CZ.rc create mode 100644 reactos/boot/freeldr/fdebug/lang/cs-CZ.rc create mode 100644 reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc create mode 100644 reactos/dll/cpl/appwiz/lang/cs-CZ.rc create mode 100644 reactos/dll/cpl/console/lang/cs-CZ.rc create mode 100644 reactos/dll/cpl/joy/lang/cs-CZ.rc create mode 100644 reactos/dll/cpl/liccpa/lang/cs-CZ.rc create mode 100644 reactos/dll/shellext/deskadp/lang/cs-CZ.rc create mode 100644 reactos/dll/shellext/deskmon/lang/cs-CZ.rc create mode 100644 reactos/dll/shellext/slayer/lang/cs-CZ.rc diff --git a/reactos/base/applications/calc/lang/cs-CZ.rc b/reactos/base/applications/calc/lang/cs-CZ.rc index 0451f91d66c..fca7a7d8f77 100644 --- a/reactos/base/applications/calc/lang/cs-CZ.rc +++ b/reactos/base/applications/calc/lang/cs-CZ.rc @@ -1,6 +1,6 @@ /* FILE: base/applications/calc/lang/cs-CZ.rc * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) - * UPDATED: 2008-06-28 + * UPDATED: 2008-07-27 */ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT @@ -368,7 +368,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "Seskupovn slic", IDM_VIEW_GROUP, CHECKED END - POPUP "Help" + POPUP "Npovda" BEGIN MENUITEM "Tmata npovdy", IDM_HELP_HELP MENUITEM SEPARATOR @@ -401,7 +401,7 @@ BEGIN MENUITEM SEPARATOR MENUITEM "Seskupovn slic", IDM_VIEW_GROUP, CHECKED END - POPUP "Help" + POPUP "Npovda" BEGIN MENUITEM "Tmata npovdy", IDM_HELP_HELP MENUITEM SEPARATOR @@ -416,19 +416,19 @@ BEGIN MENUITEM "Koprovat\tCTRL-C", IDM_EDIT_COPY MENUITEM "Vloit\tCTRL-V", IDM_EDIT_PASTE END - POPUP "View" + POPUP "Zobrazit" BEGIN MENUITEM "Standardn", IDM_VIEW_STANDARD, CHECKED MENUITEM "Vdeck", IDM_VIEW_SCIENTIFIC, CHECKED MENUITEM "Pevody", IDM_VIEW_CONVERSION MENUITEM SEPARATOR - MENUITEM "Seskupovn slic", IDM_VIEW_GROUP, CHECKED + MENUITEM "Seskupovn slic", IDM_VIEW_GROUP, CHECKED END - POPUP "Help" + POPUP "Npovda" BEGIN - MENUITEM "Tmata npovdy", IDM_HELP_HELP + MENUITEM "Tmata npovdy", IDM_HELP_HELP MENUITEM SEPARATOR - MENUITEM "O ReactOS kalkulace", IDM_HELP_ABOUT + MENUITEM "O ReactOS kalkulace", IDM_HELP_ABOUT END END diff --git a/reactos/base/applications/calc/lang/es-ES.rc b/reactos/base/applications/calc/lang/es-ES.rc index 9fbb4854329..0c9db5a28b9 100644 --- a/reactos/base/applications/calc/lang/es-ES.rc +++ b/reactos/base/applications/calc/lang/es-ES.rc @@ -1,6 +1,6 @@ /* *Spanish Language resource file - * Traducido por: Javier Remacha 2007-12-31 + * Traducido por: Javier Remacha 2008 */ LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL @@ -240,16 +240,16 @@ CAPTION "ReactOS Calculator" MENU IDR_MENU_STANDARD FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Convert",IDC_BUTTON_CONVERT,35,105,76,17 + PUSHBUTTON "Convertir",IDC_BUTTON_CONVERT,35,105,76,17 COMBOBOX IDC_COMBO_CATEGORY,4,31,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Category:",IDC_STATIC,4,20,56,8 + LTEXT "Categora:",IDC_STATIC,4,20,56,8 COMBOBOX IDC_COMBO_FROM,4,60,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Convert from:",IDC_STATIC,4,49,56,8 + LTEXT "Convertir de:",IDC_STATIC,4,49,56,8 COMBOBOX IDC_COMBO_TO,4,87,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Convert to:",IDC_STATIC,4,76,56,8 + LTEXT "Convertir a:",IDC_STATIC,4,76,56,8 CONTROL "C",IDC_BUTTON_CANC,"Button",BS_OWNERDRAW | BS_CENTER | BS_VCENTER | BS_NOTIFY | WS_TABSTOP,276,24,40,17 CONTROL "CE",IDC_BUTTON_CE,"Button",BS_OWNERDRAW | BS_CENTER | @@ -449,50 +449,50 @@ END // types of conversion STRINGTABLE DISCARDABLE BEGIN - IDS_CONV_AREA "Area" - IDS_CONV_CONSUMPTION "Consumption (engines)" - IDS_CONV_CURRENCY "Currencies" - IDS_CONV_ENERGY "Energy" - IDS_CONV_LENGTH "Lenghts" - IDS_CONV_POWER "Power" - IDS_CONV_PRESSURE "Pressure" - IDS_CONV_TEMPERATURE "Temperature" - IDS_CONV_VELOCITY "Velocity" - IDS_CONV_VOLUME "Volume" - IDS_CONV_WEIGHT "Weights" + IDS_CONV_AREA "rea" + IDS_CONV_CONSUMPTION "Consumo (motores)" + IDS_CONV_CURRENCY "Monedas" + IDS_CONV_ENERGY "Energa" + IDS_CONV_LENGTH "Longitud" + IDS_CONV_POWER "Potencia" + IDS_CONV_PRESSURE "Presin" + IDS_CONV_TEMPERATURE "Temperatura" + IDS_CONV_VELOCITY "Velocidad" + IDS_CONV_VOLUME "Volumen" + IDS_CONV_WEIGHT "Peso" END // TYPES OF AREAS STRINGTABLE DISCARDABLE BEGIN IDS_AREA_ACRES "Acres" - IDS_AREA_ACRES_BRAZIL "Acres (Brazil)" - IDS_AREA_ACRES_FRANCE "Acres (France)" - IDS_AREA_ACRES_SCOTS "Acres (Scots)" + IDS_AREA_ACRES_BRAZIL "Acres (Brasil)" + IDS_AREA_ACRES_FRANCE "Acres (Francia)" + IDS_AREA_ACRES_SCOTS "Acres (Escocia)" IDS_AREA_ACRES_US "Acres (US)" - IDS_AREA_ARES "Ares" + IDS_AREA_ARES "rea" IDS_AREA_CHOU "Chou" IDS_AREA_DANBO "Danbo" - IDS_AREA_HECTARES "Hectares" + IDS_AREA_HECTARES "Hectrias" IDS_AREA_JEONGBO "Jeongbo" - IDS_AREA_MORGEN_HUNGARY "Morgen (Hungary)" + IDS_AREA_MORGEN_HUNGARY "Morgen (Hungra)" IDS_AREA_MU "Mu" IDS_AREA_PING "Ping" IDS_AREA_PYEONG "Pyeong" IDS_AREA_PYEONGBANGJA "Pyeongbangja" IDS_AREA_RAI "Rai" IDS_AREA_SE "Se" - IDS_AREA_SQUARE_CENTIMETERS "Square centimeters" + IDS_AREA_SQUARE_CENTIMETERS "Centmetros cuadrados" IDS_AREA_SQUARE_CHR "Square chr" - IDS_AREA_SQUARE_FATHOMS "Square fathoms" - IDS_AREA_SQUARE_FATHOMS_HUNGARY "Square fathoms (Hungary)" - IDS_AREA_SQUARE_FEET "Square feet" - IDS_AREA_SQUARE_INCHES "Square inches" - IDS_AREA_SQUARE_KILOMETERS "Square kilometers" + IDS_AREA_SQUARE_FATHOMS "Braza cuadrada" + IDS_AREA_SQUARE_FATHOMS_HUNGARY "Braza cuadrada (Hungra)" + IDS_AREA_SQUARE_FEET "Pies cuadrados" + IDS_AREA_SQUARE_INCHES "Pulgadas cuadradas" + IDS_AREA_SQUARE_KILOMETERS "Kilmetros cuadrados" IDS_AREA_SQUARE_LAR "Square lar" - IDS_AREA_SQUARE_METER "Square meter" - IDS_AREA_SQUARE_MILES "Square miles" - IDS_AREA_SQUARE_MILLIMETERS "Square millimeters" + IDS_AREA_SQUARE_METER "Metros cuadrado" + IDS_AREA_SQUARE_MILES "Millas cuadradas" + IDS_AREA_SQUARE_MILLIMETERS "Milmetros cuadrados" IDS_AREA_SQUARE_SHAKU "Square shaku" IDS_AREA_SQUARE_TSUEN "Square tsuen" IDS_AREA_SQUARE_VA "Square va" @@ -504,44 +504,44 @@ END // TYPES OF COMSUMPTIONS STRINGTABLE DISCARDABLE BEGIN - IDS_CONSUMPTION_KM_PER_L "Kilometer/liter" - IDS_CONSUMPTION_L_PER_100_KM "Liters/100 kilometers" - IDS_CONSUMPTION_MILES_GALLON_UK "Miles/gallon (UK)" - IDS_CONSUMPTION_MILES_GALLON_US "Miles/gallon (US)" + IDS_CONSUMPTION_KM_PER_L "Kilometros/litro" + IDS_CONSUMPTION_L_PER_100_KM "Litros/100 kilometros" + IDS_CONSUMPTION_MILES_GALLON_UK "Millas/galn (UK)" + IDS_CONSUMPTION_MILES_GALLON_US "Millas/galn (US)" END // TYPES OF CURRENCIES STRINGTABLE DISCARDABLE BEGIN - IDS_CURRENCY_AUSTRIAN_SCHILLING "Austrian schilling" - IDS_CURRENCY_BELGIAN_FRANC "Belgian franc" - IDS_CURRENCY_CYPRIOT_POUND "Cypriot pound" - IDS_CURRENCY_DEUTSCHE_MARK "Deutsche Mark" - IDS_CURRENCY_DUTCH_GUILDER "Dutch guilder" + IDS_CURRENCY_AUSTRIAN_SCHILLING "Schilling Austriaco" + IDS_CURRENCY_BELGIAN_FRANC "Franco Belga" + IDS_CURRENCY_CYPRIOT_POUND "Libra Chipriota" + IDS_CURRENCY_DEUTSCHE_MARK "Marco Alemn" + IDS_CURRENCY_DUTCH_GUILDER "Florn Neerlands" IDS_CURRENCY_EURO "Euro" - IDS_CURRENCY_FINNISH_MARKKA "Finnish markka" - IDS_CURRENCY_FRENCH_FRANC "French franc" - IDS_CURRENCY_GREEK_DRACHMA "Greek Drachma" - IDS_CURRENCY_IRISH_POUND "Irish pound" - IDS_CURRENCY_ITALIAN_LIRA "Italian lira" - IDS_CURRENCY_LUXEMBOURG_FRANC "Luxembourg franc" - IDS_CURRENCY_MALTESE_LIRA "Maltese lira" - IDS_CURRENCY_PORTOGUESE_ESCUDO "Portoguese escudo" - IDS_CURRENCY_SLOVENIAN_TOLAR "Slovenian tolar" - IDS_CURRENCY_SPANISH_PESETA "Spanish peseta" + IDS_CURRENCY_FINNISH_MARKKA "Marco Finlands" + IDS_CURRENCY_FRENCH_FRANC "Franco Frances" + IDS_CURRENCY_GREEK_DRACHMA "Drachma Griego" + IDS_CURRENCY_IRISH_POUND "Libra Irlandesa" + IDS_CURRENCY_ITALIAN_LIRA "Lira Italiana" + IDS_CURRENCY_LUXEMBOURG_FRANC "Franco Luxemburgus" + IDS_CURRENCY_MALTESE_LIRA "Lira Maltesa" + IDS_CURRENCY_PORTOGUESE_ESCUDO "Escudo Portugus" + IDS_CURRENCY_SLOVENIAN_TOLAR "Tolar Esloveno" + IDS_CURRENCY_SPANISH_PESETA "Peseta Espaola" END // TYPES OF ENERGIES STRINGTABLE DISCARDABLE BEGIN - IDS_ENERGY_15_C_CALORIES "15 ^C calories" - IDS_ENERGY_ERGS "Ergs" - IDS_ENERGY_IT_CALORIES "International Table calories" - IDS_ENERGY_JOULES "Joules" - IDS_ENERGY_KILOJOULES "Kilojoules" - IDS_ENERGY_KILOWATT_HOURS "Kilowatt hours" - IDS_ENERGY_NUTRITION_CALORIES "Nutrition calories" - IDS_ENERGY_TH_CALORIES "Thermochemical calorie" + IDS_ENERGY_15_C_CALORIES "15 ^C caloras" + IDS_ENERGY_ERGS "Ergios" + IDS_ENERGY_IT_CALORIES "Tabla internacional de caloras" + IDS_ENERGY_JOULES "Julios" + IDS_ENERGY_KILOJOULES "Kilojulios" + IDS_ENERGY_KILOWATT_HOURS "Kilowatios hora" + IDS_ENERGY_NUTRITION_CALORIES "Caloras nutricionales" + IDS_ENERGY_TH_CALORIES "Caloras termoqumicas" END // TYPES OF LENGTHS @@ -550,33 +550,33 @@ BEGIN IDS_LENGTH_ANGSTROMS "Angstroms" IDS_LENGTH_ASTRONOMILA_UNITS "Astronomila units" IDS_LENGTH_BARLEYCORNS "Barleycorns" - IDS_LENGTH_CENTIMETERS "Centimeters" - IDS_LENGTH_CHAINS_UK "Chains (UK)" + IDS_LENGTH_CENTIMETERS "Centmetros" + IDS_LENGTH_CHAINS_UK "Cadenas (UK)" IDS_LENGTH_CHI "Chi" IDS_LENGTH_CHOU "Chou" IDS_LENGTH_CHR "Chr" IDS_LENGTH_CUN "Cun" IDS_LENGTH_FATHOMS "Fathoms" IDS_LENGTH_FATHOMS_HUNGARY "Fathoms (Hungary)" - IDS_LENGTH_FEET "Feet" + IDS_LENGTH_FEET "Pies" IDS_LENGTH_FURLONGS "Furlongs" IDS_LENGTH_GAN "Gan" IDS_LENGTH_HANDS "Hands" IDS_LENGTH_HUNH "Hunh" - IDS_LENGTH_INCHES "Inches" + IDS_LENGTH_INCHES "Pulgadas" IDS_LENGTH_JA "Ja" IDS_LENGTH_JEONG "Jeong" IDS_LENGTH_KABIET "Kabiet" IDS_LENGTH_KEN "Ken" IDS_LENGTH_KEUB "Keub" - IDS_LENGTH_KILOMETERS "Kilometers" + IDS_LENGTH_KILOMETERS "Kilometros" IDS_LENGTH_LAR "Lar" - IDS_LENGTH_LIGHT_YEARS "Light years" + IDS_LENGTH_LIGHT_YEARS "Aos luz" IDS_LENGTH_LINKS_UK "Links (UK)" - IDS_LENGTH_METERS "Meters" - IDS_LENGTH_MILES "Miles" - IDS_LENGTH_MILLIMETERS "Millimeters" - IDS_LENGTH_NAUTICAL_MILES "Nautical miles" + IDS_LENGTH_METERS "Metros" + IDS_LENGTH_MILES "Millas" + IDS_LENGTH_MILLIMETERS "Milmetros" + IDS_LENGTH_NAUTICAL_MILES "Millas nauticas" IDS_LENGTH_NIEU "Nieu" IDS_LENGTH_PARSECS "Parsecs" IDS_LENGTH_PICAS "Picas" @@ -597,20 +597,20 @@ END // TYPES OF POWERS STRINGTABLE DISCARDABLE BEGIN - IDS_POWER_HORSEPOWER "Horsepower" - IDS_POWER_KILOWATTS "Kilowatts" - IDS_POWER_MEGAWATTS "Megawatts" - IDS_POWER_WATTS "Watts" + IDS_POWER_HORSEPOWER "Caballos de vapor" + IDS_POWER_KILOWATTS "Kilowatios" + IDS_POWER_MEGAWATTS "Megawatios" + IDS_POWER_WATTS "Watios" END // TYPE OF PRESSURES STRINGTABLE DISCARDABLE BEGIN - IDS_PRESSURE_ATMOSPHERES "Atmospheres" - IDS_PRESSURE_BARS "Bars" - IDS_PRESSURE_MM_OF_MERCURY "Millimeters of mercury" - IDS_PRESSURE_PASCALS "Pascals" - IDS_PRESSURE_PSI "Pounds-force per square inch" + IDS_PRESSURE_ATMOSPHERES "Atmsferas" + IDS_PRESSURE_BARS "Bares" + IDS_PRESSURE_MM_OF_MERCURY "Milmetros de mercurio" + IDS_PRESSURE_PASCALS "Pascales" + IDS_PRESSURE_PSI "Libras fuerza por pulgada cuadrada" END // TYPES OF TEMPERATURES @@ -625,46 +625,46 @@ END // TYPES OF VELOCITIES STRINGTABLE DISCARDABLE BEGIN - IDS_VELOCITY_FEET_HOUR "Feet/hour" - IDS_VELOCITY_KILOMETERS_HOUR "Kilometers/hour" + IDS_VELOCITY_FEET_HOUR "Pies/hora" + IDS_VELOCITY_KILOMETERS_HOUR "Kilometros/hora" IDS_VELOCITY_KNOTS "Knots" IDS_VELOCITY_MACH "Mach" - IDS_VELOCITY_METERS_SECOND "Meters/second" - IDS_VELOCITY_MILES_HOUR "Miles/hour" + IDS_VELOCITY_METERS_SECOND "Metros/segundo" + IDS_VELOCITY_MILES_HOUR "Millas/hora" END // TYPES OF VOLUMES STRINGTABLE DISCARDABLE BEGIN - IDS_VOLUME_BARRELS_UK "Barrels (UK)" - IDS_VOLUME_BARRELS_OIL "Barrels oil" + IDS_VOLUME_BARRELS_UK "Barriles (UK)" + IDS_VOLUME_BARRELS_OIL "Barriles de petroleo" IDS_VOLUME_BUN "Bun" - IDS_VOLUME_BUSHELS_UK "Bushels (UK)" - IDS_VOLUME_BUSHELS_US "Bushels (US)" - IDS_VOLUME_CUBIC_CENTIMETERS "Cubic centimeters" - IDS_VOLUME_CUBIC_FEET "Cubic feet" - IDS_VOLUME_CUBIC_INCHES "Cubic inches" - IDS_VOLUME_CUBIC_METERS "Cubic meters" - IDS_VOLUME_CUBIC_YARDS "Cubic yards" + IDS_VOLUME_BUSHELS_UK "Celemn (UK)" + IDS_VOLUME_BUSHELS_US "Celemn (US)" + IDS_VOLUME_CUBIC_CENTIMETERS "Centmetros cbicos" + IDS_VOLUME_CUBIC_FEET "Pes cbicos" + IDS_VOLUME_CUBIC_INCHES "Pulgadas cbicas" + IDS_VOLUME_CUBIC_METERS "Metros cbicos" + IDS_VOLUME_CUBIC_YARDS "Yardas cbicas" IDS_VOLUME_DOE "Doe" - IDS_VOLUME_FLUID_OUNCES_UK "Fluid ounces (UK)" - IDS_VOLUME_FLUID_OUNCES_US "Fluid ounces (US)" - IDS_VOLUME_GALLONS_UK "Gallons (UK)" - IDS_VOLUME_GALLONS_DRY_US "Gallons, dry (US)" - IDS_VOLUME_GALLONS_LIQUID_US "Gallons, liquid (US)" + IDS_VOLUME_FLUID_OUNCES_UK "Onza lquida (UK)" + IDS_VOLUME_FLUID_OUNCES_US "Onza lquida (US)" + IDS_VOLUME_GALLONS_UK "Galones (UK)" + IDS_VOLUME_GALLONS_DRY_US "Galones, dry (US)" + IDS_VOLUME_GALLONS_LIQUID_US "Galones, liquid (US)" IDS_VOLUME_GOU "Gou" IDS_VOLUME_HOP "Hop" IDS_VOLUME_ICCE "Icce" IDS_VOLUME_KWIAN "Kwian" - IDS_VOLUME_LITERS "Liters" + IDS_VOLUME_LITERS "Litros" IDS_VOLUME_MAL "Mal" - IDS_VOLUME_MILLILITERS "Milliliters" - IDS_VOLUME_PINTS_UK "Pints (UK)" - IDS_VOLUME_PINTS_DRY_US "Pints, dry (US)" - IDS_VOLUME_PINTS_LIQUID_US "Pints, liquid (US)" - IDS_VOLUME_QUARTS_UK "Quarts (UK)" - IDS_VOLUME_QUARTS_DRY_US "Quarts, dry (US)" - IDS_VOLUME_QUARTS_LIQUID_US "Quarts, liquid (US)" + IDS_VOLUME_MILLILITERS "Mililitros" + IDS_VOLUME_PINTS_UK "Pintas (UK)" + IDS_VOLUME_PINTS_DRY_US "Pintas, dry (US)" + IDS_VOLUME_PINTS_LIQUID_US "Pintas, liquid (US)" + IDS_VOLUME_QUARTS_UK "Cuartos (UK)" + IDS_VOLUME_QUARTS_DRY_US "Cuartos, dry (US)" + IDS_VOLUME_QUARTS_LIQUID_US "Cuartos, liquid (US)" IDS_VOLUME_SEKI "Seki" IDS_VOLUME_SYOU "Syou" IDS_VOLUME_TANANLOUNG "Tananloung" @@ -676,29 +676,29 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_WEIGHT_BAHT "Baht" - IDS_WEIGHT_CARATS "Carats" + IDS_WEIGHT_CARATS "Quilates" IDS_WEIGHT_CHUNG "Chung" IDS_WEIGHT_DON "Don" IDS_WEIGHT_GEUN "Geun" - IDS_WEIGHT_GRAMS "Grams" + IDS_WEIGHT_GRAMS "Gramos" IDS_WEIGHT_GWAN "Gwan" IDS_WEIGHT_HARB "Harb" IDS_WEIGHT_JIN_CHINA "Jin (China)" IDS_WEIGHT_JIN_TAIWAN "Jin (Taiwan)" IDS_WEIGHT_KAN "Kan" - IDS_WEIGHT_KILOGRAMS "Kilograms" + IDS_WEIGHT_KILOGRAMS "Kilogramos" IDS_WEIGHT_KIN "Kin" IDS_WEIGHT_LIANG_CHINA "Liang (China)" IDS_WEIGHT_LIANG_TAIWAN "Liang (Taiwan)" IDS_WEIGHT_MONME "Monme" - IDS_WEIGHT_OUNCES_AVOIRDUPOIS "Ounces, avoirdupois" - IDS_WEIGHT_OUNCES_TROY "Ounces, troy" - IDS_WEIGHT_POUNDS "Pounds" + IDS_WEIGHT_OUNCES_AVOIRDUPOIS "Onza, avoirdupois" + IDS_WEIGHT_OUNCES_TROY "Onza, troy" + IDS_WEIGHT_POUNDS "Libras" IDS_WEIGHT_QUINTAL_METRIC "Quintal (metric)" IDS_WEIGHT_SALOUNG "Saloung" IDS_WEIGHT_STONES "Stones" IDS_WEIGHT_TAMLUNG "Tamlung" - IDS_WEIGHT_TONNES "Tonnes" - IDS_WEIGHT_TONS_UK "Tons (UK)" - IDS_WEIGHT_TONS_US "Tons (US)" + IDS_WEIGHT_TONNES "Toneladas" + IDS_WEIGHT_TONS_UK "Toneladas (UK)" + IDS_WEIGHT_TONS_US "Toneladas (US)" END diff --git a/reactos/base/setup/usetup/lang/pl-PL.h b/reactos/base/setup/usetup/lang/pl-PL.h index 7f8af6fff4f..a3e37b1ede0 100644 --- a/reactos/base/setup/usetup/lang/pl-PL.h +++ b/reactos/base/setup/usetup/lang/pl-PL.h @@ -621,7 +621,7 @@ static MUI_ENTRY plPLQuitPageEntries[] = { 10, 8, - "Upewnij si ze w Napdzie A: nie ma dyskietki i", + "Upewnij si e w Napdzie A: nie ma dyskietki i", TEXT_STYLE_NORMAL }, { diff --git a/reactos/base/setup/vmwinst/lang/cs-CZ.rc b/reactos/base/setup/vmwinst/lang/cs-CZ.rc index 324e806ea24..6a487da02b9 100644 --- a/reactos/base/setup/vmwinst/lang/cs-CZ.rc +++ b/reactos/base/setup/vmwinst/lang/cs-CZ.rc @@ -95,7 +95,7 @@ BEGIN IDS_FAILEDTOSELVGADRIVER "Nepodailo se zaktivovat ReactOS VGA ovlada!" IDS_FAILEDTOSELVBEDRIVER "Nepodailo se zaktivovat ReactOS VBE ovlada!" IDS_UNINSTNOTICE "Podprn soubory VMware(r) SVGA ovladae nebyly odstranny.\nSmate je, prosm, po restarovn systmu." - IDS_FAILEDTOADDREGENTRIES "Failed to create registry entries for the VMware(r) SVGA driver!" + IDS_FAILEDTOADDREGENTRIES "Nepodailo se vytvoit v registru zpis pro VMware(r) SVGA ovlada!" END STRINGTABLE diff --git a/reactos/base/shell/explorer-new/explorer.rc b/reactos/base/shell/explorer-new/explorer.rc index dd86305a808..d18c40967fa 100644 --- a/reactos/base/shell/explorer-new/explorer.rc +++ b/reactos/base/shell/explorer-new/explorer.rc @@ -12,6 +12,7 @@ IDI_START ICON DISCARDABLE res/start.ico IDB_STARTMENU BITMAP DISCARDABLE res/logov.bmp #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" diff --git a/reactos/base/shell/explorer-new/lang/cs-CZ.rc b/reactos/base/shell/explorer-new/lang/cs-CZ.rc new file mode 100644 index 00000000000..3244e159761 --- /dev/null +++ b/reactos/base/shell/explorer-new/lang/cs-CZ.rc @@ -0,0 +1,64 @@ +/* FILE: shell/explorer-new/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDM_TRAYWND MENU DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "&Uzamknout hlavn panel", ID_LOCKTASKBAR + MENUITEM "Vl&astnosti", ID_SHELL_CMD_PROPERTIES + END +END + +IDM_STARTMENU MENUEX DISCARDABLE +BEGIN + POPUP "" + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + POPUP "&Programy", IDM_PROGRAMS + BEGIN + MENUITEM "(Przdn)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Oblben", IDM_FAVORITES + BEGIN + MENUITEM "(Przdn)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Dokumenty", IDM_DOCUMENTS + BEGIN + MENUITEM "(Przdn)", -1, MFT_STRING, MFS_GRAYED + END + POPUP "&Nastaven", IDM_SETTINGS + BEGIN + MENUITEM "&Ovldac panely", IDM_CONTROLPANEL, MFT_STRING, MFS_GRAYED + MENUITEM "", -1, MFT_SEPARATOR + MENUITEM "&Zabezpeen...", IDM_SECURITY, MFT_STRING, MFS_ENABLED + MENUITEM "&Sov pipojen", IDM_NETWORKCONNECTIONS, MFT_STRING, MFS_ENABLED + MENUITEM "&Tiskrny a faxy", IDM_PRINTERSANDFAXES, MFT_STRING, MFS_ENABLED + MENUITEM "&Hlavn panel a nabdka Start", IDM_TASKBARANDSTARTMENU, MFT_STRING, MFS_ENABLED + END + POPUP "&Hledat", IDM_SEARCH + BEGIN + MENUITEM "", -1, MFT_SEPARATOR + END + MENUITEM "Npovd&a a odborn pomoc", IDM_HELPANDSUPPORT, MFT_STRING, MFS_ENABLED + MENUITEM "&Spustit...", IDM_RUN, MFT_STRING, MFS_ENABLED + MENUITEM "", 450, MFT_SEPARATOR, MFS_ENABLED + MENUITEM "S&ynchronizovat", IDM_SYNCHRONIZE, MFT_STRING, MFS_ENABLED + MENUITEM "Odh&lsit %s...", IDM_LOGOFF, MFT_STRING, MFS_ENABLED + MENUITEM "Odpoj&it...", IDM_DISCONNECT, MFT_STRING, MFS_ENABLED + MENUITEM "Odpo&jit pota z doku", IDM_UNDOCKCOMPUTER, MFT_STRING, MFS_ENABLED + MENUITEM "&Vypnout...", IDM_SHUTDOWN, MFT_STRING, MFS_ENABLED + END +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_START "Start" + IDS_PROPERTIES "Vl&astnosti" + IDS_OPEN_ALL_USERS "Ote&vt sloku All Users" + IDS_EXPLORE_ALL_USERS "Pro&chzet sloku All Users" +END diff --git a/reactos/base/shell/explorer/explorer-cz.rc b/reactos/base/shell/explorer/explorer-cz.rc index b9fec5c7c22..033137dd671 100644 --- a/reactos/base/shell/explorer/explorer-cz.rc +++ b/reactos/base/shell/explorer/explorer-cz.rc @@ -330,7 +330,7 @@ BEGIN IDS_START "Start" IDS_LOGOFF "Odhlsit se..." IDS_SHUTDOWN "Vypnout..." - IDS_RESTART "Restart..." + IDS_RESTART "Restartovat..." IDS_LAUNCH "Spustit..." IDS_START_HELP "Pomoc" IDS_SEARCH_FILES "Hledat" @@ -381,8 +381,8 @@ BEGIN IDS_DESKTOPBAR_SETTINGS "Nastaven plochy" IDS_DESKTOP "Plocha" IDS_TASKBAR "Panel loh" - IDS_NAMECOLUMN "Name" - IDS_PATHCOLUMN "Path" + IDS_NAMECOLUMN "Nzev" + IDS_PATHCOLUMN "Cesta" IDS_MENUCOLUMN "Menu path" END diff --git a/reactos/boot/freeldr/fdebug/fdebug.rc b/reactos/boot/freeldr/fdebug/fdebug.rc index 37d349d049c..15f787de361 100644 --- a/reactos/boot/freeldr/fdebug/fdebug.rc +++ b/reactos/boot/freeldr/fdebug/fdebug.rc @@ -6,6 +6,7 @@ LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US IDI_FDEBUG ICON "fdebug.ico" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" diff --git a/reactos/boot/freeldr/fdebug/lang/cs-CZ.rc b/reactos/boot/freeldr/fdebug/lang/cs-CZ.rc new file mode 100644 index 00000000000..2f0e3b51b7d --- /dev/null +++ b/reactos/boot/freeldr/fdebug/lang/cs-CZ.rc @@ -0,0 +1,192 @@ +// FILE: boot/freeldr/fdebug/lang/cs-CZ.rc +// TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) +// UPDATED: 2008-07-27 + +#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU) +#ifdef _WIN32 +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT +#pragma code_page(1250) +#endif //_WIN32 + +///////////////////////////////////////////////////////////////////////////// +// +// Menu +// + +IDC_FDEBUG MENU DISCARDABLE +BEGIN + POPUP "&Soubor" + BEGIN + MENUITEM "&Pipojit", IDM_FILE_CONNECT + MENUITEM "&Odpojit", IDM_FILE_DISCONNECT, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Vymazat obrazovku", IDM_FILE_CLEARDISPLAY + MENUITEM SEPARATOR + MENUITEM "&Spustit zachytvn", IDM_FILE_STARTCAPTURE + MENUITEM "&Zastavit zachytvn", IDM_FILE_STOPCAPTURE, GRAYED + MENUITEM SEPARATOR + MENUITEM "&Msn echo", IDM_FILE_LOCALECHO + MENUITEM SEPARATOR + MENUITEM "&Ukonit", IDM_EXIT + END + POPUP "&Npovda" + BEGIN + MENUITEM "&O programu...", IDM_ABOUT + END +END + + +///////////////////////////////////////////////////////////////////////////// +// +// Accelerator +// + +IDC_FDEBUG ACCELERATORS MOVEABLE PURE +BEGIN + 63, IDM_ABOUT, ASCII, ALT // "?" + 47, IDM_ABOUT, ASCII, ALT // "/" +END + + +#ifdef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// TEXTINCLUDE +// + +2 TEXTINCLUDE DISCARDABLE +BEGIN + "#define APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""windows.h""\r\n" + "#undef APSTUDIO_HIDDEN_SYMBOLS\r\n" + "#include ""resource.h""\r\n" + "\0" +END + +3 TEXTINCLUDE DISCARDABLE +BEGIN + "\r\n" + "\0" +END + +1 TEXTINCLUDE DISCARDABLE +BEGIN + "resource.h\0" +END + +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// DESIGNINFO +// + +#ifdef APSTUDIO_INVOKED +GUIDELINES DESIGNINFO DISCARDABLE +BEGIN + IDD_ABOUTBOX, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 252 + TOPMARGIN, 7 + BOTTOMMARGIN, 203 + END + + IDD_CONNECTION, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 189 + TOPMARGIN, 7 + BOTTOMMARGIN, 93 + END + + IDD_CAPTURE, DIALOG + BEGIN + LEFTMARGIN, 7 + RIGHTMARGIN, 244 + TOPMARGIN, 7 + BOTTOMMARGIN, 88 + END +END +#endif // APSTUDIO_INVOKED + + +///////////////////////////////////////////////////////////////////////////// +// +// Dialog +// + +IDD_ABOUTBOX DIALOGEX DISCARDABLE 22, 17, 259, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +CAPTION "O FreeLoader Debuggeru" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "FreeLoader Debugger v1.0\nCopyright (C) 2003\nby Brian Palmer (brianp@reactos.org)", + IDC_STATIC,"Static",SS_LEFTNOWORDWRAP | WS_GROUP,53,28, + 122,26 + DEFPUSHBUTTON "OK",IDOK,183,189,44,14,WS_GROUP + ICON IDI_FDEBUG,IDC_STATIC,19,30,20,20 + EDITTEXT IDC_LICENSE_EDIT,53,63,174,107,ES_MULTILINE | + ES_READONLY | WS_VSCROLL +END + +IDD_CONNECTION DIALOGEX DISCARDABLE 0, 0, 196, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Monosti pipojen" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Zadejte COM port (nap. COM1):",IDC_STATIC,7,7,108,8 + EDITTEXT IDC_COMPORT,7,17,182,14,ES_AUTOHSCROLL + LTEXT "Zadejte rychlost v baudech (nap. 115200):",IDC_STATIC,7,38,114, + 8 + EDITTEXT IDC_BAUTRATE,7,48,182,14,ES_AUTOHSCROLL + DEFPUSHBUTTON "OK",IDOK,45,79,50,14 + PUSHBUTTON "Storno",IDCANCEL,100,79,50,14 +END + +IDD_CAPTURE DIALOGEX DISCARDABLE 0, 0, 251, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Zachytvac soubor" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nzev zachytvacho souboru:",IDC_STATIC,7,17,62,8 + EDITTEXT IDC_CAPTUREFILENAME,7,26,181,14,ES_AUTOHSCROLL + PUSHBUTTON "&Prochzet",IDC_BROWSE,194,26,50,14 + DEFPUSHBUTTON "OK",IDOK,139,74,50,14 + PUSHBUTTON "Storno",IDCANCEL,194,74,50,14 +END + + +///////////////////////////////////////////////////////////////////////////// +// +// String Table +// + +STRINGTABLE DISCARDABLE +BEGIN + IDS_APP_TITLE "fdebug" + IDS_HELLO "Hello World!" + IDC_FDEBUG "FDEBUG" +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_LICENSE "This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.\r\n\r\nThis program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\r\n\r\nYou should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA." +END + +#endif // Czech resources +///////////////////////////////////////////////////////////////////////////// + + + +#ifndef APSTUDIO_INVOKED +///////////////////////////////////////////////////////////////////////////// +// +// Generated from the TEXTINCLUDE 3 resource. +// + + +///////////////////////////////////////////////////////////////////////////// +#endif // not APSTUDIO_INVOKED + diff --git a/reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc b/reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc new file mode 100644 index 00000000000..47db0fba254 --- /dev/null +++ b/reactos/dll/cpl/appwiz-new/lang/cs-CZ.rc @@ -0,0 +1,204 @@ +/* FILE: dll/cpl/appwiz-new/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Odebrat", ID_APP_REMOVE + MENUITEM "&Zmnit", ID_APP_MODIFY, GRAYED + END +END + +IDD_NETINSTALL DIALOGEX 0, 0, 242, 221 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Sov instalace" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "&Instalovat...", IDC_INSTALL, 150, 171, 85, 14 + LTEXT "&Nsledujc software me bt automaticky nainstalovn systmem ReactOS. Program vybran v seznamu nainstalujete klepnutm na tlatko Instalovat.", IDC_NETTEXT, 40, 6, 195, 32 + LISTBOX IDC_NETPROGLIST, 7, 42, 228, 125, LBS_STANDARD | WS_TABSTOP + ICON IDI_APPICO, IDC_NETICON, 9, 10, 20, 20 +END + +IDD_CREATESHORTCUT DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vytvoit zstupce" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Tento prvodce pome s vytvoenm zstupc k mstnm i sovm programm, souborm, potam nebo internetovm adresm.", -1, 97, 7, 195, 28 + LTEXT "&Zadejte umstn poloky:", IDC_LOCATIONITEM, 98, 46, 196, 8 + EDITTEXT IDC_LOCITEMEDIT, 97, 58, 133, 14, ES_AUTOHSCROLL + PUSHBUTTON "P&rochzet...", IDC_LOCBROWSE, 233, 58, 60, 14 + LTEXT "Pokraujte klepnutm na tlatko Dal.", -1, 97, 95, 198, 8 +END + +IDD_SELPROGFOLDER DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vbr sloky" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Zvolte sloku, kam bude tento zstupce umstn:", -1, 100, 7, 193, 10 + CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER | WS_TABSTOP | 0x00000028, 100, 19, 193, 90 + PUSHBUTTON "&Nov sloka...", IDC_NEWFOLDERBTN, 218, 116, 75, 14 + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT +END + +IDD_SELPROGTITLE DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vbr popisku programu" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Zadejte nzev tohoto zstupce:", -1, 100, 10, 194, 10 + EDITTEXT IDC_NAMESCEDIT, 100, 23, 194, 14, ES_AUTOHSCROLL + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Kliknutm na Dokonit se vytvo zstupce.", -1, 100, 61, 194, 8 +END + +IDD_SELPROGICON DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Vbr ikony" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Zvolte ikonu pro tohoto zstupce:", -1, 100, 8, 195, 10 + LISTBOX IDC_SELICONLIST, 100, 20, 192, 130, LBS_OWNERDRAWFIXED | LBS_NOINTEGRALHEIGHT | LBS_MULTICOLUMN | LBS_DISABLENOSCROLL | WS_HSCROLL | WS_TABSTOP + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT +END + +IDD_INSTFROMCD DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Nainstalovat program z diskety nebo CD-ROM" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "", IDC_HEADTEXT, 101, 7, 193, 28 + ICON 0, IDC_INSTFROMCDICON, 100, 60, 18, 20 + LTEXT "", IDC_INSTFROMCDTEXT, 123, 66, 146, 8 +END + +IDD_RUNINSTPROG DIALOGEX 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Spustit instalan program" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "", IDC_HEADTEXT, 101, 6, 195, 28 + LTEXT "&Otevt:", IDC_LOCATIONITEM, 100, 53, 195, 8 + EDITTEXT IDC_LOCITEMEDIT, 98, 64, 133, 14, ES_AUTOHSCROLL + PUSHBUTTON "P&rochzet...", IDC_LOCBROWSE, 234, 64, 60, 14 +END + +IDD_CHANGEUSEROPT DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Zmnit uivatelsk nastaven" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Tento program lze umonit kadmu uivateli.", 1012, 101, 5, 194, 40 + AUTORADIOBUTTON "Instalovat", IDC_INSTALLRB, 108, 51, 146, 14, BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Spustit", IDC_LOCATIONITEM, 108, 74, 146, 14, BS_MULTILINE | NOT WS_TABSTOP +END + +IDD_FINISHADMINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Dokonit administrtorskou instalaci" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Kliknutm na Dokonit se zmn mapovn ini zpt.", IDC_HEADTEXT, 98, 7, 196, 40 +END + +IDD_AFTERINST DIALOG 0, 0, SHORTCUTDLG_WIDTH, SHORTCUTDLG_HEIGHT +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Po instalaci" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", IDB_WATERMARK, "STATIC", SS_BITMAP | SS_REALSIZEIMAGE, 0, 0, WATERMARK_WIDTH, SHORTCUTDLG_HEIGHT + LTEXT "Prosm stisknte tlatko Dal.", IDC_HEADTEXT, 98, 7, 197, 40 +END + +IDD_RUNINSTPROG2 DIALOG 0, 0, 250, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Spustit instalan program" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Prosm urete umstn odinstalanho programu.", IDC_UNINSTLOCTEXT, 9, 8, 235, 37 + LTEXT "&Pkazov dek pro odinstalan program:", IDC_LOCATIONITEM, 9, 57, 237, 8 + EDITTEXT IDC_LOCITEMEDIT, 7, 69, 165, 14, ES_AUTOHSCROLL + PUSHBUTTON "P&rochzet...", IDC_LOCBROWSE, 178, 69, 66, 14 + DEFPUSHBUTTON "OK", IDOK, 118, 100, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 184, 100, 60, 14 +END + +IDD_WARNING DIALOG 20, 20, 255, 100 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Varovn" +FONT 8, "MS Shell Dlg" +BEGIN + ICON "", IDC_WARNINGICON, 8, 10, 20, 20 + LTEXT "K tomuto potai jsou pihlen dal uivatel.", -1, 37, 8, 214, 10 + LTEXT "Odinstalace programu, kter je sputn jinm uivatelem, nemus probhnout kompletn.", -1, 37, 23, 212, 22 + LTEXT "Pro plnou zmnu nebo odstrann programu se pepnte na ostatn uivatele a odhlate je.", IDC_WARNINGTEXT, 37, 46, 212, 26 + PUSHBUTTON "&Pepnout uivatele", IDC_SWITCHUSER, 61, 81, 60, 14 + PUSHBUTTON "Po&kraovat", IDOK, 125, 81, 60, 14 + PUSHBUTTON "Storno", IDCANCEL, 189, 81, 60, 14 +END + +IDD_REMSHORTCUTS DIALOGEX 20, 20, 220, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Odebrat zstupce/sloky" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Pro odebrn vybran poloky ze Start menu klepnte na tlatko Odstranit.", IDC_UNINSTLOCTEXT, 10, 7, 204, 16 + CONTROL "", IDC_SELFOLDER, "SYSTREEVIEW32", WS_BORDER | WS_TABSTOP | 0x00000023, 10, 28, 200, 145 + PUSHBUTTON "&Odebrat", IDC_REMOVEBTN, 84, 182, 60, 14 + DEFPUSHBUTTON "Zavt", IDOK, 151, 182, 60, 14 +END + +IDD_ADDLATER DIALOGEX 0, 0, 220, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTERMOUSE | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Pidat pozdji" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Lze zvolit datum a as, kdy m bt tento program pidn do tohoto potae. Napklad je mon nastavit pidn na dobu va neptomnosti u potae.", IDC_UNINSTLOCTEXT, 7, 4, 208, 33 + AUTORADIOBUTTON "&Pidat program pozdji", IDC_ADDPROGLATER, 7, 47, 207, 10, WS_GROUP + CONTROL "Picker", 12368, "SYSDATETIMEPICK32", WS_BORDER | WS_TABSTOP | 0x0000000C, 29, 62, 107, 14 + AUTORADIOBUTTON "&Nepidvat program", IDC_NOTADDPROG, 7, 87, 208, 10 + DEFPUSHBUTTON "OK", IDOK, 89, 141, 60, 14, WS_GROUP + PUSHBUTTON "Storno", IDCANCEL, 154, 141, 60, 14, NOT WS_TABSTOP +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Pidat nebo odebrat programy" + IDS_CPLSYSTEMDESCRIPTION "Nainstaluje nebo odebere programy a sousti systmu ReactOS." + IDS_UNABLEOPEN_UNINSTKEY "Nelze otevt kl Uninstall" + IDS_LIST_TITLE "Seznam" + IDS_SIZE_TITLE "Velikost (MB)" + IDS_LAST_USED "Naposledy pouito" + IDS_PROGANDUPDATES "Programy & aktualizace" + IDS_PROGRAMS_ONLY "Jen programy" + IDS_UPDATES_ONLY "Jen aktualizace" + IDS_WELCOME_TITLE "Vtejte v prvodci k Pidat nebo odebrat programy" + IDS_WELCOME_MSG "Prosm zvolte kategorii vlevo i zvolte aplikaci v seznamu pro odebrn nebo zobrazen informac." + IDS_SEARCH_TEXT "Hledat v seznamu..." + IDS_REMOVE_BTN "&Odebrat" + IDS_MODIFY_BTN "&Zmnit" + IDS_UNABLEREAD_UNINSTSTR "Nelze nast. Tento zpis je neplatn nebo byl vytvoen MSI instaltorem." + IDS_INF_REG_OWNER "Registrovan vlastnk: " + IDS_INF_PRODUCT_ID "ID produktu: " + IDS_INF_PUBLISHER "Vydavatel: " + IDS_INF_VERSION "Verze: " + IDS_INF_CONTACT "Kontakt: " + IDS_INF_SUP_INFO "Informace o podpoe: " + IDS_INF_SUP_PHONE "Telefon na podporu: " + IDS_INF_PRODUCT_UPD "Aktualizace produktu: " + IDS_INF_README "Readme: " + IDS_INF_COMMENTS "Komente: " + IDS_NO_INFORMATION "O tomto programu nejsou dn informace." +END diff --git a/reactos/dll/cpl/appwiz-new/rsrc.rc b/reactos/dll/cpl/appwiz-new/rsrc.rc index 4d16f30468c..12e9c485a66 100644 --- a/reactos/dll/cpl/appwiz-new/rsrc.rc +++ b/reactos/dll/cpl/appwiz-new/rsrc.rc @@ -2,6 +2,7 @@ #include #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" diff --git a/reactos/dll/cpl/appwiz/lang/cs-CZ.rc b/reactos/dll/cpl/appwiz/lang/cs-CZ.rc new file mode 100644 index 00000000000..03f7c7feea7 --- /dev/null +++ b/reactos/dll/cpl/appwiz/lang/cs-CZ.rc @@ -0,0 +1,174 @@ +/* FILE: dll/cpl/appwiz/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDR_POPUP_APP MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "Zmnit/&Odebrat",ID_APP_MODIFYREMOVE + MENUITEM "&Informace", ID_APP_INFORMATION + END +END + +IDR_POPUP_UPD MENU +BEGIN + POPUP "popup" + BEGIN + MENUITEM "&Odebrat", ID_UPD_REMOVE + MENUITEM "&Informace", ID_UPD_INFORMATION + END +END + +IDD_PROPPAGEINSTALL DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Zmnit nebo odebrat programy" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,6,16,16 + LTEXT "Nsledujc software me bt automaticky odebrn. Pro odebrn nebo zmnu jeho instalovanch komponent jej vyberte ze seznamu a kliknte na Zmnit/odebrat.",-1,36,7,PROPSHEETWIDTH-48,22 + LTEXT "Najt:",-1,PROPSHEETPADDING,33,30,8 + EDITTEXT IDC_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + LTEXT "Zobrazit:",-1,250,33,30,8 + COMBOBOX IDC_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + CONTROL "", IDC_SOFTWARELIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "Zmnit/&odebrat", IDC_ADDREMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED + PUSHBUTTON "&Informace", IDC_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEUPDATES DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Odebrat aktualizace" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_UPDATES,-1,PROPSHEETPADDING,6,16,16 + LTEXT "Nsledujc aktualizace mohou bt automaticky odebrny. Pro odebrn aktualizace ji vyberte ze seznamu a kliknte na Odebrat.",-1,36,7,PROPSHEETWIDTH-48,22 + LTEXT "Najt:",-1,PROPSHEETPADDING,33,30,8 + EDITTEXT IDC_UPD_FIND_EDIT, PROPSHEETPADDING+30, 30, 180, 14, WS_VISIBLE | WS_TABSTOP + LTEXT "Zobrazit:",-1,250,33,30,8 + COMBOBOX IDC_UPD_VIEW_COMBO, 280, 30, 94, 80, CBS_DROPDOWNLIST | WS_CHILD | WS_VISIBLE | WS_TABSTOP | WS_VSCROLL + CONTROL "", IDC_UPDATESLIST, "SysListView32", LVS_REPORT | LVS_SORTASCENDING | LVS_AUTOARRANGE | LVS_SINGLESEL, PROPSHEETPADDING, 50, PROPSHEETWIDTH-12, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "&Odebrat", IDC_UPD_REMOVE, PROPSHEETPADDING, 210, 80, 14, WS_DISABLED + PUSHBUTTON "&Informace", IDC_UPD_INFO_BUTTON, PROPSHEETPADDING+85, 210, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEADD DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Pidat nov programy" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_CPLSYSTEM,-1,PROPSHEETPADDING,10,32,32 + LTEXT "Nov program lze nainstalovat kliknutm na ""Instalovat"".",-1,36,11,PROPSHEETWIDTH-48,8 + PUSHBUTTON "&Instalovat...", IDC_INSTALL, PROPSHEETWIDTH-(90), 46, 80, 14 + LTEXT "", -1, PROPSHEETPADDING, 70, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN + ICON IDI_DOWNLOADICO,-1,PROPSHEETPADDING,80,32,32 + LTEXT "Nov program lze sthnout a nainstalovat kliknutm na ""Download!"".",-1,36,83,PROPSHEETWIDTH-48,17 + PUSHBUTTON "&Download!", IDC_ADD_DOWNLOAD_BUTTON, PROPSHEETWIDTH-(90), 125, 80, 14, WS_DISABLED + LTEXT "", -1, PROPSHEETPADDING, 150, PROPSHEETWIDTH-12, 1, NOT WS_GROUP | SS_SUNKEN + ICON IDI_APPINETICO,-1,PROPSHEETPADDING,160,32,32 + LTEXT "Stisknte tlatko ""Najt na internetu"" pro vyhledn novch aplikac dostupnch pomoc pipojen k internetu.",-1,36,161,PROPSHEETWIDTH-48,17 + PUSHBUTTON "&Vlastnosti...", IDC_ADD_PROP_BUTTON, PROPSHEETWIDTH-(175), 205, 80, 14, WS_DISABLED + PUSHBUTTON "&Najt na internetu", IDC_ADD_FIND_BUTTON, PROPSHEETWIDTH-(90), 205, 80, 14, WS_DISABLED +END + +IDD_PROPPAGEROSSETUP DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "ReactOS Setup" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + ICON IDI_REACTOS,-1,PROPSHEETPADDING,6,16,16 + LTEXT "",-1,36,7,PROPSHEETWIDTH-48,22 +END + +IDD_FIRSTPAGE DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Create link" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Text1", -1, 115, 15, 160, 24 + LTEXT "Text2", -1, 115, 35, 160, 17 +END + +IDD_SUBMIT_REPORT DIALOGEX 0, 0, PROPSHEETWIDTH, PROPSHEETHEIGHT +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Create link" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Text1",-1,10,0,225,40 + LTEXT "Text2",-1,10,40,120,20 + LTEXT "Text3",-1,10,55,120,20 +END + +IDD_SHORTCUT_LOCATION DIALOGEX 0, 0, 340, 200 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Vytvoit zstupce" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Tento prvodce pome s vytvoenm zstupc na mstn\nnebo sov programy, soubory, sloky, potae nebo\ninternetov adresy.", -1, 120, 15, 200, 30 + LTEXT "Zadejte umstn poloky:", -1, 120, 50, 120, 10 + EDITTEXT IDC_SHORTCUT_LOCATION, 120, 65, 150, 15, ES_LEFT + PUSHBUTTON "Prochzet...", IDC_SHORTCUT_BROWSE, 272, 65, 55, 15, ES_LEFT + LTEXT "Pokraujte kliknutm na Dal.", -1, 120, 97, 162, 10 +END + +IDD_SHORTCUT_FINISH DIALOGEX 0, 0, 340, 200 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Zvolte nzev programu" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "&Zadejte nzev tohoto zstupce:", -1, 120, 15, 150, 10 + EDITTEXT IDC_SHORTCUT_NAME, 120, 35, 150, 15, ES_LEFT + LTEXT "Kliknutm na Dokonit vytvote zstupce.", -1, 118, 97, 178, 17 +END + +IDD_INFORMATION DIALOGEX 5, 100, 269, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_NOIDLEMSG | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Informace" +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT IDS_INFO_DISPNAME, PROPSHEETPADDING, 6, 258, 15, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Registrovan vlastnk:", -1, PROPSHEETPADDING, 27, 97, 8 + EDITTEXT IDS_INFO_REGOWNER, PROPSHEETPADDING+97, 25, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "ID produktu:", -1, PROPSHEETPADDING, 44, 97, 8 + EDITTEXT IDS_INFO_PRODUCTID, PROPSHEETPADDING+97, 42, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Vydavatel:", -1, PROPSHEETPADDING, 61, 97, 8 + EDITTEXT IDS_INFO_PUBLISHER, PROPSHEETPADDING+97, 59, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Verze:", -1, PROPSHEETPADDING, 78, 97, 8 + EDITTEXT IDS_INFO_VERSION, PROPSHEETPADDING+97, 76, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Kontakt:", -1, PROPSHEETPADDING, 95, 97, 8 + EDITTEXT IDS_INFO_CONTACT, PROPSHEETPADDING+97, 93, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Informace o podpoe:", -1, PROPSHEETPADDING, 112, 97, 8 + EDITTEXT IDS_INFO_SUPPORTINFO, PROPSHEETPADDING+97, 110, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Telefon na podporu:", -1, PROPSHEETPADDING, 129, 97, 8 + EDITTEXT IDS_INFO_SUPPORTPHONE, PROPSHEETPADDING+97, 127, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Updaty produktu:", -1, PROPSHEETPADDING, 146, 97, 8 + EDITTEXT IDS_INFO_PRODUCT_UPDATES, PROPSHEETPADDING+97, 144, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Readme:", -1, PROPSHEETPADDING, 163, 97, 8 + EDITTEXT IDS_INFO_README, PROPSHEETPADDING+97, 161, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Komente:", -1, PROPSHEETPADDING, 180, 97, 8 + EDITTEXT IDS_INFO_COMMENTS, PROPSHEETPADDING+97, 178, 160, 14, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP + PUSHBUTTON "&zavit", IDCANCEL, 212, 198, 50, 14 +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Pidat/Odebrat programy" + IDS_CPLSYSTEMDESCRIPTION "Nastavuje programy a vytv zstupce." + IDS_ERROR "Chyba" + IDS_UNABLEREAD_UNINSTSTR "Nelze nast UninstallString. Tento zpis je neplatn nebo byl vytvoen MSI instaltorem." + IDS_UNABLEOPEN_UNINSTKEY "Nelze otevt kl Uninstall" + IDS_APPLIST "Aktuln nainstalovan programy" + IDS_UPDATESLIST "Aktuln nainstalovan aktualizace" + IDS_LARGEICONS "Velk ikony" + IDS_LIST "Seznam" + IDS_DETAILS "Podrobnosti" + IDS_CREATE_SHORTCUT "Vytvoit zstupce" + IDS_ERROR_NOT_FOUND "Soubor %s nebyl nalezen." + IDS_UNABLEREAD_INFORMATION "Nelze otevt kle Information" + IDS_NO_INFORMATION "dn informace" + IDS_NONE_APP "Nejsou nainstalovny dn aplikace." + IDS_NONE_UPD "Nejsou nainstalovny dn aktualizace." +END diff --git a/reactos/dll/cpl/appwiz/rsrc.rc b/reactos/dll/cpl/appwiz/rsrc.rc index 87246447338..00d4633551d 100644 --- a/reactos/dll/cpl/appwiz/rsrc.rc +++ b/reactos/dll/cpl/appwiz/rsrc.rc @@ -2,6 +2,7 @@ #include #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" diff --git a/reactos/dll/cpl/console/lang/cs-CZ.rc b/reactos/dll/cpl/console/lang/cs-CZ.rc new file mode 100644 index 00000000000..1a5529f9d71 --- /dev/null +++ b/reactos/dll/cpl/console/lang/cs-CZ.rc @@ -0,0 +1,145 @@ +/* FILE: dll/cpl/console/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +#include + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_PROPPAGEOPTIONS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Monosti" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Velikost kurzoru", -1, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Mal", IDC_RADIO_SMALL_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 20, 90, 10 + CONTROL "&Stedn", IDC_RADIO_MEDIUM_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 40, 90, 10 + CONTROL "&Velk", IDC_RADIO_LARGE_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 60, 90, 10 + GROUPBOX "Monosti zobrazen", -1, 133, 7, 112, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + CONTROL "&Okno", IDC_RADIO_DISPLAY_WINDOW, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 20, 70, 10 + CONTROL "&Cel obrazovka", IDC_RADIO_DISPLAY_FULL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 40, 70, 10 + GROUPBOX "Historie pkaz", -1, 7, 84, 120, 77, WS_CHILD | WS_VISIBLE | WS_GROUP + LTEXT "Velikost v&yrovnvac pamti:", -1, 14, 101, 70, 12 + EDITTEXT IDC_EDIT_BUFFER_SIZE, 90, 97, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_BUFFER_SIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 97, 12, 15 + LTEXT "&Poet vyrovnvacch pamt:", -1, 14, 124, 70, 12 + EDITTEXT IDC_EDIT_NUM_BUFFER, 90, 120, 30, 15, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_NUM_BUFFER, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 120, 12, 15 + CHECKBOX "&Zahodit star duplikty", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 + GROUPBOX "Monosti prav", -1, 133, 85, 112, 77, BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP + CHECKBOX "Reim &rychlch prav", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "Reim v&kldn", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP +END + +IDD_PROPPAGEFONT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Font" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nhled okna:", -1, 10, 10, 94, 10 + LTEXT "Velikost:", -1, 180, 10, 36, 10 + CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 + LISTBOX IDC_LBOX_FONTS, 181, 20, 55, 80, LBS_DISABLENOSCROLL | WS_VSCROLL + LTEXT "&Font:", -1, 10, 105, 33, 10 + CHECKBOX "&Tun fonty", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 + LISTBOX IDC_LBOX_TYPE, 10, 120, 110, 40, LBS_DISABLENOSCROLL | WS_VSCROLL + GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 + CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 + LTEXT "Kad znak je:", -1, 124, 166, 75, 10 + LTEXT "obrazovkovch pixel irok\nobrazovkovch pixel vysok", -1, 136, 180, 101, 20 + LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10 + LTEXT "", IDC_FONT_SIZE_Y, 120, 188, 10, 10 +END + +IDD_PROPPAGELAYOUT DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Vzhled" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Nhled okna:", -1, 8, 6, 95, 10 + CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 16, 115, 70 + GROUPBOX "Velikost bufferu zobrazen", -1, 130, 12, 115, 50 + LTEXT "&ka:", -1, 140, 28, 40, 10 + LTEXT "&Vka:", -1, 140, 46, 39, 10 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_WIDTH, 203, 25, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 25, 13, 14 + EDITTEXT IDC_EDIT_SCREEN_BUFFER_HEIGHT, 203, 42, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_SCREEN_BUFFER_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 42, 13, 14 + GROUPBOX "Velikost okna", -1, 130, 65, 115, 47 + LTEXT "&ka:", -1, 140, 78, 39, 10 + LTEXT "V&ka:", -1, 140, 95, 37, 10 + EDITTEXT IDC_EDIT_WINDOW_SIZE_WIDTH, 203, 75, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 75, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_SIZE_HEIGHT, 203, 92, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_SIZE_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 92, 13, 14 + GROUPBOX "Umstn okna", -1, 130, 116, 115, 64 + LTEXT "&Zleva:", -1, 140, 132, 38, 10 + LTEXT "&Shora:", -1, 140, 149, 40, 10 + EDITTEXT IDC_EDIT_WINDOW_POS_LEFT, 203, 128, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_LEFT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 128, 13, 14 + EDITTEXT IDC_EDIT_WINDOW_POS_TOP, 203, 146, 35, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_WINDOW_POS_TOP, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 146, 13, 14 + CHECKBOX "&Okno je umstno systmem", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 +END + +IDD_PROPPAGECOLORS DIALOGEX 0, 0, 253, 220 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Barvy" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "&Text zobrazen", IDC_RADIO_SCREEN_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 12, 112, 10 + CONTROL "Pozad zo&brazen", IDC_RADIO_SCREEN_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 30, 112, 10 + CONTROL "Text &vbru", IDC_RADIO_POPUP_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 48, 112, 10 + CONTROL "Pozad v&bru", IDC_RADIO_POPUP_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 67, 112, 10 + GROUPBOX "Zvolen barevn hodnoty", -1, 129, 7, 118, 73 + LTEXT "e&rven:", -1, 140, 25, 48, 10 + EDITTEXT IDC_EDIT_COLOR_RED, 210, 22, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_RED, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 22, 12, 14 + LTEXT "Zele&n:", -1, 140, 42, 48, 10 + EDITTEXT IDC_EDIT_COLOR_GREEN, 210, 39, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_GREEN, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 39, 12, 14 + LTEXT "&Modr:", -1, 140, 60, 48, 10 + EDITTEXT IDC_EDIT_COLOR_BLUE, 210, 56, 30, 14, ES_RIGHT | WS_GROUP + CONTROL "", IDC_UPDOWN_COLOR_BLUE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 56, 12, 14 + CONTROL "", IDC_STATIC_COLOR1, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 17, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR2, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 31, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR3, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 45, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR4, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 59, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR5, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 73, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR6, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 87, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR7, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 101, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR8, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 115, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR9, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 129, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR10, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 143, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR11, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 157, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR12, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 171, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR13, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 185, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR14, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 199, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR15, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 213, 90, 12, 12 + CONTROL "", IDC_STATIC_COLOR16, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 227, 90, 12, 12 + GROUPBOX "Zvolen barvy zobrazen", -1, 7, 111, 240, 40 + CONTROL "", IDC_STATIC_SCREEN_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 124, 224, 20 + GROUPBOX "Zvolen barvy vbru", -1, 7, 162, 240, 40 + CONTROL "", IDC_STATIC_POPUP_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 176, 224, 20 +END + +IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Pout vlastnosti" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "&Pout vlastnosti jen pro toto okno", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 + CONTROL "&Uloit vlastnosti pro kad dal budouc okno s tmto nzvem", IDC_RADIO_APPLY_ALL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 31, 207, 10 + PUSHBUTTON "OK", IDOK, 58, 58, 50, 14, WS_VISIBLE + PUSHBUTTON "Storno", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE +END + +STRINGTABLE +BEGIN + IDS_CPLNAME "Konzole" + IDS_CPLDESCRIPTION "Nastavit vlastnosti konzole." + IDS_APPLY_SHORTCUT_ALL "Zmnit z&stupce, kter spustil toto okno" + IDS_SCREEN_TEXT "C:\ReactOS> dir\nSYSTEM 10-01-99 5:00\nSYSTEM32 10-01-99 5:00" + IDS_RASTERFONTS "Rastrov fonty" +END diff --git a/reactos/dll/cpl/console/rsrc.rc b/reactos/dll/cpl/console/rsrc.rc index 836b52e0c79..e1bca5256d2 100644 --- a/reactos/dll/cpl/console/rsrc.rc +++ b/reactos/dll/cpl/console/rsrc.rc @@ -3,8 +3,9 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL -#include "lang/en-US.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" +#include "lang/en-US.rc" #include "lang/es-ES.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" diff --git a/reactos/dll/cpl/desk/lang/cs-CZ.rc b/reactos/dll/cpl/desk/lang/cs-CZ.rc index 028177e7339..718ace0b471 100644 --- a/reactos/dll/cpl/desk/lang/cs-CZ.rc +++ b/reactos/dll/cpl/desk/lang/cs-CZ.rc @@ -1,7 +1,7 @@ /* FILE: dll/cpl/desk/lang/cs-CZ.rc * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) - * UPDATED: 2008-04-21 - * THANKS TO: Unknown translator, who translated major part of this file + * UPDATED: 2008-07-27 + * THANKS TO: potapnik, who translated major part of this file */ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT @@ -158,6 +158,13 @@ BEGIN END END +STRINGTABLE +BEGIN + IDS_MULTIPLEMONITORS "(Nkolik monitor)" + IDS_UNKNOWNMONITOR "(Neznm monitor)" + IDS_ADVANCEDTITLEFMT "%s a %s" +END + STRINGTABLE BEGIN IDS_CPLNAME "Obrazovka" diff --git a/reactos/dll/cpl/desk/lang/es-ES.rc b/reactos/dll/cpl/desk/lang/es-ES.rc index 8409dbf75b4..ca582e9460a 100644 --- a/reactos/dll/cpl/desk/lang/es-ES.rc +++ b/reactos/dll/cpl/desk/lang/es-ES.rc @@ -161,7 +161,7 @@ END STRINGTABLE BEGIN - IDS_MULTIPLEMONITORS "(Multiples Monitores)" + IDS_MULTIPLEMONITORS "(Mltiples Monitores)" IDS_UNKNOWNMONITOR "(Monitor Desconocido)" IDS_ADVANCEDTITLEFMT "%s y %s" END @@ -196,7 +196,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_INACTWIN "Ventana Inactiva" IDS_ACTWIN "Ventana Activa" - IDS_WINTEXT "Texto de la vantana" + IDS_WINTEXT "Texto de la ventana" IDS_MESSBOX "Cuadro de mensaje" IDS_MESSTEXT "Texto del mensaje" IDS_BUTTEXT "Aceptar" diff --git a/reactos/dll/cpl/joy/lang/cs-CZ.rc b/reactos/dll/cpl/joy/lang/cs-CZ.rc new file mode 100644 index 00000000000..7711d9b213d --- /dev/null +++ b/reactos/dll/cpl/joy/lang/cs-CZ.rc @@ -0,0 +1,89 @@ +/* FILE: dll/cpl/joy/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_PROPPAGEMAIN DIALOGEX 0, 0, 252, 205 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Hern ovladae" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 7, 7, 20, 20 + LTEXT "Tato nastaven pomhaj konfigurovat hern ovladae nainstalovan na tomto potai.", -1, 33, 7, 214, 20, NOT WS_GROUP + GROUPBOX "Nai&nstalovan ovladae her", -1, 7, 34, 238, 117 + CONTROL "List1", IDC_CONTROLLER_LIST, "SysListView32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000808D, 14, 44, 224, 80 + PUSHBUTTON "&Pidat...", IDC_ADD_BUTTON, 35, 129, 65, 14 + PUSHBUTTON "&Odebrat", IDC_REMOVE_BUTTON, 104, 129, 65, 14, WS_DISABLED + PUSHBUTTON "&Vlastnosti", IDC_PROPERTIES_BUTTON, 173, 129, 65, 14, WS_DISABLED + PUSHBUTTON "&Rozen...", IDC_ADVANCED_BUTTON, 111, 157, 65, 14 + PUSHBUTTON "&een problm...", IDC_TROUBLESHOOT_BUTTON, 180, 157, 65, 14 + PUSHBUTTON "OK", IDOK, 195, 185, 50, 14 +END + +IDD_ADD DIALOGEX 0, 0, 265, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Pidat hern ovlada" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 8, 7, 20, 20 + LTEXT "Vyberte hern ovlada ze seznamu ne, pot kliknte na tlatko OK. Pokud se v ovlada v seznamu nenachz, kliknte na tlatko Vlastn.", -1, 35, 7, 210, 33 + LTEXT "&Hern ovladae:", -1, 8, 45, 126, 8 + LISTBOX IDC_GAME_CONTROLLERS_LIST, 7, 55, 251, 57, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | LBS_WANTKEYBOARDINPUT | WS_HSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Zapnout kormidlo a pedly", IDC_ENABLE_RUDDERS_CHECKBOX, 7, 114, 100, 10, WS_GROUP + LTEXT "&Port:", -1, 7, 134, 38, 8, NOT WS_VISIBLE + COMBOBOX IDC_GAME_PORT_COMBO, 7, 147, 140, 50, CBS_DROPDOWNLIST | CBS_SORT | NOT WS_VISIBLE | WS_VSCROLL + PUSHBUTTON "&Vlastn...", IDC_CUSTOM_BUTTON, 208, 147, 50, 14 + CONTROL "", -25525, "STATIC", SS_ETCHEDHORZ, 7, 170, 251, 1 + DEFPUSHBUTTON "OK", IDOK, 155, 179, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 208, 179, 50, 14 +END + +IDD_CUSTOM DIALOGEX 0, 0, 265, 183, 0 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Vlastn hern ovlada" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Zvltn charakteristiky", -1, 7, 7, 245, 52 + AUTORADIOBUTTON "&Joystick", IDC_JOYSTICK_RADIO, 17, 23, 55, 10 + AUTORADIOBUTTON "&Leteck dc pka nebo kormidlo", IDC_FLIGHT_YOKE_RADIO, 147, 23, 89, 10 + AUTORADIOBUTTON "&Gamepad", IDC_GAME_PAD_RADIO, 17, 40, 65, 10 + AUTORADIOBUTTON "zen &auta", IDC_RACE_CAR_RADIO, 147, 40, 93, 10 + GROUPBOX "&Osy", -1, 7, 67, 116, 44, WS_GROUP + COMBOBOX IDC_AXES_COMBO, 37, 79, 48, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + AUTORADIOBUTTON "Kormidlo/Pedly", IDC_RUDDER_PEDALS_RADIO, 14, 97, 63, 10, NOT WS_VISIBLE + AUTORADIOBUTTON "Osa Z", IDC_Z_AXIS_RADIO, 81, 97, 35, 10, NOT WS_VISIBLE + GROUPBOX "&Tlatka", -1, 137, 67, 116, 44 + COMBOBOX IDC_BUTTONS_COMBO, 178, 79, 48, 50, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL, WS_EX_CLIENTEDGE + AUTOCHECKBOX "Obsahuje zen zo&rnho hlu", IDC_INC_POINT_CHECKBOX, 7, 123, 115, 10 + LTEXT "Nzev hernho &ovladae:", -1, 7, 139, 200, 9 + EDITTEXT IDC_CONTROLLER_NAME_EDIT, 7, 150, 116, 15, ES_AUTOHSCROLL, WS_EX_CLIENTEDGE | WS_EX_STATICEDGE + DEFPUSHBUTTON "OK", IDOK, 137, 150, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 203, 150, 50, 14 +END + +IDD_ADVANCED DIALOGEX 0, 0, 220, 86 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Rozen nastaven" +FONT 8, "MS Shell Dlg" +BEGIN + ICON IDI_CPLSYSTEM, -1, 7, 24, 20, 20 + DEFPUSHBUTTON "OK", IDOK, 106, 65, 50, 14 + PUSHBUTTON "Storno", IDCANCEL, 163, 65, 50, 14 + LTEXT "Vyberte zazen, kter chcete pouvat se starmi programy.", -1, 7, 7, 208, 10 + LTEXT "&Preferovan zazen:", -1, 34, 24, 70, 10 + COMBOBOX IDC_PREFERRED_DEV_COMBO, 34, 38, 179, 75, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL +END + +STRINGTABLE +BEGIN + IDS_CPLSYSTEMNAME "Hern ovladae" + IDS_CPLSYSTEMDESCRIPTION "Pidat, odebrat a konfigurovat hern ovladae jako napklad joysticky nebo gamepady." + IDS_CONTROLLER "Ovlada" + IDS_STATUS "Stav" +END diff --git a/reactos/dll/cpl/joy/rsrc.rc b/reactos/dll/cpl/joy/rsrc.rc index ff54dffa36a..5440928c43e 100644 --- a/reactos/dll/cpl/joy/rsrc.rc +++ b/reactos/dll/cpl/joy/rsrc.rc @@ -2,6 +2,7 @@ #include #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" diff --git a/reactos/dll/cpl/liccpa/lang/cs-CZ.rc b/reactos/dll/cpl/liccpa/lang/cs-CZ.rc new file mode 100644 index 00000000000..b3e75c38105 --- /dev/null +++ b/reactos/dll/cpl/liccpa/lang/cs-CZ.rc @@ -0,0 +1,32 @@ +/* FILE: dll/cpl/liccpa/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_PROPPAGE1 DIALOGEX DISCARDABLE 20, 40, 315, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_OVERLAPPED | WS_CAPTION | WS_VISIBLE | WS_SYSMENU +CAPTION "Zvolit licenn reim" +FONT 8, "Helv" +BEGIN + CONTROL "Licenn reim klient", 100, "BUTTON", BS_GROUPBOX | WS_CHILD | WS_VISIBLE, 4, 4, 239, 94 + CONTROL "Na zazen nebo na uivatele", 102, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 79, 107, 12 + CONTROL "Na server. Poet souasnch pipojen:", 103, "BUTTON", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE, 13, 38, 163, 9 + CONTROL "Produkt:", 105, "STATIC", SS_LEFT | WS_CHILD | WS_VISIBLE, 13, 20, 31, 8 + CONTROL "", 106, "COMBOBOX", CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP, 49, 20, 171, 12 + CONTROL "OK", 107, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 7, 46, 14 + CONTROL "Storno", 108, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 27, 46, 14 + CONTROL "Npovda", 109, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 48, 46, 14 + CONTROL "Replikace...", 110, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 263, 68, 46, 14 + CONTROL "Pidat licence", 111, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 30, 56, 65, 15 + CONTROL "Odebrat licence", 112, "BUTTON", BS_PUSHBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 112, 56, 61, 16 + CONTROL "", 114, "EDIT", ES_LEFT | ES_AUTOHSCROLL | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 187, 39, 32, 12 +END + +STRINGTABLE +BEGIN + IDS_CPLNAME_1 "Manaer licenc" + IDS_CPLDESCRIPTION_1 "Manaer licenc" + IDS_REACTOS "ReactOS - FreeSoftware" +END diff --git a/reactos/dll/cpl/liccpa/rsrc.rc b/reactos/dll/cpl/liccpa/rsrc.rc index b7d6e422ad2..2dcb4c4e158 100644 --- a/reactos/dll/cpl/liccpa/rsrc.rc +++ b/reactos/dll/cpl/liccpa/rsrc.rc @@ -2,6 +2,7 @@ #include "resource.h" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" diff --git a/reactos/dll/cpl/main/lang/cs-CZ.rc b/reactos/dll/cpl/main/lang/cs-CZ.rc index 2c626bab89d..0bf2a5bbb8f 100644 --- a/reactos/dll/cpl/main/lang/cs-CZ.rc +++ b/reactos/dll/cpl/main/lang/cs-CZ.rc @@ -1,3 +1,9 @@ +/* FILE: dll/cpl/main/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * THANKS TO: Kamil Hornicek, who translated major part of this file + * UPDATED: 2008-07-27 + */ + LANGUAGE LANG_CZECH, SUBLANG_DEFAULT IDD_KEYBSPEED DIALOGEX 0, 0, 246, 228 @@ -162,11 +168,11 @@ BEGIN IDS_HAND "Vbr odkazu" IDS_NONE "(Nen)" IDS_SYSTEM_SCHEME "(systmov schma)" - IDS_BROWSE_FILTER "Cursors (*.ani, *.cur)\0*.ani;*.cur\0Animated Cursors (*.ani)\0*.ani\0Static Cursors (*.cur)\0*.cur\0All Files\0*.*\0\0" - IDS_BROWSE_TITLE "Browse" - IDS_REMOVE_TITLE "Confirm Scheme Removal" - IDS_REMOVE_TEXT "Are you sure you want to remove the cursor scheme '%s'?" - IDS_OVERWRITE_TITLE "Confirm Cursor Scheme Overwrite" - IDS_OVERWRITE_TEXT "The cursor scheme name you chose is already in use. Do you want to overwrite the existing cursor scheme?" - IDS_ANIMATE_CURSOR "Animated Cursor" + IDS_BROWSE_FILTER "Kurzory (*.ani, *.cur)\0*.ani;*.cur\0Animovan kurzory (*.ani)\0*.ani\0Statick kurzory (*.cur)\0*.cur\0Vechny soubory\0*.*\0\0" + IDS_BROWSE_TITLE "Prochzet" + IDS_REMOVE_TITLE "Potvrdit odebrn kurzorovho schmatu" + IDS_REMOVE_TEXT "Jste si jist, e chcete odebrat kurzorov schma '%s'?" + IDS_OVERWRITE_TITLE "Potvrdit pepsn kurzorovho schmatu" + IDS_OVERWRITE_TEXT "Zvolen nzev kurzorovho schmatu je ji pouvn. Chcete pepsat existujc kurzorov schma?" + IDS_ANIMATE_CURSOR "Animovan kurzor" END diff --git a/reactos/dll/cpl/ncpa/lang/cs-CZ.rc b/reactos/dll/cpl/ncpa/lang/cs-CZ.rc index bfc5277f6b8..36ad7829e1c 100644 --- a/reactos/dll/cpl/ncpa/lang/cs-CZ.rc +++ b/reactos/dll/cpl/ncpa/lang/cs-CZ.rc @@ -1,3 +1,9 @@ +/* FILE: dll/cpl/ncpa/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * THANKS TO: potapnik, who translated major part of this file + * UPDATED: 2008-07-27 + */ + LANGUAGE LANG_CZECH, SUBLANG_DEFAULT IDD_PROPPAGENETWORK DIALOGEX DISCARDABLE 0, 0, 246, 228 @@ -37,7 +43,7 @@ CAPTION "Obecn FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Spojen", -1, 9, 8, 182, 58, BS_GROUPBOX - LTEXT "Status:", -1, 19, 20, 60, 8 + LTEXT "Stav:", -1, 19, 20, 60, 8 LTEXT "Doba pipojen:", -1, 19, 34, 60, 8 LTEXT "Rychlost:", -1, 19, 48, 60, 8 GROUPBOX "Aktivita", -1, 9, 74, 182, 70, BS_GROUPBOX @@ -46,7 +52,7 @@ BEGIN ICON IDI_NETSTAT, -1, 110, 85, 18, 20 ICON IDI_HORIZONTAL, -1, 130, 85, 18, 20 LTEXT "Pijato", -1, 149, 90, 37, 8 - LTEXT "Bytes:", -1, 17, 115, 32, 8 + LTEXT "Byt:", -1, 17, 115, 32, 8 RTEXT "000.000.000", IDC_SEND, 63, 115, 44, 8 ICON IDI_VERTICAL, -1, 110, 108, 18, 20 RTEXT "000.000.000", IDC_RECEIVED, 139, 115, 44, 8 @@ -59,21 +65,21 @@ END IDD_CARDSUPPORT DIALOGEX DISCARDABLE 0, 0, 200,180 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION "Support" +CAPTION "Podpora" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Connection Status", -1, 9, 8, 200, 88, BS_GROUPBOX - LTEXT "Address type:", -1, 22, 20, 80, 8 - LTEXT "IP address:", -1, 22, 34, 80, 8 - LTEXT "SubNet mask:", -1, 22, 48, 80, 8 - LTEXT "Default gateway:", -1, 22, 62, 80, 8 + GROUPBOX "Stav pipojen", -1, 9, 8, 200, 88, BS_GROUPBOX + LTEXT "Typ adresy:", -1, 22, 20, 80, 8 + LTEXT "IP adresa:", -1, 22, 34, 80, 8 + LTEXT "Maska podst:", -1, 22, 48, 80, 8 + LTEXT "Vchoz brna:", -1, 22, 62, 80, 8 RTEXT "N/A", IDC_DETAILSTYPE, 122, 20, 80, 8 RTEXT "000.000.000.000", IDC_DETAILSIP, 122, 34, 80, 8 RTEXT "000.000.000.000", IDC_DETAILSSUBNET, 122, 48, 80, 8 RTEXT "000.000.000.000", IDC_DETAILSGATEWAY, 122, 62, 80, 8 - PUSHBUTTON "&Details...", IDC_DETAILS, 22, 76, 62, 14 + PUSHBUTTON "&Detaily...", IDC_DETAILS, 22, 76, 62, 14 END IDD_TCPIPPROPERTIES DIALOGEX DISCARDABLE 0, 0, 246, 228 @@ -110,26 +116,26 @@ END STRINGTABLE BEGIN - IDS_ASSIGNED_DHCP "Assigned by DHCP" - IDS_ASSIGNED_MANUAL "Manually configured" + IDS_ASSIGNED_DHCP "Piazeno DHCP" + IDS_ASSIGNED_MANUAL "Run nastaveno" END STRINGTABLE BEGIN - IDS_ERROR "Error" - IDS_ENTER_VALID_IPADDRESS "You must enter a valid IP address" - IDS_ENTER_VALID_SUBNET "You must enter a valid subnet mask" - IDS_CANNOT_LOAD_CONFIG "Unable to load current config data" - IDS_CANNOT_CREATE_PROPSHEET "Unable to create property sheet" - IDS_OUT_OF_MEMORY "Out of memory" - IDS_CANNOT_SAVE_CHANGES "Unable to save the changes you made" - IDS_STATUS_NON_OPERATIONAL "Non-operational" - IDS_STATUS_UNREACHABLE "No WAN adapter found" - IDS_STATUS_DISCONNECTED "Disconnected" - IDS_STATUS_CONNECTING "Connecting" - IDS_STATUS_CONNECTED "Connected" - IDS_STATUS_OPERATIONAL "Connected" + IDS_ERROR "Chyba" + IDS_ENTER_VALID_IPADDRESS "Je nutn zadat platnou IP adresu" + IDS_ENTER_VALID_SUBNET "Je nutn zadat platnou masku podst" + IDS_CANNOT_LOAD_CONFIG "Nelze nast souasn nastaven" + IDS_CANNOT_CREATE_PROPSHEET "Nelze vytvoit list vlastnost" + IDS_OUT_OF_MEMORY "Nedostatek pamti" + IDS_CANNOT_SAVE_CHANGES "Nelze uloit proveden zmny" + IDS_STATUS_NON_OPERATIONAL "Nefunkn" + IDS_STATUS_UNREACHABLE "Nebyl nalezen WAN adaptr" + IDS_STATUS_DISCONNECTED "Odpojeno" + IDS_STATUS_CONNECTING "Pipojuji" + IDS_STATUS_CONNECTED "Pipojeno" + IDS_STATUS_OPERATIONAL "Pipojeno" IDS_SPEED_MBPS "%d Mbps" - IDS_DURATION_DAY "%d day %s" - IDS_DURATION_DAYS "%d days %s" + IDS_DURATION_DAY "%d den %s" + IDS_DURATION_DAYS "%d dn %s" END diff --git a/reactos/dll/cpl/sysdm/lang/cs-CZ.rc b/reactos/dll/cpl/sysdm/lang/cs-CZ.rc index 60173843906..e41cf645cce 100644 --- a/reactos/dll/cpl/sysdm/lang/cs-CZ.rc +++ b/reactos/dll/cpl/sysdm/lang/cs-CZ.rc @@ -1,6 +1,6 @@ /* FILE: dll/cpl/sysdm/lang/cs-CZ.rc * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) - * UPDATED: 2008-06-27 + * UPDATED: 2008-07-01 */ LANGUAGE LANG_CZECH, SUBLANG_DEFAULT @@ -147,11 +147,11 @@ BEGIN LTEXT "Vchoz operan s&ystm:", IDC_STATIC, 14, 26, 100, 8 COMBOBOX IDC_STRECOSCOMBO, 14, 37, 224, 46, CBS_DROPDOWNLIST AUTOCHECKBOX "Dob&a zobrazen seznamu operanch systm:", IDC_STRECLIST, 14, 56, 160, 8 - EDITTEXT IDC_STRRECLISTEDIT, 185, 54, 30, 12 + EDITTEXT IDC_STRRECLISTEDIT, 185, 54, 30, 12, ES_NUMBER CONTROL "", IDC_STRRECLISTUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13 LTEXT "sek.", IDC_STATIC, 223, 56, 18, 8 AUTOCHECKBOX "Doba zobrazen monos&t zotaven v ppad poteby:", IDC_STRRECREC, 14, 70, 170, 8 - EDITTEXT IDC_STRRECRECEDIT, 185, 68, 30, 12 + EDITTEXT IDC_STRRECRECEDIT, 185, 68, 30, 12, ES_NUMBER CONTROL "", IDC_STRRECRECUPDWN, "msctls_updown32", UDS_WRAP | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | UDS_NOTHOUSANDS | WS_CHILD | WS_VISIBLE, 0, 0, 8, 13 LTEXT "s", IDC_STATIC, 223, 70, 18, 8 LTEXT "Soubor s monostmi sputn lze upravit run kliknutm na tlatko Upravit.", IDC_STATIC, 14, 89, 187, 8 diff --git a/reactos/dll/cpl/timedate/lang/cs-CZ.rc b/reactos/dll/cpl/timedate/lang/cs-CZ.rc index 385236894b6..421784ad552 100644 --- a/reactos/dll/cpl/timedate/lang/cs-CZ.rc +++ b/reactos/dll/cpl/timedate/lang/cs-CZ.rc @@ -62,6 +62,6 @@ BEGIN IDS_TIMEZONEUNKNOWN "Neznm" IDS_INETTIMESUCSYNC "as byl spn synchronizovn z %s %s v %s" IDS_INETTIMENEXTSYNC "Dal synchronizace: %s v %s" - IDS_INETTIMESYNCING "Please wait while ReactOS synchronizes the time with %s" - IDS_INETTIMEERROR "An error occured while ReactOS was synchronizing with %s" + IDS_INETTIMESYNCING "Prosm ekejte, zatmco systm ReactOS synchronizuje as s %s" + IDS_INETTIMEERROR "Pi synchronizaci asu s %s nastala chyba" END diff --git a/reactos/dll/shellext/deskadp/lang/cs-CZ.rc b/reactos/dll/shellext/deskadp/lang/cs-CZ.rc new file mode 100644 index 00000000000..d54c68a45c7 --- /dev/null +++ b/reactos/dll/shellext/deskadp/lang/cs-CZ.rc @@ -0,0 +1,53 @@ +/* FILE: dll/shellext/deskadp/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_DISPLAYADAPTER DIALOGEX 0, 0, 252, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Adaptr" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Typ adaptru", -1, 7, 3, 237, 50 + LTEXT "", IDC_ADAPTERNAME, 40, 17, 190, 20, SS_NOPREFIX + PUSHBUTTON "&Vlastnosti", IDC_ADAPTERPROPERTIES, 177, 33, 59, 14 + GROUPBOX "Adapter Information", -1, 7, 56, 237, 75 + LTEXT "Typ ipu:", -1, 13, 68, 58, 8 + LTEXT "", IDC_CHIPTYPE, 71, 68, 160, 8, SS_NOPREFIX + LTEXT "Typ DAC:", -1, 13, 80, 58, 8 + LTEXT "", IDC_DACTYPE, 71, 80, 160, 8, SS_NOPREFIX + LTEXT "Velikost pamti:", -1, 13, 92, 58, 8 + LTEXT "", IDC_MEMORYSIZE, 71, 92, 160, 8, SS_NOPREFIX + LTEXT "etzec adaptru:", -1, 13, 104, 58, 8 + LTEXT "", IDC_ADAPTERSTRING, 71, 104, 160, 8, SS_NOPREFIX + LTEXT "BIOS informace:", -1, 13, 116, 58, 8 + LTEXT "", IDC_BIOSINFORMATION, 71, 116, 160, 8, SS_NOPREFIX + PUSHBUTTON "&Zobrazit vechny reimy...", IDC_LISTALLMODES, 7, 139, 75, 14 +END + +IDD_LISTALLMODES DIALOGEX 0, 0, 225, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME +CAPTION "Zobrazit vechny reimy" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK", IDOK, 112, 115, 50, 15 + PUSHBUTTON "Storno", IDCANCEL, 167, 115, 50, 15 + GROUPBOX "Seznam platnch reim", -1, 6, 7, 212, 98 + LISTBOX IDC_ALLVALIDMODES, 10, 20, 204, 87, LBS_NOTIFY | WS_VSCROLL +END + +STRINGTABLE +BEGIN + IDS_MODEFMT "%d x %d, %s, %s" + IDS_DEFREFRESHRATE "Vchoz obnovovac frekvence" + IDES_REFRESHRATEFMT "%d Hz" + IDS_4BPP "16 barev" + IDS_8BPP "256 barev" + IDS_15BPP "High Color (15 bit)" + IDS_16BPP "High Color (16 bit)" + IDS_24BPP "True Color (24 bit)" + IDS_32BPP "True Color (32 bit)" +END + diff --git a/reactos/dll/shellext/deskadp/rsrc.rc b/reactos/dll/shellext/deskadp/rsrc.rc index 21ce8e3eeb0..836412d482b 100644 --- a/reactos/dll/shellext/deskadp/rsrc.rc +++ b/reactos/dll/shellext/deskadp/rsrc.rc @@ -2,6 +2,7 @@ #include "resource.h" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" diff --git a/reactos/dll/shellext/deskmon/lang/cs-CZ.rc b/reactos/dll/shellext/deskmon/lang/cs-CZ.rc new file mode 100644 index 00000000000..454c6d37b4a --- /dev/null +++ b/reactos/dll/shellext/deskmon/lang/cs-CZ.rc @@ -0,0 +1,27 @@ +/* FILE: dll/shellext/deskmon/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_MONITOR DIALOGEX 0, 0, 252, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Monitor" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Typ monitoru", -1, 7, 3, 237, 52 + LTEXT "", IDC_MONITORNAME, 40, 17, 190, 20, SS_NOPREFIX + LISTBOX IDC_MONITORLIST, 40, 13, 196, 30, WS_VSCROLL + PUSHBUTTON "&Vlastnosti", IDC_MONITORPROPERTIES, 177, 35, 59, 14, WS_DISABLED + GROUPBOX "Nastaven monitoru", IDS_MONITORSETTINGSGROUP, 7, 58, 237, 63 + LTEXT "&Obnovovac frekvence obrazovky:", IDS_REFRESHRATELABEL, 13, 73, 225, 8 + COMBOBOX IDC_REFRESHRATE, 13, 85, 225, 200, WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + AUTOCHECKBOX "&Skrt reimy, kter tento monitor nedoke zobrazit", IDC_PRUNINGCHECK, 13, 106, 225, 10 +END + +STRINGTABLE +BEGIN + IDS_USEDEFFRQUENCY "Pout vchoz nastaven hardwaru" + IDS_FREQFMT "%u Hz" +END diff --git a/reactos/dll/shellext/deskmon/rsrc.rc b/reactos/dll/shellext/deskmon/rsrc.rc index ff0159e0722..cb7f80bf425 100644 --- a/reactos/dll/shellext/deskmon/rsrc.rc +++ b/reactos/dll/shellext/deskmon/rsrc.rc @@ -2,6 +2,7 @@ #include "resource.h" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/el-GR.rc" #include "lang/en-US.rc" diff --git a/reactos/dll/shellext/slayer/lang/cs-CZ.rc b/reactos/dll/shellext/slayer/lang/cs-CZ.rc new file mode 100644 index 00000000000..063bad46de8 --- /dev/null +++ b/reactos/dll/shellext/slayer/lang/cs-CZ.rc @@ -0,0 +1,43 @@ +/* FILE: dll/shellext/slayer/lang/cs-CZ.rc + * TRANSLATOR: Radek Liska aka Black_Fox (radekliska at gmail dot com) + * UPDATED: 2008-07-27 + */ + +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +IDD_SLAYERSHEET DIALOGEX 0, 0, 224, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kompatibilita" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Pokud jsou problmy se spoutnm tohoto programu v systmu ReactOS, zvolte operan systm, kter ReactOS tomuto programu sdl.", -1, 7,7,210,31 + GROUPBOX "Reim kompatibility", IDC_COMPATGROUP, 7,41,210,49 + CHECKBOX "Spustit tento program v reimu kompatibility pro:", IDC_CHKRUNCOMPATIBILITY, 18,57,188,10, BS_AUTOCHECKBOX | WS_TABSTOP + COMBOBOX IDC_COMPATIBILITYMODE, 18,70,188,85, CBS_HASSTRINGS | CBS_DROPDOWNLIST | WS_TABSTOP | WS_DISABLED + GROUPBOX "Nastaven zobrazen", -1, 7,99,210,61, BS_GROUPBOX | WS_DISABLED + CHECKBOX "Spustit v 256 barvch", IDC_CHKRUNIN256COLORS, 18,114,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + CHECKBOX "Spustit v rozlien 640x480", IDC_CHKRUNIN640480RES, 18,129,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + CHECKBOX "Vypnout vizuln motivy", IDC_CHKDISABLEVISUALTHEMES, 18,144,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "Up&ravit reimy kompatibility...", IDC_EDITCOMPATIBILITYMODES, 117,167,100,15 + /* CONTROL "Dal informace o kompatibilit program.", IDC_INFOLINK, "SysLink", WS_CHILD | WS_TABSTOP | WS_VISIBLE, 7,207,210,10, WS_EX_NOPARENTNOTIFY */ +END + +IDD_EDITCOMPATIBILITYMODES DIALOGEX 0, 0, 230, 139 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Upravit reimy kompatibility" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LISTBOX IDC_COMPATIBILITYMODE, 9,6,148,108, LBS_NOTIFY | LBS_WANTKEYBOARDINPUT | WS_BORDER + PUSHBUTTON "&Pidat...", IDC_ADD, 162,6,60,14, WS_DISABLED + PUSHBUTTON "&Upravit...", IDC_EDIT, 162,24,60,14, WS_DISABLED + PUSHBUTTON "S&mazat", IDC_DELETE, 162,42,60,14, WS_DISABLED + PUSHBUTTON "&OK", IDOK, 95,116,60,14 + PUSHBUTTON "&Storno", IDCANCEL, 162,116,60,14 +END + +STRINGTABLE +BEGIN + IDS_SLAYER "Slayer" + IDS_DESCRIPTION "Application Compatibility Layer Shell Extension" +END + diff --git a/reactos/dll/shellext/slayer/rsrc.rc b/reactos/dll/shellext/slayer/rsrc.rc index d7dab3a0da3..b57f4cf9aa6 100644 --- a/reactos/dll/shellext/slayer/rsrc.rc +++ b/reactos/dll/shellext/slayer/rsrc.rc @@ -2,6 +2,7 @@ #include "resource.h" #include "lang/bg-BG.rc" +#include "lang/cs-CZ.rc" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index a138db0813f..54348b105fb 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -208,18 +208,18 @@ FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN ICON "", 14000, 10, 3, 30, 30, WS_VISIBLE EDITTEXT 14001, 70, 9, 158, 14, ES_LEFT | ES_READONLY - LTEXT "Type of file:", 14004, 8, 35, 50, 10 - LTEXT "Folder", 14005, 68, 35, 160, 10 - LTEXT "Location:", 14006, 8, 53, 50, 10 + LTEXT "Tipo:", 14004, 8, 35, 50, 10 + LTEXT "Carpeta de archivos", 14005, 68, 35, 160, 10 + LTEXT "Ubicacin:", 14006, 8, 53, 50, 10 LTEXT "", 14007, 68, 53, 315, 10 - LTEXT "Size:", 14008, 8, 72, 45, 10 + LTEXT "Tamao:", 14008, 8, 72, 45, 10 LTEXT "", 14009, 68, 72, 315, 10 - LTEXT "Contains:", 14010, 8, 93, 45, 10 + LTEXT "Contiene:", 14010, 8, 93, 45, 10 LTEXT "", 14011, 68, 93, 160, 10 - LTEXT "Created:", 14014, 8, 118, 45, 10 + LTEXT "Creado:", 14014, 8, 118, 45, 10 LTEXT "", 14015, 68, 118, 160, 10 - AUTOCHECKBOX "&Read-only", 14021, 45, 150, 67, 10 - AUTOCHECKBOX "&Hidden", 14022, 126, 150, 50, 10 + AUTOCHECKBOX "&Slo lectura", 14021, 45, 150, 67, 10 + AUTOCHECKBOX "&Oculto", 14022, 126, 150, 50, 10 END SHELL_FILE_GENERAL_DLG DIALOGEX 0, 0, 240, 205 @@ -254,14 +254,14 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION CAPTION "Versin" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN - LTEXT "Versin del archivo: ", 14000, 10, 10, 60, 10 + LTEXT "Versin del archivo: ", 14000, 10, 10, 62, 14 LTEXT "", 14001, 77, 10, 152, 10 LTEXT "Descripcin: ", 14002, 10, 27, 45, 10 LTEXT "", 14003, 77, 27, 152, 10 LTEXT "Copyright: ", 14004, 10, 46, 66, 10 LTEXT "", 14005, 77, 46, 152, 10 GROUPBOX "Ms informacin de la versin: ", 14006, 6, 70, 222, 115 - LTEXT "Nombre del elemento: ", 14007, 13, 82, 60, 10 + LTEXT "Nombre del elemento:", 14007, 13, 82, 65, 10 LTEXT "Valor: ", 14008, 112, 82, 45, 10 LISTBOX 14009, 12, 94, 94, 83, LBS_STANDARD | WS_TABSTOP | LBS_NOTIFY EDITTEXT 14010, 112, 93, 109, 83, ES_LEFT | WS_BORDER | WS_VSCROLL | WS_GROUP | ES_MULTILINE | ES_READONLY @@ -704,13 +704,13 @@ BEGIN IDS_LNK_FILE "Acceso directo" IDS_SYS_FILE "Archivo del sistema" - IDS_OPEN_VERB "Open" - IDS_RUNAS_VERB "Run as " - IDS_EDIT_VERB "Edit" - IDS_FIND_VERB "Find" - IDS_PRINT_VERB "Print" - IDS_PLAY_VERB "Play" - IDS_PREVIEW_VERB "Preview" + IDS_OPEN_VERB "Abrir" + IDS_RUNAS_VERB "Ejecutar como ..." + IDS_EDIT_VERB "Editar" + IDS_FIND_VERB "Buscar" + IDS_PRINT_VERB "Imprimir" + IDS_PLAY_VERB "Reproducir" + IDS_PREVIEW_VERB "Vista previa" - IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_FILE_FOLDER "%u Archivos, %u Carpetas" END diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index 68522c6d701..7cc22455663 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -716,5 +716,5 @@ BEGIN IDS_PLAY_VERB "Odtwrz" IDS_PREVIEW_VERB "Podgld" - IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_FILE_FOLDER "%u Plikw, %u Katalogw" END diff --git a/reactos/dll/win32/syssetup/lang/it-IT.rc b/reactos/dll/win32/syssetup/lang/it-IT.rc index 7a54ca124ae..0c240c09d11 100644 --- a/reactos/dll/win32/syssetup/lang/it-IT.rc +++ b/reactos/dll/win32/syssetup/lang/it-IT.rc @@ -50,9 +50,9 @@ FONT 8, "MS Shell Dlg" BEGIN LTEXT "Scrivere il proprio nome completo e il nome della propria ditta o organizzazione.", IDC_STATIC, 20, 7, 242, 21 - LTEXT "No&me:", IDC_STATIC, 20, 37, 120, 8 + LTEXT "No&me:", IDC_STATIC, 20, 37, 108, 8 EDITTEXT IDC_OWNERNAME, 132, 35, 163, 14, WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL - LTEXT "&Organizzazione:", IDC_STATIC, 20, 57, 120, 8 + LTEXT "&Organizzazione:", IDC_STATIC, 20, 57, 108, 8 EDITTEXT IDC_OWNERORGANIZATION, 132, 55, 163, 14, WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL END From 57d822d84b272bd91db5d1938431b0f29fe13fcd Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Tue, 5 Aug 2008 11:36:23 +0000 Subject: [PATCH 150/304] Radek Liska < radekliska AT gmail DOT com> - Czech translation of inf files added. - See issue #3600 for more details. svn path=/trunk/; revision=35121 --- reactos/media/inf/NET_NIC.inf | Bin 2118 -> 2142 bytes reactos/media/inf/acpi.inf | 96 +++++++++++++++++---------------- reactos/media/inf/cdrom.inf | Bin 1904 -> 1930 bytes reactos/media/inf/cpu.inf | Bin 3038 -> 3162 bytes reactos/media/inf/display.inf | Bin 4652 -> 4746 bytes reactos/media/inf/fdc.inf | Bin 4358 -> 4534 bytes reactos/media/inf/hdc.inf | Bin 5462 -> 5652 bytes reactos/media/inf/keyboard.inf | Bin 4438 -> 4516 bytes reactos/media/inf/machine.inf | Bin 23288 -> 26264 bytes reactos/media/inf/msmouse.inf | Bin 12092 -> 12772 bytes reactos/media/inf/netisa.inf | Bin 3448 -> 3532 bytes reactos/media/inf/ports.inf | Bin 6500 -> 6798 bytes reactos/media/inf/scsi.inf | Bin 4576 -> 4708 bytes reactos/media/inf/usb.inf | Bin 2872 -> 2972 bytes reactos/media/inf/usbport.inf | Bin 9754 -> 10294 bytes reactos/media/inf/usbstor.inf | Bin 3194 -> 3302 bytes 16 files changed, 50 insertions(+), 46 deletions(-) diff --git a/reactos/media/inf/NET_NIC.inf b/reactos/media/inf/NET_NIC.inf index 0105ef0876d87b1a87f7c17e4b9aa61aada9852a..cddd3f2bf8e19f9dd108344306e9fada508efad8 100644 GIT binary patch delta 234 zcmX>ma8F=@3^Nyl^+aV~aUjLO#SqO9#*oTT#8AwT$&k;G#}GTQ*AlFvUw+~%p^5(t z7`Y}JGb&GxV9c0&h*59yCq@sTh&_|$rsV%M5{fsJi)3Y!dAT$0s*!IU9(awEGg1{5{$ePcbfu<_lB$>mAsP`8I>7% zCp$A{0?E~k`atp~qbDa=4k#ZzS(Zg|vI7$jP~4lz5=lIsNtHPksDC|EEKrV{xf)2e zGCKmvqs-+{vu#-x0{M4Yu1mwsV+dv_VJKqAWXNMkXDDU>nQ)TT7^vzZo8e>~HW{eS x_w17F1`Ot4`HO7cD5B0#QSHfT?8xd38Jxf}3)y|)>gB;EYfrY|P+4>=Yq>L$y_p!GOVp!H~fT UMfU?XknW#sFx>|1HcVU$0G~5NoB#j- delta 332 zcmeC;|G+mvf|Zwni-C8dq_H%Z0pvt8gfXNt6fqPtWHRJ4^1rlcs zfy7^RM&8NFjF~{Pn^7M~?qu|Y7&MugNfpRfXVQf71DP~|{7NQUPPqA#dzmzufu>G= z$`lTivu3UYlAD%G( zH=6-fr5=L;g9#9ugY`UQ4J4@28LTppEfngGB07qy& AaR2}S diff --git a/reactos/media/inf/cpu.inf b/reactos/media/inf/cpu.inf index 97c13988df928f61e0c11af7678691bce5ce77ae..23a13b6f5bb7bf137ca823552c15e19116c468e5 100644 GIT binary patch delta 440 zcmY+A%S!@L6voet<2?*kctz(SJ~9nh4q)&OP6Ef8V*c)7uVR_|4#qnVT}t6XtE)eBDQ0isMvD zN&=_pwZ^r`(_uV|QG{HRJ&tFU z^#<+H5fxE#ooMz{&>T|AETT%m=eX7=OS`m8dD>(jlyS~WxqWz0ym(WloRhXfTXqI3 zgDATX-G3xY(GgN}0S9KURigtAu27wEXX*%^!~#BqDn;?7WzBXMH|tu8xh>J>PS7;l z9!2^`UPW1Wk=MptReDEB1RNKxHI*?l_|&>BeaAMSsR#cM=^wClg3Mok=1~f66 z!IL46p@booA%`KB0VJwAc|M2ndRhGMYU`fTbzeTiK5ll_?4n3aIGE#$PFe2YV9@+&qzpv-?x>B#~d0+W^4#h@lz zb4s(CgY_nISx%n70a69gqkyDdg%hD36ly>lxQl@yQ3|vlVoN+&wKLpQNp?d9C#bou ra5H%(zvB`DspLXdX~Y0^0k=1bN`c7%JRD$iL9XVTY{H|$0t#0Eo%?JH diff --git a/reactos/media/inf/display.inf b/reactos/media/inf/display.inf index 4139994ae035f7116ced0e5450ff40c2a1ee1464..2db009d3b5b50e973c39fe145cda5dddf7e4e359 100644 GIT binary patch delta 592 zcmZuuO-NK>6us}g`SW{kX5KUtWn(j>&)?$lrYs$WNrGHxq85ly6aAPL4HIZYJBy%2 ziy=9y7D2gocJ4%^P2j?Xu0>o(3&BOZ0vDcnjxEB)ci-Wj^PO|=`<9$ft)H6=CH)I6 z^XK>xCHG}Qp2@7t$qRWUWhpMK<$cAEESj`4@H7ukv@TS%=lG+!=+OH#g&DmS6}^LK zEu6!?u898Xop6kSpsKmzz14^@Bc&Db)hOc77(gNLma3IN7TW8s?Pyp|~$k!hKc zB36ULK~Fr%5sfl;H8}3O_2avl$5?2R_p70ctebigyP*=%csS3RQ%Nj_Q$#D_p0i5c z(C;ywr?{2NT9OjXNSb^#l*V8rg$I!#o(z6QzOnnVp&d)g!4}VMgM*CeqFdQ`X!er* zp#EnIHRj)JH?d>hWoqqj);5}DYMB$vai?MH8s1rV=(1^zqB;7A=u0eZTqiegT}H~z z_*|z^mIFMsTd28$W&6B#fDQXnUENbxZ$&S#^E-N*Di_l+*XOfL=)zvi@tqpc7VjnB vhL7=kcUOc;4Keo8aYvoVM$91<*jxkqAF=s z7;n$EYqwnJi7nyBDmreX&pfQa8bqJ~MLhT_;uGpc(uck$q^X^8^RU6WImp5mW)YlZ z89(kztAxG(olJ5xX}+!^T!=k{wQf7xN19{F!Qx~4DB`1IK=2I5f4r!Xh1{C6)b$FPbopLI3~& diff --git a/reactos/media/inf/fdc.inf b/reactos/media/inf/fdc.inf index 88d037ccb86781cf345efa3cf9e579cb925d5347..6a68ed093e8c64bf8b275c306d35f096bbc9ad67 100644 GIT binary patch delta 567 zcmZutJxo(k6#njeeXoz(zDq@#(1;cuRwTifMvxE{RHB0pVroJ_Daub#Y*G>+CThgR zbhi1_!NJ7E7-LLam>3CzlPd$8i;E@>PHH^w(HIAZbMJTW`Of#9bLzoH&y#kg8@X9I z9%UQPhZ~;;>8c`!RlsR=o7*bn4>hJVN2~%DtfPV&Rv$O5P|!E4n{9T9i}omA+tJUC zowqd#Jg2j4OLRIK8rP$jDswz>kuMSx{GPZXOx1FRb*Cg~*Ez_a&PhS1+}?c}i&(%s zLagGRM3g_kr*1pnx--J@lf4{D9^s5cUE+Q6bgVYQes3}x`{6RiaRcX3!UW2q@X9Ml zbtgZ29WnP=lXn$sSiur%xFt?yerOqBXaairc*M(e^QIo-Z!^l84(&jce3NsEI3e6) zrpKC8+%kvv-$6xMu3=f^DySkN?iCxaiZAHG)c=Wn2>8of7?@JCBCrHsb;b9ph*U&u z8F%CIe+{a#m1ZX_rd+;k?dQkTp}4y}(=<0yL;RXriMC~OTu;04RBzIknp1W7bCNIe loj)CO@{+&ycVfd$b5^FlFFy}k^WqTgU1c6{J@eSo_yZz-idz5x delta 662 zcmY+AOG`pQ6vxkf>Gd&YVYo066BC0ndnlz5RPwU|HipZT3RbN)Axx`&!ogKCPhdmr4s3tlpuYQMt&Z|h#Vz9F2}jwmgD5B za)SFiIZXad&XH!6A<_fo_wGUoSyU7ywHcq47GCqE1c>vilcWW8o-@hD7(T0QoH6tv z9MfjGt7<`FueA*KH7({h=Uj(XSbYGS^c$+djH8G6 znkRx~M>nr2x;yaQk)rcNV-hc29$a;H@w*RKi1R6TyWm#@>#ndAKTfk>be~NLG>k87 zndAG+hbNwiXnmyrAMAuK=!GN=li@Sy2+k2k)YV IAE{=;Z-TRd*Z=?k diff --git a/reactos/media/inf/hdc.inf b/reactos/media/inf/hdc.inf index ec13a83ec40d474fd54aa233740b18a22bc28788..d2275c678149379bc83febdd502e5b6ceec0bd77 100644 GIT binary patch delta 676 zcmYjPO-~b16uoac(~sA7TBe;ED$);Z1wu>3iV%g=q8pQHBZd@pQYxTM{Hh-@;KpAd zu{lOv8spL*U|bm&t~4gZxE5C?gpDgU8gHkQ$l~VRckg-UoOj>*KKg9zXlD>*DF!<;=)M(|E4a<;8x zpnJ~aif0zDJ!@P^sVP*{vgYukshXO_N;zyr3;3i?;;-6pddJbyj^Vj>(M5hy_aW-_ zV=0hC*_&skrni6%Z{mQYHZ8M5n^xHE8Wq{^I!8~Tcg_pHjAKv^AmKa9XKh~rFMWA@ z;P}N6^;gjj=JCjXaF2RhQ}NTk!1$R!hLvYsFYAGvu<$itI-QiuebwzYWw-mncW4iL z5toAoEA$w8cWY}ByTQ6U>3Mp~^B1;lAV?u~RJE{e2>Z7b&MI~~E)lcvm!nX*2634|{&jm`+DX!d#-ev405`8O- zE#Yln_cx5|{n}xwy2t@zjB7Qc#>i9btb%N;d#A^-6kf$HaJCc5AQ_)>n9^nvZ{l6$ K64K^`BIzHJFsAJQ delta 789 zcmZva&r2IY6vtX%km&?^ahR&#j0trS$`XTh!r<;oHb{k;bz^(w-dW%GW1(94IC7J>EXwAlF;buptEWy}W6LO%BIrtWAFc4NH?yNP*q z0Jd!dx}68`BQ}Y-?UWBSniiCX-KCevD0_Suk3Sc?cXR;0#`E_Hi5Xr!28BcnJ}1N< z1sy_}6K)f;0ig$0lhYxB1%HxnIAI8O?Y^Kt`xBV|pLRj)Wl~e2I_BMhPpN0T_Ek{V gr4I|=ta{HG4t2h8p4=l`xoKE(+4Lvwg38|iF9Rsn`?9kaFR zL8xPfj_p5yI(H}xsH)gl*jbrC;>HOPvaav-edqno@m0r<&abUPFLo|B>ZH>eWoVc3 zbV&R3fey$o7AJ}qBap-pMnn=hv4;yWha#Dh)FH$egq#2%sJc@C79jEdX zuH?^HtsBR;y7iY8`aEqh^_bpp-=-s;@`0a^s1lD>G|Rl-p?TK4B_B)5mQvoQ5K&XO zQ!?zaq_*Iry2sPC+QaV$ttr?xBOP+_H}nGeP=@;kZwItj$ZB0E>0S8A{h#(4!{IS3 z)N3{F1isg=248FVrS`Y`?DvjxoMM~abJ9b82Dv_Q1sU-W>K8sXwfHk`5?Vc*jrgp=q!{H zVq;~gZ2SclHY{YREG(3b9p~P8^H|t?y62wn`JQvny^K9Z4;mB`bTAJa^AUcaz=cVe zhjl2z60E`s6ezvZBbbMGU4+l1U}8*25J!Y1;*HQjd==6qCu|a1D9(v-FJ2Yn6d#FM zFMbxu25qT8T$cKXSJE~yE>jPjl?$HkPHv?5MQ(9^2g}0-%)u}$z#^C?$w)tdWmv)u2o?sFkzQ#6GOeQlg0oNK`x-Q4Ki_#O=U6={4>dN8F;d+xhhlFxIhm-{_wY?uG}CGbqIIDi0AV?IJ5g(T3hk<>{uN;WM& zy0nU_{HUtnr`sw`>&Sjg(^N&M+Wt(@O8cwY+AW&2Uz?(I(yC2rP}WIPRBhRw`@Sy? zYu9~96MDJlo_o)|=RD^*=la2qO|QOZy6!jGHiD-bZNes=6tiMQtchpES@DdxAQm^i zeWc1J`ZvDQvhlzLyD5g8DS}ngDt=|^hS{7k*)U)ZVbvU=^bKhNUu2=z7WjGa(vYW8m)69OrRc)V8Y}MXx8kKb zhZfFT=^ozh!3T8;ZB6zjO?%_Gbkc(by8|ED+u>K6v1QLwz6$lR2sZbxa*X1qt=>vq z6z4LkHZ8Szao3TjEVo7RlX*GMRvjTy!N)pLKB3KPkB9`ZV8$@u>BnE3v%Gq;-p&7K z>qGdRJK3VAxhN*YDKRLfnDA~fBAyV7hTUZ27Z7pH(BgSl2xdivv(5^O+oNe3DR~ia z%aERTwc@0^fnoJyquz&#yC`qqim%}ivQ2GR=68+X&89B=p`if}8-_J*=-ypxl-_+^ z@tGE3Qu-+mDB*gWxG0_?{kloQukn*RdU&oM?_Pl>06T-Q^vF8(OavoCx_ z(|y{egJ8UuI~tekOJbcTm3h|RXgzOQ5@(pw{iXnuJ8zO5=8{wN-KW|(KR5CR-m2-4GJtcv)-!-!7WaI?_-U(jH)I&RP0OiG=^-y2hMn!-tNjNyc4%` zhve*L!iLRW2b6@9yp=l?Tu4|MR}4Q$L>W^ImR=|0ieb37o$V!t*Lu75@DU@)E-k$8 zCzA{>hKB_^Jbemcea{)~CWg~}NzA1@Y&%!ja`H$X&J%_dUO${71akBvmG%+}!ZDo2 zgS33Zzk57ROD`@SnPsaP<1QPvvrb$e31B?q`h+dJ`uk+j9Zi4BfJ`-P6m*9ih-3>I zAN2iY$~p&(xejA>TogWONzx11mtV~#KesRIMeofI60`*ku${b@faNeUpnkR=r}h-2 z1S{}w`f>`nAswLHPyp`^u^+QP>#}1{0WNA_J^3&C^Dg=SQ;F^E+5f*HY9Sxx!#WWT z;O%6E#gp3+E6C>r;6rW^3`L>u8` zQ<%t*e+ir}@drU6h98x3B%s8VKLh#Jy)xNMOf%S-Y$pLTC`~!BJT<4ic{@`DB&M&D ze1o_+V~2G{B>|<}ZPX!K1a(ux1;ZIJc z0;{YR@tEus;+HZT;xDph@g%6us6s!OQ7icuGbr|>44>rxkU=M?UtG~;wIq63cFUO|S>yOgJZ;zPSqcfD1O%I`}omgllJ&B`{y7M`kxX2&e^ybRd31 z*(GH$om&FWtU6)eOs>8>od?s6l3qZ8Cz(UcIP(h03k$h)>)*MT1*}f0vf>CcLM!?o7t*Mg> zJ6Fr29n^NFZxZua)AmbmsVyqU2u(pHOcd!QE>TonOgF}vQ7rE5Z}_5!>eyRY4ho%L zitp4_Bln`)t&mkr-+t!{d~mb4Pujg%T!ays`g%nEAO|C@Sumw%rPXOYee+fQMZ{%C z5ZDq2S}P?%#H%eFcnrJI;+RbDTpedk&^ zSmP9+E~`N=(d&ZAGU_Cb=U~R7%o#`hrx-KUOlTB&nLmISvXH%G8AIHRhT!MJd(pa! zRsU5T3v8PbJbUusp^=rNcCex>hLOfbSTkn9X`>D!r;YT@!hJ(hW|kPK7LEYg-6wRoR&? zp?^em74WEDomSTh1_$NgbG(hX?06TEcfN#3O0GFYCB2|+Af35}5aM)0H{!o4YJqi8 z28mt{j=LHtPE-=^3;b4%>KeN&X6qJuZQP3SE|ilTW+`Tx~Q^~v!^5N#n2HvA^|p5KpNs)|JJ zeSaNtOO|@L(XNN@_$*)pc4RiAJj?`W9^DO`Nh`%#cf;WhWwNaRW*f8NN(Yttw9&Pl zRKoK%`d;BaH+b4>Bn`qby3qiO?Z=!x=Y!@U7&oa?0&Z$>LTcos3y%O{6~Fsb9CLo_FBp=P)} zMBO6uH-j!p9Tc)O!$_1?mn?3$9i@kEMlU1Me3%_E!2Mx!>Wd^tBDgSZY=@g8)I8z7 z0H|ZBA(0xL30&DeHs6HaQ7Ru&e|9uAKuj-BN*s;OvN16t2s2~j$dmSHDM-tI0L+}K AV*mgE diff --git a/reactos/media/inf/msmouse.inf b/reactos/media/inf/msmouse.inf index 094973d061e5e27e7334c3b780f72e715389ceb3..b674755a68af1ceaca8f867c39fd547711a15ef3 100644 GIT binary patch delta 1530 zcmZuxOKcle6n$gIj=%BWvB&Xm>^L)a?AS?w;8smznf_DD5o<&uR8^HykuIuAEXsZ3Pd{YwX70Q1-h1vj z@6Oy9|9fi1Czw`)C3-A)RzL4s{jGQPVHUEGKv|fHL8#!aoGEgxF09z~xNG6H2drr4(8S?63A;rvAIx8Pec9d!H13f;WUacG>(?6i!)#IOyQWBMyZle($Iujya!2)VMfe z9P=(7{e>%ltmiTk?t=Qh>pnv74LW)3;f%lW2I*O6x#b0N1SU zici8Xt;ecNr+n#}rjpQuGv=6(#egkMy1JiZY&Yp~%U`BCQPG1wu^Y~?jITtldw+)? z|A-+h$MU$HvS2t6!cIpwCQ>bUGh#O`un$R_b45;wZft}kI@t>av@ftRIKm1ZB`iI2Y?k!j zW)ZeXGdE9bhSn0BWK(RHycfxOOW39NIf~n55~)({+V0@{2+i-uY*LtI3U&Ee>;UJX zo93~|DS_Bt12Ib4g{R{g<&8oQju|7?VPna9ksJklnBe<`4 z8{AJMohtV*X+J?0XRs1}qWi;eq~0m%?!$#hk<`xPK_tWTB!>^mupb?K8D)@UqFcRa0PTu%7#N6d+>KsQ2(mgZyh1r)ht?l3!d>)J7-YkmZj4SA@jf1UdXS@u|nfU3o7Evgw_YQ?8WaLK0-ZBX!)m9 zepf{q`JZ;%(WCq5Hkk}#IeAvC%;&WQcKXj%XV#04Qc_JjAMT{w9Lcyy(=yLm1qlP4 i9IJYBOJvn&buBG%bjTS#!S#8)o{<`gid`X%iTwvGPOfnP delta 1745 zcmaKsO>A355XaYczWi;c{{D(%*B{U3*?w}X63k0U($bX5w1GAh1t&2Hq$y3P8Y)o* zWCe)}5^~+491s#cfW!#}aRnN2MM4-VI0hsn#Gxv_Z~>{ztoJ>;2sn7PvorJGpJ!*@ zFDsufUJne~nT6R~!D^Uq&{$ye>;-m(ZLxLsGTUS|bZ<}axJv8wvDOcx27BvQ#b5`& zA%m-GSjY7vLlM{S4VA7SIE^W^%SK7qHKT;~n?}{F-vg&*FMMM3nD7SZ7@tA^3DZ%E zGHv5}-!y^ik%5{}xH&L}_Gbg6`y*ffmkA|D<3kSA;V| zBXE829j=vvdO^aIGpO{z&{gd$pTVkR_?+Nr4<8VjtvF?p zei|MfNuX+N(vEn9w&{})iL!M^i-d!E;> z;-H!=@%65S_HOHOT;~FZ;Vr90@HPWS;f{4)Sb19#Blf*vxL`Xg&c3k8c=nqutjCPQ z`#ukzwOvt|x6g~+vU|FZV&{J-WVqu9VAfnf)hVXnqEox^w$qPZqWInUB<@s~)TeyU zInMvz+b)ghw$lq=y1GPL|4I{d|94GfxHQ_ONx{dXp}w2uTwZ=t-P3^Q4ossm?INDX z`R;3-U4@I@^TOKkg?Y}tcU_#E^o{dQ+`zfH$}Zsitg-^m(KY<>4uu^bO$k+V**yf` z`DS%%T4-GJ(;H|nnlxcA!d*Xq)4&vZ`YU;}ug9qGui%ZF*!Nr1`7jYIV|-Q4z>VNz zLVYeK!CyfK-I_QBXG0;}bz(EH8=|^2ld6@-w{ZRws9-2o;Jv&Bo(gA0{=G4pL3{jJ zVXwt$s+;i{Sd5TXvvdl+iiCu>QzGwvR)Jl`15ZRLqM=k_H>yPx<=}9M9pSu0x}12V zN9vSuYU-Rv;ymrd8Y*;o9pd`u$Rtpq{DDo^1-1Dej5>|45h5YJc}QXW1^5{ z*vm``h5MNrMU@nag4ZMqe3%^-KCNU+7|~F)h*%$(!lrewpQK|tRS+g~am;EbCg9y% z0e78P8UDy+>8@nOyn$_4H}syhBr==v1&SzD?Rvxm1=@RvTBD(y{)fLPQ!7;E6`}K~ ztfJjcoPb*e3rrTMLY>$YS~1)qf%P)B)g|T^3@?d1t)*t*o8lpH)@!TH66rKcb>Y$K Q(`~6mg}e=AWq=;_Zy&6DdH?_b diff --git a/reactos/media/inf/netisa.inf b/reactos/media/inf/netisa.inf index 21cb697f4efbee31c4fd7942725b1df0c92fb34b..bbff58a358e0a54b89ddfc62e9887f2eeead7194 100644 GIT binary patch delta 460 zcmXX>xk^J(5S{y$EH|-Gj1nVc(YQwQd?+y*LrQTcU>Z#kB;tljT)@uCO3>%Q&dSP8 zu@aQ%2Uu9yDcA^t0SgPk#_=haxp(fFIcLs%HQWad8-%oi(>_U(W++ERD$xcl(i*K& z-a1ICk_Ig+Xua1Q2?M5xASV`ZC%W+=282Xhi6W=8HU06&sldD~n&)?pHaRQVig{L# z;zjY{MrmZ$lM-OzD0*Zon$>rj!7I}>7N$lwc zuJl>%_B*=jCC@98Nrrv8+4~O1uTneq9kn=hEOBSGvkMt#Gv+z=IWC5_;n8JscJ7HICk9P+u=4spT9&_P2(Pl2Q3GS1v|R}@nq_1H YS#Qg~1CtWAgD}e8l-(Vx8dfCz0EUis8vpj{X=Sk6e}+S7X$A^=};)6P?Q-cGV!4N#AOnUyc74D0*Q}?jJ%T-8I^&gGh-%@ zT+OHtByTcWLo`hmWl{z5Etxb`!KMLCjArm#73AVl)>ycC(UbSHsDo|!&ngZ#Q**Kdn+Q;4Fk3cMY(JYWkpG$u zfa1*U3Ph_^79Kg&mnTsO;s{13iFxZZK4r8bYKac+8OB@P7 zy&pNCK|J{*wEe`qZKSDwTeWvrj!z)Rfs0Kv76E$ z;z}G2Zp3vr3Ze^FE{Y2g5$syfBDfNiuEdStePgP1<6`EWd*8YD+|T>$+#R`RORBr~ zyrq&#b5x;A)THaQOjoH+Ro5-MZ-*gE1q@4lxF{{*m6XSK>8PY)OwOVv?`P!7{dgfC zX7p1YMBZ1yZQmqb`&QU<+~0#Ge@3wU37<+?oVIe<^dIwZkDbG0!13_AL=N$wgUx{H z*+ZtVhdFXJG=V$83Zsrtudhnt9EGj!!D5KZ=llEo-%@&|Dkj2H9=7l>+|B4o#KLA+ zu(p(JV4BWR68y{Tf`^6&Dl*%QSYZ(Bs4q**$wv7%FNhP~t^fc4 delta 919 zcmYk4PiWI{6vuyQ(k4xl^iP_$>2#fDu~gKW*4pJTMjcK)2!p{y>JA%DnJ}|V!NWlD zAbJwFhu{!Bdz&6SYIpV^;?av1#IxW{M0~$re~rC7-uL@nKJWMYOm;T{9T|fKjj@^(uw0-qC!V8;jerm@-4_KC0_GV7BWJ`j;b!aRubsFRoanf!51Yb z(py-`ZsfMvbO$~p&$Db;Syzvv-c{+lzGJb^Vnu7hRLVeiS##k=s?13bQuL1u`yH`~ zbNZ?y;`=~Fn`Qkz@2$(zFp*H;n>NoKPp3CHt2Z%vr7FDCqqob|;E$d`Kg{{?$~cBu zV60-?vuEInslj-+l*-icU9FCAbk5ANCx T#u{dO_7-FKuu?uM(f$1greVGM diff --git a/reactos/media/inf/scsi.inf b/reactos/media/inf/scsi.inf index 48577ad204fa6b93f75cbd10f4dcefbf8d067f16..bc98a649a7b46211e5bf72bf238eac3234ab2c1d 100644 GIT binary patch delta 647 zcmZut&1w^26usa4Ir%b^HrkA_lh`)RV1t@C^_M9LRaTo9A!iZ$$rG92ZUkhrLn&{YDi-YZA3tIQ)%13XqcJo%}5aI}eWNs_Kn zgId(4M|7L>P3my9PAeQu-g?;7GU#eKX1&r}7WOcrmoR8M_^r+Hw4uM$qdRzL9u`gH z4VR}?!^Z=oh-F#C2hLxOI)2G=Vu9}S3;sF}-LZJNF-=?44Q zpnHs8r914a%-s`?5bq(I7{cpB4zr0R&LK;f`;n8wtXkmz(Ue|a_XxhoENj;yms98^ ztGKQkc$&PNiQm7-e%4u|%}N{8#P{TJ9JE4b+jbRm)?R$JhPjL1y}(r?<*FwcnYVm* zlrGUU%}||2>8fbaExu%n6)LdPZQHN3=?8BX={&~_S1peJGfELBRtfCCx57)Th-bFO zzRGxKPek5UBPSzhrINSy9WdbME2Ym%iudVL;Z1O43BDhgT!KMW9F) zNQKnMCaIDQvQCzeaFUW3p?=y^|L_YM$byMADU4yQ3RSF6LJaG-kYr4}vkl<6WJ@bl zNxvfK-Zt2?wToy8_qHtFcZg}MS#g`I?nDF6ui}7VsmLrTV~lOGg8yZ*gyQmiRMOwmxHVjTV66gpp5X-%lZaN`JJx1+|i z96m-3r?Xt3OOue33*7s_X)u>ZdDB9I@Fj;N%!o6~YS_Y4=$BF=@ZwxxUCFu$!j;mA zSc7Hwn`DNi$Z)PMWne^d9=Y-yc=xoi096-Vi0O&JgKLnjmyXA0fiq7(Vt$x*(-G%d z1#aB|OWh?U>7G%!*rLi=oF3+EK-@dp!ck%0J8kj8vPq`6TMRmV-T&AH-#E|k>2v?; ZpjUVB^m)C%MHPYzeS)jz{OxwSh98h-jCTM4 diff --git a/reactos/media/inf/usb.inf b/reactos/media/inf/usb.inf index e818a444117e027333c5f2726a6485c4b2f28b81..6d3fbc524160e3d7b2480e3a0765b748983113a4 100644 GIT binary patch delta 431 zcmah^O-lk%6g@LBCc?Lp{pOl^zy(RJ)zT8XEXU)ZI49+cj~3I_F-g ziG8f{oq|d4o+7(_@&DB(x)UPwpwGKAd+1Fc5`TPH%s7){)b>nrf5-Vxh+1Ba9cjAt bCS8}0+FsLjh147-T;H)#a1#QeVWYwQ6#he6H@sL?~@&sl9psM-Ij&LzuAfJ~-9L@)+;hXHnA_5eT zWXVPnU&A8740Q73k1QaUh_Zr6OE4MB>Ih`dWz|Ko+kP@1TM$%#BAX~sMJbyxl<&x) zJNX)$7&FkVlk1uEC(E#Fz*P!Q;^bg82ZhdLM-Feel06&-$VzyC<~edGPS)YHf-8|> z=a@W?(*ju;+vE?NY+$9jlP3VBwYU_Jl#5NCz@>t!{2UiVx#Hw6To!PpG2C`6pl}5M Dp9^2N diff --git a/reactos/media/inf/usbport.inf b/reactos/media/inf/usbport.inf index 69337a1559fb90f80dbf3fcfab5180b52efc466d..68e0047a6f578396b953451fc9eb012d29d92d4f 100644 GIT binary patch delta 1266 zcmZXT%TE(g6vofA1v+C}O6_AheN35_D9EE$jF_NejY-89k(7v9EGSqL0tO$6Mvae^ zZlrv1AuiOFZXkq(3u81I{|sY44g(ZjOy`_?&;5PhJ*P8$;CatvR8q?I zdjkq7be#HVm?r2vouzRaqeA)S_VUa2^0zcnl7XC5!o1XqMJXpKXtOn-&$f}H+qOo` z+B&LC1m4&hqyj?rUX0qiFl+DNicfYOE=N1Ej%KT>))C;UdyX@hbZD4OYG|&?pjb76 zOm&H$(a4gaeQe_bn;NBqG(u;nz&0E3B$kK2rq3?oK{bzeHGQn2JMZ)FH95xQy4nc7 zI}OewawCRZDvGjd?rz4MJjPK{X~Q{p3iI9+9xEvsE8M+tHX+sq z`7NxhwXdzAoKzpWE0nmJuZ7ldHTP+!ed!`CcosHRJLSa(?oe7AvO1M9^K2+9=gi@W zLjqEa2#A5ZkvMm2CQ?{NoQqXsE~?6T%F!O$$Bh_|p0Z#DtX(w66mEY9=S_V4QS2$V zePCrb8dvc?F2H}{I?FVnTla8Q(DTbOJwe}8!o^uPe(N5K--Wk{qRBgHjZ?!ht}3e2 z7%*HFycb50vzbUeei)q|`B1k1#k(j2zfR;!w8WXKX2wD;aA2G(nXx;f( zD4ys7Vr;i=h#NOX*y{%VK^u22EOF(+h3DS60|Tjxo}6>Od(L;xcjxx=)N<){-0mSR z;#pG0V$8wd61hO;$X#-e%#%g3K*|U|$P1pO)nPP04htR#3MsV1!aUmd!T{Ru!i3%l z!j=ric}teZvz9EzFD-d-n*csoGFEI0Ez3E?3f2PJr`9~L_+m{kF9RoSVfby0BkHmB zb9BTO!&tM&;I^&Ay@ncvE!z-_ZlG=1>0~YYEnZXZ*heu(78;R3JZXcCj%k)z#e(DUvl}>ts3iGV9cRSBymSkn;f+~1LGkdN_ulJfHsRYK2 z9)W(kMH?}4@F?g-%zRY^*mBt5Z*YoN*V92J=Cx1`Pp+pAz*?xwz_bDA2-DA53(qnu zLqko%TDX@-Rrv^Pgd?<4&O#;z>qu22Lqm%rl7nrc6~H;*n17f|}wqMrRB~&X9tiifSO527T%Y)^!AGs> zNtZZB`_ca}sB7mL<0R(YoLiSSV9HR5b$neOh2yE+{1y0>qP5NF3O!})nARB!JQgx# l&h#-u-;@?M^bEjGhBE09)${ZIgS$4ZaEvl__l9hAhkvi5J{$l5 diff --git a/reactos/media/inf/usbstor.inf b/reactos/media/inf/usbstor.inf index 4aca025c3f7ac54123a0fa846b6f25118a6a2b5c..ef29a9c9c36021dbcee4c1614a2419627c1bd336 100644 GIT binary patch delta 372 zcmew*@l0}p3?tV>#YiAgFFJ9W#l#CHli3&zCR;EnO^#vAn0$;;Z}K-rCq}NxwoIy% zQtcgtWlQ%J$uyQeQF+@+k$Rx@bJ9#6M@FXsa$wACnKm`YxrvgcRR&Ag}CyO_j zEjxJ+iv*A_$SMiu+fOcF%>%L?v+7S4VN;oG1;hzJ+{Om7>>#t{h<1mqtwC@_RF1T#1R=_-aqhDgS@ zKsuEnkKrwYCWF#sMvlnIe%wO*$l^*2AX}uF&Ee+oOg_b-1hgSyvKyxw*cSQ8lQ?65 uA_0>fxU9e;lB|Y6TVOVufK~f(t3c!?PvB+)>QI=xgWCoo!=u5(#Q*@&=wdSf delta 497 zcmaDR`AcGg3@a}K7X$A^*+^+H1IUSH2xCZPC}JpP$YjW8$YY2FN_Sg=)mcyMm7n-b zh>>^VcSA{oDIabW`p^mo^2{ps00IT zC<2B_9z#0Ne2}{}*^QxQ334e;u4C5%>h9%;oWvmq6_)3aW;F*Zg(%>e9K@*vQ8f7s zry7zfXQ--JplmKzH(W-N-H^cvZbBS~z+?|@6|f1}lOwqKI8zyvAYPp;&mqZf#DK6( QgU1GH(;glT7Eo{i0N+(yY5)KL From 2d8274bd7b44ea2b71f258e281633ae12e5d5c01 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Tue, 5 Aug 2008 12:09:39 +0000 Subject: [PATCH 151/304] - Add Russian translation svn path=/trunk/; revision=35122 --- reactos/media/inf/NET_NIC.inf | Bin 2142 -> 2244 bytes reactos/media/inf/cdrom.inf | Bin 1930 -> 2040 bytes reactos/media/inf/cpu.inf | Bin 3162 -> 3426 bytes reactos/media/inf/display.inf | Bin 4746 -> 5014 bytes reactos/media/inf/fdc.inf | Bin 4534 -> 4886 bytes reactos/media/inf/hdc.inf | Bin 5652 -> 6092 bytes reactos/media/inf/keyboard.inf | Bin 4516 -> 4776 bytes reactos/media/inf/machine.inf | Bin 26264 -> 29928 bytes reactos/media/inf/msmouse.inf | Bin 12772 -> 13788 bytes reactos/media/inf/netisa.inf | Bin 3532 -> 3736 bytes reactos/media/inf/ports.inf | Bin 6798 -> 7344 bytes reactos/media/inf/scsi.inf | Bin 4708 -> 5054 bytes reactos/media/inf/usb.inf | Bin 2972 -> 3174 bytes reactos/media/inf/usbport.inf | Bin 10294 -> 11200 bytes reactos/media/inf/usbstor.inf | Bin 3302 -> 3558 bytes 15 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/media/inf/NET_NIC.inf b/reactos/media/inf/NET_NIC.inf index cddd3f2bf8e19f9dd108344306e9fada508efad8..9cf03ddb28361cc3d90ea34b58a76e25852e700d 100644 GIT binary patch delta 44 wcmca7a71v!Ja$IQ$>-U0r4(6AS)72_h{YR7DlpiyShE-aMZ8%iH?ZFW0Q%hu00000 delta 11 ScmX>icu!!%Jod>f90vd$J_L9G diff --git a/reactos/media/inf/cdrom.inf b/reactos/media/inf/cdrom.inf index be51948cd7cde647ef5640db0bc419934b8a6786..715d7f4f073bf59768d75468fabad2aae2212475 100644 GIT binary patch delta 40 ucmeC;|G~e(fSuWp!E$mTtEPYmiv^1#ixrCpb--Q9byCF diff --git a/reactos/media/inf/fdc.inf b/reactos/media/inf/fdc.inf index 6a68ed093e8c64bf8b275c306d35f096bbc9ad67..2446e4e675442d2884020a47775144c6d0c2e743 100644 GIT binary patch delta 225 zcmdm{JWXxGJ3dCs$s4&;jigxYSZrCGSR8<~H4vHtS>7xP48|-LEQTyrK++Y+GXc_$ zK%O0o5zFKQoGM<5KrIG9jV3_S0m!xmYBB{X1SuiaI35!ZY{psQFb<#FHecX-#smP> C>LMio delta 12 TcmbQHwoQ4%JHE|+0w7xP3}!%TNg0<~EJ6@rwY8>qnG$>74^I$2QEIslix00w8E vDyT{ZT^#0UFc^X5KsFlyoom1{`HirNCN4v*z)l1yggK#~S9bF$AunbC`2{DI delta 12 TcmX@3KSgK58KKQBA|A{DB+~@o diff --git a/reactos/media/inf/keyboard.inf b/reactos/media/inf/keyboard.inf index 74bfaa380abe126d1700fe09762a56615f5a98f0..7dd57686ae1c7867341397eece98add4a3c118e0 100644 GIT binary patch delta 122 zcmZ3Yyh3%uHhxCS$)|bsMWk4)SqxZ=SS)~~6N@v81B*AyWIjGA9YrA5fW?-@1V}mn m*|tClQx*jVD{LA9cuhnxO)_9nnB2%GJb4YT%;qip9~c2Z!xjwy delta 12 UcmZ3Xxb&b^rhX diff --git a/reactos/media/inf/machine.inf b/reactos/media/inf/machine.inf index 46f9185448864a4ab8aeb2d398ecfe0e28640f9c..743e48363639d3df12f43910c7f7a3b3dff7172a 100644 GIT binary patch delta 1405 zcmb_cO=}ZT6n%j!h`3NtNn=f3(n3R1!gG??$t0PNq_z37jdmlh)U}Il1Q#N8??SjP zT;?YT-MO*;0R0WFL^o3Zf#<%-NYjp`3kl4;d2`RX=bm>a@4sYz{LFmthnXe^!%DeG zE=AO(2DPa}Biyy>*`1JlYTA`UhWKT6IV_^kpsbE-h;;&p&P!rC^{jan&&JJG)CB@z+Pr#qw;6p9LNopETLf4x0CqqQjuQ zwgQ3(W@sh07}zuhso3gc&#`8SPBDsg=;r5@#Eb!8#&+Yq(5Y(FM>vXb#yo$j5(YVj z7&0Q>-*)PY7BATm9+$Q(g@=_CM-U_D=F?rfFV8T}L=Nv)E?sl1K7q9`U^jkQ-EmCL zjuOBfV~6ojux+_z9PuK+J$6Z+`7p@x+lV+{(U)^*F`~W&+ZU7W^6ETe1XVjUK>OG( zvG5KUWs1LC-)_Ad%)>TN;=vmUtUrsPcrK$lxUYl22a)W_C*_I-s;4Guz*h?kJYCc6 z(}x>}{27mwn diff --git a/reactos/media/inf/msmouse.inf b/reactos/media/inf/msmouse.inf index b674755a68af1ceaca8f867c39fd547711a15ef3..30d4abb21c5e4928a0f4c07be94e2816a3a36232 100644 GIT binary patch delta 484 zcmaEod?$OuHcdv$$==SEAkFamlPjJwtW_4-cc|WL_R+BSjV`76TSr784-p0A$;;c(a(YC@?qzNhcsSg7U4P^4=_y h-*Grd=mHhk0VQpKN*sX-Er2Wo7Jrt_@3`+V0st!`5aIv; delta 12 TcmbOsdq#Q#56|WsJO>y7ANB;j diff --git a/reactos/media/inf/ports.inf b/reactos/media/inf/ports.inf index 1b01cda645c89b3fdc3806cebca72c40cf67235b..5bc6b6e238fef3c972359ea453c055edad73a788 100644 GIT binary patch delta 283 zcmeA(-C()lhbW`vpm14E_wh3;z<6v-p5DSR!ed zoX2NGigGzoBP(o<0GSDKD8exymII3g&`yx;4nS8--Y0G)1#>GFX#okD&EG_4umAwk C#w)V` delta 12 TcmdmB*=M@phv;T0iD@hVBuxbA diff --git a/reactos/media/inf/scsi.inf b/reactos/media/inf/scsi.inf index bc98a649a7b46211e5bf72bf238eac3234ab2c1d..5a928dd6062ab5356c382dc6bda532809fac76c3 100644 GIT binary patch delta 164 zcmaE&vQK@(3w}n+$@+YTDi$mX3_%Qz44w=w3TNg z0wqjY6d0UY9HAO4!7L-7yaGcgLokEWQzAa!wisI&XDwo&*DFg-Z diff --git a/reactos/media/inf/usbstor.inf b/reactos/media/inf/usbstor.inf index ef29a9c9c36021dbcee4c1614a2419627c1bd336..fff9087fcdc5c7362869a1e35e38f7c70b178004 100644 GIT binary patch delta 121 zcmaDR`Am9)2sfkUWPUDXV?`Dx76TSr784-p0A$;;c(a(YC@?s)I0AVNEOsoGV3rY3 sUV$N$A(+8waz1CMo;Z+i50tfGu>k5ZVDV$|1nR@C(~f2HJFXv$0Mx=19{>OV delta 12 TcmaDR{Y-L$2=`_Yo=c1XA;1K7 From 77c4cbb2a69577cf98b56b45174e94a77f27f9b8 Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Tue, 5 Aug 2008 12:13:31 +0000 Subject: [PATCH 152/304] Bug 3618: Norwegian Update by Lars Martin Hambro svn path=/trunk/; revision=35123 --- .../screensavers/3dtext/lang/no-NO.rc | 17 + .../applications/screensavers/3dtext/rsrc.rc | 1 + .../screensavers/logon/lang/no-NO.rc | 7 + .../applications/screensavers/logon/logon.rc | 1 + reactos/dll/shellext/deskadp/lang/no-NO.rc | 48 + reactos/dll/shellext/deskadp/rsrc.rc | 1 + reactos/dll/shellext/deskmon/lang/no-NO.rc | 22 + reactos/dll/shellext/deskmon/rsrc.rc | 1 + reactos/dll/shellext/slayer/lang/no-NO.rc | 38 + reactos/dll/shellext/slayer/rsrc.rc | 1 + reactos/dll/win32/aclui/aclui.rc | 1 + reactos/dll/win32/aclui/aclui_No.rc | 32 + reactos/dll/win32/modemui/lang/no-NO.rc | 613 +++++ reactos/dll/win32/modemui/modemui.rc | 1 + reactos/dll/win32/msacm32/msacm.rc | 1 + reactos/dll/win32/msacm32/msacm_No.rc | 56 + reactos/dll/win32/rasdlg/lang/no-NO.rc | 2373 +++++++++++++++++ reactos/dll/win32/rasdlg/rasdlg.rc | 1 + reactos/dll/win32/serialui/lang/no-NO.rc | 41 + reactos/dll/win32/serialui/serialui.rc | 1 + reactos/dll/win32/setupapi/lang/no-NO.rc | 8 +- reactos/dll/win32/tapiui/lang/no-NO.rc | 446 ++++ reactos/dll/win32/tapiui/tapiui.rc | 1 + 23 files changed, 3708 insertions(+), 4 deletions(-) create mode 100644 reactos/base/applications/screensavers/3dtext/lang/no-NO.rc create mode 100644 reactos/base/applications/screensavers/logon/lang/no-NO.rc create mode 100644 reactos/dll/shellext/deskadp/lang/no-NO.rc create mode 100644 reactos/dll/shellext/deskmon/lang/no-NO.rc create mode 100644 reactos/dll/shellext/slayer/lang/no-NO.rc create mode 100644 reactos/dll/win32/aclui/aclui_No.rc create mode 100644 reactos/dll/win32/modemui/lang/no-NO.rc create mode 100644 reactos/dll/win32/msacm32/msacm_No.rc create mode 100644 reactos/dll/win32/rasdlg/lang/no-NO.rc create mode 100644 reactos/dll/win32/serialui/lang/no-NO.rc create mode 100644 reactos/dll/win32/tapiui/lang/no-NO.rc diff --git a/reactos/base/applications/screensavers/3dtext/lang/no-NO.rc b/reactos/base/applications/screensavers/3dtext/lang/no-NO.rc new file mode 100644 index 00000000000..07f9dc5f5c7 --- /dev/null +++ b/reactos/base/applications/screensavers/3dtext/lang/no-NO.rc @@ -0,0 +1,17 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +DLG_SCRNSAVECONFIGURE DIALOGEX 0, 0, 273, 178 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "3D Tekst skjermsparer innstillinger" +FONT 8, "MS Shell Dlg", 400, 0, 0x1 +BEGIN + DEFPUSHBUTTON "OK",IDOK,216,7,50,14 + PUSHBUTTON "Avbryt",IDCANCEL,216,24,50,14 + EDITTEXT IDC_MESSAGE_TEXT,18,28,122,14,ES_AUTOHSCROLL + LTEXT "Tilpass tekst",IDC_STATIC,18,17,65,8 +END + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "3D Tekst skjermsparer" +END diff --git a/reactos/base/applications/screensavers/3dtext/rsrc.rc b/reactos/base/applications/screensavers/3dtext/rsrc.rc index d567c12dd44..6b9ded6e2f5 100644 --- a/reactos/base/applications/screensavers/3dtext/rsrc.rc +++ b/reactos/base/applications/screensavers/3dtext/rsrc.rc @@ -19,6 +19,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/fr-FR.rc" #include "lang/it-IT.rc" #include "lang/lt-LT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/base/applications/screensavers/logon/lang/no-NO.rc b/reactos/base/applications/screensavers/logon/lang/no-NO.rc new file mode 100644 index 00000000000..3740677c302 --- /dev/null +++ b/reactos/base/applications/screensavers/logon/lang/no-NO.rc @@ -0,0 +1,7 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE DISCARDABLE +BEGIN + IDS_DESCRIPTION "Plogging skjermsparer" + IDS_TEXT "Ingen valg trenges bli satt." +END diff --git a/reactos/base/applications/screensavers/logon/logon.rc b/reactos/base/applications/screensavers/logon/logon.rc index dbcea631175..5ab8c22d1b0 100644 --- a/reactos/base/applications/screensavers/logon/logon.rc +++ b/reactos/base/applications/screensavers/logon/logon.rc @@ -22,6 +22,7 @@ IDB_SERVER BITMAP DISCARDABLE "res/1.bmp" #include "lang/fr-FR.rc" #include "lang/lt-LT.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/sk-SK.rc" #include "lang/uk-UA.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/shellext/deskadp/lang/no-NO.rc b/reactos/dll/shellext/deskadp/lang/no-NO.rc new file mode 100644 index 00000000000..cbb0b3bd42b --- /dev/null +++ b/reactos/dll/shellext/deskadp/lang/no-NO.rc @@ -0,0 +1,48 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_DISPLAYADAPTER DIALOGEX 0, 0, 252, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kort" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Korttype", -1, 7, 3, 237, 50 + LTEXT "", IDC_ADAPTERNAME, 40, 17, 190, 20, SS_NOPREFIX + PUSHBUTTON "&Egenskaper", IDC_ADAPTERPROPERTIES, 177, 33, 59, 14 + GROUPBOX "Kortinformasjon", -1, 7, 56, 237, 75 + LTEXT "Brikketype:", -1, 13, 68, 58, 8 + LTEXT "", IDC_CHIPTYPE, 71, 68, 160, 8, SS_NOPREFIX + LTEXT "DAC-type:", -1, 13, 80, 58, 8 + LTEXT "", IDC_DACTYPE, 71, 80, 160, 8, SS_NOPREFIX + LTEXT "Minne strrelse:", -1, 13, 92, 58, 8 + LTEXT "", IDC_MEMORYSIZE, 71, 92, 160, 8, SS_NOPREFIX + LTEXT "Kortstreng:", -1, 13, 104, 58, 8 + LTEXT "", IDC_ADAPTERSTRING, 71, 104, 160, 8, SS_NOPREFIX + LTEXT "BIOS-informasjon:", -1, 13, 116, 58, 8 + LTEXT "", IDC_BIOSINFORMATION, 71, 116, 160, 8, SS_NOPREFIX + PUSHBUTTON "&Vis alle modier...", IDC_LISTALLMODES, 7, 139, 75, 14 +END + +IDD_LISTALLMODES DIALOGEX 0, 0, 225, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_DLGFRAME +CAPTION "Vis alle modier" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + DEFPUSHBUTTON "OK", IDOK, 112, 115, 50, 15 + PUSHBUTTON "Avbryt", IDCANCEL, 167, 115, 50, 15 + GROUPBOX "Liste over gyldige modier", -1, 6, 7, 212, 98 + LISTBOX IDC_ALLVALIDMODES, 10, 20, 204, 87, LBS_NOTIFY | WS_VSCROLL +END + +STRINGTABLE +BEGIN + IDS_MODEFMT "%d by %d, %s, %s" + IDS_DEFREFRESHRATE "Standard oppdateringshastighet" + IDES_REFRESHRATEFMT "%d Herts" + IDS_4BPP "16 Farger" + IDS_8BPP "256 Farger" + IDS_15BPP "Middels farger (15 bit)" + IDS_16BPP "Middels farger (16 bit)" + IDS_24BPP "Hyest farger (24 bit)" + IDS_32BPP "Hyest farger (32 bit)" +END + diff --git a/reactos/dll/shellext/deskadp/rsrc.rc b/reactos/dll/shellext/deskadp/rsrc.rc index 836412d482b..29c114efc6a 100644 --- a/reactos/dll/shellext/deskadp/rsrc.rc +++ b/reactos/dll/shellext/deskadp/rsrc.rc @@ -10,6 +10,7 @@ #include "lang/eu-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/shellext/deskmon/lang/no-NO.rc b/reactos/dll/shellext/deskmon/lang/no-NO.rc new file mode 100644 index 00000000000..002a94ba29b --- /dev/null +++ b/reactos/dll/shellext/deskmon/lang/no-NO.rc @@ -0,0 +1,22 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_MONITOR DIALOGEX 0, 0, 252, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Skjerm" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + GROUPBOX "Skjermtype", -1, 7, 3, 237, 52 + LTEXT "", IDC_MONITORNAME, 40, 17, 190, 20, SS_NOPREFIX + LISTBOX IDC_MONITORLIST, 40, 13, 196, 30, WS_VSCROLL + PUSHBUTTON "&Egenskaper", IDC_MONITORPROPERTIES, 177, 35, 59, 14, WS_DISABLED + GROUPBOX "Innstillinger for skjerm", IDS_MONITORSETTINGSGROUP, 7, 58, 237, 63 + LTEXT "&Skjermoppdateringsfrekvens:", IDS_REFRESHRATELABEL, 13, 73, 225, 8 + COMBOBOX IDC_REFRESHRATE, 13, 85, 225, 200, WS_VSCROLL | CBS_DROPDOWNLIST | CBS_SORT + AUTOCHECKBOX "&Skjul modi som denne skjermen ikke kan vise", IDC_PRUNINGCHECK, 13, 106, 225, 10 +END + +STRINGTABLE +BEGIN + IDS_USEDEFFRQUENCY "Bruk standard maskinvare innstilling" + IDS_FREQFMT "%u Herts" +END diff --git a/reactos/dll/shellext/deskmon/rsrc.rc b/reactos/dll/shellext/deskmon/rsrc.rc index cb7f80bf425..55f9f572f39 100644 --- a/reactos/dll/shellext/deskmon/rsrc.rc +++ b/reactos/dll/shellext/deskmon/rsrc.rc @@ -10,6 +10,7 @@ #include "lang/eu-ES.rc" #include "lang/fr-FR.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/sk-SK.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" diff --git a/reactos/dll/shellext/slayer/lang/no-NO.rc b/reactos/dll/shellext/slayer/lang/no-NO.rc new file mode 100644 index 00000000000..62011ab0c42 --- /dev/null +++ b/reactos/dll/shellext/slayer/lang/no-NO.rc @@ -0,0 +1,38 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_SLAYERSHEET DIALOGEX 0, 0, 224, 226 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "Kompaktibilitet" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "Hvis du har problemer med kjre programmer i ReactOS, velg et operativsystem ReactOS skulle fungere for programmet.", -1, 7,7,210,31 + GROUPBOX "Kompaktibilitetsmodus", IDC_COMPATGROUP, 7,41,210,49 + CHECKBOX "Kjr dette programmet i kompaktibilitetsmodus for:", IDC_CHKRUNCOMPATIBILITY, 18,57,188,10, BS_AUTOCHECKBOX | WS_TABSTOP + COMBOBOX IDC_COMPATIBILITYMODE, 18,70,188,85, CBS_HASSTRINGS | CBS_DROPDOWNLIST | WS_TABSTOP | WS_DISABLED + GROUPBOX "Skjerminnstillinger", -1, 7,99,210,61, BS_GROUPBOX | WS_DISABLED + CHECKBOX "Kjr i 256 farger", IDC_CHKRUNIN256COLORS, 18,114,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + CHECKBOX "Kjr med skjermopplsning p 640x480", IDC_CHKRUNIN640480RES, 18,129,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + CHECKBOX "Deaktiver visuelle temaer", IDC_CHKDISABLEVISUALTHEMES, 18,144,188,10, BS_AUTOCHECKBOX | WS_TABSTOP | WS_DISABLED + PUSHBUTTON "E&dit compatibility modes...", IDC_EDITCOMPATIBILITYMODES, 117,167,100,15 + /* CONTROL "Lr mere om program kompaktibilitet.", IDC_INFOLINK, "SysLink", WS_CHILD | WS_TABSTOP | WS_VISIBLE, 7,207,210,10, WS_EX_NOPARENTNOTIFY */ +END + +IDD_EDITCOMPATIBILITYMODES DIALOGEX 0, 0, 230, 139 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Rediger kompaktibilitetsmodus" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LISTBOX IDC_COMPATIBILITYMODE, 9,6,148,108, LBS_NOTIFY | LBS_WANTKEYBOARDINPUT | WS_BORDER + PUSHBUTTON "&Legg til...", IDC_ADD, 162,6,60,14, WS_DISABLED + PUSHBUTTON "&Rediger...", IDC_EDIT, 162,24,60,14, WS_DISABLED + PUSHBUTTON "&Slett", IDC_DELETE, 162,42,60,14, WS_DISABLED + PUSHBUTTON "&OK", IDOK, 95,116,60,14 + PUSHBUTTON "&Avbryt", IDCANCEL, 162,116,60,14 +END + +STRINGTABLE +BEGIN + IDS_SLAYER "Slayer" + IDS_DESCRIPTION "Application Compatibility Layer Shell Extension" +END + diff --git a/reactos/dll/shellext/slayer/rsrc.rc b/reactos/dll/shellext/slayer/rsrc.rc index b57f4cf9aa6..fb3c0393bdc 100644 --- a/reactos/dll/shellext/slayer/rsrc.rc +++ b/reactos/dll/shellext/slayer/rsrc.rc @@ -12,6 +12,7 @@ #include "lang/id-ID.rc" #include "lang/it-IT.rc" #include "lang/nl-NL.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/sk-SK.rc" diff --git a/reactos/dll/win32/aclui/aclui.rc b/reactos/dll/win32/aclui/aclui.rc index 6bfcfb46a98..7f6f9ad3cd8 100644 --- a/reactos/dll/win32/aclui/aclui.rc +++ b/reactos/dll/win32/aclui/aclui.rc @@ -20,6 +20,7 @@ IDB_USRGRPIMAGES BITMAP "res/usrgrp.bmp" #include "aclui_It.rc" #include "aclui_Ja.rc" #include "aclui_Nl.rc" +#include "aclui_No.rc" #include "aclui_Pl.rc" #include "aclui_Ru.rc" #include "aclui_Sv.rc" diff --git a/reactos/dll/win32/aclui/aclui_No.rc b/reactos/dll/win32/aclui/aclui_No.rc new file mode 100644 index 00000000000..989bb8dffe7 --- /dev/null +++ b/reactos/dll/win32/aclui/aclui_No.rc @@ -0,0 +1,32 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_SECPAGE DIALOGEX 0, 0, 227, 215 +STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Sikkerhet" +FONT 8, "MS Shell Dlg", 0, 0, 0x0 +BEGIN + LTEXT "&Grupper eller brukernavn:", -1, 7, 21, 105, 8 + CONTROL "", IDC_PRINCIPALS, "SysListView32", LVS_REPORT | LVS_SINGLESEL | LVS_SHOWSELALWAYS | LVS_SORTASCENDING | LVS_NOCOLUMNHEADER | LVS_NOSORTHEADER | WS_CHILD | WS_VISIBLE | WS_VSCROLL | WS_TABSTOP, 7, 31, 213, 52, WS_EX_NOPARENTNOTIFY | WS_EX_CLIENTEDGE + LTEXT "&Eier:", -1, 7, 7, 49, 8 + EDITTEXT IDC_OWNER, 63, 4, 156, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_READONLY + PUSHBUTTON "L&egg til...", IDC_ADD_PRINCIPAL, 116, 87, 50, 14 + PUSHBUTTON "&Fjern", IDC_REMOVE_PRINCIPAL, 170, 87, 50, 14 + LTEXT "", IDC_LABEL_PERMISSIONS_FOR, 7, 107, 105, 8, SS_LEFT | SS_NOPREFIX + LTEXT "Tilatt", IDC_LABEL_ALLOW, 135, 107, 32, 8, SS_CENTER + LTEXT "Nekte", IDC_LABEL_DENY, 176, 107, 32, 8, SS_CENTER + CONTROL "", IDC_ACE_CHECKLIST, "CHECKLIST_ACLUI", WS_CHILD | WS_VISIBLE | WS_TABSTOP, 7, 117, 213, 72, WS_EX_CLIENTEDGE + LTEXT "For spesielle tilatelser eller for avanserte innstillinger, trykk p avansert.", IDC_LABEL_ADVANCED, 7, 194, 153, 16, SS_LEFT + PUSHBUTTON "A&vansert", IDC_ADVANCED, 165, 194, 55, 14 +END + +STRINGTABLE DISCARDABLE +{ + IDS_PSP_TITLE "Tilatelser for %1" + IDS_UNKNOWN "Ukjent" + IDS_SPECIAL_PERMISSIONS "Spessielle tilatelser" + IDS_PERMISSIONS_FOR "Tilatelser for %1" + IDS_PERMISSIONS "Tilatelser" + IDS_USERDOMAINFORMAT "%1 (%2\\%3)" + IDS_USERFORMAT "%1" +} + diff --git a/reactos/dll/win32/modemui/lang/no-NO.rc b/reactos/dll/win32/modemui/lang/no-NO.rc new file mode 100644 index 00000000000..d844c9da6a1 --- /dev/null +++ b/reactos/dll/win32/modemui/lang/no-NO.rc @@ -0,0 +1,613 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDM_MENU MENU +BEGIN + POPUP "" + BEGIN + MENUITEM "&Duplicate...", 0 + MENUITEM "F&jern", 1 + MENUITEM "&Vis logg", 2 + MENUITEM SEPARATOR + MENUITEM "E&genskaper", 3 + MENUITEM "K&opier egenskaper", 4 + MENUITEM "B&ruk egenskaper", 5 + END +END + +IDD_ADVANCED DIALOGEX 17, 12, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Ekstra egenskaper", 1018, 6, 6, 225, 70 + LTEXT "E&kstra initialisering kommandoer:", 1011, 16, 20, 143, 8 + EDITTEXT 1016, 16, 31, 205, 13, ES_AUTOHSCROLL + LTEXT "&Vent for kredittkort tone:", 1007, 16, 55, 109, 8, NOT WS_VISIBLE + EDITTEXT 1008, 133, 52, 26, 12, ES_RIGHT | NOT WS_VISIBLE | WS_GROUP + CONTROL "", 1009, "MSCTLS_UPDOWN32", NOT WS_VISIBLE | WS_BORDER | WS_GROUP | 0x00000036, 159, 52, 12, 12 + LTEXT "sekunder", 1010, 173, 54, 40, 8, NOT WS_VISIBLE + GROUPBOX "&Land/Region valg", 1012, 6, 80, 225, 75 + COMBOBOX 1013, 18, 99, 203, 50, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Avansert port innstillinger...", 1100, 107, 170, 125, 14 + DEFPUSHBUTTON "Endre &standard innstillinger...", 3, 107, 188, 125, 14 +END + +IDD_GENERAL DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Port:", 1018, 9, 8, 32, 10 + LTEXT "Com port", 1095, 48, 8, 181, 10 + GROUPBOX "&Hytaller volum", 1029, 10, 21, 218, 48 + CONTROL "", 1032, "MSCTLS_TRACKBAR32", WS_GROUP | WS_TABSTOP | 0x00000001, 84, 40, 66, 20 + RTEXT "Av", 1045, 56, 40, 22, 8 + LTEXT "Hyt", 1001, 155, 40, 25, 11 + GROUPBOX "&Maksimum port hastighet", 1031, 10, 78, 218, 46 + COMBOBOX 1036, 18, 100, 202, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Dial Kontroll", 1060, 10, 133, 218, 51 + AUTOCHECKBOX "&Vent for dial tone fr nummersling", 1003, 27, 157, 174, 10 +END + +IDD_DISTINCTIVE_RING DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Distinctive Ring" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "", 1068, 10, 7, 218, 145 + AUTOCHECKBOX "&This phone line has Distinctive Ring Services", 1069, 20, 7, 184, 10 + CTEXT "Ring Pattern", -1, 84, 21, 70, 8 + CTEXT "Type of Call", -1, 159, 21, 63, 8 + LTEXT "&Primary address:", 1070, 20, 41, 62, 8 + COMBOBOX 1073, 84, 37, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1082, 160, 37, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Addresse &1:", 1071, 20, 59, 62, 8 + COMBOBOX 1074, 84, 55, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1083, 160, 55, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Addresse &2:", 1072, 20, 77, 62, 8 + COMBOBOX 1075, 84, 73, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1084, 160, 73, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Addresse &3:", 1076, 20, 95, 62, 8 + COMBOBOX 1077, 84, 91, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1085, 160, 91, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Priority &callers:", 1078, 20, 112, 62, 8 + COMBOBOX 1079, 84, 109, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1086, 160, 109, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Call&back:", 1080, 20, 131, 62, 8 + COMBOBOX 1081, 84, 127, 71, 61, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | WS_VSCROLL | NOT WS_TABSTOP + COMBOBOX 1087, 160, 127, 62, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP +END + +IDD_DISTINCTIVE_RING_2 DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Distinctive Ring" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "", 1068, 10, 7, 218, 87 + AUTOCHECKBOX "&This phone line has Distinctive Ring Services", 1069, 19, 7, 177, 10 + CTEXT "Ring Pattern", -1, 20, 21, 74, 8 + CTEXT "Type of Call", -1, 96, 21, 65, 8 + LTEXT "&Enkelt ring:", 1088, 20, 37, 53, 8 + COMBOBOX 1091, 96, 37, 65, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Dobbelt ring:", 1089, 20, 57, 53, 8 + COMBOBOX 1092, 96, 55, 65, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "T&rippel ring:", 1090, 20, 76, 53, 8 + COMBOBOX 1093, 96, 73, 65, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP +END + +IDD_DIAGNOSTICS DIALOGEX 0, 0, 238, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Diagnostics" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "", 1042, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000084D, 19, 18, 200, 58 + CONTROL "", 1041, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000084D, 19, 84, 200, 58 + PUSHBUTTON "&Query Modem", 1096, 138, 149, 75, 14 + AUTOCHECKBOX "Ta opp &Logg", 1020, 18, 187, 98, 10 + PUSHBUTTON "&Vis logg", 1094, 138, 184, 75, 14, WS_DISABLED + GROUPBOX "Modem Informasjon", 1047, 10, 6, 217, 164 + GROUPBOX "Logging", -1, 10, 173, 217, 32 +END + +IDD_PLEASE_WAIT DIALOGEX 0, 0, 195, 72 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Vennligst vent..." +FONT 8, "MS Shell Dlg" +BEGIN + ICON 5100, -1, 9, 7, 20, 20 + LTEXT "Kommuniserer med modemet. Dette kan ta noen sekunder.", -1, 42, 7, 146, 28 + DEFPUSHBUTTON "Avbryt", 2, 72, 52, 50, 14 +END + +IDD_GENERAL_2 DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Generiel" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Operator assisted (manual) dial", 1002, 19, 22, 150, 10 + AUTOCHECKBOX "&Disconnect a call if idle for more than", 1042, 19, 38, 143, 10 + EDITTEXT 1043, 168, 35, 25, 13, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "&Cancel the call if not connected within", -1, 19, 56, 147, 10 + EDITTEXT 1040, 168, 54, 25, 13, ES_AUTOHSCROLL | ES_NUMBER + RTEXT "&Port hastighet:", 1034, 16, 102, 93, 8 + COMBOBOX 1036, 114, 100, 84, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "D&ata Protocol:", 1032, 16, 122, 93, 8 + COMBOBOX 1037, 114, 119, 84, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "Comp&ression:", 1035, 16, 139, 93, 8 + COMBOBOX 1099, 114, 137, 84, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "&Flow control:", 1027, 16, 157, 93, 8 + COMBOBOX 1031, 114, 155, 84, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Call preferences", 1060, 11, 7, 217, 66 + LTEXT "min", 1044, 195, 38, 22, 8 + LTEXT "sek", 1041, 194, 56, 22, 8 + GROUPBOX "Data tilkobling egenskap", -1, 11, 82, 217, 94 +END + +IDD_ADVANCED_2 DIALOGEX 17, 12, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "Bring up terminal window &before dialing", 1000, 20, 21, 200, 10 + AUTOCHECKBOX "Bring up terminal window a&fter dialing", 1001, 20, 38, 200, 10 + RTEXT "&Data bits:", 1024, 18, 79, 93, 8 + COMBOBOX 1025, 114, 77, 106, 61, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "&Parity:", 1026, 18, 97, 93, 8 + COMBOBOX 1028, 114, 95, 106, 60, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "&Stopp bits:", 1029, 18, 115, 93, 8 + COMBOBOX 1030, 114, 113, 106, 45, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + RTEXT "&Modulation:", 1045, 18, 133, 93, 8 + COMBOBOX 1038, 114, 131, 106, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Terminal Window", 1004, 10, 7, 217, 49 + GROUPBOX "Maskinvare innstillinger", 1005, 10, 64, 217, 89 +END + +IDD_ISDN DIALOGEX 0, 0, 238, 210 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ISDN" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Endre &type", -1, 11, 6, 217, 39 + COMBOBOX 1104, 17, 20, 204, 69, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "&Frst nummer", -1, 11, 50, 217, 50 + EDITTEXT 1017, 33, 62, 188, 13, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "S&PID/EAZ:", 1027, 34, 83, 67, 8 + EDITTEXT 1107, 104, 79, 117, 13, ES_AUTOHSCROLL | ES_NUMBER + GROUPBOX "&Andre nummer", -1, 11, 105, 217, 49 + EDITTEXT 1018, 33, 114, 189, 13, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "SPI&D/EAZ:", 1028, 35, 135, 68, 8 + EDITTEXT 1108, 105, 132, 117, 13, ES_AUTOHSCROLL | ES_NUMBER +END + +IDD_PLEASE_WAIT_2 DIALOGEX 0, 0, 195, 72 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Vennligst vent" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 5100, -1, 9, 7, 20, 20 + LTEXT "Sender land/region informasjon til Modemet.", -1, 42, 7, 146, 28 +END + +IDD_WARNING DIALOGEX 0, 0, 360, 105 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Advarsel" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "Ikke vis denne meldingen igjen", 1109, 17, 73, 118, 10 + DEFPUSHBUTTON "OK", 1, 302, 84, 50, 14 + LTEXT "Some modems do not properly handle initialization strings of this length.", -1, 50, 27, 304, 8 + LTEXT "Information about this limitation can be obtained from your modem manufacturer.", -1, 50, 41, 304, 8 + ICON 5100, -1, 15, 14, 20, 20 + LTEXT "You have entered a modem initialization string greater than 57 characters long.", -1, 50, 14, 304, 8 +END + +IDD_MODEMS DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Modemer" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 5100, 1057, 6, 7, 20, 20 + LTEXT "Flgende &modemer er innstallert:", -1, 44, 12, 203, 9 + CONTROL "", 113, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00000849, 7, 32, 238, 158, WS_EX_CLIENTEDGE + PUSHBUTTON "L&egg til...", 110, 56, 198, 60, 14 + PUSHBUTTON "&Fjern", 112, 121, 198, 60, 14 + PUSHBUTTON "&Egenskaper", 109, 185, 198, 60, 14 +END + +IDD_PLEASE_WAIT_3 DIALOGEX 0, 0, 195, 72 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Vennligst vent..." +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Stopp", 2, 74, 53, 50, 14 + ICON 5100, -1, 9, 7, 20, 20 + LTEXT "Fjerner", -1, 40, 8, 151, 8 + LTEXT "Modem", 1005, 40, 16, 151, 25 +END + +STRINGTABLE +BEGIN + 180 "RS-232 Serieport" + 181 "Eksternt Modem" + 182 "Internt Modem" + 183 "PCMCIA Modem" + 184 "Parallel Modem" + 185 "Parallel Port" + 200 "110" + 201 "1200" + 202 "2400" + 203 "4800" + 204 "9600" + 206 "19200" + 207 "38400" + 210 "115200" + 211 "57600" + 216 "300" + 220 "230400" + 221 "460800" + 222 "921600" + 240 "4" + 241 "5" + 242 "6" + 243 "7" + 244 "8" + 250 "Even" + 251 "Odd" + 252 "Ingen" + 253 "Mark" + 254 "Space" + 255 "1" + 256 "1.5" + 257 "2" + 260 "Xon / Xoff" + 261 "Maskinvare" + 262 "Ingen" + 263 "On" + 264 "Low" + 265 "V.23 (Minitel)" + 266 "Standard" + 267 "Non-standard (Bell, HST)" + 270 "Append to &Log" + 300 "Unspecified" + 301 "Data" + 302 "Faks" + 303 "Stemme" + 304 "Ingen" + 320 "Sprk/region innstilling oppdatert" + 340 "Modem" + 341 "Modem innstilling" + 342 "Modem addresse" + 400 "Country/region setting not updated" + 401 "Some modems do not accept user initialization commands greater than 57 characters.\n\nInformation about this limitation can be obtained from your modem manufacturer" + 402 "Advarsel" + 460 "There is not enough memory to view the General dialog box.\nClose some files or programs, and then try again." + 461 "There is not enough memory to view the Modem Settings dialog box.\nClose some files or programs, and then try again." + 463 "Each calling address must be set to 'Automatic' or to a unique ring pattern.\n\nChange the duplicate ring pattern to a different one." + 465 "Standard EC" + 466 "Forced EC" + 467 "Cellular" + 468 "Disabled" + 469 "Enabled" + 470 "Disabled" + 480 "AUTO (1 Ch.)" + 481 "AUTO (2 Ch.)" + 482 "PPP (56K)" + 483 "PPP (64K)" + 484 "PPP (112K)" + 485 "PPP (112K,PAP)" + 486 "PPP (112K,CHAP)" + 487 "PPP (112K,MSCHAP)" + 488 "PPP (128K)" + 489 "PPP (128K,PAP)" + 490 "PPP (128K,CHAP)" + 491 "PPP (128K,MSCHAP)" + 500 "V.120 (64K)" + 501 "V.120 (56K)" + 502 "V.120 (112K)" + 503 "V.120 (128K)" + 504 "X.75 (64K)" + 505 "X.75 (128K)" + 506 "X.75 (T.70)" + 507 "X.75 (BTX)" + 508 "V.110 (1.2K)" + 509 "V.110 (2.4K)" + 510 "V.110 (4.8K)" + 511 "V.110 (9.6K)" + 512 "V.110 (12.0K)" + 513 "V.110 (14.4K)" + 514 "V.110 (19.2K)" + 515 "V.110 (28.8K)" + 516 "V.110 (38.4K)" + 517 "V.110 (57.6K)" + 518 "Analog (V.34/V.90)" + 550 "ESS5 (AT&T) (North America)" + 551 "AT&T Point to Multipoint" + 552 "National ISDN 1 (NI-1)" + 553 "Northern Telecom DMS 100 (NT1)" + 554 "NTT INS64 (Japan)" + 555 "European ISDN (DSS1)" + 556 "German National (1TR6) (rarely used)" + 557 "French National (VN3) (rarely used)" + 558 "Belgium National (rarely used)" + 559 "Australian National (rarely used)" + 560 "Unknown switch" + 570 "The ISDN Configuration for this modem\nis not complete.\n\nPlease fill out the information in the\nISDN Tab before using this modem." + 600 "PPP (56K,GSM)" + 601 "PPP (64K,GSM)" + 602 "V.120 (64K,GSM)" + 604 "V.110 (1.2K,GSM)" + 605 "V.110 (2.4K,GSM)" + 606 "V.110 (4.8K,GSM)" + 607 "V.110 (9.6K,GSM)" + 608 "V.110 (12.0K,GSM)" + 609 "V.110 (14.4K,GSM)" + 610 "V.110 (19.2K,GSM)" + 611 "V.110 (28.8K,GSM)" + 612 "V.110 (38.4K,GSM)" + 613 "V.110 (57.6K,GSM)" + 614 "Analog RLP" + 615 "Analog NRLP" + 616 "GPRS" + 617 "PIAFS - incoming" + 618 "PIAFS - outgoing" + 700 "Use current TAPI location" + 2006 "Attached To" + 2007 "Not present" + 2008 "Not functional" + 2009 "Needs reboot" + 2010 "#To finish setting up your modem, you must restart your computer.\n\nDo you want to restart your computer now?" + 2011 "Modem not properly installed" + 2012 "Unknown port" + 3000 "Modem installering" + 3018 "Modemer" + 3019 "Installs a new modem and changes modem properties." + 3053 "The modem properties cannot be displayed because the modem is not available.\n\nRestart the system and try again." + 3054 "Properties for Modems" + 3060 "Are you sure you want to remove the selected modem(s) from your system?" + 3061 "ReactOS was unable to remove the modem '%1' from %2." + 3062 "Modem" + 3069 "There is not enough memory to open the modem control panel.\n\nClose some programs and try again." + 3073 "You must be a System Administrator to install a modem." + 3074 "No modems are installed. You must be a System Administrator to install a modem." + 3076 "You must shut down and restart your computer before the new settings will take effect.\n\nDo you want to restart your computer now?" + 3077 "Network Settings Change" + 3200 "300 Baud" + 3201 "1200 Baud" + 3202 "2400 Baud" + 3203 "9600 Baud" + 3204 "19.2K Baud" + 3205 "38.4K Baud" + 3206 "57.6K Baud" + 3207 "No response" + 3212 "Command" + 3213 "Response" + 3214 "The port that the modem is attached could not be opened. This may be the result of a hardware conflict. Check the device manager to verify all devices are functional." + 3215 "The port that the modem is using is currently open by another application. Exit any application that may currently be using the port." + 3218 "OpenComm" + 3221 "115K Baud" + 3222 "Oppdaterer" + 3223 "Feil" + 3233 "Fullfrt" + 3236 "The modem failed to respond. Make sure it is properly connected and turned on. If it is an internal modem or is connected, verify that the interrupt for the port is properly set." + 3237 "COMMAND NOT SUPPORTED" + 3238 "Field" + 3239 "Value" + 3240 " Default Preferences" + 3241 " Connection Preferences" + 6144 "Japan" + 6145 "Albania" + 6146 "Algeria" + 6147 "American Samoa" + 6148 "Germany (Country/region code 04)" + 6149 "Anguilla" + 6150 "Antigua and Barbuda" + 6151 "Argentina" + 6152 "Ascension Island" + 6153 "Australia" + 6154 "Austria" + 6155 "Bahamas" + 6156 "Bahrain" + 6157 "Bangladesh" + 6158 "Barbados" + 6159 "Belgium" + 6160 "Belize" + 6161 "Benin" + 6162 "Bermuda" + 6163 "Bhutan" + 6164 "Bolivia" + 6165 "Botswana" + 6166 "Brazil" + 6167 "Country/region code (23)" + 6168 "British Indian Ocean Territory" + 6169 "British Virgin Islands" + 6170 "Brunei" + 6171 "Bulgaria" + 6172 "Myanmar" + 6173 "Burundi" + 6174 "Belarus" + 6175 "Cameroon" + 6176 "Canada" + 6177 "Cape Verde" + 6178 "Cayman Islands" + 6179 "Central African Republic" + 6180 "Chad" + 6181 "Chile" + 6182 "China" + 6183 "Colombia" + 6184 "Comoros" + 6185 "Congo" + 6186 "Cook Islands" + 6187 "Costa Rica" + 6188 "Cuba" + 6189 "Cyprus" + 6190 "Czech Republic" + 6191 "Cambodia" + 6192 "North Korea" + 6193 "Denmark" + 6194 "Djibouti" + 6195 "Dominican Republic" + 6196 "Dominica" + 6197 "Ecuador" + 6198 "Egypt" + 6199 "El Salvador" + 6200 "Equatorial Guinea" + 6201 "Ethiopia" + 6202 "Falkland Islands (Islas Malvinas)" + 6203 "Fiji Islands" + 6204 "Finland" + 6205 "France" + 6206 "French Polynesia" + 6207 "Country/region code (63)" + 6208 "Gabon" + 6209 "Gambia" + 6210 "Germany (Country/region code 66)" + 6211 "Angola" + 6212 "Ghana" + 6213 "Gibraltar" + 6214 "Greece" + 6215 "Grenada" + 6216 "Guam" + 6217 "Guatemala" + 6218 "Guernsey" + 6219 "Guinea" + 6220 "Guinea-Bissau" + 6221 "Guyana" + 6222 "Haiti" + 6223 "Honduras" + 6224 "Hong Kong SAR" + 6225 "Hungary" + 6226 "Iceland" + 6227 "India" + 6228 "Indonesia" + 6229 "Iran" + 6230 "Iraq" + 6231 "Ireland" + 6232 "Israel" + 6233 "Italy" + 6234 "Cote d'Ivoire" + 6235 "Jamaica" + 6236 "Afghanistan" + 6237 "Jersey" + 6238 "Jordan" + 6239 "Kenya" + 6240 "Kiribati" + 6241 "Korea" + 6242 "Kuwait" + 6243 "Laos" + 6244 "Lebanon" + 6245 "Lesotho" + 6246 "Liberia" + 6247 "Libya" + 6248 "Liechtenstein" + 6249 "Luxembourg" + 6250 "Macau SAR" + 6251 "Madagascar" + 6252 "Malaysia" + 6253 "Malawi" + 6254 "Maldives" + 6255 "Mali" + 6256 "Malta" + 6257 "Mauritania" + 6258 "Mauritius" + 6259 "Mexico" + 6260 "Monaco" + 6261 "Mongolia" + 6262 "Montserrat" + 6263 "Morocco" + 6264 "Mozambique" + 6265 "Nauru" + 6266 "Nepal" + 6267 "Netherlands" + 6268 "Netherlands Antilles" + 6269 "New Caledonia" + 6270 "New Zealand" + 6271 "Nicaragua" + 6272 "Niger" + 6273 "Nigeria" + 6274 "Norway" + 6275 "Oman" + 6276 "Pakistan" + 6277 "Panama" + 6278 "Papua New Guinea" + 6279 "Paraguay" + 6280 "Peru" + 6281 "Philippines" + 6282 "Poland" + 6283 "Portugal" + 6284 "Puerto Rico" + 6285 "Qatar" + 6286 "Romania" + 6287 "Rwanda" + 6288 "St. Kitts and Nevis" + 6289 "Country/region code (145)" + 6290 "St. Helena" + 6291 "St. Lucia" + 6292 "San Marino" + 6293 "Country/region code (148)" + 6294 "Sao Tome and Principe" + 6295 "St. Vincent and the Grenadines" + 6296 "Saudi Arabia" + 6297 "Senegal" + 6298 "Seychelles" + 6299 "Sierra Leone" + 6300 "Singapore" + 6301 "Solomon Islands" + 6302 "Somalia" + 6303 "South Africa" + 6304 "Spain" + 6305 "Sri Lanka" + 6306 "Sudan" + 6307 "Suriname" + 6308 "Swaziland" + 6309 "Sweden" + 6310 "Switzerland" + 6311 "Syria" + 6312 "Tanzania" + 6313 "Thailand" + 6314 "Togo" + 6315 "Tonga" + 6316 "Trinidad and Tobago" + 6317 "Tunisia" + 6318 "Turkey" + 6319 "Turks and Caicos Islands" + 6320 "Tuvalu" + 6321 "Uganda" + 6322 "Ukraine" + 6323 "United Arab Emirates" + 6324 "United Kingdom" + 6325 "United States" + 6326 "Burkina Faso" + 6327 "Uruguay" + 6328 "Country/region code (184)" + 6329 "Vanuatu" + 6330 "Vatican City" + 6331 "Venezuela" + 6332 "Vietnam" + 6333 "Wallis and Futuna" + 6334 "Samoa" + 6335 "Yemen" + 6336 "Yemen" + 6337 "Country/region code (193)" + 6338 "Congo (DRC)" + 6339 "Zambia" + 6340 "Zimbabwe" + 6501 "Moldova" + 6502 "Estonia" + 6503 "Lithuania" + 6504 "Armenia" + 6505 "Georgia" + 6506 "Azerbaijan" + 6507 "Turkmenistan" + 6508 "Uzbekistan" + 6509 "Kazakhstan" + 6510 "Tajikistan" + 6511 "Kyrgyzstan" + 6512 "Latvia" + 6513 "Russia" + 6600 "Croatia" + 6601 "Slovenia" + 6602 "Macedonia, FYRO" + 6603 "Bosnia and Herzegovina" + 6604 "Yugoslavia" + 20013 "Maskinvare ID" +END diff --git a/reactos/dll/win32/modemui/modemui.rc b/reactos/dll/win32/modemui/modemui.rc index 21b2cf4c6b3..e1e7862a3cd 100644 --- a/reactos/dll/win32/modemui/modemui.rc +++ b/reactos/dll/win32/modemui/modemui.rc @@ -16,6 +16,7 @@ IDI_703 ICON "res/703.ico" #include "lang/de-DE.rc" #include "lang/en-US.rc" #include "lang/es-ES.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/msacm32/msacm.rc b/reactos/dll/win32/msacm32/msacm.rc index 89f06c3f79f..7f1e32bc584 100644 --- a/reactos/dll/win32/msacm32/msacm.rc +++ b/reactos/dll/win32/msacm32/msacm.rc @@ -31,6 +31,7 @@ #include "msacm_It.rc" #include "msacm_Ja.rc" #include "msacm_Nl.rc" +#include "msacm_No.rc" #include "msacm_Pl.rc" #include "msacm_Pt.rc" #include "msacm_Ru.rc" diff --git a/reactos/dll/win32/msacm32/msacm_No.rc b/reactos/dll/win32/msacm32/msacm_No.rc new file mode 100644 index 00000000000..04a81d689d6 --- /dev/null +++ b/reactos/dll/win32/msacm32/msacm_No.rc @@ -0,0 +1,56 @@ +/* + * Norwegian resource file for MS ACM + * + * Copyright 2000 Eric Pouech + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +DLG_ACMFORMATCHOOSE_ID DIALOG DISCARDABLE 10, 20, 225, 100 +STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Lyd utvalg" +FONT 8, "MS Shell Dlg" +BEGIN + + LTEXT "&Navn:", -1, 5, 5, 115, 8, NOT WS_GROUP + + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_CUSTOM, 5, 15, 115, 60, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + + PUSHBUTTON "&Lagre som...", IDD_ACMFORMATCHOOSE_BTN_SETNAME, 125, 14, 45, 14 + PUSHBUTTON "&Fjern", IDD_ACMFORMATCHOOSE_BTN_DELNAME, 175, 14, 45, 14 + + LTEXT "&Format:", -1, 5, 41, 44, 8, NOT WS_GROUP + + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMATTAG, 50, 39, 170, 60, + CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | WS_TABSTOP + + LTEXT "&Attributter:", -1, 5, 59, 44, 8, NOT WS_GROUP + +#if 0 + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | + CBS_OWNERDRAWFIXED | CBS_HASSTRINGS +#else + COMBOBOX IDD_ACMFORMATCHOOSE_CMB_FORMAT, 50, 57, 170, 60, + CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP +#endif + DEFPUSHBUTTON "OK", IDOK, 48, 80, 40, 14 + PUSHBUTTON "Avbryt", IDCANCEL, 92, 80, 40, 14 + PUSHBUTTON "&Hjelp", IDD_ACMFORMATCHOOSE_BTN_HELP, 136, 80, 40, 14 + +END diff --git a/reactos/dll/win32/rasdlg/lang/no-NO.rc b/reactos/dll/win32/rasdlg/lang/no-NO.rc new file mode 100644 index 00000000000..39378672f4a --- /dev/null +++ b/reactos/dll/win32/rasdlg/lang/no-NO.rc @@ -0,0 +1,2373 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +102 DIALOGEX 0, 0, 255, 265 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Alternativ telefonnummer" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Velg alternativ telefonnummer som du vil bruke for denne tilkoblingen.", 1018, 7, 5, 243, 16 + LTEXT "&Telefonnummer:", 1019, 7, 27, 238, 8 + CONTROL "", 1012, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000848D, 7, 38, 217, 144 + PUSHBUTTON "Flytt &opp", 1017, 230, 40, 18, 16, BS_ICON + PUSHBUTTON "Flytt &ned", 1015, 230, 61, 18, 16, BS_ICON + PUSHBUTTON "&Legg til...", 1013, 7, 187, 70, 14 + PUSHBUTTON "&Rediger...", 1016, 81, 187, 70, 14 + PUSHBUTTON "&Slett", 1014, 154, 187, 70, 14 + AUTOCHECKBOX "Hvis &nummeret mislykkes, prv neste nummer", 1011, 8, 210, 243, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Flytt vellykket nummer til toppen av denne listen", 1010, 8, 228, 243, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 122, 245, 60, 14 + PUSHBUTTON "Avbryt", 2, 188, 245, 60, 14 +END + +103 DIALOGEX 6, 18, 250, 170 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Nettverk tilkoblinger" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 1029, 5, 5, 241, 35, NOT WS_GROUP + LTEXT "T&ilkoblinger:", -1, 5, 46, 238, 10 + CONTROL "List1", 1677, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 5, 57, 240, 57 + AUTOCHECKBOX "&Ikke spr meg igjen til neste tiden jeg logger p", 1022, 8, 125, 235, 10 + PUSHBUTTON "&Innstillinger", 1026, 7, 149, 60, 14 + DEFPUSHBUTTON "&Koble til...", 1024, 117, 149, 60, 14 + PUSHBUTTON "Avbryt", 1025, 183, 149, 60, 14 +END + +104 DIALOGEX 6, 18, 269, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Line Bundling Errors" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32516, 1031, 7, 7, 20, 20 + LTEXT "One or more additional lines did not connect. ", 1033, 37, 8, 216, 20 + CONTROL "", 1032, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00008401, 37, 83, 224, 136 + AUTOCHECKBOX "&Do not attempt failed lines in the future", 1030, 38, 226, 222, 10 + DEFPUSHBUTTON "&Accept", 1, 135, 242, 60, 14 + PUSHBUTTON "&Hang Up", 2, 201, 242, 60, 14 + LTEXT "If only a single line connected, the server may not be configured to accept multi-link calls. Check 'Do not attempt failed lines' to avoid unnecessary connection charges in such a case.", -1, 37, 36, 224, 44 +END + +105 DIALOGEX 0, 0, 261, 253 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Avansert sikkerhet innstilling" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Plogging sikkerhet", 1547, 7, 33, 246, 191 + LTEXT "&Data encryption:", 1546, 7, 5, 247, 10 + COMBOBOX 1495, 7, 17, 247, 76, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTORADIOBUTTON "Use &Extensible Authentication Protocol (EAP)", 1544, 17, 47, 226, 8, WS_GROUP + LTEXT "EAP Type", -1, 18, 64, 35, 8, NOT WS_VISIBLE | NOT WS_GROUP + COMBOBOX 1034, 53, 62, 191, 42, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "E&genskaper", 1035, 184, 77, 60, 14 + AUTORADIOBUTTON "Allow these &protocols", 1545, 17, 92, 224, 10 + AUTOCHECKBOX "&Unencrypted password (PAP)", 1491, 28, 105, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "&Shiva Password Authentication Protocol (SPAP)", 1496, 28, 119, 214, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Challenge Handshake Authentication Protocol (CHAP)", 1494, 28, 133, 215, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&MS CHAP (MS-CHAP)", 1493, 28, 148, 212, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Allow older MS-CHAP version for &Win 95 servers", 200, 46, 162, 198, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "M&icrosoft CHAP Version 2 (MS-CHAP v2)", 1492, 28, 176, 200, 10, BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 28, 189, 208, 1 + AUTOCHECKBOX "&For MS-CHAP based protocols, automatically use my ReactOS logon name and password (and domain if any)", 1549, 28, 195, 213, 24, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 127, 232, 60, 14 + PUSHBUTTON "Avbryt", 2, 192, 232, 60, 14 +END + +106 DIALOGEX 6, 18, 255, 109 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Tilkobling fullfrt" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 97, 91, 60, 14 + ICON 563, 1046, 7, 7, 20, 20 + LTEXT "'Connection name' er n tilkoblet.", 1047, 40, 7, 212, 16 + LTEXT "To check the status of this connection or disconnect, right-click its icon in the Network Connections folder, or click its icon on the taskbar (if present).", -1, 40, 30, 212, 34 + AUTOCHECKBOX "&Ikke vis denne meldingen igjen", 1045, 40, 69, 212, 10, BS_TOP | BS_MULTILINE +END + +107 DIALOGEX 0, 0, 258, 167 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Telefonnummer", 1053, 7, 5, 243, 92 + LTEXT "&Area code:", 1055, 18, 17, 54, 8 + COMBOBOX 1049, 17, 30, 55, 129, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Phone number:", 1057, 77, 17, 166, 8, NOT WS_GROUP + EDITTEXT 1051, 77, 30, 163, 14, ES_AUTOHSCROLL + LTEXT "&Country/region code:", 1056, 18, 48, 221, 8, NOT WS_GROUP + COMBOBOX 1054, 17, 61, 224, 93, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "&Use dialing rules", 1048, 20, 81, 219, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Co&mment", 1052, 7, 102, 243, 36 + EDITTEXT 1050, 17, 115, 224, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 127, 147, 60, 14 + PUSHBUTTON "Avbryt", 2, 191, 147, 60, 14 +END + +108 DIALOGEX 6, 18, 222, 104 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre passord" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Your password on the remote network has expired. Enter passwords, then press OK to set a new one.", 1062, 7, 5, 210, 24 + LTEXT "&Ny passord:", 1064, 8, 43, 108, 8 + EDITTEXT 1060, 118, 38, 98, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Bekreft det nye passordet:", 1061, 8, 61, 102, 8 + EDITTEXT 1058, 118, 57, 98, 14, ES_PASSWORD | ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 90, 84, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 154, 84, 60, 14 +END + +109 DIALOGEX 6, 18, 223, 122 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Endre passord" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Your password on the remote network has expired. Enter passwords, then press OK to set a new one.", 1062, 7, 5, 212, 29 + LTEXT "&Old password:", 1063, 7, 42, 108, 8 + EDITTEXT 1059, 116, 38, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Ny passord:", 1064, 7, 60, 108, 8 + EDITTEXT 1060, 116, 56, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Bekreft det nye passordet:", 1061, 7, 78, 108, 8 + EDITTEXT 1058, 116, 74, 100, 14, ES_PASSWORD | ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 92, 101, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 156, 101, 60, 14 +END + +110 DIALOGEX 12, 16, 230, 105 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You have 'Set By Caller' callback privilege on the server. Press OK and the server will call you back at the number below. Press Cancel to skip callback.", 1066, 5, 5, 221, 39, SS_NOPREFIX + LTEXT "&Enter your modem's phone number:", 1067, 5, 46, 222, 8, NOT WS_GROUP + EDITTEXT 1065, 5, 57, 221, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 100, 85, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 164, 85, 60, 14 +END + +111 DIALOGEX 6, 19, 265, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Error Connecting to %1" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, 1068, 7, 7, 20, 20, WS_GROUP + LTEXT "", 1070, 34, 7, 226, 105 + DEFPUSHBUTTON "Do not dial=88", 1, 4, 117, 128, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 136, 117, 60, 14 + PUSHBUTTON "&Mere Info", 1069, 200, 117, 60, 14 +END + +112 DIALOGEX 6, 18, 263, 219 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Automatic Dialing And Hanging Up" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS can automatically dial and hang up devices depending on how much information is being sent and received.", 1085, 9, 7, 253, 30 + GROUPBOX "Automatic dialing", -1, 6, 38, 249, 71 + LTEXT "Dial another line when this connection meets both of the following conditions:", 1083, 16, 51, 237, 16, NOT WS_GROUP + LTEXT "Activity at &least:", -1, 16, 73, 100, 8 + COMBOBOX 1079, 117, 70, 60, 100, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Duration at least:", 1084, 16, 92, 99, 8, NOT WS_GROUP + COMBOBOX 1080, 117, 89, 90, 162, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Automatic hangup", -1, 6, 113, 248, 81 + LTEXT "Hang up any device used for this connection when it meets both of the following conditions:", 1086, 16, 127, 230, 18, NOT WS_GROUP + LTEXT "Activity no &more than:", -1, 16, 150, 92, 8 + COMBOBOX 1081, 115, 146, 60, 100, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "D&uration at least:", 1087, 16, 168, 92, 8, NOT WS_GROUP + COMBOBOX 1082, 115, 166, 90, 151, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 131, 199, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 194, 199, 60, 14 +END + +113 DIALOGEX 21, 46, 225, 65 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +CAPTION "Koble til %1..." +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 1417, 7, 7, 20, 20 + LTEXT "", 1097, 36, 7, 185, 35, SS_NOPREFIX + PUSHBUTTON "Avbryt", 2, 83, 47, 60, 14 +END + +114 DIALOGEX 6, 18, 225, 60 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Dial-Up Nettverk" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 1098, 7, 6, 20, 20, WS_GROUP + LTEXT "The autodial attempt failed. Do you want to disable autodial from this location?", 1099, 40, 6, 181, 34, NOT WS_GROUP + PUSHBUTTON "&Ja", 1, 60, 42, 50, 14 + DEFPUSHBUTTON "&Nei", 2, 115, 42, 50, 14 +END + +115 DIALOGEX 0, 0, 263, 124 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 263, 50 + LTEXT "D&ial:", 1412, 9, 60, 68, 8 + COMBOBOX 1416, 88, 56, 165, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 9, 77, 71, 8 + COMBOBOX 1414, 88, 75, 89, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 181, 75, 72, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 8, 96, 245, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 103, 61, 14 + PUSHBUTTON "Avbryt", 1591, 70, 103, 60, 14 + PUSHBUTTON "Eg&enskaper", 1107, 132, 103, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 194, 103, 60, 14 +END + +116 DIALOGEX 0, 0, 265, 176 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&Brukernavn:", 1413, 8, 60, 88, 8 + EDITTEXT 1104, 103, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "&Passord:", 1112, 8, 79, 88, 8 + EDITTEXT 1103, 103, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 8, 97, 248, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 14, 105, 239, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 26, 120, 226, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 26, 134, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 8, 149, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 156, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 1591, 71, 156, 60, 14 + PUSHBUTTON "Ege&nskaper", 1107, 133, 156, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 195, 156, 60, 14 +END + +117 DIALOGEX 0, 0, 263, 192 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&Brukernavn:", 1413, 9, 61, 92, 8 + EDITTEXT 1104, 102, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "&Passord:", 1112, 9, 80, 92, 8 + EDITTEXT 1103, 102, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Do&mene:", 1110, 9, 99, 91, 8 + EDITTEXT 1102, 102, 95, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 9, 116, 247, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 12, 123, 243, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 25, 137, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 25, 151, 230, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 167, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 173, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 1591, 71, 173, 60, 14 + PUSHBUTTON "Eg&enskaper", 1107, 133, 173, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 195, 173, 60, 14 +END + +118 DIALOGEX 0, 0, 265, 220 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&Brukernavn:", 1413, 10, 61, 92, 8 + EDITTEXT 1104, 104, 57, 154, 14, ES_AUTOHSCROLL + LTEXT "&Passord:", 1112, 10, 80, 92, 8 + EDITTEXT 1103, 104, 76, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Do&mene:", 1110, 10, 100, 92, 8 + EDITTEXT 1102, 104, 95, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 11, 116, 247, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 16, 124, 239, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 29, 139, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 29, 152, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 167, 247, 1 + LTEXT "D&ial:", 1412, 10, 177, 90, 8 + COMBOBOX 1416, 102, 173, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 192, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 10, 199, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 1591, 72, 199, 60, 14 + PUSHBUTTON "Eg&enskaper", 1107, 134, 199, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 196, 199, 60, 14 +END + +119 DIALOGEX 0, 0, 265, 200 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Koble til %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&Brukernavn:", 1413, 10, 62, 91, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "&Passord:", 1112, 10, 81, 92, 8 + EDITTEXT 1103, 104, 77, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 97, 247, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 12, 103, 243, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 24, 117, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 24, 132, 229, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 147, 247, 1 + LTEXT "D&ial:", 1412, 13, 157, 88, 8 + COMBOBOX 1416, 103, 154, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 173, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 10, 180, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 1591, 72, 180, 60, 14 + PUSHBUTTON "Egen&skaper", 1107, 134, 180, 60, 14 + PUSHBUTTON "&Hjelp", 1592, 197, 180, 60, 14 +END + +121 DIALOGEX 6, 18, 230, 131 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ISDN Configuration" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Line type:", 1155, 9, 9, 65, 8 + COMBOBOX 1153, 76, 7, 148, 42, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Negotiate line type", 1150, 23, 26, 199, 10, BS_TOP | BS_MULTILINE | WS_GROUP + GROUPBOX " ", 1152, 8, 48, 214, 51, WS_GROUP + AUTOCHECKBOX "&Use old proprietary protocol", 1149, 17, 48, 102, 10, BS_TOP | BS_MULTILINE + LTEXT "&Channels to use:", 1154, 16, 65, 100, 8, NOT WS_GROUP + EDITTEXT 1151, 119, 61, 94, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "&Enable hardware compression", 1148, 16, 82, 198, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "OK", 1, 99, 109, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 163, 109, 60, 14 +END + +122 DIALOGEX 6, 18, 220, 68 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "ISDN Configure" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Line type:", 1155, 9, 11, 55, 8 + COMBOBOX 1153, 67, 7, 148, 43, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP + AUTOCHECKBOX "&Negotiate line type", 1150, 21, 28, 194, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "OK", 1, 90, 49, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 154, 49, 60, 14 +END + +123 DIALOGEX 11, 20, 350, 275 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT 1161, 5, 5, 338, 236, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + LTEXT "I&P address:", 1163, 7, 253, 68, 8 + CONTROL "", 1160, "RASIPADDRESS", WS_TABSTOP, 76, 250, 117, 14 + DEFPUSHBUTTON "", 1162, 197, 252, 16, 13, NOT WS_VISIBLE | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Fullfrt", 1, 219, 252, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 283, 252, 60, 14 +END + +124 DIALOGEX 6, 17, 350, 266 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + EDITTEXT 1161, 5, 4, 340, 236, ES_MULTILINE | ES_AUTOVSCROLL | WS_VSCROLL | WS_GROUP + DEFPUSHBUTTON "", 1162, 7, 247, 50, 14, NOT WS_VISIBLE | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Fullfrt", 1, 222, 247, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 286, 247, 60, 14 +END + +125 DIALOGEX 12, 16, 261, 190 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Modem Configuration" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 15102, 1238, 7, 7, 20, 20 + LTEXT "Modem", -1, 25, 27, 24, 8, NOT WS_VISIBLE | NOT WS_GROUP + EDITTEXT 1235, 40, 7, 214, 16, ES_AUTOHSCROLL | ES_READONLY | NOT WS_BORDER + LTEXT "&Maximum speed (bps):", 1243, 7, 36, 110, 8 + COMBOBOX 1239, 119, 34, 136, 186, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Modem &protocol", 1244, 7, 52, 111, 8 + COMBOBOX 1245, 119, 50, 136, 186, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Hardware features", 1237, 6, 70, 248, 61, WS_GROUP + AUTOCHECKBOX "E&nable hardware flow control", 1232, 19, 82, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "En&able modem error control", 1231, 19, 98, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Enable m&odem compression", 1229, 19, 115, 217, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Show terminal window", 1234, 8, 136, 246, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Enable mo&dem speaker", 1230, 8, 151, 247, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 129, 171, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 194, 171, 60, 14 +END + +126 DIALOGEX 0, 0, 270, 117 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Select Network Component Type" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Click the type of network component you want to install:", -1, 8, 7, 258, 8 + CONTROL "", 1251, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C04D, 8, 20, 188, 58 + GROUPBOX "", -1, 8, 81, 188, 30 + LTEXT "", 1250, 12, 90, 177, 17 + DEFPUSHBUTTON "&Legg til...", 1252, 205, 20, 60, 14 + PUSHBUTTON "Avbryt", 2, 205, 38, 60, 14 +END + +127 DIALOGEX 16, 20, 260, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "NetWare or Compatible Connections" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, 1278, 7, 7, 21, 20, WS_GROUP + LTEXT "You have connections to a NetWare compatible network. These connections will be closed when the PPP IPX connection is established.", 1279, 42, 7, 215, 37 + LTEXT "Before dialing, to avoid data loss, either close all files using these connections or uncheck IPX on this entry's Network Protocol settings.", 1280, 42, 46, 215, 38, NOT WS_GROUP + AUTOCHECKBOX "&Do not display this message in the future", 1277, 42, 86, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 65, 112, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 134, 112, 60, 14 +END + +128 DIALOGEX 7, 22, 236, 90 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Manual Dial" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Pick up the handset and dial (or ask the operator to dial). After dialing is complete, click OK. Listen to handset until silent, and then hang up.", 1281, 8, 8, 219, 32 + LTEXT "Telefonnummer:", 1282, 8, 46, 91, 8 + LTEXT "", 1283, 103, 46, 126, 8, NOT WS_GROUP + DEFPUSHBUTTON "OK", 1, 104, 70, 60, 14, WS_GROUP + PUSHBUTTON "Avbryt", 2, 168, 70, 60, 14 +END + +129 DIALOGEX 6, 20, 260, 85 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Network Protocol Connection Result" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32516, 1328, 7, 7, 21, 20, WS_GROUP + LTEXT "", 1329, 38, 7, 216, 24, NOT WS_GROUP + AUTOCHECKBOX "&Do not request the failed protocols next time", 1327, 40, 44, 215, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "&Accept", 1, 129, 64, 60, 14 + PUSHBUTTON "&Hang Up", 2, 193, 64, 60, 14 +END + +133 DIALOGEX 6, 18, 231, 211 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "X.25 Logon Settings" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select your X.25 network provider and type the X.121 address of the remote server:", 1408, 7, 4, 220, 27 + LTEXT "&Nettverk:", 1410, 9, 35, 213, 8, NOT WS_GROUP + COMBOBOX 1406, 9, 46, 215, 125, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "X.121&address:", 1407, 9, 66, 213, 8, NOT WS_GROUP + EDITTEXT 1402, 8, 77, 215, 14, ES_AUTOHSCROLL + GROUPBOX "Optional", 1405, 8, 95, 215, 79 + LTEXT "&User data:", 1411, 19, 109, 182, 8, NOT WS_GROUP + EDITTEXT 1404, 19, 120, 193, 14, ES_AUTOHSCROLL + LTEXT "&Facilities:", 1409, 19, 138, 182, 8, NOT WS_GROUP + EDITTEXT 1403, 19, 149, 193, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 100, 189, 60, 14 + PUSHBUTTON "Avbryt", 2, 164, 189, 60, 14 +END + +146 DIALOGEX 6, 18, 230, 210 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Autodial" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "If you are disconnected from a network, autodial attempts to connect to a network whenever you try to access remote information.", -1, 7, 4, 219, 32 + LTEXT "&Enable autodial by location:", 1006, 8, 42, 213, 8 + CONTROL "", 1004, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000C401, 7, 53, 216, 109 + AUTOCHECKBOX "Al&ways ask me before autodialing", 1496, 8, 170, 218, 9, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Disable autodial while I am logged on", 1550, 8, 185, 217, 9, BS_TOP | BS_MULTILINE +END + +147 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Dialing" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "These preferences apply to 'Login using Dial-Up Networking' at Ctrl-Alt-Del login. You, as an administrator, have access to this sheet.", 1007, 7, 4, 221, 40, NOT WS_GROUP + LTEXT "&Number of redial attempts:", 1005, 7, 55, 154, 8 + EDITTEXT 1001, 164, 52, 60, 14, ES_AUTOHSCROLL + LTEXT "&Seconds between redial attempts:", 1009, 7, 73, 156, 8, NOT WS_GROUP + EDITTEXT 1003, 164, 70, 60, 14, ES_AUTOHSCROLL + LTEXT "I&dle seconds before hanging up:", 1008, 7, 91, 154, 8, NOT WS_GROUP + EDITTEXT 1002, 164, 88, 60, 14, ES_AUTOHSCROLL +END + +148 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "When you dial into a server, it may offer to call you back to reduce your phone charges. Specify whether you want callback. (Callback is not supported for virtual private network (VPN) connections.)", 1043, 8, 4, 219, 43 + AUTORADIOBUTTON "&No callback", 1041, 7, 48, 219, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "A&sk me during dialing when the server offers", 1040, 7, 61, 219, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Al&ways call me back at the number(s) below:", 1042, 7, 74, 219, 10, BS_TOP | BS_MULTILINE + CONTROL "", 1037, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00008401, 16, 88, 204, 94 + PUSHBUTTON "&Edit...", 1039, 96, 190, 60, 14 + PUSHBUTTON "&Delete", 1038, 159, 190, 60, 14 +END + +149 DIALOGEX 6, 18, 317, 142 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You need to set the dial-in credentials that remote routers will use when connecting to this interface. A user account will be created on this router with the information that you enter here.", 1094, 8, 5, 307, 35 + LTEXT "&User name:", 1078, 8, 47, 124, 8, NOT WS_GROUP + EDITTEXT 1074, 135, 45, 175, 12, ES_AUTOHSCROLL | WS_DISABLED + LTEXT "&Password:", 1077, 8, 68, 124, 8, NOT WS_GROUP + EDITTEXT 1073, 135, 66, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Confirm password:", 1075, 8, 90, 124, 8, NOT WS_GROUP + EDITTEXT 1071, 135, 87, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL +END + +150 DIALOGEX 6, 18, 321, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You need to set the dial out credentials that this interface will use when connecting to the remote router. These credentials must match the dial in credentials configured on the remote router.", 1094, 8, 5, 308, 33 + LTEXT "&Brukernavn:", 1096, 8, 43, 130, 8, NOT WS_GROUP + EDITTEXT 1091, 140, 40, 175, 12, ES_AUTOHSCROLL + LTEXT "&Domene:", 1093, 8, 63, 130, 8, NOT WS_GROUP + EDITTEXT 1089, 140, 60, 175, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "&Passord:", 1095, 8, 81, 130, 8, NOT WS_GROUP + EDITTEXT 1090, 140, 78, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Bekreft passord:", 1092, 8, 99, 130, 8, NOT WS_GROUP + EDITTEXT 1088, 140, 96, 175, 12, ES_PASSWORD | ES_AUTOHSCROLL +END + +153 DIALOGEX 0, 0, 315, 140 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type a name you want for this connection:", -1, 8, 4, 190, 8 + EDITTEXT 1114, 8, 17, 190, 12, ES_AUTOHSCROLL + LTEXT "Click Finish to save it in the Network Connections folder.", -1, 8, 38, 193, 8 + LTEXT "To edit this connection later, select it, click the File menu, and then click Properties.", -1, 8, 58, 193, 16 +END + +155 DIALOGEX 0, 0, 231, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Connec&t using:", 1124, 7, 5, 219, 8 + CONTROL "", 1128, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00004C0D, 7, 17, 198, 44, WS_EX_CLIENTEDGE + PUSHBUTTON "&Opp", 1132, 210, 18, 16, 14, BS_ICON + PUSHBUTTON "&Ned", 1131, 210, 36, 16, 14, BS_ICON + AUTOCHECKBOX "A&ll devices call the same numbers", 1119, 9, 66, 133, 14, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 144, 66, 60, 14 + GROUPBOX "Sample type", 1125, 8, 84, 215, 100, WS_GROUP + LTEXT "Ar&ea code:", 1133, 17, 102, 52, 8 + COMBOBOX 1122, 17, 112, 52, 110, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Phone number:", 1135, 71, 102, 139, 8 + EDITTEXT 1123, 73, 112, 79, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 154, 112, 60, 14 + LTEXT "Country/re&gion code:", 1134, 17, 132, 197, 8 + COMBOBOX 1126, 17, 143, 193, 130, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "U&se dialing rules", 1121, 17, 163, 132, 14, BS_TOP | BS_MULTILINE + PUSHBUTTON "Dialing &Rules", 1136, 151, 161, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 10, 192, 214, 19, BS_TOP | BS_MULTILINE +END + +156 DIALOGEX 0, 0, 231, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "C&onfigure...", 1130, 164, 38, 60, 14 + GROUPBOX "Sample text", 1125, 8, 55, 217, 100, WS_GROUP + LTEXT "Ar&ea code:", 1133, 17, 72, 48, 8 + COMBOBOX 1122, 17, 83, 48, 119, CBS_DROPDOWN | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "&Phone number:", 1135, 71, 72, 146, 8 + EDITTEXT 1123, 71, 83, 81, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 155, 83, 63, 14 + LTEXT "Country/re&gion code:", 1134, 17, 103, 193, 8 + COMBOBOX 1126, 17, 114, 201, 130, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "U&se dialing rules", 1121, 19, 134, 136, 12, BS_TOP | BS_MULTILINE + PUSHBUTTON "Dialing &Rules", 1136, 157, 132, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 12, 164, 209, 18, BS_TOP | BS_MULTILINE + LTEXT "Connect using:", 1124, 8, 5, 217, 8 + CONTROL "", 1127, "SYSLISTVIEW32", WS_DISABLED | WS_BORDER | 0x0000EC0D, 7, 18, 217, 15 +END + +157 DIALOGEX 6, 18, 235, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Appearance" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Preview phone numbers before dialing", 1142, 8, 10, 224, 10, WS_GROUP + AUTOCHECKBOX "Show &location setting before dialing", 1139, 8, 27, 224, 10 + AUTOCHECKBOX "Allo&w location edits during login", 1140, 21, 43, 212, 10 + AUTOCHECKBOX "Show &connection progress while dialing", 1143, 8, 59, 224, 10 + AUTOCHECKBOX "Clo&se on dial", 1137, 8, 76, 224, 10 + AUTOCHECKBOX "All&ow phonebook edits during login", 1141, 8, 94, 224, 10 + AUTOCHECKBOX "&Use wizard to create new phonebook entries", 1144, 22, 111, 210, 10 +END + +158 DIALOGEX 6, 18, 235, 160 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Appearance" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Preview phone numbers before dialing", 1142, 8, 10, 223, 10, WS_GROUP + AUTOCHECKBOX "Show &location setting before dialing", 1139, 8, 27, 206, 10 + AUTOCHECKBOX "Start dial-up networking &monitor before dialing", 1138, 8, 44, 226, 10 + AUTOCHECKBOX "Show &connection progress while dialing", 1143, 8, 61, 224, 10 + AUTOCHECKBOX "Clo&se on dial", 1137, 8, 79, 220, 10 + AUTOCHECKBOX "&Use wizard to create new phonebook entries", 1144, 8, 97, 220, 10 + AUTOCHECKBOX "Always prompt &before auto-dialing", 1136, 8, 114, 220, 10 +END + +160 DIALOGEX 6, 18, 320, 145 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select a name for this demand dial interface. A common practice is to name interfaces after the network or router to which they connect.", 1158, 7, 5, 309, 29 + LTEXT "&Interface name:", 1159, 17, 41, 285, 8, NOT WS_GROUP + EDITTEXT 1157, 17, 53, 284, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "I &know all about demand-dial interfaces and would rather edit the properties directly", 1156, 24, 100, 258, 31, BS_TOP | BS_MULTILINE | NOT WS_VISIBLE | WS_DISABLED +END + +162 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Sikkerhet" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Security options", 1580, 8, 3, 215, 139 + AUTORADIOBUTTON "&Typical (recommended settings)", 1540, 14, 16, 201, 9, BS_NOTIFY | WS_GROUP + AUTORADIOBUTTON "A&dvanced (custom settings)", 1541, 14, 102, 198, 8, BS_NOTIFY + LTEXT "&Validate my identity as follows:", 1537, 26, 29, 187, 8, NOT WS_GROUP + COMBOBOX 1178, 26, 40, 184, 78, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "A&utomatically use my ReactOS logon name and password (and domain if any)", 1174, 26, 58, 184, 20, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Requ&ire data encryption (disconnect if none)", 1169, 26, 82, 183, 10, BS_TOP | BS_MULTILINE + LTEXT "Using these settings requires a knowledge of security protocols.", 1539, 15, 114, 134, 20 + PUSHBUTTON "&Settings...", 1180, 151, 115, 60, 14 + GROUPBOX "Interactive logon and scripting", 1177, 8, 146, 215, 62, WS_GROUP + AUTOCHECKBOX "S&how terminal window", 1173, 14, 159, 198, 11, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Run script:", 1172, 14, 172, 57, 10, BS_TOP | BS_MULTILINE + COMBOBOX 1179, 72, 171, 140, 104, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Rediger...", 1182, 87, 187, 60, 14 + PUSHBUTTON "&Bla igjennom...", 1181, 151, 187, 60, 14 +END + +163 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You have more than one dial-up device on your computer.", -1, 6, 3, 307, 13 + LTEXT "&Select the devices to use in this connection:", -1, 6, 15, 307, 11 + CONTROL "", 1228, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C415, 7, 28, 304, 77 +END + +165 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Nettverk" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Typ&e of dial-up server I am calling:", 1583, 7, 4, 219, 8 + COMBOBOX 1418, 7, 17, 215, 46, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Innstilling", 1419, 160, 35, 60, 14 + LTEXT "This c&onnection uses the following items:", 1684, 8, 64, 219, 10 + CONTROL "", 1251, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C40D, 7, 75, 216, 53 + PUSHBUTTON "I&nstaller...", 1252, 7, 133, 67, 14 + PUSHBUTTON "&Avinstaller", 1254, 80, 133, 67, 14 + PUSHBUTTON "E&genskaper", 1253, 153, 133, 67, 14 + GROUPBOX "Beskrivelse", 1585, 9, 158, 213, 43 + LTEXT "", 1250, 18, 167, 195, 25 +END + +166 DIALOGEX 6, 18, 320, 145 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the IP address of a DNS or WINS server on the remote network, or leave as 0.0.0.0 if you expect the remote router to provide them, or do not know.", 1275, 7, 2, 311, 25 + LTEXT "&DNS server:", 1274, 7, 29, 160, 8, NOT WS_GROUP + CONTROL "", 1272, "RASIPADDRESS", WS_TABSTOP, 21, 41, 85, 12 + LTEXT "&WINS server:", 1276, 7, 65, 166, 8, NOT WS_GROUP + CONTROL "", 1273, "RASIPADDRESS", WS_TABSTOP, 21, 77, 85, 12 +END + +167 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing options", 1289, 7, 2, 213, 64 + AUTOCHECKBOX "&Display progress while connecting", 1284, 16, 14, 201, 10 + AUTOCHECKBOX "&Prompt for name and password, certificate, etc.", 1554, 16, 27, 201, 10 + AUTOCHECKBOX "Include &ReactOS logon domain", 1555, 16, 39, 201, 10 + AUTOCHECKBOX "Prompt for phone &number", 1285, 16, 52, 200, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Redialing options", 1290, 6, 72, 213, 79 + LTEXT "&Redial attempts:", 1300, 16, 87, 123, 8 + EDITTEXT 1287, 141, 84, 69, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "&Time between redial attempts:", 1301, 16, 103, 123, 8 + COMBOBOX 1292, 141, 101, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 16, 120, 123, 8 + COMBOBOX 1291, 141, 116, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Redial if &line is dropped", 1286, 16, 136, 199, 10, BS_TOP | BS_MULTILINE + GROUPBOX "Multiple devices", 1288, 7, 156, 213, 32 + COMBOBOX 1551, 16, 169, 128, 45, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "C&onfigure...", 1293, 150, 168, 60, 14 + PUSHBUTTON "&X.25", 1295, 7, 194, 50, 14 + PUSHBUTTON "&Virtual \"tunnel\" connection", 1294, 62, 194, 120, 14, NOT WS_VISIBLE | WS_DISABLED +END + +168 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the phone number below. ", -1, 7, 4, 306, 14 + LTEXT "&Phone number:", 1308, 7, 19, 130, 8 + EDITTEXT 1304, 7, 30, 304, 14, ES_AUTOHSCROLL + LTEXT "You might need to include a \"1\" or the area code, or both. If you are not sure you need the extra numbers, dial the phone number on your telephone. If you hear a modem sound, the number dialed is correct.", -1, 20, 50, 291, 53 +END + +169 DIALOGEX 6, 18, 235, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Phonebook" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Use this phonebook:", 1326, 8, 8, 222, 8 + AUTORADIOBUTTON "The &system phonebook", 1325, 14, 22, 216, 10, WS_GROUP + AUTORADIOBUTTON "My &personal phonebook", 1324, 14, 34, 216, 10 + AUTORADIOBUTTON "This a<ernate phonebook:", 1323, 14, 46, 217, 10 + COMBOBOX 1321, 26, 61, 201, 77, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Browse...", 1322, 167, 81, 60, 14 +END + +170 DIALOGEX 6, 18, 235, 135 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Phonebook" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Use this phonebook:", 1326, 8, 8, 223, 8 + AUTORADIOBUTTON "The &system phonebook", 1325, 14, 22, 217, 10, WS_GROUP + AUTORADIOBUTTON "This a<ernate phonebook:", 1323, 14, 36, 216, 10 + COMBOBOX 1321, 26, 51, 203, 77, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | WS_GROUP | NOT WS_TABSTOP + PUSHBUTTON "&Browse...", 1322, 169, 69, 60, 14 +END + +171 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter this router's IP address on the remote network or if you expect the remote router to provide the address, leave as 0.0.0.0. Usually the operator of the remote network or router will tell you what to use.", 1331, 5, 4, 308, 35 + LTEXT "My &IP address:", 1332, 4, 51, 100, 8, NOT WS_GROUP + CONTROL "", 1330, "RASIPADDRESS", WS_TABSTOP, 21, 62, 104, 12 + LTEXT "Note: If you have a network adapter installed, you should NOT choose the same address as your network adapter.", 1333, 5, 94, 306, 36, NOT WS_GROUP +END + +172 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Some dial-up servers and routers require an interactive login after connecting. You can run a script automatically to respond for you.", 1339, 5, 3, 309, 27 + AUTOCHECKBOX "Show &terminal window", 1462, 15, 31, 162, 10 + AUTOCHECKBOX "&Run script:", 1463, 15, 45, 58, 10 + COMBOBOX 1334, 30, 60, 275, 88, CBS_DROPDOWN | CBS_AUTOHSCROLL | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "&Rediger...", 1335, 180, 77, 60, 14 + PUSHBUTTON "&Bla gjennom...", 1465, 244, 77, 60, 14 +END + +173 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Dialing" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing policy", 1344, 9, 4, 213, 53, WS_GROUP + LTEXT "&Number of redial attempts:", 1349, 16, 22, 140, 8, NOT WS_GROUP + EDITTEXT 1340, 158, 19, 56, 14, ES_AUTOHSCROLL + LTEXT "&Seconds between redial attempts:", 1351, 16, 38, 140, 8, NOT WS_GROUP + EDITTEXT 1342, 158, 36, 56, 14, ES_AUTOHSCROLL + GROUPBOX "Connection type", 1343, 9, 63, 213, 56, WS_GROUP + LTEXT "Idl&e seconds before hanging up:", 1350, 28, 88, 124, 8, NOT WS_GROUP + AUTORADIOBUTTON "&Demand dial connection", 1347, 16, 78, 135, 10, WS_GROUP + AUTORADIOBUTTON "&Persistent connection", 1348, 16, 103, 199, 10, NOT WS_TABSTOP, WS_EX_TRANSPARENT + EDITTEXT 1341, 159, 85, 56, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Callback...", 1345, 150, 125, 70, 14, WS_GROUP + PUSHBUTTON "&Multiple Lines...", 1346, 74, 125, 70, 14 +END + +174 DIALOGEX 0, 0, 215, 226 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Router" +FONT 8, "MS Shell Dlg" +BEGIN + CTEXT "NYI...need spec from KCrocker", -1, 57, 86, 106, 28 +END + +175 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Completing the demand dial interface wizard.", 1352, 122, 5, 192, 32 + LTEXT "To create this interface and enable it on the router, click Finish.", 1354, 122, 41, 192, 26, NOT WS_GROUP + LTEXT "To edit this interface in the Routing and RemoteAccess Manager, select it in Routing Interfaces and press Properties.", 1355, 122, 68, 190, 39, NOT WS_GROUP +END + +179 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the &modem or adapter this interface will use.", 1356, 7, 4, 306, 11 + CONTROL "", 1355, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000C415, 6, 15, 305, 80 + LTEXT "The list shows devices set up for routing.", 1357, 15, 98, 288, 37, NOT WS_GROUP +END + +180 DIALOGEX 6, 18, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the phone number of the dial-up server or router you are calling. Alternate phone numbers, if any, are dialed automatically if the primary number cannot be reached.", 1360, 7, 4, 305, 42 + LTEXT "&Phone number or address:", 1361, 7, 50, 275, 8, NOT WS_GROUP + EDITTEXT 1358, 7, 62, 304, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alternates...", 1359, 250, 80, 60, 14 +END + +181 DIALOGEX 6, 18, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_VISIBLE | WS_CAPTION +CAPTION "Security" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Authentication and encryption policy", 1367, 6, 8, 216, 103, WS_GROUP + AUTORADIOBUTTON "A&ccept any authentication including clear text", 1370, 16, 20, 195, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Acc&ept only encrypted authentication", 1373, 16, 36, 195, 10, BS_TOP | BS_MULTILINE + AUTORADIOBUTTON "Accept &only MS encrypted authentication", 1374, 16, 52, 195, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Require data encryption", 1363, 27, 65, 184, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "Require &strong data encryption", 1364, 41, 80, 172, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Use t&wo-way authentication", 1362, 17, 95, 194, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "&Unsave Password", 1369, 59, 117, 80, 14, WS_GROUP + PUSHBUTTON "A&vansert...", 1368, 142, 117, 80, 14, NOT WS_VISIBLE | WS_DISABLED + AUTOCHECKBOX "&Detect file and print sharing before dialing", 1365, 7, 198, 218, 10, BS_TOP | BS_MULTILINE | NOT WS_VISIBLE | WS_DISABLED +END + +182 DIALOGEX 6, 18, 248, 148 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Sikkerhet" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Authentication and encryption policy", 1367, 7, 8, 200, 98, WS_GROUP + AUTORADIOBUTTON "Accept any authentication including &clear text", 1370, 14, 24, 183, 10 + AUTORADIOBUTTON "Accept only &encrypted authentication", 1373, 14, 39, 183, 10 + AUTORADIOBUTTON "Accept only &MS encrypted authentication", 1374, 14, 53, 184, 10 + AUTOCHECKBOX "Require &data encryption", 1363, 33, 67, 165, 10, WS_GROUP + AUTOCHECKBOX "Require &strong data encryption", 1364, 48, 79, 152, 10 + AUTOCHECKBOX "&Use current username and password ", 1366, 31, 91, 165, 10 + PUSHBUTTON "Unsave &password", 1369, 6, 114, 100, 14, WS_GROUP + PUSHBUTTON "&Advanced...", 1368, 109, 114, 60, 14, NOT WS_VISIBLE | WS_DISABLED + AUTOCHECKBOX "Detect &file and print sharing before dialing", 1365, 14, 134, 193, 10, NOT WS_VISIBLE | WS_DISABLED +END + +183 DIALOGEX 6, 18, 317, 144 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Check all that apply:", 1388, 7, 4, 296, 9 + AUTOCHECKBOX "Route &IP packets on this interface.", 1386, 20, 19, 285, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Route IP&X packets on this interface.", 1387, 20, 35, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Add a user account so a remote router can dial in.", 1382, 20, 52, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Send a &plain-text password if that is the only way to connect.", 1385, 20, 70, 287, 11, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Use scripting to complete the connection with the remote router.", 1384, 20, 87, 289, 22, BS_LEFT | BS_TOP | BS_MULTILINE +END + +184 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED +FONT 8, "MS Shell Dlg" +BEGIN +END + +186 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "A connection that is created for your use only is saved in your user account and is not available unless you are logged on.", -1, 7, 4, 306, 23 + LTEXT "Create this connection for:", -1, 14, 27, 288, 12 + AUTORADIOBUTTON "&Anyone's use", 1400, 26, 40, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&My use only", 1401, 26, 55, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +498 DIALOGEX 12, 16, 215, 126 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was unable to connect to the network using the user name and password you provided. Please re-enter the user name and password.", 1396, 7, 6, 206, 36 + LTEXT "&User name:", 1399, 8, 51, 49, 8 + EDITTEXT 1394, 66, 46, 143, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1397, 8, 70, 49, 8, NOT WS_GROUP + EDITTEXT 1393, 66, 64, 143, 14, ES_PASSWORD | ES_AUTOHSCROLL + AUTOCHECKBOX "&Save password", 1391, 66, 84, 143, 10 + CONTROL "", 1398, "STATIC", SS_ETCHEDHORZ | WS_GROUP, 7, 98, 200, 1 + DEFPUSHBUTTON "OK", 1, 81, 104, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 145, 104, 60, 14 +END + +500 DIALOGEX 12, 16, 215, 173 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS was unable to connect to the network using the user name and password you provided. Please re-enter the user name and password.", 1396, 7, 6, 209, 26 + LTEXT "&User name:", 1399, 7, 72, 44, 8 + EDITTEXT 1394, 97, 69, 115, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1397, 7, 90, 45, 8, NOT WS_GROUP + EDITTEXT 1393, 97, 87, 115, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Domain:", 1395, 7, 108, 53, 8, NOT WS_GROUP + EDITTEXT 1392, 97, 105, 115, 14, ES_UPPERCASE | ES_AUTOHSCROLL + AUTOCHECKBOX "&Save user name and password", 1391, 85, 125, 123, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 87, 146, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 151, 146, 60, 14 + CONTROL "", 1398, "STATIC", SS_ETCHEDHORZ | WS_GROUP, 7, 140, 205, 1 + LTEXT "You can enter a domain name or leave the domain field empty.\n(Domain names are not required for connections to the Internet)", -1, 8, 38, 209, 26 +END + +502 DIALOGEX 20, 60, 215, 73 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "PPP Settings" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "&Enable LCP extensions", 1423, 9, 7, 200, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "E&nable software compression", 1424, 9, 22, 201, 10, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Negotiate &multi-link for single link connections", 1557, 9, 37, 202, 10, BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 82, 53, 60, 14 + PUSHBUTTON "Cancel", 2, 148, 53, 60, 14 +END + +509 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Choose the role you want for this computer:", -1, 10, 5, 275, 9 + AUTORADIOBUTTON "&Host", 1483, 31, 20, 265, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Guest", 1484, 31, 44, 265, 10, BS_TOP | BS_MULTILINE + LTEXT "This computer has the information you want to access.", -1, 45, 31, 253, 13, NOT WS_GROUP | WS_TABSTOP + LTEXT "This computer is used to access information on the host computer.", -1, 43, 56, 253, 23, NOT WS_GROUP +END + +511 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a device:", -1, 8, 5, 261, 8 + COMBOBOX 1485, 9, 18, 302, 62, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +528 DIALOGEX 0, 0, 227, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Connections" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Logon privileges", 1582, 8, 10, 213, 63 + LTEXT "Non-administrators may be allowed to create or modify connections before logging on.", 1581, 16, 21, 194, 30 + AUTOCHECKBOX "Allo&w creating and modifying connections before logon", 1497, 16, 56, 195, 10, BS_TOP | BS_MULTILINE +END + +532 DIALOGEX 0, 0, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Router Callback" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "When you dial into a router, it may offer to call you back to reduce your phone charges or to increase security. Specify whether you want callback or not.", 1043, 7, 5, 253, 24 + AUTORADIOBUTTON "&No callback", 1501, 9, 36, 252, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Al&ways call me back at the number(s) below:", 1502, 9, 48, 252, 10, BS_TOP | BS_MULTILINE, WS_EX_TRANSPARENT + CONTROL "", 1503, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00008401, 15, 63, 240, 143 + PUSHBUTTON "&Edit...", 1504, 131, 213, 60, 14 + PUSHBUTTON "&Delete", 1505, 194, 213, 60, 14 + CONTROL "", -1, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + DEFPUSHBUTTON "OK", 1, 132, 242, 60, 14 + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +534 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Connection type", 1289, 7, 7, 215, 55 + AUTORADIOBUTTON "&Demand dial", 1506, 16, 20, 199, 9, BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 27, 33, 99, 8, NOT WS_GROUP + COMBOBOX 1291, 144, 30, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTORADIOBUTTON "&Persistent connection", 1507, 16, 47, 197, 9, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + GROUPBOX "Dialing policy", 1290, 7, 66, 215, 48 + LTEXT "&Redial attempts:", 1300, 14, 79, 123, 8 + EDITTEXT 1287, 143, 76, 70, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "A&verage redial intervals:", 1301, 14, 96, 123, 8 + COMBOBOX 1292, 143, 94, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + GROUPBOX "Multiple devices", 1288, 7, 116, 215, 35 + COMBOBOX 1551, 16, 130, 128, 41, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "C&onfigure...", 1293, 150, 129, 65, 14 + PUSHBUTTON "Call&back", 1302, 8, 195, 60, 14 + PUSHBUTTON "&X.25", 1295, 73, 195, 50, 14 +END + +539 DIALOGEX 0, 0, 265, 110 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 14, 64, 84, 8 + EDITTEXT 1104, 102, 62, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 82, 247, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 89, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 89, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 133, 89, 60, 14 + PUSHBUTTON "&Help", 1592, 195, 89, 60, 14 +END + +540 DIALOGEX 0, 0, 265, 133 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 64, 90, 8 + EDITTEXT 1104, 105, 60, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 80, 252, 1 + LTEXT "D&ial:", 1412, 10, 91, 92, 10 + COMBOBOX 1416, 105, 88, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 107, 251, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 113, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 113, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 113, 60, 14 + PUSHBUTTON "&Help", 1592, 197, 113, 60, 14 +END + +541 DIALOGEX 0, 0, 265, 157 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 12, 67, 87, 8 + EDITTEXT 1104, 103, 63, 154, 14, ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 9, 84, 248, 1 + LTEXT "D&ial:", 1412, 11, 96, 48, 8 + COMBOBOX 1416, 103, 92, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 10, 114, 46, 8 + COMBOBOX 1414, 102, 110, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 110, 64, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 7, 130, 250, 1 + DEFPUSHBUTTON "&Dial", 1590, 6, 136, 60, 14 + PUSHBUTTON "Cancel", 1591, 69, 136, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 132, 136, 60, 14 + PUSHBUTTON "&Help", 1592, 196, 136, 60, 14 +END + +544 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Internet Connection Sharing allows other computers on your local network to access external resources through this connection.", -1, 10, 5, 300, 22 + AUTOCHECKBOX "&Enable Internet Connection Sharing for this connection", 1512, 21, 31, 272, 10 + LTEXT "To dial this connection automatically when a computer on your local network attempts to access external resources, select the following check box.", 1514, 10, 56, 294, 22 + AUTOCHECKBOX "Enab&le on-demand dialing", 1513, 21, 86, 260, 10 +END + +545 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Shared access allows other computers on your local network to access external resources through this dial-up connection. You can enable shared access for one connection and one local network at a time.", -1, 10, 5, 300, 25 + LTEXT "&Select the local network that will access resources through this connection:", -1, 21, 35, 285, 8 + COMBOBOX 1522, 21, 48, 231, 56, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +546 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "You can configure this connection to use your smart card to log you into the remote network. Select whether to use your smart card with this connection.", -1, 10, 5, 303, 22 + AUTORADIOBUTTON "&Use my smart card ", 1524, 26, 29, 264, 12, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Do not use my smart card ", 1525, 26, 44, 261, 16, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +547 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "Demand Dial Interface Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Welcome to the Demand Dial Interface Wizard.", 1530, 122, 8, 192, 32 + LTEXT "Using this wizard you can create a demand dial interface to connect this router to other routers.", 1531, 122, 43, 192, 37 + LTEXT "Press Next to continue.", 1532, 122, 85, 191, 29 +END + +548 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "Connect using a &modem, ISDN adapter, or other physical device.", 1531, 21, 17, 290, 15, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "Connect using &virtual private networking (VPN)", 1532, 21, 38, 291, 15, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "Connect using PPP over Ethernet (PPPoE)", 1688, 21, 58, 290, 12, NOT WS_TABSTOP +END + +550 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Enter the name or IP address of the router to which you are connecting.", 1535, 10, 8, 289, 18 + LTEXT "&Host name or IP address (such as reactos.org or 145.52.0.1):", 1537, 21, 35, 285, 8 + EDITTEXT 1536, 21, 47, 285, 14, ES_AUTOHSCROLL +END + +551 DIALOGEX 0, 0, 265, 127 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 12, 62, 89, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 12, 82, 90, 8 + EDITTEXT 1102, 104, 79, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 99, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 106, 61, 14 + PUSHBUTTON "Cancel", 1591, 72, 106, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 106, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 106, 60, 14 +END + +552 DIALOGEX 0, 0, 265, 159 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 67, 91, 10 + EDITTEXT 1104, 104, 64, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 11, 86, 91, 8 + EDITTEXT 1102, 104, 83, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 103, 248, 1 + LTEXT "D&ial:", 1412, 10, 115, 91, 8 + COMBOBOX 1416, 104, 111, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 132, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 139, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 139, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 139, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 139, 60, 14 +END + +553 DIALOGEX 0, 0, 265, 183 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 68, 92, 10 + EDITTEXT 1104, 104, 65, 154, 14, ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 10, 90, 91, 8 + EDITTEXT 1102, 104, 86, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 106, 248, 1 + LTEXT "D&ial:", 1412, 10, 118, 92, 8 + COMBOBOX 1416, 104, 114, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 10, 137, 91, 8 + COMBOBOX 1414, 104, 134, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 194, 134, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 154, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 162, 60, 14 + PUSHBUTTON "Cancel", 1591, 71, 162, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 162, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 162, 60, 14 +END + +554 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Connec&t using:", 1124, 7, 4, 193, 8 + CONTROL "", 1128, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x00004C0D, 7, 17, 195, 44, WS_EX_CLIENTEDGE + PUSHBUTTON "&Up", 1132, 208, 18, 16, 14, BS_ICON + PUSHBUTTON "&Down", 1131, 208, 36, 16, 14, BS_ICON + AUTOCHECKBOX "A&ll devices call the same numbers", 1119, 7, 65, 131, 21, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 140, 66, 60, 14 + GROUPBOX "Sample type", 1125, 7, 87, 213, 56, WS_GROUP + LTEXT "&Phone number:", 1135, 19, 102, 191, 8 + EDITTEXT 1123, 17, 112, 138, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 161, 112, 50, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 194, 212, 20, BS_TOP | BS_MULTILINE +END + +555 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + PUSHBUTTON "C&onfigure...", 1130, 160, 38, 60, 14 + LTEXT "&Phone number:", 1135, 8, 72, 194, 8 + EDITTEXT 1123, 8, 83, 148, 14, ES_AUTOHSCROLL + PUSHBUTTON "Alter&nates", 1129, 160, 83, 60, 14 + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 194, 213, 10, BS_TOP | BS_MULTILINE + LTEXT "Connec&t using:", 1124, 8, 5, 214, 8 + CONTROL "", 1127, "SYSLISTVIEW32", WS_DISABLED | WS_BORDER | 0x0000EC0D, 7, 18, 214, 15 +END + +556 DIALOGEX 0, 0, 220, 165 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Program Settings" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Description of program running on your network:", -1, 7, 5, 203, 8 + EDITTEXT 1565, 7, 17, 206, 14, ES_AUTOHSCROLL + LTEXT "&Internet server port number:", -1, 7, 35, 202, 8 + EDITTEXT 1566, 7, 47, 113, 14, ES_AUTOHSCROLL | ES_NUMBER + AUTORADIOBUTTON "&TCP", 1548, 128, 49, 30, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&UDP", 1567, 166, 49, 31, 10, NOT WS_TABSTOP + LTEXT "&Listen for Internet server responses on port or port range:\n(for example: 1024-1209, 1300-1310, 1450)", -1, 7, 70, 207, 22 + LTEXT "T&CP:", -1, 7, 100, 28, 8 + EDITTEXT 1569, 50, 97, 162, 14, ES_AUTOHSCROLL + LTEXT "UD&P:", -1, 7, 121, 30, 8 + EDITTEXT 1551, 51, 117, 162, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 90, 144, 60, 14 + PUSHBUTTON "Cancel", 2, 154, 144, 60, 14 +END + +557 DIALOGEX 0, 0, 217, 164 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Service Settings" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Description of service:", -1, 7, 5, 203, 8 + EDITTEXT 1552, 7, 18, 205, 14, ES_AUTOHSCROLL + LTEXT "&Name or IP address (for example 192.168.0.12) of the computer hosting this service on your network:", -1, 7, 37, 208, 16 + EDITTEXT 1556, 7, 57, 203, 14, ES_AUTOHSCROLL + LTEXT "&Port number where this service resides:", -1, 7, 85, 203, 8 + EDITTEXT 1553, 7, 97, 113, 14, ES_AUTOHSCROLL | ES_NUMBER + AUTORADIOBUTTON "&TCP", 1554, 128, 99, 30, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&UDP", 1555, 166, 99, 31, 10, NOT WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 86, 143, 60, 14 + PUSHBUTTON "Cancel", 2, 150, 143, 60, 14 +END + +558 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Programs" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "The Internet connection on this computer has been customized to allow the following programs to run properly over your network:", -1, 7, 7, 218, 28 + CONTROL "List1", 1558, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000441D, 7, 37, 215, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "A&dd...", 1538, 7, 197, 67, 14 + PUSHBUTTON "Edi&t...", 1559, 80, 197, 67, 14 + PUSHBUTTON "D&elete", 1568, 153, 197, 67, 14 +END + +559 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Services" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select the services running on your network that Internet users can access.", -1, 7, 5, 216, 22 + LTEXT "Services:", -1, 7, 27, 143, 8 + CONTROL "List1", 1560, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000441D, 7, 37, 215, 155, WS_EX_CLIENTEDGE + PUSHBUTTON "A&dd...", 1561, 7, 197, 67, 14 + PUSHBUTTON "Edi&t...", 1563, 80, 197, 67, 14 + PUSHBUTTON "D&elete", 1562, 153, 197, 67, 14 +END + +560 DIALOGEX 6, 18, 240, 88 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Initial Connection" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Yes", 6, 68, 68, 50, 14 + PUSHBUTTON "&No", 7, 125, 68, 50, 14 + ICON 32516, 1575, 7, 7, 20, 20 + LTEXT "", 1576, 40, 7, 190, 33 + AUTOCHECKBOX "&Don't display this reminder again", 1579, 40, 48, 192, 11, BS_TOP | BS_MULTILINE +END + +567 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the name of your service in the following text box. If you leave the text box blank, ReactOS will automatically detect and configure your service when you connect.", -1, 10, 7, 301, 25 + LTEXT "&Service name (optional):", -1, 22, 32, 229, 8 + EDITTEXT 1593, 22, 44, 275, 14, ES_AUTOHSCROLL +END + +568 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Service name:", 1686, 7, 5, 217, 10 + EDITTEXT 1594, 7, 17, 217, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 9, 196, 215, 8 +END + +569 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Security" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Security options", 1580, 8, 4, 213, 151 + AUTORADIOBUTTON "&Typical (recommended settings)", 1540, 14, 16, 197, 9, BS_NOTIFY | WS_GROUP + AUTORADIOBUTTON "A&dvanced (custom settings)", 1541, 14, 100, 197, 8, BS_NOTIFY + LTEXT "&Validate my identity as follows:", 1537, 26, 29, 183, 8, NOT WS_GROUP + COMBOBOX 1178, 26, 40, 184, 78, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "A&utomatically use my ReactOS logon name and password (and domain if any)", 1174, 26, 59, 182, 20, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Requ&ire data encryption (disconnect if none)", 1169, 26, 83, 182, 10, BS_TOP | BS_MULTILINE + LTEXT "Using these settings requires a knowledge of security protocols.", 1539, 26, 111, 136, 20 + PUSHBUTTON "&Settings...", 1180, 151, 134, 60, 14 + PUSHBUTTON "I&PSec Settings...", 1598, 126, 163, 85, 14 +END + +570 DIALOGEX 0, 0, 265, 126 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "IPSec Settings" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "OK", 1, 151, 104, 50, 14 + PUSHBUTTON "Cancel", 2, 207, 104, 50, 14 + AUTOCHECKBOX "&Use pre-shared key for authentication", 1604, 21, 15, 217, 10 + LTEXT "&Key:", 1602, 20, 31, 44, 12 + EDITTEXT 1605, 66, 30, 172, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "Allow certificiates from my user store in addition to machine certificates", 1606, 20, 50, 242, 13, WS_DISABLED + AUTOCHECKBOX "Use a specific certificate", 1607, 20, 67, 239, 10, WS_DISABLED + PUSHBUTTON "Select", 1608, 31, 84, 50, 14, WS_DISABLED + COMBOBOX 1610, 91, 84, 135, 30, CBS_DROPDOWN | CBS_SORT | WS_DISABLED | WS_VSCROLL | NOT WS_TABSTOP +END + +571 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Security Logging" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Logging Options:", -1, 6, 8, 216, 47 + AUTOCHECKBOX "Log unsuccessful &inbound connection attempts", 1642, 14, 22, 201, 10 + AUTOCHECKBOX "Log successful &outbound connections", 1641, 14, 37, 200, 10 + GROUPBOX "Log file options:", -1, 7, 64, 215, 91 + LTEXT "&Name:", -1, 14, 78, 199, 8 + EDITTEXT 1674, 14, 90, 199, 14, ES_READONLY + PUSHBUTTON "&Browse...", 1639, 153, 108, 60, 14 + LTEXT "&Size limit:", -1, 14, 133, 67, 8 + EDITTEXT 1640, 86, 130, 50, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "KB", -1, 140, 133, 20, 8 + PUSHBUTTON "&Restore Defaults", 1643, 135, 197, 85, 14 +END + +572 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ICMP" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Internet Control Message Protocol (ICMP) allows the computers on a network to share error and status information. Select the requests for information from the Internet that this computer will respond to:", -1, 7, 5, 215, 37 + CONTROL "IList1", 1644, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 7, 45, 215, 100, WS_EX_CLIENTEDGE + GROUPBOX "Description:", -1, 7, 153, 215, 55 + LTEXT "", 1645, 14, 171, 199, 32 +END + +574 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Advanced" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 575, 7, 60, 213, 100 +END + +577 DIALOGEX 0, 0, 312, 144 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the name of the ISP in the following text box.", 1681, 10, 3, 296, 11 + LTEXT "N&ame:", 1690, 18, 20, 127, 10 + EDITTEXT 1680, 17, 32, 222, 14, ES_AUTOHSCROLL + LTEXT "The name you type here will be the name of the connection you are creating.", 1683, 17, 52, 282, 42 +END + +580 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_CHILD | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "&Automatic selection", 1534, 21, 20, 288, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Point to Point Tunneling Protocol (PPTP)", 1532, 21, 39, 290, 11, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&Layer 2 Tunneling Protocol (L2TP)", 1533, 21, 56, 286, 11, BS_LEFT | BS_TOP | BS_MULTILINE | NOT WS_TABSTOP +END + +1420 DIALOGEX 0, 0, 265, 108 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "D&ial:", 1412, 14, 63, 86, 8 + COMBOBOX 1416, 104, 60, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 80, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 87, 60, 14 + PUSHBUTTON "Cancel", 1591, 72, 87, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 87, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 87, 60, 14 +END + +1421 DIALOGEX 0, 0, 265, 223 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 61, 90, 8 + EDITTEXT 1104, 104, 58, 154, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1112, 11, 81, 90, 8 + EDITTEXT 1103, 104, 77, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 98, 248, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 14, 105, 242, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 26, 119, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 26, 133, 225, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 149, 248, 1 + LTEXT "D&ial:", 1412, 14, 161, 87, 8 + COMBOBOX 1416, 104, 157, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 14, 178, 88, 8 + COMBOBOX 1414, 104, 175, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 175, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 196, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 9, 202, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 1591, 72, 202, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 135, 202, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 202, 60, 14 +END + +1422 DIALOGEX 0, 0, 265, 242 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Connect %1" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 1678, 1100, "STATIC", SS_BITMAP, 0, 0, 265, 50 + LTEXT "&User name:", 1413, 10, 67, 91, 8 + EDITTEXT 1104, 104, 63, 154, 14, ES_AUTOHSCROLL + LTEXT "&Password:", 1112, 10, 85, 92, 8 + EDITTEXT 1103, 104, 82, 154, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "Do&main:", 1110, 10, 104, 92, 8 + EDITTEXT 1102, 104, 101, 154, 14, ES_UPPERCASE | ES_AUTOHSCROLL + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN, 10, 121, 248, 1 + AUTOCHECKBOX "&Save this user name and password for the following users:", 1101, 12, 127, 242, 13, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Me o&nly", 1622, 24, 141, 227, 11, BS_LEFT | BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Anyone who uses this computer", 1623, 24, 155, 230, 11, BS_LEFT | BS_TOP | BS_MULTILINE + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 170, 248, 1 + LTEXT "D&ial:", 1412, 14, 182, 87, 8 + COMBOBOX 1416, 104, 178, 154, 112, CBS_DROPDOWN | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Dialing &from:", 1415, 14, 198, 87, 8 + COMBOBOX 1414, 104, 195, 87, 112, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + PUSHBUTTON "Dialing &Rules", 1108, 193, 195, 65, 14 + CONTROL "", -1, "STATIC", SS_LEFTNOWORDWRAP | SS_SUNKEN | WS_GROUP, 10, 215, 248, 1 + DEFPUSHBUTTON "&Dial", 1590, 8, 221, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 1591, 71, 221, 60, 14 + PUSHBUTTON "Pr&operties", 1107, 134, 221, 60, 14 + PUSHBUTTON "&Help", 1592, 198, 221, 60, 14 +END + +1425 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Host name or IP address of destination (such as reactos.org or 145.52.0.1):", 1430, 7, 5, 217, 18 + EDITTEXT 1427, 7, 25, 215, 14, ES_AUTOHSCROLL + GROUPBOX "First connect", 1431, 9, 48, 213, 78 + LTEXT "ReactOS can first connect the public network, such as the Internet, before trying to establish this virtual connection.", 1432, 17, 63, 199, 24 + AUTOCHECKBOX "&Dial another connection first:", 1428, 19, 89, 183, 10 + COMBOBOX 1429, 29, 103, 182, 87, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 10, 192, 213, 13 +END + +1426 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +CAPTION "Options" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Dialing options", 1289, 8, 7, 214, 56 + AUTOCHECKBOX "&Display progress while connecting", 1284, 16, 17, 199, 10 + AUTOCHECKBOX "&Prompt for name and password, certificate, etc.", 1554, 16, 32, 199, 10 + AUTOCHECKBOX "Include &ReactOS logon domain", 1555, 16, 47, 178, 10 + GROUPBOX "Redialing options", 1290, 8, 68, 214, 89 + LTEXT "&Redial attempts:", 1300, 16, 81, 121, 8 + EDITTEXT 1287, 140, 77, 70, 14, ES_AUTOHSCROLL | ES_NUMBER + LTEXT "&Time between redial attempts:", 1301, 16, 99, 121, 8 + COMBOBOX 1292, 141, 95, 70, 123, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Idle ti&me before hanging up:", 1299, 16, 117, 121, 8 + COMBOBOX 1291, 141, 113, 70, 108, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Redial if &line is dropped", 1286, 16, 138, 199, 10, BS_TOP | BS_MULTILINE +END + +1427 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type the host name or Internet Protocol (IP) address of the computer to which you are connecting.", -1, 10, 6, 275, 16 + LTEXT "&Host name or IP address (for example, reactos.org or 145.52.0.1 ):", -1, 21, 28, 277, 11 + EDITTEXT 1433, 21, 42, 275, 14, ES_AUTOHSCROLL +END + +1428 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "ReactOS can automatically dial the initial connection to the Internet or other public network, before establishing the virtual connection.", -1, 10, 6, 275, 24 + AUTORADIOBUTTON "&Do not dial the initial connection.", 1509, 32, 31, 271, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "&Automatically dial this initial connection:", 1510, 32, 45, 269, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + COMBOBOX 1435, 43, 62, 253, 87, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP +END + +1436 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Select a device:", 1597, 8, 5, 213, 8 + COMBOBOX 1437, 7, 17, 217, 166, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | NOT WS_TABSTOP + AUTOCHECKBOX "Sho&w icon in notification area when connected", 1120, 11, 195, 213, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "C&onfigure...", 1130, 160, 34, 60, 14 +END + +1448 DIALOGEX 10, 20, 265, 71 +STYLE DS_SHELLFONT | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Network Connections" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "C&hoose a network connection:", 1456, 7, 7, 251, 10 + COMBOBOX 1457, 8, 18, 250, 140, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL | NOT WS_TABSTOP + DEFPUSHBUTTON "&Connect...", 1449, 7, 50, 60, 14 + PUSHBUTTON "Cancel", 1455, 70, 50, 60, 14 + PUSHBUTTON "&New...", 1459, 134, 50, 60, 14 + PUSHBUTTON "P&roperties", 1460, 198, 50, 60, 14 +END + +1466 DIALOGEX 6, 18, 265, 262 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 7, 251, 8 + EDITTEXT 1470, 7, 17, 193, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 77, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 141, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 57, 193, 8 + LISTBOX 1474, 7, 68, 193, 145, WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "", 1475, 206, 68, 51, 14, BS_BITMAP | WS_GROUP + PUSHBUTTON "&Down", 1476, 206, 86, 51, 14, BS_BITMAP + PUSHBUTTON "D&elete", 1477, 141, 215, 60, 14 + CONTROL "", 1479, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1467 DIALOGEX 6, 18, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 7, 197, 8 + EDITTEXT 1470, 7, 17, 193, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 76, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 141, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 57, 193, 8 + LISTBOX 1474, 7, 68, 193, 135, WS_VSCROLL | WS_TABSTOP + PUSHBUTTON "&Up", 1475, 206, 68, 51, 14, BS_BITMAP | WS_GROUP + PUSHBUTTON "&Down", 1476, 206, 86, 51, 14, BS_BITMAP + PUSHBUTTON "D&elete", 1477, 141, 204, 60, 14 + AUTOCHECKBOX "Sample text", 1478, 7, 225, 249, 10, BS_TOP | BS_MULTILINE + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1468 DIALOGEX 6, 18, 263, 263 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Sample text", 1469, 7, 5, 249, 8 + EDITTEXT 1470, 7, 17, 249, 14, ES_AUTOHSCROLL + PUSHBUTTON "&Add", 1471, 132, 36, 60, 14 + PUSHBUTTON "&Replace", 1472, 196, 36, 60, 14 + LTEXT "Sample text", 1473, 7, 55, 251, 8 + LISTBOX 1474, 7, 68, 249, 140, LBS_STANDARD | WS_TABSTOP + PUSHBUTTON "D&elete", 1477, 196, 214, 60, 14, WS_GROUP + CONTROL "", 1479, "STATIC", SS_ETCHEDHORZ, 7, 233, 249, 1 + PUSHBUTTON "OK", 1, 132, 242, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 196, 242, 60, 14 +END + +1469 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "Dial-up to &private network.", 1488, 24, 9, 116, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Connect to a private network &through the Internet.", 1489, 24, 34, 206, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&Connect directly to another computer.", 1490, 24, 59, 157, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Connect to the network via b&roadband", 1491, 24, 83, 273, 10, NOT WS_TABSTOP + LTEXT "Connect using my phone line (modem or ISDN).", -1, 45, 21, 156, 8 + LTEXT "Create a Virtual Private Network (VPN) connection or tunnel through the internet.", -1, 45, 46, 266, 8 + LTEXT "Connect using my serial, parallel, or infrared port.", -1, 45, 71, 266, 8 + LTEXT "Connect through my broadband connection.", -1, 45, 95, 266, 8 +END + +1480 DIALOGEX 0, 0, 230, 61 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Phone Number Editor" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Please enter the new phone number:", 1481, 7, 7, 218, 8 + EDITTEXT 1482, 7, 17, 217, 15, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 99, 40, 60, 14 + PUSHBUTTON "Cancel", 2, 163, 40, 60, 14 +END + +1481 DIALOGEX 0, 0, 321, 157 +STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +CAPTION "New Connection Wizard" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Type an ISP account name and password, then write down this information and store it in a safe place. (If you have forgotten an existing account name or password, contact your ISP.)", 1689, 10, 4, 308, 25 + LTEXT "&User name:", 1636, 23, 35, 89, 15 + EDITTEXT 1614, 115, 34, 190, 15, ES_AUTOHSCROLL + LTEXT "&Password:", 1637, 23, 55, 90, 13 + EDITTEXT 1615, 115, 54, 190, 15, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Confirm password:", 1638, 23, 74, 88, 13 + EDITTEXT 1616, 115, 73, 190, 15, ES_PASSWORD | ES_AUTOHSCROLL + AUTOCHECKBOX "U&se this account name and password when anyone connects to the Internet from this computer", 1596, 23, 91, 291, 17, BS_LEFT | BS_TOP | BS_MULTILINE + AUTOCHECKBOX "&Make this the default Internet connection", 1595, 23, 112, 288, 14 + AUTOCHECKBOX "&Turn on Internet Connection Firewall for this connection", 1682, 23, 133, 290, 14 +END + +1660 DIALOGEX 0, 0, 258, 78 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Internet Connection Firewall" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 32515, -1, 7, 7, 20, 20 + LTEXT "Turning off the Internet Connection Firewall could expose your computer to unauthorized access over the Internet. Are you sure you want to turn it off?", -1, 44, 5, 212, 24 + AUTOCHECKBOX "&Do not show this dialog again", 1662, 42, 40, 210, 10 + DEFPUSHBUTTON "&Yes", 6, 74, 60, 50, 14 + PUSHBUTTON "&No", 7, 128, 60, 50, 14 +END + +7000 DIALOGEX 0, 0, 215, 103 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&User name:", -1, 7, 8, 90, 12, SS_CENTERIMAGE + EDITTEXT 7001, 101, 7, 108, 14, ES_AUTOHSCROLL + LTEXT "&Full name:", -1, 7, 26, 90, 12 + EDITTEXT 7002, 101, 25, 108, 14, ES_AUTOHSCROLL + LTEXT "&Password:", -1, 7, 44, 90, 12 + EDITTEXT 7003, 101, 43, 108, 14, ES_PASSWORD | ES_AUTOHSCROLL + LTEXT "&Confirm password:", -1, 7, 62, 91, 12 + EDITTEXT 7004, 101, 61, 108, 14, ES_PASSWORD | ES_AUTOHSCROLL + PUSHBUTTON "OK", 1, 84, 82, 60, 14 + PUSHBUTTON "Cancel", 2, 149, 82, 60, 14 +END + +7005 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "Callback" +FONT 8, "MS Shell Dlg" +BEGIN + AUTORADIOBUTTON "&Do not allow callback", 7009, 9, 7, 219, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "All&ow the caller to set the callback number", 7006, 9, 20, 218, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + AUTORADIOBUTTON "Al&ways use the following callback number:", 7007, 9, 34, 217, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + EDITTEXT 7008, 19, 49, 204, 14, ES_AUTOHSCROLL | WS_GROUP +END + +7010 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "General" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Incoming connections", -1, 7, 4, 214, 110, WS_GROUP + LTEXT "Allow incoming connections on these devices.", -1, 17, 17, 195, 8 + LTEXT "&Devices:", -1, 17, 29, 29, 8 + CONTROL "", 7011, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x00004405, 17, 41, 193, 47, WS_EX_CLIENTEDGE + AUTOCHECKBOX "&Enable multilink", 7012, 17, 96, 121, 10, BS_TOP | BS_MULTILINE | WS_GROUP + PUSHBUTTON "P&roperties", 7013, 145, 94, 65, 14, WS_GROUP + GROUPBOX "Virtual private network", -1, 6, 122, 214, 49, WS_GROUP + AUTOCHECKBOX "Allo&w others to make private connections to my computer by tunneling through the Internet or other network", 7014, 17, 137, 195, 27, BS_TOP | BS_MULTILINE | WS_GROUP + AUTOCHECKBOX "&Show icon in notification area when connected", 7015, 12, 184, 209, 10, BS_TOP | BS_MULTILINE | WS_GROUP +END + +7016 DIALOGEX 0, 0, 265, 190 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming TCP/IP Properties" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Network access", -1, 6, 5, 252, 32 + AUTOCHECKBOX "Allow &callers to access my local area network", 7017, 20, 20, 228, 9, BS_LEFT | BS_TOP | BS_MULTILINE + GROUPBOX "TCP/IP address assignment", -1, 6, 42, 250, 122 + AUTORADIOBUTTON "&Assign TCP/IP addresses automatically using DHCP", 7019, 20, 54, 231, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "S&pecify TCP/IP addresses", 7020, 20, 71, 231, 10, BS_TOP | BS_MULTILINE + LTEXT "&From:", -1, 29, 88, 53, 8 + CONTROL "", 7018, "RASIPADDRESS", WS_GROUP | WS_TABSTOP, 90, 85, 103, 13 + LTEXT "&To:", -1, 29, 105, 53, 8 + CONTROL "", 7021, "RASIPADDRESS", WS_GROUP | WS_TABSTOP, 90, 102, 103, 13 + LTEXT "Total:", -1, 29, 124, 53, 10 + LTEXT "", 7024, 90, 121, 150, 14, 0, WS_EX_STATICEDGE + AUTOCHECKBOX "Allo&w calling computer to specify its own IP address", 7022, 20, 144, 231, 10, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 133, 169, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 197, 169, 60, 14 +END + +7025 DIALOGEX 0, 0, 250, 157 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming IPX Properties" +FONT 8, "MS Shell Dlg" +BEGIN + GROUPBOX "Network access", -1, 8, 6, 234, 32 + AUTOCHECKBOX "Allow &callers to access my local area network", 7032, 18, 19, 194, 12, BS_LEFT | BS_TOP | BS_MULTILINE + GROUPBOX "Network number assignment", -1, 8, 43, 234, 87 + AUTOCHECKBOX "&Assign same network number to all computers", 7028, 17, 56, 203, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "Assi&gn network numbers automatically", 7026, 28, 68, 191, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Specify network numbers:", 7027, 28, 81, 189, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + EDITTEXT 7029, 40, 92, 154, 14, ES_UPPERCASE | WS_GROUP + AUTOCHECKBOX "Allo&w callers to specify their own node numbers", 7031, 17, 113, 208, 11, BS_TOP | BS_MULTILINE | WS_GROUP + DEFPUSHBUTTON "OK", 1, 116, 136, 60, 14, WS_GROUP + PUSHBUTTON "Cancel", 2, 181, 136, 60, 14 +END + +7033 DIALOGEX 0, 0, 220, 50 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Incoming Protocol Properties" +FONT 8, "MS Shell Dlg" +BEGIN + AUTOCHECKBOX "Allow &callers to access my local area network", 7034, 7, 7, 208, 18, BS_LEFT | BS_TOP | BS_MULTILINE + DEFPUSHBUTTON "OK", 1, 86, 30, 60, 14 + PUSHBUTTON "Cancel", 2, 151, 30, 60, 14 +END + +7035 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Networking" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Network components:", -1, 7, 7, 217, 9 + CONTROL "", 7036, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 7, 17, 215, 89, WS_EX_CLIENTEDGE + PUSHBUTTON "&Install...", 7037, 9, 110, 67, 14, WS_GROUP + PUSHBUTTON "&Uninstall", 7038, 80, 110, 67, 14, WS_GROUP + PUSHBUTTON "P&roperties", 7039, 153, 110, 67, 14, WS_GROUP + GROUPBOX "Description", -1, 7, 138, 213, 69 + LTEXT "", 7040, 17, 150, 193, 48 +END + +7042 DIALOGEX 0, 0, 230, 215 +STYLE DS_SHELLFONT | DS_CONTEXTHELP | WS_CHILD | WS_CAPTION +CAPTION "Users" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Users allowed to connect:", -1, 7, 5, 213, 8 + CONTROL "", 7043, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 7, 19, 214, 83, WS_EX_CLIENTEDGE + PUSHBUTTON "&New...", 7044, 7, 107, 67, 14, WS_GROUP + PUSHBUTTON "&Delete", 7045, 80, 107, 67, 14, WS_GROUP + PUSHBUTTON "P&roperties", 7046, 153, 107, 67, 14, WS_GROUP + AUTOCHECKBOX "Re&quire all users to secure their passwords and data.", 7048, 8, 151, 217, 12, BS_TOP | BS_MULTILINE + AUTOCHECKBOX "Al&ways allow directly connected devices such as palmtop computers to connect without providing a password.", 7049, 8, 169, 217, 23, BS_TOP | BS_MULTILINE + LTEXT "Note that other factors, such as a disabled user account, may affect a user's ability to connect.", -1, 9, 126, 212, 23 +END + +7049 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each user who should be allowed a connection to this computer. Note that other factors, such as a disabled user account, may affect a user's ability to connect.", -1, 10, 1, 275, 27 + LTEXT "&Users allowed to connect:", -1, 10, 28, 275, 8 + CONTROL "", 7043, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 10, 42, 275, 73 + PUSHBUTTON "&Add...", 7044, 10, 122, 65, 14, WS_GROUP + PUSHBUTTON "&Remove", 7045, 79, 122, 65, 14, WS_GROUP + PUSHBUTTON "&Properties", 7046, 147, 122, 65, 14, WS_GROUP +END + +7050 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each device you want to use for incoming connections.", -1, 10, 4, 299, 10 + LTEXT "&Connection devices:", -1, 10, 16, 275, 8 + CONTROL "", 7011, "SYSLISTVIEW32", WS_BORDER | WS_GROUP | WS_TABSTOP | 0x0000440D, 10, 26, 297, 87 + PUSHBUTTON "P&roperties", 7013, 243, 120, 65, 14, WS_GROUP +END + +7051 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the check box next to each type of networking software that should be enabled for incoming connections.", -1, 10, 1, 288, 20 + LTEXT "Networking &software:", -1, 10, 24, 274, 8 + CONTROL "", 7036, "SYSLISTVIEW32", WS_BORDER | WS_TABSTOP | 0x0000440D, 10, 34, 286, 33 + PUSHBUTTON "&Install...", 7037, 108, 71, 60, 14, WS_GROUP + PUSHBUTTON "&Uninstall", 7038, 172, 71, 60, 14, WS_GROUP + PUSHBUTTON "&Properties", 7039, 236, 71, 60, 14, WS_GROUP + LTEXT "", 7040, 21, 105, 273, 38 + LTEXT "Description:", -1, 21, 95, 275, 8 +END + +7052 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Virtual private connections to your computer through the Internet are possible only if your computer has a known name or IP address on the Internet.", -1, 10, 4, 290, 20 + AUTORADIOBUTTON "&Allow virtual private connections", 7053, 29, 63, 265, 10, BS_TOP | BS_MULTILINE | WS_GROUP + AUTORADIOBUTTON "&Do not allow virtual private connections", 7054, 29, 78, 265, 10, BS_TOP | BS_MULTILINE | NOT WS_TABSTOP + LTEXT "Do you want to allow virtual private connections to this computer?", -1, 17, 49, 275, 8 + LTEXT " If you allow VPN connections, ReactOS will modify the Internet Connection Firewall to allow your computer to send and receive VPN packets.", -1, 10, 25, 293, 25 +END + +7055 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "&Device for this connection:", -1, 23, 24, 275, 8 + COMBOBOX 7056, 22, 36, 275, 125, CBS_DROPDOWNLIST | WS_VSCROLL | NOT WS_TABSTOP + LTEXT "Devices other than the one you select will not be affected and may be used for other purposes.", -1, 10, 4, 275, 17 + PUSHBUTTON "&Properties", 7061, 232, 53, 65, 14, WS_GROUP +END + +7379 DIALOGEX 0, 0, 317, 143 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN +END + +19900 DIALOGEX 0, 0, 156, 44 +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION +CAPTION "Dial-Up Networking" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 563, 19901, 10, 10, 18, 20 + LTEXT "Waiting for services to start...", 19902, 34, 16, 120, 8 +END + +STRINGTABLE +BEGIN + 187 "&No, do not dial\0" + 188 "You (or a program) have requested information from %1. Which connection do you want to use?\0" + 189 "Add Alternate Phone Number\0" + 190 "Dial only first available device\0" + 191 "Dial all devices\0" + 192 "Dial devices only as needed\0" + 193 "Enter a user name and password with access to the remote network domain.\0" + 194 "Network Address Translation (NAT) is currently installed as a routing protocol,\nand must be removed before enabling Internet Connection Sharing.\nTo remove Network Address Translation, open the Routing and Remote Access Manager\nsnapin and expand the router's entry in the left pane.\nDelete the Network Address Translation routing protocol from the list of IP\nrouting protocols.\0" + 195 "The area code must contain only the digits 0 to 9.\0" + 196 "The entry name must contain at least one non-blank character and cannot begin with a period. Choose a different name.\0" + 197 "You must choose a value from %1 to %2 for this field.\0" + 198 "The custom authentication configuration DLL could not be loaded. Make sure the custom authentication package is correctly installed.\0" + 199 "The connection selected was established by the Multiprotocol router.\nPlease use the 'Routing and RAS Admin' tool to hang up the connection.\0" + 200 "Comment\0" + 201 "The custom authentication package configuration failed.\0" + 202 "TCP/IP is not installed or is disabled for Routing and Remote Access. In Control Panel, start Network, go to the Services page, choose 'Routing and Remote Access Service' Properties, and press the Network button.\0" + 203 "IPX is not installed or is disabled for Routing and Remote Access. You can install/enable IPX by viewing the properties of any connection in \"Connections\" folder.\0" + 204 "Remove the selected device(s) from the list?\0" + 205 "Delete %1 from the phonebook?\0" + 206 "Disconnect from %1?\0" + 207 "A file named %1 already exists. Overwrite it?\0" + 208 "Syntax errors were found in the script. Do you wish to view the error log?\0" + 209 "'%1' is now connected. \0" + 210 "Right-click the Dial-Up Networking Monitor on the task bar to hang up or check the status of your connection.\0" + 212 "Connected successfully.\0" + 213 "The custom authentication method selected must be initialized by pressing Properties.\0" + 214 "lnk\0" + 215 "Dial-up shortcut files (*.rnk)\0" + 216 "*.rnk\0" + 217 "Create Dial-Up Shortcut\0" + 218 "Link to %1 failed. Reconnect pending...\0" + 219 "Cannot retrieve framing information.\0" + 220 "Cannot retrieve port information.\0" + 221 "Cannot retrieve projection information.\0" + 222 "Cannot load connection list.\0" + 223 "Client:\0" + 224 "Details\0" + 225 "Device:\0" + 226 "Network:\0" + 227 "(not connected)\0" + 228 "&Connect...\0" + 229 "Hang &Up\0" + 230 "Dial-up Connection\0" + 231 "Modem configuration set to defaults\0" + 232 "COM1\0" + 233 "Remote Router\0" + 234 "Modem or device\0" + 235 "Please enter a username for this interface's account on the remote router.\0" + 236 "An entry named %1 already exists. Choose a different name.\0" + 237 "You may want to allow sending your password without encryption.\0" + 238 "Password Encryption\0" + 239 "The wizard is ready to create your connection.\0" + 240 "Finished\0" + 241 "Phone &number:\0" + 242 "Call Me Back At\0" + 243 "Edit Alternate Phone Number\0" + 244 "Since this connection is currently active, some settings will not take effect until the next time you dial it.\0" + 245 "There are no connections available to all users. You must logon before dialing.\0" + 246 "The phonebook is empty.\n\nPress OK to add an entry.\0" + 247 "Due to import/export restrictions, data encryption is not available in this version of ReactOS.\0" + 248 "Please enter an X.25 address on the next screen.\0" + 249 "Error %1: %2\0" + 250 "%1\n\nError %2: %3\0" + 251 "%1\n\nError %2: %3\nDiagnostic: %4\0" + 252 "%1\n\nError %2: %3\nFail Code: %4\0" + 253 "%1\n\nError %2: %3\n\nPress F1 for more information.\0" + 254 "%1\n\nError %2: %3\nName: %4\0" + 255 "%1\n\n%4\0" + 256 "%1\n\nError %2: %3\nResponse: %4\0" + 257 "Fail Code: 0x%1\n\0" + 258 "Name: %1\n\0" + 259 "%1 CP reported error %2: %3\n\0" + 260 "%1 CP connected successfully.\n\0" + 261 "You can choose which dial-up protocol to use.\0" + 262 "Choose Dial-up Protocol\0" + 263 "Press Finish to save '%1'.\0" + 264 "netcfg.hlp\0" + 265 "&Move successful number to the top of the list on connection\0" + 266 "&New phone number:\0" + 267 "&Phone numbers:\0" + 268 "Phone Numbers\0" + 269 "You may enter a fixed IP address.\0" + 270 "IP Address\0" + 271 "The Internet protocols (TCP/IP), are not installed or are disabled for Remote Access. In Control Panel, start Network, go to the Services page, choose 'Remote Access Service' Properties, and press the Network button.\0" + 272 "TCP/IP\0" + 273 "IPSec, default policy\0" + 274 "IPX/SPX or compatible\0" + 275 " (the current location)\0" + 276 "ISDN\0" + 277 "All available ISDN lines multi-linked\0" + 278 "64K Digital\0" + 279 "56K Digital\0" + 280 "56K Voice\0" + 281 "You may need a special procedure before connecting.\0" + 282 "Choose Logon Options\0" + 283 "%d%%\0" + 284 "Phone number for %s\0" + 285 "&New location:\0" + 286 "&Locations:\0" + 287 "Locations\0" + 288 "This is the device that will be used to make the connection.\0" + 289 "Select a Device\0" + 290 "Multiple Lines cannot be bundled unless you are calling a PPP server.\0" + 291 "Modem\0" + 292 "The modem is not installed.\0" + 293 "MS Point-to-Point Encryption, 128 bit RSA/RC4\0" + 294 "MS Point-to-Point Encryption, 40 bit RSA/RC4\0" + 295 "Multiple Lines\0" + 296 "(Press Configure to set)\0" + 297 "You may enter fixed DNS and WINS addresses.\0" + 298 "Name Server Addresses\0" + 299 "Down-level RAS\0" + 300 "PPP\0" + 301 "PPP multi-link\0" + 302 "SLIP\0" + 303 "NetBEUI\0" + 304 "A personal phonebook has been created and initialized with the contents of the system phonebook.\0" + 305 "No alternate phonebook is selected.\0" + 306 "That device cannot be dynamically configured.\0" + 307 "The entry cannot be deleted because it is connected.\0" + 308 "No entry is selected. Press the New button to create an entry.\0" + 309 "A non-zero IP address must be supplied when 'specify an IP address' is selected.\0" + 310 "An X.25 Address is required when an X.25 dial-up network or X.25 device is selected.\0" + 311 "(none)\0" + 312 "'%1' is already in the list.\0" + 313 "Secure my password and my data\0" + 314 "The %1 protocol cannot be selected because it is not installed or is disabled for Remote Access. To change, in Control Panel start Network, choose Services page, Remote Access Properties, and press the Network button.\0" + 315 "Cannot save password.\0" + 316 "Cannot display data.\0" + 317 "Cannot get auto-dial information.\0" + 318 "Cannot load dialog.\0" + 319 "Cannot disable shared access.\0" + 320 "Cannot load property page.\0" + 321 "Cannot load phonebook.\0" + 322 "Cannot load RAS Manager port information.\0" + 323 "Cannot read user preferences from registry.\0" + 324 "Cannot load script information.\0" + 325 "Cannot view script.log with notepad.exe\0" + 326 "Cannot edit switch.inf with notepad.exe\0" + 327 "Cannot load TAPI information.\0" + 328 "Cannot load X.25 information.\0" + 329 "Cannot create new phonebook.\0" + 330 "Cannot enable shared access.\0" + 331 "Cannot connect the phonebook entry.\0" + 332 "Cannot get send/receive buffer.\0" + 333 "Cannot get status information for a port.\0" + 334 "Cannot retrieve protocol information.\0" + 335 "Cannot receive buffer from device.\0" + 336 "Cannot send buffer to device.\0" + 337 "Cannot retrieve data.\0" + 338 "Cannot save TAPI information.\0" + 339 "Cannot save data.\0" + 340 "The script has halted.\0" + 341 "The script has halted due to an error. Do you wish to view the error log?\0" + 342 "Cannot set auto-dial information.\0" + 343 "Cannot delete saved password.\0" + 344 "Cannot write phonebook.\0" + 345 "Writing preferences to registry\0" + 346 "Cannot write the shortcut file.\0" + 347 "OK\0" + 348 "What is your ISP's phone number?\0" + 349 "Phone Number to Dial\0" + 350 "The Password and Confirm password fields do not match.\0" + 351 "The New Password and Confirm New Password fields do not match.\0" + 352 "pbk\0" + 353 "Phonebook files (*.pbk)\0" + 354 "*.pbk\0" + 355 "Open Phonebook\0" + 356 "Clone Phonebook Entry\0" + 357 "Edit Phonebook Entry\0" + 358 "New Phonebook Entry\0" + 359 "Phone number\0" + 360 "Phone numbers\0" + 361 "Network Connections\0" + 362 "You must select at least one network protocol.\0" + 363 "Before you can call PPP servers you must install a network protocol with the Control Network applet.\0" + 364 "&New prefix:\0" + 365 "&Prefixes:\0" + 366 "Phone Number Prefixes\0" + 367 "One or more requested network protocols did not connect successfully.\n\n\0" + 368 "Press Accept to use the connection as is, or Hang Up to disconnect.\0" + 369 "Point-to-point protocol settings to use when %1 initiates a demand dial connection on interface %2:\0" + 370 "[To change the saved password, click here]\0" + 405 "NetBEUI protocol is required to call older RAS servers.\0" + 406 "Before you can call older RAS servers you must install the NetBEUI protocol. NetBEUI can be installed with the Control Panel Network applet.\0" + 407 "&Redial\0" + 408 "You have chosen to disable one or more transports. Doing so requires the routing managers and routing protocols for the disabled transports to be removed from this demand-dial interface.\nClick Yes if you want to conti \n \n\n\n\n\n\nnue, or No if you want to re-enable the transports.\0" + 409 "Internet Connection Sharing\0" + 410 "Demand-dial interface dial-in account.\0" + 411 "You now need to set the dial-out credentials that interface '%1' will use when connecting to the remote router. These credentials must match the dial-in credentials configured on the remote router. When connecting to a \n \n\n\n\n\n\nWin NT4/2000 router, the user name must also match the interface name of the remote router.\0" + 412 "mpradmin.hlp\0" + 413 "&Move successful number or address to the top of the list on connection\0" + 414 "&New phone number or address:\0" + 415 "&Phone numbers or addresses:\0" + 416 "Numbers and Addresses\0" + 417 "PPP: Win 95/98/NT4/2000, Internet\0" + 418 "None\0" + 419 "SLIP: Unix Connection\0" + 420 "All devices connected.\0" + 421 "Receiving registration result...\0" + 422 "Sending callback information...\0" + 423 "Sending new password...\0" + 424 "Calculating link speed...\0" + 425 "Checking authentication status...\0" + 426 "Registering your computer on the network...\0" + 427 "Retrying authentication...\0" + 428 "Verifying username and password...\0" + 429 "Authenticated.\0" + 430 "Connecting through %1...\0" + 431 "Dialing...\0" + 432 "Modems connecting...\0" + 433 "Connecting over cable...\0" + 434 "Dialing %1...\0" + 435 "Connecting over X.25 to %1...\0" + 436 "Postconnecting through %1...\0" + 437 "Preconnecting through %1...\0" + 438 "Connected.\0" + 439 "Device connected.\0" + 440 "Disconnected.\0" + 441 "Modem connected.\0" + 442 "Cable connected.\0" + 443 "Opening port...\0" + 444 "X.25 connected.\0" + 445 "Port opened.\0" + 446 "Postconnect complete.\0" + 447 "Preconnect complete.\0" + 448 "Preparing for callback...\0" + 449 "Checking network protocol connections...\0" + 450 "Verifying username and password...\0" + 451 "Connected, bundling additional lines\0" + 452 "Unknown state.\0" + 453 "Waiting for callback...\0" + 454 "Waiting for modem reset...\0" + 455 "Make the phone number change permanent?\0" + 456 "scp\0" + 457 "*.scp\0" + 458 "Dial-up script files (*.scp)\0" + 459 "Browse Dial-Up Scripts\0" + 460 "You must check at least one modem or adapter.\0" + 461 "Phone number\0" + 462 "TCP/IP protocol is required to call SLIP servers.\0" + 463 "Before you can call SLIP servers you must install the TCP/IP protocol. TCP/IP can be installed with the Control Panel Network applet.\0" + 464 "Status\0" + 465 "&New suffix:\0" + 466 "&Suffixes:\0" + 467 "Phone Number Suffixes\0" + 468 "You can go on to choose special settings, if necessary.\0" + 469 "Custom Settings\0" + 470 "Manual Modem Command Terminal\0" + 471 "After Dial Terminal\0" + 472 "Before Dial Terminal\0" + 473 "SLIP Login Terminal\0" + 474 "10 minutes\0" + 475 "10 seconds\0" + 476 "1 hour\0" + 477 "1 minute\0" + 478 "24 hours\0" + 479 "2 hours\0" + 480 "2 minutes\0" + 481 "30 minutes\0" + 482 "30 seconds\0" + 483 "3 seconds\0" + 484 "4 hours\0" + 485 "4 minutes\0" + 486 "5 minutes\0" + 487 "5 seconds\0" + 488 "8 hours\0" + 489 "never\0" + 490 "You can make the new connection available to any user or only to yourself.\0" + 491 "Connection Availability\0" + 492 "Discard multiple line settings for the entry?\0" + 493 "Unavailable device\0" + 494 "Logon Preferences\0" + 495 "Dial-up Preferences\0" + 496 "X.25\0" + 497 "X.25 PAD\0" + 498 "You can let other computers access resources through this dial-up connection.\0" + 499 "VPN Server Selection\0" + 500 "Cannot enable on-demand dialing.\0" + 501 "What is the name or address of the VPN server?\0" + 502 "Cannot disable on-demand dialing.\0" + 503 "Public Network\0" + 504 "ReactOS can make sure the public network is connected first.\0" + 505 "VPN1\0" + 506 "Internet Connection Sharing\0" + 507 "You can let a local network access resources through this dial-up connection.\0" + 508 "Host or Guest?\0" + 509 "Internet Connection Sharing is currently enabled for connection '%1'.\n\nIt will now be enabled for connection '%2' instead.\0" + 510 "To connect two computers, your computer must be identified as either a host or a guest.\0" + 511 "When Internet Connection Sharing is enabled, your LAN adapter will be set to use IP address 192.168.0.1. Your computer may lose connectivity with other computers on your network. If these other computers have static IP addresses, you should set them to obtain their IP addresses automatically. Are you sure you want to enable Internet Connection Sharing?\0" + 512 "Select a Device\0" + 513 "This is the device that will be used to make the connection.\0" + 514 "&Connect\0" + 515 "Let the server determine encryption\0" + 516 "Always encrypt my data\0" + 517 "Use MPPE-40 data encryption\0" + 518 "Use MPPE-128 data encryption\0" + 519 "The current encryption selection requires MS-CHAP or EAP authentication.\0" + 520 "Custom Authentication Message\0" + 521 "Connecting to %1...\0" + 522 "Connection Name\0" + 523 "Automatic\0" + 524 "PPTP VPN\0" + 525 "L2TP IPSec VPN\0" + 526 "Select the type of the connection.\0" + 527 "Type of Connection\0" + 528 "hh.exe netcfg.chm::/trouble_all.htm\0" + 529 "Virtual Private Connection\0" + 530 "Use any form of authentication required including clear text. Do not encrypt data.\0" + 531 "Use any form of authentication that requires passwords to be encrypted. Do not encrypt data.\0" + 532 "Please type a name for the entry.\0" + 533 "Encrypt passwords and data.\0" + 534 "Please type a port number between 1 and 65535.\0" + 535 "Specify custom authentication and data encryption with the Settings button.\0" + 536 "Use any form of authentication that requires encrypted passwords. Do not encrypt data.\0" + 537 "Encrypt passwords and data.\0" + 538 "Specify custom authentication and data encryption with the Settings button.\0" + 539 "The port number is already used by another entry.\nPlease enter a unique port number.\0" + 540 "Please enter one or more ports for incoming responses.\0" + 541 "Please select the entry to be deleted.\0" + 542 "1 second\0" + 543 "Please select the entry to be modified.\0" + 549 "What is the name of the other computer you are connecting to?\0" + 576 "20 minutes\0" + 579 "Specify a name for this connection to your workplace.\0" + 581 "Network Application Settings\0" + 582 "Type a name for this connection in the following box.\0" + 583 "Type the name of the other computer in the following box.\0" + 584 "Type the name of your ISP in the following box.\0" + 585 "What is the name of the service that provides your Internet connection?\0" + 586 "Please type the IP address of the server computer on the private network.\0" + 587 "Advanced Settings\0" + 588 "The entry name begins with a period. or contains some invalid characters. \nChoose a different name.\0" + 589 "Properties\0" + 1512 "Communications Port\0" + 1523 " channel\0" + 1526 "Smart Cards\0" + 1527 "You can use your smart card with this connection.\0" + 1528 "Direct Connection\0" + 1529 "Please select a device for this connection.\0" + 1530 "Verdana Bold\0" + 1531 "12\0" + 1532 "Connection Type\0" + 1533 "Select the type of demand dial interface you want to create.\0" + 1534 "Select a device\0" + 1535 "This is the device that will be used to make the connection.\0" + 1536 "Phone Number\0" + 1537 "Enter the phone number of the remote server or router you are calling.\0" + 1538 "VPN Type\0" + 1539 "Select the type of VPN interface you want to create.\0" + 1540 "Destination Address\0" + 1541 "What is the name or address of the remote router?\0" + 1544 "IP Address\0" + 1545 "Configure this router's IP address for this interface.\0" + 1546 "Name Server Addresses\0" + 1547 "Configure DNS and WINS addresses for use by this interface.\0" + 1548 "Router Scripting\0" + 1549 "You can set up a scripting for connecting to the remote router.\0" + 1550 "Dial In Credentials\0" + 1551 "Configure the user name and password that the remote router will use when it dials in to this server.\0" + 1552 "Dial Out Credentials\0" + 1553 "Configure the user name and password to be used when connecting to the remote router.\0" + 1554 "Interface Name\0" + 1555 "Select the name by which this new interface will be known.\0" + 1556 "No available devices\0" + 1557 "A user account named %1 already exists on the local computer. Should the demand dial interface be configured to use this user account?\0" + 1558 "There are no security protocol settings for SLIP server connections.\0" + 1559 "Allow unsecured password\0" + 1560 "Require secured password\0" + 1561 "Use smart card\0" + 1562 "You must select at least one password authentication protocol.\0" + 1563 "No encryption allowed (server will disconnect if it requires encryption)\0" + 1564 "Optional encryption (connect even if no encryption)\0" + 1565 "Require encryption (disconnect if server declines)\0" + 1566 "Maximum strength encryption (disconnect if server declines)\0" + 1567 " (encryption enabled)\0" + 1568 "Internet Account Information\0" + 1569 "You will need an account name and password to sign in to your Internet account.\0" + 1570 "The selected EAP package does not provide encryption keys. Select an EAP package that does provide keys or select not to encrypt.\0" + 1571 "The current encryption selection requires EAP or some version of MS-CHAP logon security methods.\0" + 1572 "Protocols and Security\0" + 1573 "Select transports and security options for this connection.\0" + 1574 "The protocols you have selected include PAP, SPAP, and/or CHAP. If one of these is negotiated, data encryption will not occur. Do you want to keep these settings?\0" + 1575 "To connect to '%1', you must first be connected to '%2'. Do you want to connect to '%2' now?\0" + 1576 "Connecting over parallel cable...\0" + 1577 "Connecting over infrared...\0" + 1578 "Parallel cable connected.\0" + 1579 "Infrared connected.\0" + 1580 "This connection was configured to use a data encryption strength that is not supported by the installed software. The security properties of this connection have been reset to the available encryption strengths.\0" + 1581 "Typ&e of VPN:\0" + 1582 "Please enter a user name.\0" + 1583 "This user name and password will be saved for your own use. There is already a user name and password saved for all other users of this connection. Do you want to delete the user name and password saved for all other users?\0" + 1584 "For example, you could type the name of your workplace or the name of a server you will connect to.\0" + 1585 "Account Information\0" + 1586 "The controls on this property sheet are disabled because the system must first be rebooted before any configuration changes can be made.\0" + 1587 "The controls on this property sheet are disabled because one or more other Network property sheets are already open. To use these controls, close all these property sheets and then reopen this one.\0" + 1588 "Some of the controls on this property sheet are disabled because you do not have sufficient privileges to access them.\0" + 1589 "The following message was received from your service provider:\r\n\r\n%1\0" + 1590 "Reconnect %1\0" + 1591 "Service Name\0" + 1592 "What is the name of the service that provides your broadband connection?\0" + 1593 "You will need an account name and password to sign on to your account\0" + 1594 "PPPOE1-0\0" + 1595 "Point-to-Point Protocol over Ethernet (PPPoE)\0" + 1596 "Type of &broadband connection to make:\0" + 1611 "Broadband Connection\0" + 1612 "You have selected to use a preshared key but you have not entered one. \nPlease enter a preshared key.\0" + 1613 "Cannot Commit Credentials\0" + 1634 "Because the Windows Management Instrumentation (WMI) service has been disabled, ReactOS cannot display the properties of this connection or the home network.\n\nTo configure the properties of this connection or your home network, you must first enable the WMI service. To do this, in the Administrative Tools control panel, double-click Services, right-click Windows Management Instrumentation, and then click Start.\0" + 1635 "ReactOS cannot display the properties of this connection. The Windows Management Instrumentation (WMI) information might be corrupted. To correct this, use System Restore to restore ReactOS to an earlier time (called a restore point). System Restore is located in the System Tools folder in Accessories.\0" + 1646 "Allow incoming echo request\0" + 1647 "Allow incoming timestamp request\0" + 1648 "Allow incoming mask request\0" + 1649 "Allow incoming router request\0" + 1650 "Allow outgoing destination unreachable\0" + 1651 "Allow outgoing source quench\0" + 1652 "Allow outgoing parameter problem\0" + 1653 "Allow outgoing time exceeded\0" + 1654 "Allow redirect\0" + 1655 "log\0" + 1656 "*.log\0" + 1657 "Firewall log files (*.log)\0" + 1658 "Browse\0" + 1663 "Select a private network connection\0" + 1664 "To enable Internet Connection Sharing a connection must be selected for the private network. Please select a connection from the list of available connections.\0" + 1665 "Messages sent to this computer will be repeated back to the sender. This is commonly used for troubleshooting, for example, to ping a machine.\0" + 1666 "Data sent to this computer can be acknowledged with a confirmation message indicating the time that the data was received.\0" + 1667 "This computer will listen for and respond to requests for more information about the public network to which it is attached.\0" + 1668 "This computer will respond to requests for information about the routes it recognizes.\0" + 1669 "Data sent over the Internet that fails to reach this computer due to an error will be discarded and acknowledged with a \"destination unreachable\" message explaining the failure.\0" + 1670 "When this computer's ability to process incoming data cannot keep up with the rate of a transmission, data will be dropped and the sender will be asked to slow down.\0" + 1671 "When this computer discards data it has received due to a problematic header, it will reply to the sender with a \"bad header\" error message.\0" + 1672 "When this computer discards an incomplete data transmission because the entire transmission required more time than allowed, it will reply to the sender with a \"time expired\" message.\0" + 1673 "Data sent from this computer will be rerouted if the default path changes.\0" + 1675 "The value entered for the log file size is not valid. Enter a value between 1 and 32767 k.\0" + 1685 "Your user account does not have permission to use this connection. Usually, this is because you are logged in as Guest.\0" + 1686 "Type an account name and password. (If you have forgotten an existing account name or password, contact your network administrator.)\0" + 1687 "Computer N&ame\0" + 1688 "ISP N&ame\0" + 1689 "Company N&ame\0" + 1690 "What is the phone number you will use to make this connection?\n\0" + 7301 "Incoming TCP/IP Properties\0" + 7302 "You must choose a value from %1 to %2 for this field.\0" + 7306 "Incoming Connections Error\0" + 7307 "Incoming Connections General Error\0" + 7308 "Incoming Connections\0" + 7309 "Incoming Connections Networking Error\0" + 7310 "Incoming Connections Multilink Status Error\0" + 7311 "Incoming Connections Error\0" + 7312 "Incoming Connections Initialization Error\0" + 7313 "Incoming Connections TCP/IP Properties Error\0" + 7314 "Incoming Connections IPX Properties Error\0" + 7315 "Incoming Connections Error\0" + 7316 "Generic\0" + 7317 "Device\0" + 7318 "Miscellaneous Database\0" + 7319 "User Database\0" + 7320 "Protocol Database\0" + 7321 "You must enter a logon name for the new user or press cancel.\0" + 7322 "The password you entered was too short.\0" + 7323 "The passwords entered are not the same. Please re-enter them.\0" + 7324 "An internal error has occured. \0" + 7325 "Listview\0" + 7326 "An error has occurred while attempting to commit the changes you have made to the local user database. \0" + 7327 "You have insufficient priveleges to add a user to the local system database. \0" + 7328 "The user you are trying create already exists in the local user database.\0" + 7329 "The user was not added to the local user database because the password you entered was rejected.\0" + 7330 "Unable to reload the system user database because of an internal error.\0" + 7331 "An internal error has occurred: The local user database handle is corrupt.\0" + 7332 "Unable to load the resources neccessary to display the user tab.\0" + 7333 "An internal error occured while attempting to rollback the changes you made to the local user database. \0" + 7334 "The device database handle is corrupt.\0" + 7335 "Unable to load the resources neccessary to display the general tab.\0" + 7336 "An error has occurred while attempting to commit some of the device/vpn related changes you have made. \0" + 7337 "An internal error occured.\0" + 7338 "An internal error occurred: The networking component database handle is corrupt.\0" + 7339 "An internal error has occurred. \0" + 7340 "An error has occurred while attempting to commit the changes you have made to the networking components.\0" + 7341 "An internal error occured.\0" + 7342 "Unable to commit the changes you made to the TCP/IP protocol to the system. \0" + 7343 "Unable to save the changes you made to the IPX protocol to the system. \0" + 7344 "Unable to display the TCP/IP properties.\0" + 7345 "Unable to display the IPX properties.\0" + 7346 "Unable to load TCP/IP properties from the system. \0" + 7347 "Unable to load IPX properties from the system. \0" + 7348 "Incoming Connections depend on the Routing and Remote Access service which was unable to start. For more information, check the system event log.\0" + 7349 "Unable to allow the editing of networking components at this time because they are currently being modified elsewhere.\0" + 7350 "The new user you entered was not added to the local user database because the name or password entered violated a system policy (it was too large, too small, or ill-formed). \0" + 7351 "The system is unable to delete the requested user. \0" + 7352 "Unable to remove the selected network component because it is in use.\0" + 7353 "Incoming Connections Warning\0" + 7354 "Any users that you delete will be permanently removed from the system even if cancel is pressed. Are you sure you want to permanently remove %s? \0" + 7355 "You are about to switch to a system management console. This Incoming Connections property sheet will be closed and any changes you may have made will be committed to the system. Is it ok to continue?\0" + 7356 "Your Network Mask value has been changed. A zero bit in a mask can only be followed by other zero bits. For example, a Network Mask value, expressed in decimal dotted notation, of 255.255.0.0, is valid, but 255.0.255.0 is not. \n\0" + 7357 "User Permissions\0" + 7358 "You can specify the users who can connect to this computer.\0" + 7359 "Devices for Incoming Connections\0" + 7360 "You can choose the devices your computer uses to accept incoming connections.\0" + 7361 "Incoming Virtual Private Network (VPN) Connection\0" + 7362 "Another computer can connect to yours through a VPN connection\0" + 7363 "Networking Software\0" + 7364 "Networking software allows this computer to accept connections from other kinds of computers.\0" + 7365 "Completing the New Connection Wizard\0" + 7366 " \0" + 7367 "Incoming Connections\0" + 7371 "No hardware capable of accepting calls is installed.\0" + 7372 " \0" + 7373 "Assign specified &network number:\0" + 7374 "Assign &network numbers sequentially from:\0" + 7375 "Ny bruker\0" + 7376 "Connection Device\0" + 7377 "What device do you want to use to make this connection?\0" + 7378 "No devices capable of accepting direct connections are currently installed.\0" + 7379 "New Incoming Connection Warning\0" + 7380 "Because this Win 2000 Server belongs to or controls a domain, you must use the Routing and Remote Access system console to configure this machine to receive incoming connections. Cancel changes and switch to this console?\n\0" + 7381 "A&ssign network number automatically\0" + 7382 "A&ssign network numbers automatically\0" + 7383 "Incoming Connections can not issue the ipx network numbers 00000000 or FFFFFFFF. Please either change the assigned network numbers or use automatic network number assignment.\0" + 7384 "to\0" + 7385 "Communications Port (%s)\0" + 7386 "Network Connections does not display some specialized options for inbound connections that have been set using the Local User Manager or Remote Access Policy consoles. For complete and correct information on incoming connections, you will need to use these consoles.\0" + 7387 "The user callback mode you have selected requires you to enter a valid callback number.\0" + 7388 "ReactOS must reboot to complete the operation. Is it ok to reboot now?\0" + 7389 "The currently selected device has no configuration options available.\0" + 7390 "Invalid Range\0" + 7391 "You have requested that '%1' be disabled for Incoming Connections. In order to disable this, you must stop the 'Server' service. Once stopped, any shared directories or printers on this computer will no longer be available to any other computer. Do you want to bring up a system console that will allow you to stop the 'Server' service?\r\n\nUnder Computer Management, click System Tools and then click Services. In the right pane, right-click Server and click stop.\0" + 7392 "This serial port is not enabled for use in a direct connection to another computer. It will be enabled after you complete this wizard. You can then configure the port speed and other properties by right-clicking the icon for this connection and selecting Properties.\n\0" + 7393 "Incoming Connections\0" + 7394 "The IP address pool you've entered is invalid.\0" + 7395 "The mask provided is invalid.\0" + 7396 "The start address entered for the TCP/IP pool is invalid. It must lie between 1.0.0.0 and 224.0.0.0 and it must not be in the form 127.x.x.x.\0" + 7397 "The TCP/IP pool entered is invalid because the address is more specific than the mask.\0" + 7398 "The start address must be less than the end address.\0" + 7399 "The Routing and Remote Access Service is in the process of stopping. Until it stops, the Incoming Connections option is not available. Please wait a few moments and retry.\0" + 7400 "%s (%s)\0" + 7401 "%s (%d channels)\0" + 7402 "Incoming Connection VPN (PPTP)\0" + 7403 "Incoming Connection VPN (L2TP)\0" + 7404 "IP Security (IKE)\0" + 7405 "127.0.0.1\0" + 7406 "You do not have sufficient privileges to set up Incoming Connections\0" +29900 "Cannot load the Remote Access Connection Manager service.\0" +29901 "Cannot load the file MPRAPI.DLL in the system32 directory.\0" +END diff --git a/reactos/dll/win32/rasdlg/rasdlg.rc b/reactos/dll/win32/rasdlg/rasdlg.rc index 469ab060a7e..1af7f8e15b9 100644 --- a/reactos/dll/win32/rasdlg/rasdlg.rc +++ b/reactos/dll/win32/rasdlg/rasdlg.rc @@ -36,6 +36,7 @@ #include "lang/de-DE.rc" #include "lang/en-US.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/serialui/lang/no-NO.rc b/reactos/dll/win32/serialui/lang/no-NO.rc new file mode 100644 index 00000000000..d5a896d1814 --- /dev/null +++ b/reactos/dll/win32/serialui/lang/no-NO.rc @@ -0,0 +1,41 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +STRINGTABLE LOADONCALL DISCARDABLE +BEGIN + IDS_EVENPARITY, "Even" + IDS_MARKPARITY, "Mark" + IDS_NOPARITY, "No parity" + IDS_ODDPARITY, "Odd" + IDS_SPACEPARITY, "Space" + + IDS_ONESTOPBIT, "1 stopp bit" + IDS_ONE5STOPBITS, "1.5 stopp bits" + IDS_TWOSTOPBITS, "2 stopp bits" + + IDS_FC_NO, "Nei" + IDS_FC_CTSRTS, "CTS/RTS" + IDS_FC_XONXOFF, "XON/XOFF" + + IDS_TITLE, "Egenskaper for %s" +END + +IDD_COMMDLG DIALOGEX 6,5,222,175 +FONT 8, "MS Shell Dlg" +STYLE 0x10C80080 +EXSTYLE 0x00000001 +BEGIN + CONTROL "",IDC_GRP1,"Button",0x50000007,6,5,210,146,0x00000000 + CONTROL "OK",IDC_OKBTN,"Button",0x50010000,98,156,56,13,0x00000000 + CONTROL "Avbryt",IDC_CANCELBTN,"Button",0x50010000,158,156,56,13,0x00000000 + CONTROL "Baud rate:",IDC_STC1,"Static",0x50000000,24,31,42,9,0x00000000 + CONTROL "Byte strrelse:",IDC_STC2,"Static",0x50000000,24,53,42,9,0x00000000 + CONTROL "Parity:",IDC_STC3,"Static",0x50000000,24,73,42,9,0x00000000 + CONTROL "Stop bits:",IDC_STC4,"Static",0x50000000,24,96,42,9,0x00000000 + CONTROL "Flow kontroll:",IDC_STC5,"Static",0x50000000,24,120,42,9,0x00000000 + CONTROL "",IDC_BAUDRATE,"ComboBox",0x50210003,98,29,100,50,0x00000000 + CONTROL "",IDC_BYTESIZE,"ComboBox",0x50210003,98,49,100,50,0x00000000 + CONTROL "",IDC_PARITY,"ComboBox",0x50210003,98,72,100,50,0x00000000 + CONTROL "",IDC_STOPBITS,"ComboBox",0x50210003,98,94,100,50,0x00000000 + CONTROL "",IDC_FLOW,"ComboBox",0x50210003,98,116,100,50,0x00000000 +END + diff --git a/reactos/dll/win32/serialui/serialui.rc b/reactos/dll/win32/serialui/serialui.rc index 97fd401e8c1..b015c0af101 100644 --- a/reactos/dll/win32/serialui/serialui.rc +++ b/reactos/dll/win32/serialui/serialui.rc @@ -17,6 +17,7 @@ LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL #include "lang/fr-FR.rc" #include "lang/id-ID.rc" #include "lang/it-IT.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" diff --git a/reactos/dll/win32/setupapi/lang/no-NO.rc b/reactos/dll/win32/setupapi/lang/no-NO.rc index 889e40a555b..cfb1091b657 100644 --- a/reactos/dll/win32/setupapi/lang/no-NO.rc +++ b/reactos/dll/win32/setupapi/lang/no-NO.rc @@ -25,7 +25,7 @@ STYLE DS_MODALFRAME | DS_SHELLFONT | WS_POPUP | WS_VISIBLE | WS_CAPTION CAPTION "Kopierer filer . . ." FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Cancel", IDCANCEL, 79, 84, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP + PUSHBUTTON "Avbryt", IDCANCEL, 79, 84, 50, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP LTEXT "Kilde:", -1, 7, 7, 77, 11, WS_CHILD | WS_VISIBLE | WS_GROUP LTEXT "", SOURCESTRORD, 7, 18, 194, 11, WS_CHILD | WS_VISIBLE | WS_GROUP LTEXT "Ml:", -1, 7, 30, 77, 11, WS_CHILD | WS_VISIBLE | WS_GROUP @@ -35,7 +35,7 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_QUERY_REBOOT_TEXT "Your computer needs to be rebooted to finish installation. Do you want to proceed?" - IDS_QUERY_REBOOT_CAPTION "Reboot" - IDS_INF_FILE "Setup Information" + IDS_QUERY_REBOOT_TEXT "Din datamaskin trenger startes p nytt for fullfre installasjonen. Vil du starte p nytt?" + IDS_QUERY_REBOOT_CAPTION "Start p nytt" + IDS_INF_FILE "Installerings informasjon" END diff --git a/reactos/dll/win32/tapiui/lang/no-NO.rc b/reactos/dll/win32/tapiui/lang/no-NO.rc new file mode 100644 index 00000000000..35a31630c94 --- /dev/null +++ b/reactos/dll/win32/tapiui/lang/no-NO.rc @@ -0,0 +1,446 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +101 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Dialing Rules" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 201, 2000, 7, 7, 21, 20 + LTEXT "The list below displays the locations you have specified. Select the location from which you are dialing.", -1, 35, 7, 210, 16 + LTEXT "&Locations:", -1, 7, 35, 210, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000011D, 7, 46, 238, 105, WS_EX_CLIENTEDGE + PUSHBUTTON "&Ny...", 1030, 87, 155, 50, 14 + PUSHBUTTON "&Rediger...", 1031, 141, 155, 50, 14 + PUSHBUTTON "&Slett", 1032, 195, 155, 50, 14 + LTEXT "Phone number will be dialed as:", 1052, 7, 181, 100, 8 + LTEXT "", 1053, 14, 195, 224, 16 +END + +102 DIALOGEX 0, 0, 252, 255 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Generielt" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 202, 2000, 7, 7, 20, 20 + LTEXT "Location &name:", -1, 35, 11, 56, 8, SS_CENTERIMAGE + EDITTEXT 1038, 96, 8, 149, 14, ES_AUTOHSCROLL + LTEXT "Specify the location from which you will be dialing.", 2001, 7, 33, 238, 8 + LTEXT "Sprk/®ion:", -1, 7, 49, 161, 8 + COMBOBOX 1006, 7, 60, 175, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "Area &code:", -1, 190, 49, 48, 8 + EDITTEXT 1034, 190, 60, 48, 12, ES_AUTOHSCROLL + GROUPBOX "Dialing rules", 2002, 7, 80, 238, 92 + LTEXT "When dialing from this location, use the following rules:", 2003, 14, 92, 224, 8 + LTEXT "To access an outside line for &local calls, dial:", -1, 14, 106, 170, 8 + EDITTEXT 1010, 190, 104, 48, 12, ES_AUTOHSCROLL + LTEXT "To access an outside line for long-&distance calls, dial:", -1, 14, 122, 170, 8 + EDITTEXT 1011, 190, 120, 48, 12, ES_AUTOHSCROLL + LTEXT "Use this carri&er code to make long-distance calls:", -1, 14, 138, 170, 8 + EDITTEXT 1059, 190, 136, 48, 12, ES_AUTOHSCROLL + LTEXT "Use this carrier code to make &international calls:", -1, 14, 154, 170, 8 + EDITTEXT 1060, 190, 152, 48, 12, ES_AUTOHSCROLL + AUTOCHECKBOX "To disable call &waiting, dial:", 1035, 14, 177, 170, 10 + COMBOBOX 1013, 190, 176, 48, 73, CBS_DROPDOWN | CBS_SORT | WS_VSCROLL + LTEXT "Dial using:", -1, 14, 195, 40, 8 + AUTORADIOBUTTON "&Tone", 1036, 58, 194, 50, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse", 1037, 112, 194, 50, 10, NOT WS_TABSTOP + LTEXT "Phone number will be dialed as:", 1052, 7, 219, 100, 8 + LTEXT "", 1053, 14, 232, 224, 16 +END + +103 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Area Code Rules" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "An area code rule determines how phone numbers are dialed from your current area code to other area codes and within your area code.", 2000, 7, 7, 238, 16 + LTEXT "Area &code rules:", -1, 7, 31, 238, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000801D, 7, 42, 238, 99, WS_EX_CLIENTEDGE + PUSHBUTTON "&Ny...", 1030, 87, 147, 50, 14 + PUSHBUTTON "&Rediger...", 1031, 141, 147, 50, 14 + PUSHBUTTON "&Slett", 1032, 195, 147, 50, 14 + GROUPBOX "Beskrivelse", 2006, 7, 166, 238, 45 + LTEXT "", 1039, 14, 180, 224, 24 +END + +104 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Calling Card" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the calling card you will use, or click New to add a different card.", 2000, 7, 7, 238, 8 + LTEXT "Card &Types:", -1, 7, 23, 238, 8 + CONTROL "", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 34, 238, 63, WS_EX_CLIENTEDGE + PUSHBUTTON "&Ny...", 1030, 87, 103, 50, 14 + PUSHBUTTON "&Rediger...", 1031, 141, 103, 50, 14 + PUSHBUTTON "&Slett", 1032, 195, 103, 50, 14 + LTEXT "K&onto nummer:", -1, 7, 127, 91, 8 + EDITTEXT 1018, 102, 125, 143, 12, ES_AUTOHSCROLL + LTEXT "&Personlig ID nummer (PIN):", -1, 7, 145, 91, 8 + EDITTEXT 1019, 102, 143, 143, 12, ES_AUTOHSCROLL + GROUPBOX "Access phone numbers for", 2001, 7, 158, 238, 53 + LTEXT "Long distance calls:", -1, 14, 172, 84, 8 + LTEXT "", 1042, 102, 172, 136, 8 + LTEXT "International calls:", -1, 14, 184, 84, 8 + LTEXT "", 1043, 102, 184, 136, 8 + LTEXT "Local calls:", -1, 14, 196, 84, 8 + LTEXT "", 1051, 102, 196, 136, 8 +END + +105 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Generiel" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 203, 2000, 7, 7, 20, 20 + LTEXT "&Calling card name:", -1, 35, 12, 64, 8, SS_CENTERIMAGE + EDITTEXT 1047, 105, 9, 140, 14, ES_AUTOHSCROLL + LTEXT "Account &number:", -1, 7, 35, 238, 8 + EDITTEXT 1018, 7, 46, 116, 14, ES_AUTOHSCROLL + LTEXT "&Personal Identification Number (PIN):", -1, 7, 68, 238, 8 + EDITTEXT 1019, 7, 80, 116, 14, ES_AUTOHSCROLL + LTEXT "This calling card will be used when:", 1056, 14, 117, 224, 8 + GROUPBOX "Calling card details", 2001, 7, 105, 238, 66 + LTEXT "", 1000, 22, 131, 216, 8 + LTEXT "", 1001, 22, 143, 216, 8 + LTEXT "", 1002, 22, 155, 216, 8 +END + +106 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Long Distance" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &long distance calls:", -1, 7, 7, 238, 8 + EDITTEXT 1044, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making long-distance calls. Enter these steps in the exact order as they appear on your calling card.", 2000, 7, 40, 238, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 80, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Flytt &opp", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Flytt ned", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Slett", 1024, 195, 119, 50, 14 + PUSHBUTTON "Konto &Nummer", 1025, 7, 161, 90, 14 + PUSHBUTTON "&Konto Nummer", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +107 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "International" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &international calls:", -1, 7, 7, 238, 8 + EDITTEXT 1045, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making international calls. Enter these steps in the exact order as they appear on your calling card.", 2000, 7, 40, 244, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 80, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Flytt &opp", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Flytt ned", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Slett", 1024, 195, 119, 50, 14 + PUSHBUTTON "Tilgang &nummer", 1025, 7, 161, 90, 14 + PUSHBUTTON "A&ccount Number", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +108 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Local Calls" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Access number for &local calls:", -1, 7, 7, 238, 8 + EDITTEXT 1008, 7, 18, 140, 14, ES_AUTOHSCROLL + LTEXT "Use the buttons below to enter the dialing steps for making local calls. Enter these steps in the exact order as they appear on your calling card. To make local calls without using your calling card, leave this section blank.", 2000, 7, 40, 238, 24 + LTEXT "Calling ca&rd dialing steps:", -1, 7, 72, 238, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000400D, 7, 83, 184, 74, WS_EX_CLIENTEDGE + PUSHBUTTON "Flytt &opp", 1022, 195, 83, 50, 14 + PUSHBUTTON "&Flytt ned", 1023, 195, 101, 50, 14 + PUSHBUTTON "&Slett", 1024, 195, 119, 50, 14 + PUSHBUTTON "Access &Number", 1025, 7, 161, 90, 14 + PUSHBUTTON "A&ccount Number", 1018, 101, 161, 90, 14 + PUSHBUTTON "&PIN", 1019, 7, 179, 90, 14 + PUSHBUTTON "D&estination Number...", 1020, 101, 179, 90, 14 + PUSHBUTTON "&Wait for Prompt...", 1017, 7, 197, 90, 14 + PUSHBUTTON "&Specify Digits...", 1021, 101, 197, 90, 14 +END + +109 DIALOGEX 0, 0, 252, 257 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "New Area Code Rule" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "This area code rule will only apply to calls made to the area code and prefix combination you specify below.", 2000, 7, 6, 238, 16 + LTEXT "Area code you are calling:", -1, 7, 31, 110, 8 + LTEXT "A&rea code:", -1, 7, 47, 36, 8 + EDITTEXT 1034, 46, 44, 50, 14, ES_AUTOHSCROLL + LTEXT "Specify the prefixes to be used for this area code rule.", -1, 14, 78, 224, 8 + AUTORADIOBUTTON "&Include all the prefixes within this area code", 1014, 14, 90, 224, 12, NOT WS_TABSTOP + AUTORADIOBUTTON "Include &only the prefixes in the list below:", 1015, 14, 104, 224, 12, NOT WS_TABSTOP + LTEXT "&Prefixes to include:", 1057, 26, 117, 119, 8 + CONTROL "List1", 1033, "SysListView32", WS_BORDER | WS_TABSTOP | 0x0000411D, 25, 128, 66, 32, WS_EX_CLIENTEDGE + PUSHBUTTON "&Add...", 1005, 95, 128, 50, 14 + PUSHBUTTON "D&elete", 1024, 95, 146, 50, 14 + LTEXT "When dialing phone numbers that contain the prefixes above:", -1, 14, 184, 224, 8 + AUTOCHECKBOX "&Dial:", 1012, 14, 198, 30, 12 + EDITTEXT 1007, 46, 196, 42, 14, ES_AUTOHSCROLL + AUTOCHECKBOX "Include the area &code", 1029, 14, 214, 85, 12 + DEFPUSHBUTTON "OK", 1, 141, 236, 50, 14 + PUSHBUTTON "Cancel", 2, 195, 236, 50, 14 + RTEXT "Area code", 2001, 133, 31, 51, 8 + LTEXT "Prefix", 2002, 200, 31, 45, 8 + CONTROL "", 2003, "STATIC", SS_BLACKFRAME | SS_SUNKEN, 180, 41, 1, 6 + CONTROL "", 2004, "STATIC", SS_BLACKFRAME | SS_SUNKEN, 203, 41, 1, 6 + RTEXT "X - X X X - X X X - X X X X", 2005, 133, 48, 112, 8 + GROUPBOX "Prefixes", -1, 7, 64, 238, 102 + GROUPBOX "Rules", -1, 7, 170, 238, 60 +END + +110 DIALOGEX 0, 0, 227, 82 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "", 1003, 7, 7, 213, 8 + LTEXT "", 1039, 7, 23, 213, 8 + EDITTEXT 1031, 7, 34, 213, 14, ES_AUTOHSCROLL + DEFPUSHBUTTON "OK", 1, 116, 62, 50, 14 + PUSHBUTTON "Avbryt", 2, 170, 62, 50, 14 +END + +111 DIALOGEX 0, 0, 252, 124 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Vent for" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the type of prompt to wait for before continuing with the dialing sequence.", 2000, 7, 7, 238, 16 + AUTORADIOBUTTON "Wait for a &dial tone", 1009, 7, 31, 238, 10, WS_GROUP + AUTORADIOBUTTON "Wait for a &voice message to complete", 1016, 7, 47, 238, 10, NOT WS_TABSTOP + AUTORADIOBUTTON "Wait for a specific length of &time:", 1048, 7, 63, 238, 10, NOT WS_TABSTOP + EDITTEXT 1050, 18, 77, 36, 14, ES_AUTOHSCROLL | WS_GROUP + CONTROL "Spin1", 1049, "msctls_updown32", 0x00000036, 42, 78, 11, 14 + LTEXT "&sekunder", -1, 58, 81, 187, 8 + DEFPUSHBUTTON "OK", 1, 141, 103, 50, 14 + PUSHBUTTON "Avbryt", 2, 195, 103, 50, 14 +END + +112 DIALOGEX 0, 0, 252, 111 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Destination number" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "This step will place the destination number that you will be dialing into the calling card sequence. When dialing the destination number, which parts of the number do you want to dial?", 2000, 7, 7, 238, 24 + AUTOCHECKBOX "Dial the &country/region code", 1027, 7, 39, 238, 10 + AUTOCHECKBOX "Dial the &area code", 1034, 7, 55, 238, 10 + AUTOCHECKBOX "Dial the &number", 1008, 7, 71, 238, 10, WS_DISABLED + DEFPUSHBUTTON "OK", 1, 141, 92, 50, 14 + PUSHBUTTON "Avbryt", 2, 195, 92, 50, 14 +END + +113 DIALOGEX 0, 0, 252, 218 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUPWINDOW | WS_CAPTION +CAPTION "Avansert" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 201, 2000, 7, 7, 20, 20 + LTEXT "The following telephony providers are installed on this computer:", -1, 40, 7, 205, 8 + LTEXT "&Providers:", -1, 7, 35, 238, 8 + LISTBOX 1033, 7, 46, 238, 147, LBS_STANDARD | LBS_NOINTEGRALHEIGHT | WS_TABSTOP + PUSHBUTTON "L&egg til...", 1005, 87, 197, 50, 14 + PUSHBUTTON "&Fjern", 1024, 141, 197, 50, 14 + PUSHBUTTON "&Konfigurer...", 1031, 195, 197, 50, 14 +END + +114 DIALOGEX 20, 15, 252, 127 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Add Provider" +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Select the provider you wish to install from the list below, and click Add.", 2000, 7, 7, 241, 8 + LTEXT "&Telephony providers:", -1, 7, 23, 144, 10 + LISTBOX 1055, 7, 34, 238, 74, LBS_STANDARD | WS_TABSTOP + PUSHBUTTON "&Legg til", 1005, 141, 106, 50, 14 + DEFPUSHBUTTON "Avbryt", 2, 195, 106, 50, 14 +END + +115 DIALOGEX 10, 10, 303, 228 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +EXSTYLE WS_EX_CONTEXTHELP +CAPTION "Location Information" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 302, 302, "STATIC", SS_BITMAP, 10, 10, 88, 155 + LTEXT "Before you can make any phone or modem connections, ReactOS needs the following information about your current location.", 2000, 107, 15, 188, 25 + LTEXT "&What country/region are you in now?", -1, 107, 43, 189, 10 + COMBOBOX 1006, 107, 55, 180, 200, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "What area &code (or city code) are you in now?", -1, 107, 74, 189, 10 + EDITTEXT 1034, 107, 87, 45, 12, ES_AUTOHSCROLL + LTEXT "If you need to specify a ca&rrier code, what is it?", -1, 107, 105, 189, 10 + EDITTEXT 1058, 106, 118, 45, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "If you dial a number to access an &outside line, what is it?", -1, 107, 137, 189, 10 + EDITTEXT 1010, 107, 149, 45, 12, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "The phone system at this location uses:", -1, 107, 168, 189, 10 + AUTORADIOBUTTON "&Tone dialing", 1036, 107, 178, 57, 14, WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse dialing", 1037, 175, 178, 57, 14, NOT WS_TABSTOP + DEFPUSHBUTTON "OK", 1, 192, 204, 50, 14 + PUSHBUTTON "Cancel", 2, 246, 204, 50, 14 +END + +400 DIALOGEX 0, 0, 290, 151 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL 302, 302, "STATIC", SS_BITMAP, 0, 0, 88, 155 + LTEXT "Before you can make any phone or modem connections, ReactOS needs the following information about your current location.", 2000, 95, 2, 188, 25 + LTEXT "&What country/region are you in now?", -1, 95, 30, 188, 10 + COMBOBOX 1006, 95, 41, 177, 68, CBS_DROPDOWNLIST | CBS_SORT | WS_VSCROLL + LTEXT "What area &code (or city code) are you in now?", -1, 95, 61, 188, 10 + EDITTEXT 1034, 95, 73, 40, 14, ES_AUTOHSCROLL + LTEXT "If you dial a number to access an &outside line, what is it?", -1, 95, 96, 188, 10 + EDITTEXT 1010, 95, 107, 40, 14, ES_UPPERCASE | ES_AUTOHSCROLL + LTEXT "The phone system at this location uses:", -1, 95, 129, 159, 10 + AUTORADIOBUTTON "&Tone dialing", 1036, 95, 139, 55, 12, WS_GROUP | NOT WS_TABSTOP + AUTORADIOBUTTON "&Pulse dialing", 1037, 155, 139, 55, 12, NOT WS_TABSTOP +END + +500 DIALOGEX 0, 0, 235, 88 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_SETFOREGROUND | DS_CENTER | WS_POPUPWINDOW | WS_CAPTION +CAPTION "ReactOS Explorer" +FONT 8, "MS Shell Dlg" +BEGIN + ICON 504, 501, 13, 14, 21, 20 + LTEXT "", 502, 47, 15, 180, 32 + AUTOCHECKBOX "&In the future, always trust this page", 503, 50, 47, 147, 12 + DEFPUSHBUTTON "&OK", 505, 110, 65, 50, 14 + PUSHBUTTON "&Avbryt", 506, 164, 65, 50, 14 +END + +STRINGTABLE +BEGIN + 1 "Telefon og Modem valg" + 2 "Configure dialing rules and properties for using your modem." + 3 "Location" + 4 "To create a new location, click New." + 5 "New Location" + 6 "Edit Location" + 7 "New Calling Card" + 8 "Edit Calling Card" + 9 "Area Code" + 10 "Prefixes" + 11 "Rule" + 12 "The character you entered is invalid.\n\nValid characters are 0 through 9, *, #, and comma." + 13 "The character you entered is invalid.\n\nValid characters are 0 through 9, *, #, space, and comma." + 14 "The character you entered is invalid.\n\nValid characters are 0 through 9." + 15 "The character you entered is invalid." + 16 "Dial %1" + 17 "Dial %1 plus area code" + 18 "Dial area code" + 19 "Dial number only" + 20 "All" + 21 "Selected" + 22 "Edit Area Code Rule" + 23 "Select a rule in the list above to view its description, or click New to add a rule." + 24 "Dial '%2' plus the area code before the number for all calls within the %1 area code." + 25 "Dial '%2' before the number for all calls within the %1 area code." + 26 "Dial the area code before the number for all calls within the %1 area code." + 27 "Dial only the number for all calls within the %1 area code." + 28 "Dial '%2' plus the area code before the number for calls within the %1 area code, containing the prefixes you specified." + 29 "Dial '%2' before the number for calls within the %1 area code, containing the prefixes you specified." + 30 "Dial the area code before the number for calls within the %1 area code, containing the prefixes you specified." + 31 "Dial only the number for calls within the %1 area code, containing the prefixes you specified." + 32 "Dial a '1' before calls within all other area codes, and include the area code for all prefixes." + 33 "Add Prefix" + 34 "Enter one or more prefixes separated by spaces or commas." + 35 "Specify Digits" + 36 "Enter one or more digits (including * and #) to be dialed." + 37 "You tried to enter an invalid character.\n\nValid characters are 0 thru 9 and space." + 38 "Wait for %1!d! seconds." + 39 "Dial the access number." + 40 "Dial the account number." + 41 "Dial the PIN number." + 42 "Wait for a dial tone." + 43 "Wait for a voice message to end." + 44 "Dial the country/region code, area code, and number." + 45 "Dial the country/region code and number." + 46 "Dial the area code and number." + 47 "Dial the country/region code." + 48 "Dial the area code." + 49 "Dial the number." + 50 "dialing long distance calls." + 51 "dialing international calls." + 52 "dialing local calls." + 53 "There are no rules defined for how this calling card should be used." + 54 "You must enter the long distance carrier code for this location." + 55 "You must enter a name for this location." + 56 "You must enter the area code for this location." + 57 "You must select the number to dial to disable call waiting." + 58 "You must select the country or region that you are calling from." + 59 "Missing Information" + 60 "The location name you have entered is already in use. Please enter a unique name." + 61 "This calling card is missing some required information. To use this card, click Edit to provide more information, or select a different card." + 62 "You must select a default calling card. Select a card from the list, or click New to create a new card." + 63 "You must enter the calling card name." + 64 "You must enter the account number." + 65 "You must enter the PIN number." + 66 "There are no rules defined for this calling card. To create a rule, select the Long Distance, International, or Local Calls tab." + 67 "Your long distance rule requires your calling card's long distance access number." + 68 "Your international rule requires your calling card's international access number." + 69 "Your local rule requires your calling card's local access number." + 70 "Ingen" + 71 "Are you sure you want to remove the selected Telephony Service Provider?" + 72 "" + 73 "You must enter the prefixes for which this rule applies." + 74 "&Digits:" + 75 "&Prefixes:" + 76 "You tried to enter an invalid character.\n\nValid characters are 0 thru 9, space, and comma." + 77 "Confirm Delete" + 78 "Are you sure you want to delete this location?" + 79 "Are you sure you want to delete this calling card?" + 80 "Are you sure you want to delete this area code rule?" + 81 "You must enter the digits to dial." + 82 "The calling card name you have entered is already in use. Please enter a unique name." + 83 "ReactOS needs telephone information about the location from which you will be dialing. If you cancel without providing this information, this program may not function correctly when dialing. In addition, some applications respond to your canceling this dialog box by immediately re-posting it.\nAre you sure you want to cancel?" + 84 "Confirm Cancel" + 85 "My Location" + 86 "" + 87 "The character you entered is invalid.\n\nValid characters are 0 through 9, A through D, *, #, +, !, space, and comma." + 88 "You must enter the international carrier code for this location." + 89 "You must enter the carrier code for this location." + 90 "This page is attempting to make or monitor telephone calls or other multimedia connections on your computer.\nDo you want allow it to continue?" + 91 "This page is attempting to access directory information on your network.\nDo you want to allow it to continue?" + 92 "This page is attempting to access or change network conferencing information.\nDo you want to allow it to continue?" + 93 "This page is attempting to access or change registry information.\nDo you want to allow it to continue?" + 1064 "Phone And Modem control panel can not be opened. You may have a problem starting telephony service." + 1065 "Remove Provider" + 15800 "23" + 15801 "0,\"None (Direct Dial)\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",\"\",1" + 15802 "1,\"AT&T Direct Dial via 1010ATT1\",\"\",\"G\",\"J1FG\",\"J011EFG\",\"\",\"\",\"1010288\",\"1010288\",1" + 15803 "2,\"AT&T via 1010ATT0\",\"\",\"G\",\"J0FG$TH\",\"J01EFG$TH\",\"\",\"\",\"1010288\",\"1010288\",1" + 15804 "3,\"AT&T via 1-800-321-0288\",\"\",\"G\",\"J$TFG$TH\",\"J$T01EFG$TH\",\"\",\"\",\"18003210288\",\"18003210288\",1" + 15805 "4,\"MCI Direct Dial via 10102221\",\"\",\"G\",\"J1FG\",\"J011EFG\",\"\",\"\",\"1010222\",\"1010222\",1" + 15806 "5,\"MCI via 10102220\",\"\",\"G\",\"J0FG$TH\",\"J01EFG$TH\",\"\",\"\",\"1010222\",\"1010222\",1" + 15807 "6,\"MCI via 1-800-888-8000\",\"\",\"G\",\"J,,,,,,TH,,FG\",\"J,,,,,,TH,,011EFG\",\"\",\"\",\"18008888000\",\"18008888000\",1" + 15808 "7,\"MCI via 1-800-674-0700\",\"\",\"G\",\"J,,,,,,TH,,FG\",\"J,,,,,,TH,,011EFG\",\"\",\"\",\"18006740700\",\"18006740700\",1" + 15809 "8,\"MCI via 1-800-674-7000\",\"\",\"G\",\"J,,,,,,TH,,FG\",\"J,,,,,,TH,,011EFG\",\"\",\"\",\"18006747000\",\"18006747000\",1" + 15810 "9,\"US Sprint Direct Dial via 10103331\",\"\",\"G\",\"J1FG\",\"J011EFG\",\"\",\"\",\"1010333\",\"1010333\",1" + 15811 "10,\"US Sprint via 10103330\",\"\",\"G\",\"J0FG$TH\",\"J01EFG$TH\",\"\",\"\",\"1010333\",\"1010333\",1" + 15812 "11,\"US Sprint via 1-800-877-8000\",\"\",\"G\",\"J,,,T0FG,,H\",\"J,,,T01EFG#,H\",\"\",\"\",\"18008778000\",\"18008778000\",1" + 15813 "12,\"Calling Card via 0\",\"\",\"G\",\"0FG$TH\",\"01EFG$TH\",\"\",\"\",\"\",\"\",1" + 15814 "13,\"Carte France Telecom\",\"\",\"T3010,H,0FG#\",\"T3010,H,0FG#\",\"T3010,H,00EFG#\",\"\",\"\",\"\",\"\",1" + 15815 "14,\"Mercury (UK)\",\"\",\"J$TH,0FG\",\"J$TH,0FG\",\"J$TH,0FG\",\"\",\"0500800800\",\"0500800800\",\"0500800800\",1" + 15816 "15,\"British Telecom (UK)\",\"\",\"J$H,0FG\",\"J$H,0FG\",\"J$H,00EFG\",\"\",\"144\",\"144\".\"144\",1" + 15817 "16,\"CLEAR Communications (New Zealand)\",\"\",\"J$TH,0FG\",\"J$TH,0FG\",\"J$TH,00EFG\",\"\",\"0502333\",\"0502333\",\"0502333\",1" + 15818 "17,\"Telecom New Zealand\",\"\",\"J,0FG?H\",\"J,0FG?H\",\"J,00EFG?H\",\"\",\"012\",\"012\",\"012\",1" + 15819 "18,\"Global Card (Taiwan to USA)\",\"\",\"G\",\"0FG\",\"J,102880$TFG$H\",\"\",\"\",\"\",\"0080\",1" + 15820 "19,\"Telstra (Australia) via 1818 (voice)\",\"\",\"J$TH,FG#\",\"J$TH,FG#\",\"J$TH,0011EFG#\",\"\",\"1818\",\"1818\",\"1818\",1" + 15821 "20,\"Telstra (Australia) via 1818 (fax)\",\"\",\"J$TH,FG#\",\"J$TH,FG#\",\"J$TH,0015EFG#\",\"\",\"1818\",\"1818\",\"1818\",1" + 15822 "21,\"Optus (Australia) via 1812\",\"\",\"FG\",\"FG\",\"J@TH,0011EFG\",\"\",\"\",\"\",\"1812\",1" + 15823 "22,\"Optus (Australia) via 008551812\",\"\",\"FG\",\"FG\",\"J@TH,0011EFG\",\"\",\"\",\"\",\"008551812\",1" +END diff --git a/reactos/dll/win32/tapiui/tapiui.rc b/reactos/dll/win32/tapiui/tapiui.rc index ecd80915dbf..0546f0fc681 100644 --- a/reactos/dll/win32/tapiui/tapiui.rc +++ b/reactos/dll/win32/tapiui/tapiui.rc @@ -17,6 +17,7 @@ IDB_WIZARD BITMAP "res/302.bmp" #include "lang/de-DE.rc" #include "lang/en-US.rc" +#include "lang/no-NO.rc" #include "lang/pl-PL.rc" #include "lang/ru-RU.rc" #include "lang/uk-UA.rc" From 6186f98f1435f5357b840197ccfc6146d3c3683c Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Tue, 5 Aug 2008 12:23:58 +0000 Subject: [PATCH 153/304] - Sync gdiplus with Wine head svn path=/trunk/; revision=35124 --- reactos/dll/win32/gdiplus/brush.c | 139 ++++++++++ reactos/dll/win32/gdiplus/customlinecap.c | 41 ++- reactos/dll/win32/gdiplus/font.c | 279 +++++++++++++++++--- reactos/dll/win32/gdiplus/gdiplus.c | 26 ++ reactos/dll/win32/gdiplus/gdiplus.spec | 134 +++++----- reactos/dll/win32/gdiplus/gdiplus_private.h | 59 ++++- reactos/dll/win32/gdiplus/graphics.c | 157 +++++++++-- reactos/dll/win32/gdiplus/graphicspath.c | 223 ++++++++++++++++ reactos/dll/win32/gdiplus/image.c | 85 +++++- reactos/dll/win32/gdiplus/matrix.c | 66 +++++ reactos/dll/win32/gdiplus/pathiterator.c | 76 +++++- reactos/dll/win32/gdiplus/pen.c | 69 ++++- reactos/dll/win32/gdiplus/region.c | 168 ++++++++++-- reactos/dll/win32/gdiplus/stringformat.c | 172 ++++++++++++ reactos/include/psdk/gdiplusenums.h | 17 ++ reactos/include/psdk/gdiplusflat.h | 79 +++++- reactos/include/psdk/gdiplusgpstubs.h | 2 +- reactos/include/psdk/gdiplustypes.h | 6 + 18 files changed, 1612 insertions(+), 186 deletions(-) diff --git a/reactos/dll/win32/gdiplus/brush.c b/reactos/dll/win32/gdiplus/brush.c index 2d15e011a20..13cd3abdf05 100644 --- a/reactos/dll/win32/gdiplus/brush.c +++ b/reactos/dll/win32/gdiplus/brush.c @@ -75,6 +75,24 @@ GpStatus WINGDIPAPI GdipCloneBrush(GpBrush *brush, GpBrush **clone) memcpy(dest->pathdata.Points, src->pathdata.Points, count * sizeof(PointF)); memcpy(dest->pathdata.Types, src->pathdata.Types, count); + /* blending */ + count = src->blendcount; + dest->blendcount = count; + dest->blendfac = GdipAlloc(count * sizeof(REAL)); + dest->blendpos = GdipAlloc(count * sizeof(REAL)); + + if(!dest->blendfac || !dest->blendpos){ + GdipFree(dest->pathdata.Points); + GdipFree(dest->pathdata.Types); + GdipFree(dest->blendfac); + GdipFree(dest->blendpos); + GdipFree(dest); + return OutOfMemory; + } + + memcpy(dest->blendfac, src->blendfac, count * sizeof(REAL)); + memcpy(dest->blendpos, src->blendpos, count * sizeof(REAL)); + break; } case BrushTypeLinearGradient: @@ -180,6 +198,25 @@ GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect* rect, return GdipCreateLineBrushFromRect(&rectF, startcolor, endcolor, mode, wrap, line); } +/* FIXME: angle value completely ignored. Don't know how to use it since native + always set Brush rectangle to rect (independetly of this angle). + Maybe it's used only on drawing. */ +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF* rect, + ARGB startcolor, ARGB endcolor, REAL angle, BOOL isAngleScalable, GpWrapMode wrap, + GpLineGradient **line) +{ + return GdipCreateLineBrushFromRect(rect, startcolor, endcolor, LinearGradientModeForwardDiagonal, + wrap, line); +} + +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect* rect, + ARGB startcolor, ARGB endcolor, REAL angle, BOOL isAngleScalable, GpWrapMode wrap, + GpLineGradient **line) +{ + return GdipCreateLineBrushFromRectI(rect, startcolor, endcolor, LinearGradientModeForwardDiagonal, + wrap, line); +} + GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF* points, INT count, GpWrapMode wrap, GpPathGradient **grad) { @@ -194,6 +231,15 @@ GpStatus WINGDIPAPI GdipCreatePathGradient(GDIPCONST GpPointF* points, *grad = GdipAlloc(sizeof(GpPathGradient)); if (!*grad) return OutOfMemory; + (*grad)->blendfac = GdipAlloc(sizeof(REAL)); + if(!(*grad)->blendfac){ + GdipFree(*grad); + return OutOfMemory; + } + (*grad)->blendfac[0] = 1.0; + (*grad)->blendpos = NULL; + (*grad)->blendcount = 1; + (*grad)->pathdata.Count = count; (*grad)->pathdata.Points = GdipAlloc(count * sizeof(PointF)); (*grad)->pathdata.Types = GdipAlloc(count); @@ -265,6 +311,15 @@ GpStatus WINGDIPAPI GdipCreatePathGradientFromPath(GDIPCONST GpPath* path, *grad = GdipAlloc(sizeof(GpPathGradient)); if (!*grad) return OutOfMemory; + (*grad)->blendfac = GdipAlloc(sizeof(REAL)); + if(!(*grad)->blendfac){ + GdipFree(*grad); + return OutOfMemory; + } + (*grad)->blendfac[0] = 1.0; + (*grad)->blendpos = NULL; + (*grad)->blendcount = 1; + (*grad)->pathdata.Count = path->pathdata.Count; (*grad)->pathdata.Points = GdipAlloc(path->pathdata.Count * sizeof(PointF)); (*grad)->pathdata.Types = GdipAlloc(path->pathdata.Count); @@ -457,6 +512,8 @@ GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush *brush) case BrushTypePathGradient: GdipFree(((GpPathGradient*) brush)->pathdata.Points); GdipFree(((GpPathGradient*) brush)->pathdata.Types); + GdipFree(((GpPathGradient*) brush)->blendfac); + GdipFree(((GpPathGradient*) brush)->blendpos); break; case BrushTypeSolidColor: case BrushTypeLinearGradient: @@ -482,6 +539,43 @@ GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient *line, return Ok; } +GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient *brush, GpWrapMode *wrapmode) +{ + if(!brush || !wrapmode) + return InvalidParameter; + + *wrapmode = brush->wrap; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient *brush, REAL *blend, + REAL *positions, INT count) +{ + if(!brush || !blend || !positions || count <= 0) + return InvalidParameter; + + if(count < brush->blendcount) + return InsufficientBuffer; + + memcpy(blend, brush->blendfac, count*sizeof(REAL)); + if(brush->blendcount > 1){ + memcpy(positions, brush->blendpos, count*sizeof(REAL)); + } + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient *brush, INT *count) +{ + if(!brush || !count) + return InvalidParameter; + + *count = brush->blendcount; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient *grad, GpPointF *point) { @@ -547,6 +641,51 @@ GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient *grad, return Ok; } +GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient *brush, GpRectF *rect) +{ + GpRectF r; + GpPath* path; + GpStatus stat; + + if(!brush || !rect) + return InvalidParameter; + + stat = GdipCreatePath2(brush->pathdata.Points, brush->pathdata.Types, + brush->pathdata.Count, FillModeAlternate, &path); + if(stat != Ok) return stat; + + stat = GdipGetPathWorldBounds(path, &r, NULL, NULL); + if(stat != Ok){ + GdipDeletePath(path); + return stat; + } + + memcpy(rect, &r, sizeof(GpRectF)); + + GdipDeletePath(path); + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient *brush, GpRect *rect) +{ + GpRectF rectf; + GpStatus stat; + + if(!brush || !rect) + return InvalidParameter; + + stat = GdipGetPathGradientRect(brush, &rectf); + if(stat != Ok) return stat; + + rect->X = roundr(rectf.X); + rect->Y = roundr(rectf.Y); + rect->Width = roundr(rectf.Width); + rect->Height = roundr(rectf.Height); + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient *grad, ARGB *argb, INT *count) { diff --git a/reactos/dll/win32/gdiplus/customlinecap.c b/reactos/dll/win32/gdiplus/customlinecap.c index e8e18bc3806..48a20dfbc10 100644 --- a/reactos/dll/win32/gdiplus/customlinecap.c +++ b/reactos/dll/win32/gdiplus/customlinecap.c @@ -100,6 +100,8 @@ GpStatus WINGDIPAPI GdipCreateCustomLineCap(GpPath* fillPath, GpPath* strokePath (*customCap)->inset = baseInset; (*customCap)->cap = baseCap; + (*customCap)->join = LineJoinMiter; + (*customCap)->scale = 1.0; return Ok; } @@ -116,6 +118,28 @@ GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap *customCap) return Ok; } +GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap* customCap, + GpLineJoin* lineJoin) +{ + if(!customCap || !lineJoin) + return InvalidParameter; + + *lineJoin = customCap->join; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap* custom, + REAL* widthScale) +{ + if(!custom || !widthScale) + return InvalidParameter; + + *widthScale = custom->scale; + + return Ok; +} + GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap* custom, GpLineCap start, GpLineCap end) { @@ -144,12 +168,12 @@ GpStatus WINGDIPAPI GdipSetCustomLineCapBaseCap(GpCustomLineCap* custom, GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap* custom, REAL* inset) { - static int calls; + if(!custom || !inset) + return InvalidParameter; - if(!(calls++)) - FIXME("not implemented\n"); + *inset = custom->inset; - return NotImplemented; + return Ok; } GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap* custom, @@ -163,15 +187,16 @@ GpStatus WINGDIPAPI GdipSetCustomLineCapBaseInset(GpCustomLineCap* custom, return NotImplemented; } +/*FIXME: LineJoin completely ignored now */ GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap* custom, GpLineJoin join) { - static int calls; + if(!custom) + return InvalidParameter; - if(!(calls++)) - FIXME("not implemented\n"); + custom->join = join; - return NotImplemented; + return Ok; } GpStatus WINGDIPAPI GdipSetCustomLineCapWidthScale(GpCustomLineCap* custom, diff --git a/reactos/dll/win32/gdiplus/font.c b/reactos/dll/win32/gdiplus/font.c index 78de0a6ae88..70f7bb04b3e 100644 --- a/reactos/dll/win32/gdiplus/font.c +++ b/reactos/dll/win32/gdiplus/font.c @@ -95,10 +95,10 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, { WCHAR facename[LF_FACESIZE]; LOGFONTW* lfw; - const TEXTMETRICW* tmw; + const NEWTEXTMETRICW* tmw; GpStatus stat; - if (!fontFamily || !fontFamily->FamilyName || !font) + if (!fontFamily || !font) return InvalidParameter; TRACE("%p (%s), %f, %d, %d, %p\n", fontFamily, @@ -118,7 +118,7 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, lfw->lfStrikeOut = tmw->tmStruckOut; lfw->lfCharSet = tmw->tmCharSet; lfw->lfPitchAndFamily = tmw->tmPitchAndFamily; - lstrcpynW((lfw->lfFaceName), facename, sizeof(WCHAR) * LF_FACESIZE); + lstrcpynW(lfw->lfFaceName, facename, LF_FACESIZE); switch (unit) { @@ -157,6 +157,9 @@ GpStatus WINGDIPAPI GdipCreateFont(GDIPCONST GpFontFamily *fontFamily, return Ok; } +/******************************************************************************* + * GdipCreateFontFromLogfontW [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, GDIPCONST LOGFONTW *logfont, GpFont **font) { @@ -169,7 +172,7 @@ GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, *font = GdipAlloc(sizeof(GpFont)); if(!*font) return OutOfMemory; - memcpy(&(*font)->lfw.lfFaceName, logfont->lfFaceName, LF_FACESIZE * + memcpy((*font)->lfw.lfFaceName, logfont->lfFaceName, LF_FACESIZE * sizeof(WCHAR)); (*font)->lfw.lfHeight = logfont->lfHeight; (*font)->lfw.lfItalic = logfont->lfItalic; @@ -192,6 +195,9 @@ GpStatus WINGDIPAPI GdipCreateFontFromLogfontW(HDC hdc, return Ok; } +/******************************************************************************* + * GdipCreateFontFromLogfontA [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC hdc, GDIPCONST LOGFONTA *lfa, GpFont **font) { @@ -210,6 +216,9 @@ GpStatus WINGDIPAPI GdipCreateFontFromLogfontA(HDC hdc, return Ok; } +/******************************************************************************* + * GdipDeleteFont [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipDeleteFont(GpFont* font) { if(!font) @@ -220,6 +229,9 @@ GpStatus WINGDIPAPI GdipDeleteFont(GpFont* font) return Ok; } +/******************************************************************************* + * GdipCreateFontFromDC [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateFontFromDC(HDC hdc, GpFont **font) { HFONT hfont; @@ -283,10 +295,13 @@ GpStatus WINGDIPAPI GdipGetFontUnit(GpFont *font, Unit *unit) return Ok; } -/* FIXME: use graphics */ +/******************************************************************************* + * GdipGetLogFontW [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics, LOGFONTW *lfw) { + /* FIXME: use graphics */ if(!font || !graphics || !lfw) return InvalidParameter; @@ -295,6 +310,9 @@ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont *font, GpGraphics *graphics, return Ok; } +/******************************************************************************* + * GdipCloneFont [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCloneFont(GpFont *font, GpFont **cloneFont) { if(!font || !cloneFont) @@ -308,19 +326,56 @@ GpStatus WINGDIPAPI GdipCloneFont(GpFont *font, GpFont **cloneFont) return Ok; } -/* Borrowed from GDI32 */ +/******************************************************************************* + * GdipGetFontHeightGivenDPI [GDIPLUS.@] + * PARAMS + * font [I] Font to retrieve DPI from + * dpi [I] DPI to assume + * height [O] Return value + * + * RETURNS + * SUCCESS: Ok + * FAILURE: InvalidParameter if font or height is NULL + * + * NOTES + * According to MSDN, the result is (lineSpacing)*(fontSize / emHeight)*dpi + * (for anything other than unit Pixel) + */ +GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont *font, REAL dpi, REAL *height) +{ + if (!(font && height)) return InvalidParameter; + + FIXME("%p (%s), %f, %p\n", font, + debugstr_w(font->lfw.lfFaceName), dpi, height); + + return NotImplemented; +} + +/*********************************************************************** + * Borrowed from GDI32: + * + * Elf is really an ENUMLOGFONTEXW, and ntm is a NEWTEXTMETRICEXW. + * We have to use other types because of the FONTENUMPROCW definition. + */ static INT CALLBACK is_font_installed_proc(const LOGFONTW *elf, const TEXTMETRICW *ntm, DWORD type, LPARAM lParam) { + if (!ntm) + { + return 1; + } + + *(NEWTEXTMETRICW*)lParam = *(const NEWTEXTMETRICW*)ntm; + return 0; } -static BOOL is_font_installed(const WCHAR *name) +static BOOL find_installed_font(const WCHAR *name, NEWTEXTMETRICW *ntm) { HDC hdc = GetDC(0); BOOL ret = FALSE; - if(!EnumFontFamiliesW(hdc, name, is_font_installed_proc, 0)) + if(!EnumFontFamiliesW(hdc, name, is_font_installed_proc, (LPARAM)ntm)) ret = TRUE; ReleaseDC(0, hdc); @@ -352,9 +407,7 @@ GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, GpFontFamily **FontFamily) { GpFontFamily* ffamily; - HDC hdc; - HFONT hFont, hfont_old; - LOGFONTW lfw; + NEWTEXTMETRICW ntm; TRACE("%s, %p %p\n", debugstr_w(name), fontCollection, FontFamily); @@ -362,32 +415,45 @@ GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR *name, return InvalidParameter; if (fontCollection) FIXME("No support for FontCollections yet!\n"); - if (!is_font_installed(name)) + + if (!find_installed_font(name, &ntm)) return FontFamilyNotFound; ffamily = GdipAlloc(sizeof (GpFontFamily)); if (!ffamily) return OutOfMemory; - hdc = GetDC(0); - lstrcpynW(lfw.lfFaceName, name, sizeof(WCHAR) * LF_FACESIZE); - hFont = CreateFontIndirectW (&lfw); - hfont_old = SelectObject(hdc, hFont); - - GetTextMetricsW(hdc, &ffamily->tmw); - DeleteObject(SelectObject(hdc, hfont_old)); - - ffamily->FamilyName = GdipAlloc(LF_FACESIZE * sizeof (WCHAR)); - if (!ffamily->FamilyName) - { - GdipFree(ffamily); - ReleaseDC(0, hdc); - return OutOfMemory; - } - - lstrcpynW(ffamily->FamilyName, name, sizeof(WCHAR) * LF_FACESIZE); + ffamily->tmw = ntm; + lstrcpynW(ffamily->FamilyName, name, LF_FACESIZE); *FontFamily = ffamily; - ReleaseDC(0, hdc); + + return Ok; +} + +/******************************************************************************* + * GdipCloneFontFamily [GDIPLUS.@] + * + * Creates a deep copy of a Font Family object + * + * PARAMS + * FontFamily [I] Font to clone + * clonedFontFamily [O] The resulting cloned font + * + * RETURNS + * SUCCESS: Ok + */ +GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily* FontFamily, GpFontFamily** clonedFontFamily) +{ + if (!(FontFamily && clonedFontFamily)) return InvalidParameter; + + TRACE("stub: %p (%s), %p\n", FontFamily, + debugstr_w(FontFamily->FamilyName), clonedFontFamily); + + *clonedFontFamily = GdipAlloc(sizeof(GpFontFamily)); + if (!*clonedFontFamily) return OutOfMemory; + + (*clonedFontFamily)->tmw = FontFamily->tmw; + lstrcpyW((*clonedFontFamily)->FamilyName, FontFamily->FamilyName); return Ok; } @@ -445,12 +511,93 @@ GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily *FontFamily) return InvalidParameter; TRACE("Deleting %p (%s)\n", FontFamily, debugstr_w(FontFamily->FamilyName)); - GdipFree (FontFamily->FamilyName); GdipFree (FontFamily); return Ok; } +GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily *family, + INT style, UINT16* CellAscent) +{ + if (!(family && CellAscent)) return InvalidParameter; + + *CellAscent = family->tmw.tmAscent; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily *family, + INT style, UINT16* CellDescent) +{ + if (!(family && CellDescent)) return InvalidParameter; + + *CellDescent = family->tmw.tmDescent; + + return Ok; +} + +/******************************************************************************* + * GdipGetEmHeight [GDIPLUS.@] + * + * Gets the height of the specified family in EmHeights + * + * PARAMS + * family [I] Family to retrieve from + * style [I] (optional) style + * EmHeight [O] return value + * + * RETURNS + * SUCCESS: Ok + * FAILURE: InvalidParameter + */ +GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily *family, INT style, UINT16* EmHeight) +{ + if (!(family && EmHeight)) return InvalidParameter; + + TRACE("%p (%s), %d, %p, stub!\n", family, + debugstr_w(family->FamilyName), style, EmHeight); + + *EmHeight = family->tmw.ntmSizeEM; + + return Ok; +} + + +/******************************************************************************* + * GdipGetLineSpacing [GDIPLUS.@] + * + * Returns the line spacing in design units + * + * PARAMS + * family [I] Family to retrieve from + * style [I] (Optional) font style + * LineSpacing [O] Return value + * + * RETURNS + * SUCCESS: Ok + * FAILURE: InvalidParameter (family or LineSpacing was NULL) + */ +GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily *family, + INT style, UINT16* LineSpacing) +{ + if (!(family && LineSpacing)) return InvalidParameter; + + FIXME("stub!\n"); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily* family, + INT style, BOOL* IsStyleAvailable) +{ + FIXME("%p %d %p stub!\n", family, style, IsStyleAvailable); + + if (!(family && IsStyleAvailable)) + return InvalidParameter; + + return NotImplemented; +} + /***************************************************************************** * GdipGetGenericFontFamilyMonospace [GDIPLUS.@] * @@ -515,3 +662,73 @@ GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily **nativeFamil return GdipCreateFontFamilyFromName(MSSansSerif, NULL, nativeFamily); } + +/***************************************************************************** + * GdipGetGenericFontFamilySansSerif [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection** fontCollection) +{ + FIXME("stub %p\n", fontCollection); + + if (!fontCollection) + return InvalidParameter; + + return NotImplemented; +} + +/***************************************************************************** + * GdipDeletePrivateFontCollection [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection **fontCollection) +{ + FIXME("stub %p\n", fontCollection); + + if (!fontCollection) + return InvalidParameter; + + return NotImplemented; +} + +/***************************************************************************** + * GdipPrivateAddFontFile [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection* fontCollection, + GDIPCONST WCHAR* filename) +{ + FIXME("stub: %p, %s\n", fontCollection, debugstr_w(filename)); + + if (!(fontCollection && filename)) + return InvalidParameter; + + return NotImplemented; +} + +/***************************************************************************** + * GdipGetFontCollectionFamilyCount [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount( + GpFontCollection* fontCollection, INT* numFound) +{ + FIXME("stub: %p, %p\n", fontCollection, numFound); + + if (!(fontCollection && numFound)) + return InvalidParameter; + + return NotImplemented; +} + +/***************************************************************************** + * GdipGetFontCollectionFamilyList [GDIPLUS.@] + */ +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList( + GpFontCollection* fontCollection, INT numSought, + GpFontFamily* gpfamilies[], INT* numFound) +{ + FIXME("stub: %p, %d, %p, %p\n", fontCollection, numSought, gpfamilies, + numFound); + + if (!(fontCollection && gpfamilies && numFound)) + return InvalidParameter; + + return NotImplemented; +} diff --git a/reactos/dll/win32/gdiplus/gdiplus.c b/reactos/dll/win32/gdiplus/gdiplus.c index f897eb53e6d..2b50f2c501d 100644 --- a/reactos/dll/win32/gdiplus/gdiplus.c +++ b/reactos/dll/win32/gdiplus/gdiplus.c @@ -285,3 +285,29 @@ REAL convert_unit(HDC hdc, GpUnit unit) return 1.0; } } + +/* Calculates Bezier points from cardinal spline points. */ +void calc_curve_bezier(CONST GpPointF *pts, REAL tension, REAL *x1, + REAL *y1, REAL *x2, REAL *y2) +{ + REAL xdiff, ydiff; + + /* calculate tangent */ + xdiff = pts[2].X - pts[0].X; + ydiff = pts[2].Y - pts[0].Y; + + /* apply tangent to get control points */ + *x1 = pts[1].X - tension * xdiff; + *y1 = pts[1].Y - tension * ydiff; + *x2 = pts[1].X + tension * xdiff; + *y2 = pts[1].Y + tension * ydiff; +} + +/* Calculates Bezier points from cardinal spline endpoints. */ +void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj, + REAL tension, REAL *x, REAL *y) +{ + /* tangent at endpoints is the line from the endpoint to the adjacent point */ + *x = roundr(tension * (xadj - xend) + xend); + *y = roundr(tension * (yadj - yend) + yend); +} diff --git a/reactos/dll/win32/gdiplus/gdiplus.spec b/reactos/dll/win32/gdiplus/gdiplus.spec index 9492065fc8e..18e7eeb3ac5 100644 --- a/reactos/dll/win32/gdiplus/gdiplus.spec +++ b/reactos/dll/win32/gdiplus/gdiplus.spec @@ -4,16 +4,16 @@ @ stdcall GdipAddPathBezierI(ptr long long long long long long long long) @ stdcall GdipAddPathBeziers(ptr ptr long) @ stdcall GdipAddPathBeziersI(ptr ptr long) -@ stub GdipAddPathClosedCurve2 -@ stub GdipAddPathClosedCurve2I -@ stub GdipAddPathClosedCurve -@ stub GdipAddPathClosedCurveI -@ stub GdipAddPathCurve2 -@ stub GdipAddPathCurve2I +@ stdcall GdipAddPathClosedCurve2(ptr ptr long long) +@ stdcall GdipAddPathClosedCurve2I(ptr ptr long long) +@ stdcall GdipAddPathClosedCurve(ptr ptr long) +@ stdcall GdipAddPathClosedCurveI(ptr ptr long) +@ stdcall GdipAddPathCurve2(ptr ptr long long) +@ stdcall GdipAddPathCurve2I(ptr ptr long long) @ stub GdipAddPathCurve3 @ stub GdipAddPathCurve3I -@ stub GdipAddPathCurve -@ stub GdipAddPathCurveI +@ stdcall GdipAddPathCurve(ptr ptr long) +@ stdcall GdipAddPathCurveI(ptr ptr long) @ stdcall GdipAddPathEllipse(ptr long long long long) @ stdcall GdipAddPathEllipseI(ptr long long long long) @ stdcall GdipAddPathLine2(ptr ptr long) @@ -51,7 +51,7 @@ @ stdcall GdipCloneBrush(ptr ptr) @ stdcall GdipCloneCustomLineCap(ptr ptr) @ stdcall GdipCloneFont(ptr ptr) -@ stub GdipCloneFontFamily +@ stdcall GdipCloneFontFamily(ptr ptr) @ stdcall GdipCloneImage(ptr ptr) @ stdcall GdipCloneImageAttributes(ptr ptr) @ stdcall GdipCloneMatrix(ptr ptr) @@ -73,11 +73,11 @@ @ stub GdipCreateBitmapFromDirectDrawSurface @ stdcall GdipCreateBitmapFromFile(wstr ptr) @ stdcall GdipCreateBitmapFromFileICM(wstr ptr) -@ stub GdipCreateBitmapFromGdiDib +@ stdcall GdipCreateBitmapFromGdiDib(ptr ptr ptr) @ stdcall GdipCreateBitmapFromGraphics(long long ptr ptr) -@ stdcall GdipCreateBitmapFromHBITMAP(ptr ptr ptr) +@ stdcall GdipCreateBitmapFromHBITMAP(long long ptr) @ stub GdipCreateBitmapFromHICON -@ stub GdipCreateBitmapFromResource +@ stdcall GdipCreateBitmapFromResource(long wstr ptr) @ stdcall GdipCreateBitmapFromScan0(long long long long ptr ptr) @ stdcall GdipCreateBitmapFromStream(ptr ptr) @ stdcall GdipCreateBitmapFromStreamICM(ptr ptr) @@ -101,8 +101,8 @@ @ stdcall GdipCreateLineBrush(ptr ptr long long long ptr) @ stdcall GdipCreateLineBrushFromRect(ptr long long long long ptr) @ stdcall GdipCreateLineBrushFromRectI(ptr long long long long ptr) -@ stub GdipCreateLineBrushFromRectWithAngle -@ stub GdipCreateLineBrushFromRectWithAngleI +@ stdcall GdipCreateLineBrushFromRectWithAngle(ptr long long long long long ptr) +@ stdcall GdipCreateLineBrushFromRectWithAngleI(ptr long long long long long ptr) @ stdcall GdipCreateLineBrushI(ptr ptr long long long ptr) @ stdcall GdipCreateMatrix2(long long long long long long ptr) @ stdcall GdipCreateMatrix3(ptr ptr ptr) @@ -112,7 +112,7 @@ @ stub GdipCreateMetafileFromFile @ stub GdipCreateMetafileFromStream @ stdcall GdipCreateMetafileFromWmf(ptr long ptr ptr) -@ stub GdipCreateMetafileFromWmfFile +@ stdcall GdipCreateMetafileFromWmfFile(wstr ptr ptr) @ stdcall GdipCreatePath2(ptr ptr long long ptr) @ stdcall GdipCreatePath2I(ptr ptr long long ptr) @ stdcall GdipCreatePath(long ptr) @@ -147,7 +147,7 @@ @ stdcall GdipDeletePath(ptr) @ stdcall GdipDeletePathIter(ptr) @ stdcall GdipDeletePen(ptr) -@ stub GdipDeletePrivateFontCollection +@ stdcall GdipDeletePrivateFontCollection(ptr) @ stdcall GdipDeleteRegion(ptr) @ stdcall GdipDeleteStringFormat(ptr) @ stdcall GdipDisposeImage(ptr) @@ -159,10 +159,10 @@ @ stdcall GdipDrawBeziers(ptr ptr ptr long) @ stdcall GdipDrawBeziersI(ptr ptr ptr long) @ stub GdipDrawCachedBitmap -@ stub GdipDrawClosedCurve2 -@ stub GdipDrawClosedCurve2I -@ stub GdipDrawClosedCurve -@ stub GdipDrawClosedCurveI +@ stdcall GdipDrawClosedCurve2(ptr ptr ptr long long) +@ stdcall GdipDrawClosedCurve2I(ptr ptr ptr long long) +@ stdcall GdipDrawClosedCurve(ptr ptr ptr long) +@ stdcall GdipDrawClosedCurveI(ptr ptr ptr long) @ stdcall GdipDrawCurve2(ptr ptr ptr long long) @ stdcall GdipDrawCurve2I(ptr ptr ptr long long) @ stub GdipDrawCurve3 @@ -222,15 +222,15 @@ @ stdcall GdipFillPath(ptr ptr ptr) @ stdcall GdipFillPie(ptr ptr long long long long long long) @ stdcall GdipFillPieI(ptr ptr long long long long long long) -@ stub GdipFillPolygon2 -@ stub GdipFillPolygon2I +@ stdcall GdipFillPolygon2(ptr ptr ptr long) +@ stdcall GdipFillPolygon2I(ptr ptr ptr long) @ stdcall GdipFillPolygon(ptr ptr ptr long long) @ stdcall GdipFillPolygonI(ptr ptr ptr long long) @ stdcall GdipFillRectangle(ptr ptr long long long long) @ stdcall GdipFillRectangleI(ptr ptr long long long long) @ stdcall GdipFillRectangles(ptr ptr ptr long) @ stdcall GdipFillRectanglesI(ptr ptr ptr long) -@ stub GdipFillRegion +@ stdcall GdipFillRegion(ptr ptr ptr) @ stdcall GdipFindFirstImageItem(ptr ptr) @ stub GdipFindNextImageItem @ stub GdipFlattenPath @@ -242,8 +242,8 @@ @ stub GdipGetAdjustableArrowCapWidth @ stub GdipGetAllPropertyItems @ stdcall GdipGetBrushType(ptr ptr) -@ stub GdipGetCellAscent -@ stub GdipGetCellDescent +@ stdcall GdipGetCellAscent(ptr long ptr) +@ stdcall GdipGetCellDescent(ptr long ptr) @ stdcall GdipGetClip(ptr ptr) @ stub GdipGetClipBounds @ stub GdipGetClipBoundsI @@ -252,23 +252,23 @@ @ stdcall GdipGetCustomLineCapBaseCap(ptr ptr) @ stdcall GdipGetCustomLineCapBaseInset(ptr ptr) @ stub GdipGetCustomLineCapStrokeCaps -@ stub GdipGetCustomLineCapStrokeJoin +@ stdcall GdipGetCustomLineCapStrokeJoin(ptr ptr) @ stub GdipGetCustomLineCapType -@ stub GdipGetCustomLineCapWidthScale +@ stdcall GdipGetCustomLineCapWidthScale(ptr ptr) @ stdcall GdipGetDC(ptr ptr) @ stdcall GdipGetDpiX(ptr ptr) @ stdcall GdipGetDpiY(ptr ptr) @ stub GdipGetEffectParameterSize @ stub GdipGetEffectParameters -@ stub GdipGetEmHeight +@ stdcall GdipGetEmHeight(ptr long ptr) @ stub GdipGetEncoderParameterList @ stub GdipGetEncoderParameterListSize @ stub GdipGetFamily @ stdcall GdipGetFamilyName(ptr ptr long) -@ stub GdipGetFontCollectionFamilyCount -@ stub GdipGetFontCollectionFamilyList +@ stdcall GdipGetFontCollectionFamilyCount(ptr ptr) +@ stdcall GdipGetFontCollectionFamilyList(ptr long ptr ptr) @ stub GdipGetFontHeight -@ stub GdipGetFontHeightGivenDPI +@ stdcall GdipGetFontHeightGivenDPI(ptr long ptr) @ stdcall GdipGetFontSize(ptr ptr) @ stub GdipGetFontStyle @ stdcall GdipGetFontUnit(ptr ptr) @@ -308,9 +308,9 @@ @ stub GdipGetLinePresetBlendCount @ stdcall GdipGetLineRect(ptr ptr) @ stdcall GdipGetLineRectI(ptr ptr) -@ stub GdipGetLineSpacing +@ stdcall GdipGetLineSpacing(ptr long ptr) @ stub GdipGetLineTransform -@ stub GdipGetLineWrapMode +@ stdcall GdipGetLineWrapMode(ptr ptr) @ stub GdipGetLogFontA @ stdcall GdipGetLogFontW(ptr ptr ptr) @ stdcall GdipGetMatrixElements(ptr ptr) @@ -325,8 +325,8 @@ @ stdcall GdipGetPageUnit(ptr ptr) @ stdcall GdipGetPathData(ptr ptr) @ stdcall GdipGetPathFillMode(ptr ptr) -@ stub GdipGetPathGradientBlend -@ stub GdipGetPathGradientBlendCount +@ stdcall GdipGetPathGradientBlend(ptr ptr ptr long) +@ stdcall GdipGetPathGradientBlendCount(ptr ptr) @ stub GdipGetPathGradientCenterColor @ stdcall GdipGetPathGradientCenterPoint(ptr ptr) @ stdcall GdipGetPathGradientCenterPointI(ptr ptr) @@ -336,8 +336,8 @@ @ stdcall GdipGetPathGradientPointCount(ptr ptr) @ stub GdipGetPathGradientPresetBlend @ stub GdipGetPathGradientPresetBlendCount -@ stub GdipGetPathGradientRect -@ stub GdipGetPathGradientRectI +@ stdcall GdipGetPathGradientRect(ptr ptr) +@ stdcall GdipGetPathGradientRectI(ptr ptr) @ stub GdipGetPathGradientSurroundColorCount @ stdcall GdipGetPathGradientSurroundColorsWithCount(ptr ptr ptr) @ stub GdipGetPathGradientTransform @@ -352,18 +352,18 @@ @ stdcall GdipGetPenColor(ptr ptr) @ stub GdipGetPenCompoundArray @ stub GdipGetPenCompoundCount -@ stub GdipGetPenCustomEndCap -@ stub GdipGetPenCustomStartCap +@ stdcall GdipGetPenCustomEndCap(ptr ptr) +@ stdcall GdipGetPenCustomStartCap(ptr ptr) @ stdcall GdipGetPenDashArray(ptr ptr long) @ stdcall GdipGetPenDashCap197819(ptr ptr) -@ stub GdipGetPenDashCount +@ stdcall GdipGetPenDashCount(ptr ptr) @ stdcall GdipGetPenDashOffset(ptr ptr) @ stdcall GdipGetPenDashStyle(ptr ptr) @ stdcall GdipGetPenEndCap(ptr ptr) @ stub GdipGetPenFillType @ stdcall GdipGetPenLineJoin(ptr ptr) @ stdcall GdipGetPenMiterLimit(ptr ptr) -@ stub GdipGetPenMode +@ stdcall GdipGetPenMode(ptr ptr) @ stdcall GdipGetPenStartCap(ptr ptr) @ stub GdipGetPenTransform @ stdcall GdipGetPenUnit(ptr ptr) @@ -387,13 +387,13 @@ @ stdcall GdipGetSmoothingMode(ptr ptr) @ stdcall GdipGetSolidFillColor(ptr ptr) @ stdcall GdipGetStringFormatAlign(ptr ptr) -@ stub GdipGetStringFormatDigitSubstitution -@ stub GdipGetStringFormatFlags +@ stdcall GdipGetStringFormatDigitSubstitution(ptr ptr ptr) +@ stdcall GdipGetStringFormatFlags(ptr ptr) @ stdcall GdipGetStringFormatHotkeyPrefix(ptr ptr) @ stdcall GdipGetStringFormatLineAlign(ptr ptr) -@ stub GdipGetStringFormatMeasurableCharacterRangeCount -@ stub GdipGetStringFormatTabStopCount -@ stub GdipGetStringFormatTabStops +@ stdcall GdipGetStringFormatMeasurableCharacterRangeCount(ptr ptr) +@ stdcall GdipGetStringFormatTabStopCount(ptr ptr) +@ stdcall GdipGetStringFormatTabStops(ptr long ptr ptr) @ stdcall GdipGetStringFormatTrimming(ptr ptr) @ stub GdipGetTextContrast @ stdcall GdipGetTextRenderingHint(ptr ptr) @@ -413,20 +413,20 @@ @ stdcall GdipImageSelectActiveFrame(ptr ptr long) @ stub GdipImageSetAbort @ stub GdipInitializePalette -@ stub GdipInvertMatrix +@ stdcall GdipInvertMatrix(ptr) @ stub GdipIsClipEmpty @ stdcall GdipIsEmptyRegion(ptr ptr ptr) @ stdcall GdipIsEqualRegion(ptr ptr ptr ptr) @ stdcall GdipIsInfiniteRegion(ptr ptr ptr) @ stdcall GdipIsMatrixEqual(ptr ptr ptr) @ stdcall GdipIsMatrixIdentity(ptr ptr) -@ stub GdipIsMatrixInvertible -@ stub GdipIsOutlineVisiblePathPoint +@ stdcall GdipIsMatrixInvertible(ptr ptr) +@ stdcall GdipIsOutlineVisiblePathPoint(ptr long long ptr ptr ptr) @ stdcall GdipIsOutlineVisiblePathPointI(ptr long long ptr ptr ptr) -@ stub GdipIsStyleAvailable +@ stdcall GdipIsStyleAvailable(ptr long ptr) @ stub GdipIsVisibleClipEmpty -@ stub GdipIsVisiblePathPoint -@ stub GdipIsVisiblePathPointI +@ stdcall GdipIsVisiblePathPoint(ptr long long ptr ptr) +@ stdcall GdipIsVisiblePathPointI(ptr long long ptr ptr) @ stub GdipIsVisiblePoint @ stub GdipIsVisiblePointI @ stub GdipIsVisibleRect @@ -439,9 +439,9 @@ @ stdcall GdipLoadImageFromFileICM(wstr ptr) @ stdcall GdipLoadImageFromStream(ptr ptr) @ stdcall GdipLoadImageFromStreamICM(ptr ptr) -@ stub GdipMeasureCharacterRanges +@ stdcall GdipMeasureCharacterRanges(ptr wstr long ptr ptr ptr long ptr) @ stub GdipMeasureDriverString -@ stdcall GdipMeasureString(ptr ptr long ptr ptr ptr ptr ptr ptr) +@ stdcall GdipMeasureString(ptr wstr long ptr ptr ptr ptr ptr ptr) @ stub GdipMultiplyLineTransform @ stdcall GdipMultiplyMatrix(ptr ptr long) @ stub GdipMultiplyPathGradientTransform @@ -449,14 +449,14 @@ @ stub GdipMultiplyTextureTransform @ stdcall GdipMultiplyWorldTransform(ptr ptr long) @ stub GdipNewInstalledFontCollection -@ stub GdipNewPrivateFontCollection +@ stdcall GdipNewPrivateFontCollection(ptr) @ stdcall GdipPathIterCopyData(ptr ptr ptr ptr long long) @ stdcall GdipPathIterEnumerate(ptr ptr ptr ptr long) @ stdcall GdipPathIterGetCount(ptr ptr) -@ stub GdipPathIterGetSubpathCount +@ stdcall GdipPathIterGetSubpathCount(ptr ptr) @ stdcall GdipPathIterHasCurve(ptr ptr) @ stub GdipPathIterIsValid -@ stub GdipPathIterNextMarker +@ stdcall GdipPathIterNextMarker(ptr ptr ptr ptr) @ stub GdipPathIterNextMarkerPath @ stub GdipPathIterNextPathType @ stdcall GdipPathIterNextSubpath(ptr ptr ptr ptr ptr) @@ -464,7 +464,7 @@ @ stdcall GdipPathIterRewind(ptr) @ stub GdipPlayMetafileRecord @ stub GdipPlayTSClientRecord -@ stub GdipPrivateAddFontFile +@ stdcall GdipPrivateAddFontFile(ptr wstr) @ stub GdipPrivateAddMemoryFont @ stub GdipRecordMetafile @ stub GdipRecordMetafileFileName @@ -568,7 +568,7 @@ @ stdcall GdipSetPenCustomEndCap(ptr ptr) @ stdcall GdipSetPenCustomStartCap(ptr ptr) @ stdcall GdipSetPenDashArray(ptr ptr long) -@ stub GdipSetPenDashCap197819 +@ stdcall GdipSetPenDashCap197819(ptr long) @ stdcall GdipSetPenDashOffset(ptr long) @ stdcall GdipSetPenDashStyle(ptr long) @ stdcall GdipSetPenEndCap(ptr long) @@ -586,28 +586,28 @@ @ stdcall GdipSetSmoothingMode(ptr long) @ stdcall GdipSetSolidFillColor(ptr ptr) @ stdcall GdipSetStringFormatAlign(ptr long) -@ stub GdipSetStringFormatDigitSubstitution +@ stdcall GdipSetStringFormatDigitSubstitution(ptr long long) @ stdcall GdipSetStringFormatFlags(ptr long) @ stdcall GdipSetStringFormatHotkeyPrefix(ptr long) @ stdcall GdipSetStringFormatLineAlign(ptr long) -@ stub GdipSetStringFormatMeasurableCharacterRanges -@ stub GdipSetStringFormatTabStops +@ stdcall GdipSetStringFormatMeasurableCharacterRanges(ptr long ptr) +@ stdcall GdipSetStringFormatTabStops(ptr long long ptr) @ stdcall GdipSetStringFormatTrimming(ptr long) @ stub GdipSetTextContrast @ stdcall GdipSetTextRenderingHint(ptr long) @ stdcall GdipSetTextureTransform(ptr ptr) @ stub GdipSetTextureWrapMode @ stdcall GdipSetWorldTransform(ptr ptr) -@ stub GdipShearMatrix +@ stdcall GdipShearMatrix(ptr long long long) @ stdcall GdipStartPathFigure(ptr) -@ stub GdipStringFormatGetGenericDefault -@ stub GdipStringFormatGetGenericTypographic +@ stdcall GdipStringFormatGetGenericDefault(ptr) +@ stdcall GdipStringFormatGetGenericTypographic(ptr) @ stub GdipTestControl @ stdcall GdipTransformMatrixPoints(ptr ptr long) @ stdcall GdipTransformMatrixPointsI(ptr ptr long) @ stdcall GdipTransformPath(ptr ptr) -@ stub GdipTransformPoints -@ stub GdipTransformPointsI +@ stdcall GdipTransformPoints(ptr long long ptr long) +@ stdcall GdipTransformPointsI(ptr long long ptr long) @ stdcall GdipTransformRegion(ptr ptr) @ stub GdipTranslateClip @ stub GdipTranslateClipI diff --git a/reactos/dll/win32/gdiplus/gdiplus_private.h b/reactos/dll/win32/gdiplus/gdiplus_private.h index ed763752575..80fc5a6f0ce 100644 --- a/reactos/dll/win32/gdiplus/gdiplus_private.h +++ b/reactos/dll/win32/gdiplus/gdiplus_private.h @@ -37,6 +37,9 @@ #define MAX_DASHLEN (16) /* this is a limitation of gdi */ #define INCH_HIMETRIC (2540) +#define VERSION_MAGIC 0xdbc01001 +#define TENSION_CONST (0.3) + COLORREF ARGB2COLORREF(ARGB color); extern INT arc2polybezier(GpPointF * points, REAL x1, REAL y1, REAL x2, REAL y2, REAL startAngle, REAL sweepAngle); @@ -44,6 +47,11 @@ extern REAL gdiplus_atan2(REAL dy, REAL dx); extern GpStatus hresult_to_status(HRESULT res); extern REAL convert_unit(HDC hdc, GpUnit unit); +extern void calc_curve_bezier(CONST GpPointF *pts, REAL tension, REAL *x1, + REAL *y1, REAL *x2, REAL *y2); +extern void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj, + REAL tension, REAL *x, REAL *y); + static inline INT roundr(REAL x) { return (INT) floor(x + 0.5); @@ -70,6 +78,7 @@ struct GpPen{ INT numdashes; REAL offset; /* dash offset */ GpBrush *brush; + GpPenAlignment align; }; struct GpGraphics{ @@ -105,6 +114,9 @@ struct GpPathGradient{ BOOL gamma; GpPointF center; GpPointF focus; + REAL* blendfac; /* blend factors */ + REAL* blendpos; /* blend positions */ + INT blendcount; }; struct GpLineGradient{ @@ -144,6 +156,8 @@ struct GpCustomLineCap{ BOOL fill; /* TRUE for fill, FALSE for stroke */ GpLineCap cap; /* as far as I can tell, this value is ignored */ REAL inset; /* how much to adjust the end of the line */ + GpLineJoin join; + REAL scale; }; struct GpImage{ @@ -181,10 +195,15 @@ struct GpFont{ struct GpStringFormat{ INT attr; LANGID lang; + LANGID digitlang; StringAlignment align; StringTrimming trimming; HotkeyPrefix hkprefix; StringAlignment vertalign; + StringDigitSubstitute digitsub; + INT tabcount; + REAL firsttab; + REAL *tabs; }; struct GpFontCollection{ @@ -192,8 +211,44 @@ struct GpFontCollection{ }; struct GpFontFamily{ - TEXTMETRICW tmw; - WCHAR* FamilyName; + NEWTEXTMETRICW tmw; + WCHAR FamilyName[LF_FACESIZE]; +}; + +typedef struct region_element +{ + DWORD type; /* Rectangle, Path, SpecialRectangle, or CombineMode */ + union + { + GpRectF rect; + struct + { + GpPath* path; + struct + { + DWORD size; + DWORD magic; + DWORD count; + DWORD flags; + } pathheader; + } pathdata; + struct + { + struct region_element *left; /* the original region */ + struct region_element *right; /* what *left was combined with */ + } combine; + } elementdata; +} region_element; + +struct GpRegion{ + struct + { + DWORD size; + DWORD checksum; + DWORD magic; + DWORD num_children; + } header; + region_element node; }; #endif diff --git a/reactos/dll/win32/gdiplus/graphics.c b/reactos/dll/win32/gdiplus/graphics.c index 81faee2414a..af8331c7c4f 100644 --- a/reactos/dll/win32/gdiplus/graphics.c +++ b/reactos/dll/win32/gdiplus/graphics.c @@ -42,7 +42,6 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); /* looks-right constants */ -#define TENSION_CONST (0.3) #define ANCHOR_WIDTH (2.0) #define MAX_ITERS (50) @@ -194,34 +193,6 @@ static void draw_pie(GpGraphics *graphics, REAL x, REAL y, REAL width, pti[2].y, pti[3].x, pti[3].y); } -/* GdipDrawCurve helper function. - * Calculates Bezier points from cardinal spline points. */ -static void calc_curve_bezier(CONST GpPointF *pts, REAL tension, REAL *x1, - REAL *y1, REAL *x2, REAL *y2) -{ - REAL xdiff, ydiff; - - /* calculate tangent */ - xdiff = pts[2].X - pts[0].X; - ydiff = pts[2].Y - pts[0].Y; - - /* apply tangent to get control points */ - *x1 = pts[1].X - tension * xdiff; - *y1 = pts[1].Y - tension * ydiff; - *x2 = pts[1].X + tension * xdiff; - *y2 = pts[1].Y + tension * ydiff; -} - -/* GdipDrawCurve helper function. - * Calculates Bezier points from cardinal spline endpoints. */ -static void calc_curve_bezier_endp(REAL xend, REAL yend, REAL xadj, REAL yadj, - REAL tension, REAL *x, REAL *y) -{ - /* tangent at endpoints is the line from the endpoint to the adjacent point */ - *x = roundr(tension * (xadj - xend) + xend); - *y = roundr(tension * (yadj - yend) + yend); -} - /* Draws the linecap the specified color and size on the hdc. The linecap is in * direction of the line from x1, y1 to x2, y2 and is anchored on x2, y2. Probably * should not be called on an hdc that has a path you care about. */ @@ -881,6 +852,18 @@ err: return retval; } +GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR *file, + GDIPCONST WmfPlaceableFileHeader * placeable, GpMetafile **metafile) +{ + HMETAFILE hmf = GetMetaFileW(file); + + TRACE("(%s, %p, %p)\n", debugstr_w(file), placeable, metafile); + + if(!hmf) return InvalidParameter; + + return GdipCreateMetafileFromWmf(hmf, TRUE, placeable, metafile); +} + GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR * filename, UINT access, IStream **stream) { @@ -1045,6 +1028,69 @@ GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics *graphics, GpPen *pen, return ret; } +GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPointF *points, INT count) +{ + return GdipDrawClosedCurve2(graphics, pen, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPoint *points, INT count) +{ + return GdipDrawClosedCurve2I(graphics, pen, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPointF *points, INT count, REAL tension) +{ + GpPointF *ptf; + GpStatus stat; + + if(!graphics || !pen || !points || count <= 0) + return InvalidParameter; + + /* make a full points copy.. */ + ptf = GdipAlloc(sizeof(GpPointF)*(count+1)); + if(!ptf) + return OutOfMemory; + memcpy(ptf, points, sizeof(GpPointF)*count); + + /* ..and add a first point as a last one */ + ptf[count] = ptf[0]; + + stat = GdipDrawCurve2(graphics, pen, ptf, count + 1, tension); + + GdipFree(ptf); + + return stat; +} + +GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics *graphics, GpPen *pen, + GDIPCONST GpPoint *points, INT count, REAL tension) +{ + GpPointF *ptf; + GpStatus stat; + INT i; + + if(!points || count <= 0) + return InvalidParameter; + + ptf = GdipAlloc(sizeof(GpPointF)*count); + if(!ptf) + return OutOfMemory; + + for(i = 0; i < count; i++){ + ptf[i].X = (REAL)points[i].X; + ptf[i].Y = (REAL)points[i].Y; + } + + stat = GdipDrawClosedCurve2(graphics, pen, ptf, count, tension); + + GdipFree(ptf); + + return stat; +} + GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics *graphics, GpPen *pen, GDIPCONST GpPointF *points, INT count) { @@ -1929,6 +1975,18 @@ end: return retval; } +GpStatus WINGDIPAPI GdipFillPolygon2(GpGraphics *graphics, GpBrush *brush, + GDIPCONST GpPointF *points, INT count) +{ + return GdipFillPolygon(graphics, brush, points, count, FillModeAlternate); +} + +GpStatus WINGDIPAPI GdipFillPolygon2I(GpGraphics *graphics, GpBrush *brush, + GDIPCONST GpPoint *points, INT count) +{ + return GdipFillPolygonI(graphics, brush, points, count, FillModeAlternate); +} + GpStatus WINGDIPAPI GdipFillRectangle(GpGraphics *graphics, GpBrush *brush, REAL x, REAL y, REAL width, REAL height) { @@ -2039,6 +2097,17 @@ GpStatus WINGDIPAPI GdipFillRectanglesI(GpGraphics *graphics, GpBrush *brush, GD return ret; } +GpStatus WINGDIPAPI GdipFillRegion(GpGraphics* graphics, GpBrush* brush, + GpRegion* region) +{ + if (!(graphics && brush && region)) + return InvalidParameter; + + FIXME("(%p, %p, %p): stub\n", graphics, brush, region); + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipFlush(GpGraphics *graphics, GpFlushIntention intention) { static int calls; @@ -2152,6 +2221,20 @@ GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics *graphics, GpMatrix *matrix return Ok; } +GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics* graphics, + GDIPCONST WCHAR* string, INT length, GDIPCONST GpFont* font, + GDIPCONST RectF* layoutRect, GDIPCONST GpStringFormat *stringFormat, + INT regionCount, GpRegion** regions) +{ + if (!(graphics && string && font && layoutRect && stringFormat && regions)) + return InvalidParameter; + + FIXME("stub: %p %s %d %p %p %p %d %p\n", graphics, debugstr_w(string), + length, font, layoutRect, stringFormat, regionCount, regions); + + return NotImplemented; +} + /* Find the smallest rectangle that bounds the text when it is printed in rect * according to the format options listed in format. If rect has 0 width and * height, then just find the smallest rectangle that bounds the text when it's @@ -2544,3 +2627,19 @@ GpStatus WINGDIPAPI GdipGetClip(GpGraphics *graphics, GpRegion *region) return NotImplemented; } + +GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics *graphics, GpCoordinateSpace dst_space, + GpCoordinateSpace src_space, GpPointF *points, INT count) +{ + FIXME("(%p, %d, %d, %p, %d): stub\n", graphics, dst_space, src_space, points, count); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics *graphics, GpCoordinateSpace dst_space, + GpCoordinateSpace src_space, GpPoint *points, INT count) +{ + FIXME("(%p, %d, %d, %p, %d): stub\n", graphics, dst_space, src_space, points, count); + + return NotImplemented; +} diff --git a/reactos/dll/win32/gdiplus/graphicspath.c b/reactos/dll/win32/gdiplus/graphicspath.c index 1022fb45ddd..136afe7bfdb 100644 --- a/reactos/dll/win32/gdiplus/graphicspath.c +++ b/reactos/dll/win32/gdiplus/graphicspath.c @@ -196,6 +196,206 @@ GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath *path, GDIPCONST GpPoint *points, return ret; } +GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath *path, GDIPCONST GpPointF *points, + INT count) +{ + return GdipAddPathClosedCurve2(path, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath *path, GDIPCONST GpPoint *points, + INT count) +{ + return GdipAddPathClosedCurve2I(path, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath *path, GDIPCONST GpPointF *points, + INT count, REAL tension) +{ + INT i, len_pt = (count + 1)*3-2; + GpPointF *pt; + GpPointF *pts; + REAL x1, x2, y1, y2; + GpStatus stat; + + if(!path || !points || count <= 1) + return InvalidParameter; + + pt = GdipAlloc(len_pt * sizeof(GpPointF)); + pts = GdipAlloc((count + 1)*sizeof(GpPointF)); + if(!pt || !pts){ + GdipFree(pt); + GdipFree(pts); + return OutOfMemory; + } + + /* copy source points to extend with the last one */ + memcpy(pts, points, sizeof(GpPointF)*count); + pts[count] = pts[0]; + + tension = tension * TENSION_CONST; + + for(i = 0; i < count-1; i++){ + calc_curve_bezier(&(pts[i]), tension, &x1, &y1, &x2, &y2); + + pt[3*i+2].X = x1; + pt[3*i+2].Y = y1; + pt[3*i+3].X = pts[i+1].X; + pt[3*i+3].Y = pts[i+1].Y; + pt[3*i+4].X = x2; + pt[3*i+4].Y = y2; + } + + /* points [len_pt-2] and [0] are calculated + separetely to connect splines properly */ + pts[0] = points[count-1]; + pts[1] = points[0]; /* equals to start and end of a resulting path */ + pts[2] = points[1]; + + calc_curve_bezier(pts, tension, &x1, &y1, &x2, &y2); + pt[len_pt-2].X = x1; + pt[len_pt-2].Y = y1; + pt[0].X = pts[1].X; + pt[0].Y = pts[1].Y; + pt[1].X = x2; + pt[1].Y = y2; + /* close path */ + pt[len_pt-1].X = pt[0].X; + pt[len_pt-1].Y = pt[0].Y; + + stat = GdipAddPathBeziers(path, pt, len_pt); + + /* close figure */ + if(stat == Ok){ + INT count = path->pathdata.Count; + path->pathdata.Types[count - 1] |= PathPointTypeCloseSubpath; + path->newfigure = TRUE; + } + + GdipFree(pts); + GdipFree(pt); + + return stat; +} + +GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath *path, GDIPCONST GpPoint *points, + INT count, REAL tension) +{ + GpPointF *ptf; + INT i; + GpStatus stat; + + if(!path || !points || count <= 1) + return InvalidParameter; + + ptf = GdipAlloc(sizeof(GpPointF)*count); + if(!ptf) + return OutOfMemory; + + for(i = 0; i < count; i++){ + ptf[i].X = (REAL)points[i].X; + ptf[i].Y = (REAL)points[i].Y; + } + + stat = GdipAddPathClosedCurve2(path, ptf, count, tension); + + GdipFree(ptf); + + return stat; +} + +GpStatus WINGDIPAPI GdipAddPathCurve(GpPath *path, GDIPCONST GpPointF *points, INT count) +{ + if(!path || !points || count <= 1) + return InvalidParameter; + + return GdipAddPathCurve2(path, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath *path, GDIPCONST GpPoint *points, INT count) +{ + if(!path || !points || count <= 1) + return InvalidParameter; + + return GdipAddPathCurve2I(path, points, count, 1.0); +} + +GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath *path, GDIPCONST GpPointF *points, INT count, + REAL tension) +{ + INT i, len_pt = count*3-2; + GpPointF *pt; + REAL x1, x2, y1, y2; + GpStatus stat; + + if(!path || !points || count <= 1) + return InvalidParameter; + + pt = GdipAlloc(len_pt * sizeof(GpPointF)); + if(!pt) + return OutOfMemory; + + tension = tension * TENSION_CONST; + + calc_curve_bezier_endp(points[0].X, points[0].Y, points[1].X, points[1].Y, + tension, &x1, &y1); + + pt[0].X = points[0].X; + pt[0].Y = points[0].Y; + pt[1].X = x1; + pt[1].Y = y1; + + for(i = 0; i < count-2; i++){ + calc_curve_bezier(&(points[i]), tension, &x1, &y1, &x2, &y2); + + pt[3*i+2].X = x1; + pt[3*i+2].Y = y1; + pt[3*i+3].X = points[i+1].X; + pt[3*i+3].Y = points[i+1].Y; + pt[3*i+4].X = x2; + pt[3*i+4].Y = y2; + } + + calc_curve_bezier_endp(points[count-1].X, points[count-1].Y, + points[count-2].X, points[count-2].Y, tension, &x1, &y1); + + pt[len_pt-2].X = x1; + pt[len_pt-2].Y = y1; + pt[len_pt-1].X = points[count-1].X; + pt[len_pt-1].Y = points[count-1].Y; + + stat = GdipAddPathBeziers(path, pt, len_pt); + + GdipFree(pt); + + return stat; +} + +GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath *path, GDIPCONST GpPoint *points, + INT count, REAL tension) +{ + GpPointF *ptf; + INT i; + GpStatus stat; + + if(!path || !points || count <= 1) + return InvalidParameter; + + ptf = GdipAlloc(sizeof(GpPointF)*count); + if(!ptf) + return OutOfMemory; + + for(i = 0; i < count; i++){ + ptf[i].X = (REAL)points[i].X; + ptf[i].Y = (REAL)points[i].Y; + } + + stat = GdipAddPathCurve2(path, ptf, count, tension); + + GdipFree(ptf); + + return stat; +} + GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath *path, REAL x, REAL y, REAL width, REAL height) { @@ -729,6 +929,12 @@ GpStatus WINGDIPAPI GdipGetPointCount(GpPath *path, INT *count) GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath* path, INT x, INT y, GpPen *pen, GpGraphics *graphics, BOOL *result) +{ + return GdipIsOutlineVisiblePathPoint(path, x, y, pen, graphics, result); +} + +GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath* path, REAL x, REAL y, + GpPen *pen, GpGraphics *graphics, BOOL *result) { static int calls; @@ -741,6 +947,23 @@ GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath* path, INT x, INT y, return NotImplemented; } +GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath* path, INT x, INT y, GpGraphics *graphics, BOOL *result) +{ + return GdipIsVisiblePathPoint(path, x, y, graphics, result); +} + +GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath* path, REAL x, REAL y, GpGraphics *graphics, BOOL *result) +{ + static int calls; + + if(!path) return InvalidParameter; + + if(!(calls++)) + FIXME("not implemented\n"); + + return NotImplemented; +} + GpStatus WINGDIPAPI GdipStartPathFigure(GpPath *path) { if(!path) diff --git a/reactos/dll/win32/gdiplus/image.c b/reactos/dll/win32/gdiplus/image.c index bf2ac35b14f..197665d0299 100644 --- a/reactos/dll/win32/gdiplus/image.c +++ b/reactos/dll/win32/gdiplus/image.c @@ -244,7 +244,7 @@ GpStatus WINGDIPAPI GdipCloneImage(GpImage *image, GpImage **cloneImage) { if (!(image && cloneImage)) return InvalidParameter; - FIXME("stub: %p, %p", image, cloneImage); + FIXME("stub: %p, %p\n", image, cloneImage); return NotImplemented; } @@ -270,6 +270,47 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR* filename, return stat; } +GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO* info, + VOID *bits, GpBitmap **bitmap) +{ + DWORD height, stride; + PixelFormat format; + + FIXME("(%p, %p, %p) - partially implemented\n", info, bits, bitmap); + + height = abs(info->bmiHeader.biHeight); + stride = ((info->bmiHeader.biWidth * info->bmiHeader.biBitCount + 31) >> 3) & ~3; + + if(info->bmiHeader.biHeight > 0) /* bottom-up */ + { + bits = (BYTE*)bits + (height - 1) * stride; + stride = -stride; + } + + switch(info->bmiHeader.biBitCount) { + case 1: + format = PixelFormat1bppIndexed; + break; + case 4: + format = PixelFormat4bppIndexed; + break; + case 8: + format = PixelFormat8bppIndexed; + break; + case 24: + format = PixelFormat24bppRGB; + break; + default: + FIXME("don't know how to handle %d bpp\n", info->bmiHeader.biBitCount); + *bitmap = NULL; + return InvalidParameter; + } + + return GdipCreateBitmapFromScan0(info->bmiHeader.biWidth, height, stride, format, + bits, bitmap); + +} + /* FIXME: no icm */ GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR* filename, GpBitmap **bitmap) @@ -277,6 +318,26 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR* filename, return GdipCreateBitmapFromFile(filename, bitmap); } +GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE hInstance, + GDIPCONST WCHAR* lpBitmapName, GpBitmap** bitmap) +{ + HBITMAP hbm; + GpStatus stat = InvalidParameter; + + if(!lpBitmapName || !bitmap) + return InvalidParameter; + + /* load DIB */ + hbm = (HBITMAP)LoadImageW(hInstance,lpBitmapName,IMAGE_BITMAP,0,0,LR_CREATEDIBSECTION); + + if(hbm){ + stat = GdipCreateBitmapFromHBITMAP(hbm, NULL, bitmap); + DeleteObject(hbm); + } + + return stat; +} + GpStatus WINGDIPAPI GdipCreateHBITMAPFromBitmap(GpBitmap* bitmap, HBITMAP* hbmReturn, ARGB background) { @@ -942,6 +1003,9 @@ static encode_image_func *const encode_image_funcs[NUM_ENCODERS_SUPPORTED] = { encode_image_BMP, }; +/***************************************************************************** + * GdipSaveImageToStream [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage *image, IStream* stream, GDIPCONST CLSID* clsid, GDIPCONST EncoderParameters* params) { @@ -1024,6 +1088,9 @@ GpStatus WINGDIPAPI GdipSaveImageToStream(GpImage *image, IStream* stream, return stat; } +/***************************************************************************** + * GdipSetImagePalette [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipSetImagePalette(GpImage *image, GDIPCONST ColorPalette *palette) { @@ -1070,6 +1137,9 @@ static const ImageCodecInfo codecs[NUM_ENCODERS_SUPPORTED] = }, }; +/***************************************************************************** + * GdipGetImageEncodersSize [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size) { if (!numEncoders || !size) @@ -1081,6 +1151,9 @@ GpStatus WINGDIPAPI GdipGetImageEncodersSize(UINT *numEncoders, UINT *size) return Ok; } +/***************************************************************************** + * GdipGetImageEncoders [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodecInfo *encoders) { if (!encoders || @@ -1092,6 +1165,10 @@ GpStatus WINGDIPAPI GdipGetImageEncoders(UINT numEncoders, UINT size, ImageCodec return Ok; } + +/***************************************************************************** + * GdipCreateBitmapFromHBITMAP [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBitmap** bitmap) { BITMAP bm; @@ -1138,6 +1215,9 @@ GpStatus WINGDIPAPI GdipCreateBitmapFromHBITMAP(HBITMAP hbm, HPALETTE hpal, GpBi return retval; } +/***************************************************************************** + * GdipSetEffectParameters [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect *effect, const VOID *params, const UINT size) { @@ -1149,6 +1229,9 @@ GpStatus WINGDIPAPI GdipSetEffectParameters(CGpEffect *effect, return NotImplemented; } +/***************************************************************************** + * GdipGetImageFlags [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetImageFlags(GpImage *image, UINT *flags) { if(!image || !flags) diff --git a/reactos/dll/win32/gdiplus/matrix.c b/reactos/dll/win32/gdiplus/matrix.c index eb8388454f0..a29508db8b0 100644 --- a/reactos/dll/win32/gdiplus/matrix.c +++ b/reactos/dll/win32/gdiplus/matrix.c @@ -50,6 +50,11 @@ static void matrix_multiply(GDIPCONST REAL * left, GDIPCONST REAL * right, REAL memcpy(out, temp, 6 * sizeof(REAL)); } +static REAL matrix_det(GDIPCONST GpMatrix *matrix) +{ + return matrix->matrix[0]*matrix->matrix[3] - matrix->matrix[1]*matrix->matrix[2]; +} + GpStatus WINGDIPAPI GdipCreateMatrix2(REAL m11, REAL m12, REAL m21, REAL m22, REAL dx, REAL dy, GpMatrix **matrix) { @@ -158,6 +163,43 @@ GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix *matrix, return Ok; } +GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix *matrix) +{ + GpMatrix copy; + REAL det; + BOOL invertible; + + if(!matrix) + return InvalidParameter; + + GdipIsMatrixInvertible(matrix, &invertible); + if(!invertible) + return InvalidParameter; + + det = matrix_det(matrix); + + copy = *matrix; + /* store result */ + matrix->matrix[0] = copy.matrix[3] / det; + matrix->matrix[1] = -copy.matrix[1] / det; + matrix->matrix[2] = -copy.matrix[2] / det; + matrix->matrix[3] = copy.matrix[0] / det; + matrix->matrix[4] = (copy.matrix[2]*copy.matrix[5]-copy.matrix[3]*copy.matrix[4]) / det; + matrix->matrix[5] = -(copy.matrix[0]*copy.matrix[5]-copy.matrix[1]*copy.matrix[4]) / det; + + return Ok; +} + +GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix *matrix, BOOL *result) +{ + if(!matrix || !result) + return InvalidParameter; + + *result = (fabs(matrix_det(matrix)) >= 1e-5); + + return Ok; +} + GpStatus WINGDIPAPI GdipMultiplyMatrix(GpMatrix *matrix, GpMatrix* matrix2, GpMatrixOrder order) { @@ -238,6 +280,30 @@ GpStatus WINGDIPAPI GdipSetMatrixElements(GpMatrix *matrix, REAL m11, REAL m12, return Ok; } +GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix *matrix, REAL shearX, REAL shearY, + GpMatrixOrder order) +{ + REAL shear[6]; + + if(!matrix) + return InvalidParameter; + + /* prepare transformation matrix */ + shear[0] = 1.0; + shear[1] = shearY; + shear[2] = shearX; + shear[3] = 1.0; + shear[4] = 0.0; + shear[5] = 0.0; + + if(order == MatrixOrderAppend) + matrix_multiply(matrix->matrix, shear, matrix->matrix); + else + matrix_multiply(shear, matrix->matrix, matrix->matrix); + + return Ok; +} + GpStatus WINGDIPAPI GdipTransformMatrixPoints(GpMatrix *matrix, GpPointF *pts, INT count) { diff --git a/reactos/dll/win32/gdiplus/pathiterator.c b/reactos/dll/win32/gdiplus/pathiterator.c index abb5dbb30f9..95f17748d64 100644 --- a/reactos/dll/win32/gdiplus/pathiterator.c +++ b/reactos/dll/win32/gdiplus/pathiterator.c @@ -31,24 +31,30 @@ GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator **iterator, GpPath* path) { INT size; - if(!iterator || !path) + if(!iterator) return InvalidParameter; - size = path->pathdata.Count; - *iterator = GdipAlloc(sizeof(GpPathIterator)); if(!*iterator) return OutOfMemory; - (*iterator)->pathdata.Types = GdipAlloc(size); - (*iterator)->pathdata.Points = GdipAlloc(size * sizeof(PointF)); + if(path){ + size = path->pathdata.Count; - memcpy((*iterator)->pathdata.Types, path->pathdata.Types, size); - memcpy((*iterator)->pathdata.Points, path->pathdata.Points, - size * sizeof(PointF)); - (*iterator)->pathdata.Count = size; + (*iterator)->pathdata.Types = GdipAlloc(size); + (*iterator)->pathdata.Points = GdipAlloc(size * sizeof(PointF)); - (*iterator)->subpath_pos = 0; - (*iterator)->marker_pos = 0; + memcpy((*iterator)->pathdata.Types, path->pathdata.Types, size); + memcpy((*iterator)->pathdata.Points, path->pathdata.Points,size * sizeof(PointF)); + (*iterator)->pathdata.Count = size; + } + else{ + (*iterator)->pathdata.Types = NULL; + (*iterator)->pathdata.Points = NULL; + (*iterator)->pathdata.Count = 0; + } + + (*iterator)->subpath_pos = 0; + (*iterator)->marker_pos = 0; (*iterator)->pathtype_pos = 0; return Ok; @@ -105,16 +111,62 @@ GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator* iterator, BOOL* hasCurv return Ok; } +GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator* iterator, INT* count) +{ + INT i; + + if(!iterator || !count) + return InvalidParameter; + + *count = 0; + for(i = 0; i < iterator->pathdata.Count; i++){ + if(iterator->pathdata.Types[i] == PathPointTypeStart) + (*count)++; + } + + return Ok; +} + +GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator* iterator, INT *resultCount, + INT* startIndex, INT* endIndex) +{ + INT i; + + if(!iterator || !startIndex || !endIndex) + return InvalidParameter; + + *resultCount = 0; + + /* first call could start with second point as all subsequent, cause + path couldn't contain only one */ + for(i = iterator->marker_pos + 1; i < iterator->pathdata.Count; i++){ + if((iterator->pathdata.Types[i] & PathPointTypePathMarker) || + (i == iterator->pathdata.Count - 1)){ + *startIndex = iterator->marker_pos; + if(iterator->marker_pos > 0) (*startIndex)++; + *endIndex = iterator->marker_pos = i; + *resultCount= *endIndex - *startIndex + 1; + break; + } + } + + return Ok; +} + GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator* iterator, INT *resultCount, INT* startIndex, INT* endIndex, BOOL* isClosed) { INT i, count; - if(!iterator) + if(!iterator || !startIndex || !endIndex || !isClosed || !resultCount) return InvalidParameter; count = iterator->pathdata.Count; + /* iterator created with NULL path */ + if(count == 0) + return Ok; + if(iterator->subpath_pos == count){ *startIndex = *endIndex = *resultCount = 0; *isClosed = 1; diff --git a/reactos/dll/win32/gdiplus/pen.c b/reactos/dll/win32/gdiplus/pen.c index 852494f2ac2..104d9de6485 100644 --- a/reactos/dll/win32/gdiplus/pen.c +++ b/reactos/dll/win32/gdiplus/pen.c @@ -116,6 +116,8 @@ GpStatus WINGDIPAPI GdipCreatePen2(GpBrush *brush, REAL width, GpUnit unit, gp_pen->miterlimit = 10.0; gp_pen->dash = DashStyleSolid; gp_pen->offset = 0.0; + gp_pen->customstart = NULL; + gp_pen->customend = NULL; if(!((gp_pen->unit == UnitWorld) || (gp_pen->unit == UnitPixel))) { FIXME("UnitWorld, UnitPixel only supported units\n"); @@ -163,6 +165,32 @@ GpStatus WINGDIPAPI GdipGetPenColor(GpPen *pen, ARGB *argb) return GdipGetSolidFillColor(((GpSolidFill*)pen->brush), argb); } +GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen *pen, GpCustomLineCap** customCap) +{ + if(!pen || !customCap) + return InvalidParameter; + + if(!pen->customend){ + *customCap = NULL; + return Ok; + } + + return GdipCloneCustomLineCap(pen->customend, customCap); +} + +GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen *pen, GpCustomLineCap** customCap) +{ + if(!pen || !customCap) + return InvalidParameter; + + if(!pen->customstart){ + *customCap = NULL; + return Ok; + } + + return GdipCloneCustomLineCap(pen->customstart, customCap); +} + GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen *pen, REAL *dash, INT count) { if(!pen || !dash || count > pen->numdashes) @@ -187,6 +215,16 @@ GpStatus WINGDIPAPI GdipGetPenDashCap197819(GpPen *pen, GpDashCap *dashCap) return Ok; } +GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen *pen, INT *count) +{ + if(!pen || !count) + return InvalidParameter; + + *count = pen->numdashes; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen *pen, REAL *offset) { if(!pen || !offset) @@ -227,6 +265,16 @@ GpStatus WINGDIPAPI GdipGetPenLineJoin(GpPen *pen, GpLineJoin *lineJoin) return Ok; } +GpStatus WINGDIPAPI GdipGetPenMode(GpPen *pen, GpPenAlignment *mode) +{ + if(!pen || !mode) + return InvalidParameter; + + *mode = pen->align; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetPenMiterLimit(GpPen *pen, REAL *miterLimit) { if(!pen || !miterLimit) @@ -292,7 +340,8 @@ GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen *pen, GpCustomLineCap* customCa GpCustomLineCap * cap; GpStatus ret; - if(!pen || !customCap) return InvalidParameter; + /* native crashes on pen == NULL, customCap != NULL */ + if(!customCap) return InvalidParameter; if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){ GdipDeleteCustomLineCap(pen->customend); @@ -308,7 +357,8 @@ GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen *pen, GpCustomLineCap* custom GpCustomLineCap * cap; GpStatus ret; - if(!pen || !customCap) return InvalidParameter; + /* native crashes on pen == NULL, customCap != NULL */ + if(!customCap) return InvalidParameter; if((ret = GdipCloneCustomLineCap(customCap, &cap)) == Ok){ GdipDeleteCustomLineCap(pen->customstart); @@ -357,6 +407,16 @@ GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen *pen, GDIPCONST REAL *dash, return Ok; } +GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen *pen, GpDashCap dashCap) +{ + if(!pen) + return InvalidParameter; + + pen->dashcap = dashCap; + + return Ok; +} + /* FIXME: dash offset not used */ GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen *pen, REAL offset) { @@ -461,12 +521,11 @@ GpStatus WINGDIPAPI GdipSetPenWidth(GpPen *pen, REAL width) return Ok; } - -GpStatus WINGDIPAPI GdipSetPenMode(GpPen *pen, GpPenAlignment penAlignment) +GpStatus WINGDIPAPI GdipSetPenMode(GpPen *pen, GpPenAlignment mode) { if(!pen) return InvalidParameter; - FIXME("stub (%d)\n", penAlignment); + pen->align = mode; return Ok; } diff --git a/reactos/dll/win32/gdiplus/region.c b/reactos/dll/win32/gdiplus/region.c index 3d95723b529..c4007b3ff38 100644 --- a/reactos/dll/win32/gdiplus/region.c +++ b/reactos/dll/win32/gdiplus/region.c @@ -32,8 +32,7 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); /********************************************************** * - * Data returned by GdipGetRegionData (for rectangle based regions) - * looks something like this: + * Data returned by GdipGetRegionData looks something like this: * * struct region_data_header * { @@ -43,7 +42,9 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); * DWORD num_ops; number of combining ops * 2 * }; * - * Then follows a sequence of combining ops and RECTFs. + * Then follows a sequence of combining ops and region elements. + * + * A region element is either a RECTF or some path data. * * Combining ops are just stored as their CombineMode value. * @@ -51,22 +52,99 @@ WINE_DEFAULT_DEBUG_CHANNEL(gdiplus); * stored as 0x10000002 (with no following RECTF) and an infinite rect * is stored as 0x10000003 (again with no following RECTF). * - * The combining ops are stored in the reverse order to the RECTFs and in the - * reverse order to which the region was constructed. + * Path data is preceded by the DWORD 0x10000001. Then follows a + * DWORD size and then size bytes of data. * - * When two or more complex regions (ie those with more than one rect) - * are combined, the combining op for the two regions comes first, - * then the combining ops for the rects in region 1, followed by the - * rects for region 1, then follows the combining ops for region 2 and - * finally region 2's rects. Presumably you're supposed to use the - * 0x10000000 rect header to find the end of the op list (the count of - * the rects in each region is not stored). + * The combining ops are stored in the reverse order to the region + * elements and in the reverse order to which the region was + * constructed. * - * When a simple region (1 rect) is combined, it's treated as if a single rect - * is being combined. + * When two or more complex regions (ie those with more than one + * element) are combined, the combining op for the two regions comes + * first, then the combining ops for the region elements in region 1, + * followed by the region elements for region 1, then follows the + * combining ops for region 2 and finally region 2's region elements. + * Presumably you're supposed to use the 0x1000000x header to find the + * end of the op list (the count of the elements in each region is not + * stored). + * + * When a simple region (1 element) is combined, it's treated as if a + * single rect/path is being combined. * */ +typedef enum RegionType +{ + RegionDataRect = 0x10000000, + RegionDataPath = 0x10000001, + RegionDataEmptyRect = 0x10000002, + RegionDataInfiniteRect = 0x10000003, +} RegionType; + +/* Header size as far as header->size is concerned. This doesn't include + * header->size or header->checksum + */ +static const INT sizeheader_size = sizeof(DWORD) * 2; + +static inline INT get_element_size(const region_element* element) +{ + INT needed = sizeof(DWORD); /* DWORD for the type */ + switch(element->type) + { + case RegionDataRect: + return needed + sizeof(GpRect); + case RegionDataPath: + needed += element->elementdata.pathdata.pathheader.size; + needed += sizeof(DWORD); /* Extra DWORD for pathheader.size */ + return needed; + case RegionDataEmptyRect: + case RegionDataInfiniteRect: + return needed; + default: + needed += get_element_size(element->elementdata.combine.left); + needed += get_element_size(element->elementdata.combine.right); + return needed; + } + + return 0; +} + +/* Does not check parameters, caller must do that */ +static inline GpStatus init_region(GpRegion* region, const RegionType type) +{ + region->node.type = type; + region->header.checksum = 0xdeadbeef; + region->header.magic = VERSION_MAGIC; + region->header.num_children = 0; + region->header.size = sizeheader_size + get_element_size(®ion->node); + + return Ok; +} + +static inline void delete_element(region_element* element) +{ + switch(element->type) + { + case RegionDataRect: + break; + case RegionDataPath: + GdipDeletePath(element->elementdata.pathdata.path); + break; + case RegionDataEmptyRect: + case RegionDataInfiniteRect: + break; + default: + delete_element(element->elementdata.combine.left); + delete_element(element->elementdata.combine.right); + GdipFree(element->elementdata.combine.left); + GdipFree(element->elementdata.combine.right); + break; + } +} + +/***************************************************************************** + * GdipCloneRegion [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipCloneRegion(GpRegion *region, GpRegion **clone) { FIXME("(%p %p): stub\n", region, clone); @@ -104,10 +182,16 @@ GpStatus WINGDIPAPI GdipCombineRegionRegion(GpRegion *region1, GpRegion *region2 GpStatus WINGDIPAPI GdipCreateRegion(GpRegion **region) { - FIXME("(%p): stub\n", region); + if(!region) + return InvalidParameter; - *region = NULL; - return NotImplemented; + TRACE("%p\n", region); + + *region = GdipAlloc(sizeof(GpRegion)); + if(!*region) + return OutOfMemory; + + return init_region(*region, RegionDataInfiniteRect); } GpStatus WINGDIPAPI GdipCreateRegionPath(GpPath *path, GpRegion **region) @@ -152,8 +236,15 @@ GpStatus WINGDIPAPI GdipCreateRegionHrgn(HRGN hrgn, GpRegion **region) GpStatus WINGDIPAPI GdipDeleteRegion(GpRegion *region) { - FIXME("(%p): stub\n", region); - return NotImplemented; + TRACE("%p\n", region); + + if (!region) + return InvalidParameter; + + delete_element(®ion->node); + GdipFree(region); + + return Ok; } GpStatus WINGDIPAPI GdipGetRegionBounds(GpRegion *region, GpGraphics *graphics, GpRectF *rect) @@ -179,11 +270,20 @@ GpStatus WINGDIPAPI GdipGetRegionData(GpRegion *region, BYTE *buffer, UINT size, GpStatus WINGDIPAPI GdipGetRegionDataSize(GpRegion *region, UINT *needed) { - FIXME("(%p, %p): stub\n", region, needed); + if (!(region && needed)) + return InvalidParameter; - return NotImplemented; + TRACE("%p, %p\n", region, needed); + + /* header.size doesn't count header.size and header.checksum */ + *needed = region->header.size + sizeof(DWORD) * 2; + + return Ok; } +/***************************************************************************** + * GdipGetRegionHRgn [GDIPLUS.@] + */ GpStatus WINGDIPAPI GdipGetRegionHRgn(GpRegion *region, GpGraphics *graphics, HRGN *hrgn) { FIXME("(%p, %p, %p): stub\n", region, graphics, hrgn); @@ -216,22 +316,32 @@ GpStatus WINGDIPAPI GdipIsInfiniteRegion(GpRegion *region, GpGraphics *graphics, GpStatus WINGDIPAPI GdipSetEmpty(GpRegion *region) { - static int calls; + GpStatus stat; - if(!(calls++)) - FIXME("not implemented\n"); + TRACE("%p\n", region); - return NotImplemented; + if (!region) + return InvalidParameter; + + delete_element(®ion->node); + stat = init_region(region, RegionDataEmptyRect); + + return stat; } GpStatus WINGDIPAPI GdipSetInfinite(GpRegion *region) { - static int calls; + GpStatus stat; - if(!(calls++)) - FIXME("not implemented\n"); + if (!region) + return InvalidParameter; - return NotImplemented; + TRACE("%p\n", region); + + delete_element(®ion->node); + stat = init_region(region, RegionDataInfiniteRect); + + return stat; } GpStatus WINGDIPAPI GdipTransformRegion(GpRegion *region, GpMatrix *matrix) diff --git a/reactos/dll/win32/gdiplus/stringformat.c b/reactos/dll/win32/gdiplus/stringformat.c index bd5d6ad0920..201201a866f 100644 --- a/reactos/dll/win32/gdiplus/stringformat.c +++ b/reactos/dll/win32/gdiplus/stringformat.c @@ -43,7 +43,13 @@ GpStatus WINGDIPAPI GdipCreateStringFormat(INT attr, LANGID lang, (*format)->attr = attr; (*format)->lang = lang; + (*format)->digitlang = LANG_NEUTRAL; (*format)->trimming = StringTrimmingCharacter; + (*format)->digitsub = StringDigitSubstituteUser; + /* tabstops */ + (*format)->tabcount = 0; + (*format)->firsttab = 0.0; + (*format)->tabs = NULL; return Ok; } @@ -53,11 +59,29 @@ GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat *format) if(!format) return InvalidParameter; + GdipFree(format->tabs); GdipFree(format); return Ok; } +GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **format) +{ + GpStatus stat; + + if (!format) + return InvalidParameter; + + stat = GdipCreateStringFormat(0, LANG_NEUTRAL, format); + if(stat != Ok) + return stat; + + (*format)->align = StringAlignmentNear; + (*format)->vertalign = StringAlignmentNear; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat *format, StringAlignment *align) { @@ -69,6 +93,29 @@ GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat *format, return Ok; } +GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat *format, + LANGID *language, StringDigitSubstitute *substitute) +{ + if(!format) + return InvalidParameter; + + if(language) *language = format->digitlang; + if(substitute) *substitute = format->digitsub; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat* format, + INT* flags) +{ + if (!(format && flags)) + return InvalidParameter; + + *flags = format->attr; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat *format, INT *hkpx) { @@ -91,6 +138,43 @@ GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat *format, return Ok; } +GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( + GDIPCONST GpStringFormat* format, INT* count) +{ + if (!(format && count)) + return InvalidParameter; + + FIXME("stub: %p %p\n", format, count); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat *format, + INT *count) +{ + if(!format || !count) + return InvalidParameter; + + *count = format->tabcount; + + return Ok; +} + +GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat *format, INT count, + REAL *firsttab, REAL *tabs) +{ + if(!format || !firsttab || !tabs) + return InvalidParameter; + + /* native simply crashes on count < 0 */ + if(count != 0) + memcpy(tabs, format->tabs, sizeof(REAL)*count); + + *firsttab = format->firsttab; + + return Ok; +} + GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat *format, StringTrimming *trimming) { @@ -113,6 +197,19 @@ GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat *format, return Ok; } +/*FIXME: digit substitution actually not implemented, get/set only */ +GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat *format, + LANGID language, StringDigitSubstitute substitute) +{ + if(!format) + return InvalidParameter; + + format->digitlang = language; + format->digitsub = substitute; + + return Ok; +} + GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat *format, INT hkpx) { @@ -135,6 +232,47 @@ GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat *format, return Ok; } +GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges(GpStringFormat* + format, INT rangeCount, GDIPCONST CharacterRange* ranges) +{ + if (!(format && rangeCount && ranges)) + return InvalidParameter; + + FIXME("stub: %p, %d, %p\n", format, rangeCount, ranges); + + return NotImplemented; +} + +GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat *format, REAL firsttab, + INT count, GDIPCONST REAL *tabs) +{ + if(!format || !tabs) + return InvalidParameter; + + if(count > 0){ + if(firsttab < 0.0) return NotImplemented; + /* first time allocation */ + if(format->tabcount == 0){ + format->tabs = GdipAlloc(sizeof(REAL)*count); + if(!format->tabs) + return OutOfMemory; + } + /* reallocation */ + if((format->tabcount < count) && (format->tabcount > 0)){ + REAL *ptr; + ptr = HeapReAlloc(GetProcessHeap(), 0, format->tabs, sizeof(REAL)*count); + if(!ptr) + return OutOfMemory; + format->tabs = ptr; + } + format->firsttab = firsttab; + format->tabcount = count; + memcpy(format->tabs, tabs, sizeof(REAL)*count); + } + + return Ok; +} + GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat *format, StringTrimming trimming) { @@ -163,7 +301,41 @@ GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat *format, GpSt **newFormat = *format; + if(format->tabcount > 0){ + (*newFormat)->tabs = GdipAlloc(sizeof(REAL) * format->tabcount); + if(!(*newFormat)->tabs){ + GdipFree(*newFormat); + return OutOfMemory; + } + memcpy((*newFormat)->tabs, format->tabs, sizeof(REAL) * format->tabcount); + } + else + (*newFormat)->tabs = NULL; + TRACE("%p %p\n",format,newFormat); return Ok; } + +GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **format) +{ + GpStatus stat; + + if(!format) + return InvalidParameter; + + stat = GdipCreateStringFormat(StringFormatFlagsNoFitBlackBox | + StringFormatFlagsLineLimit | + StringFormatFlagsNoClip, LANG_NEUTRAL, format); + if(stat != Ok) + return stat; + + (*format)->digitlang = LANG_NEUTRAL; + (*format)->digitsub = StringDigitSubstituteUser; + (*format)->trimming = StringTrimmingNone; + (*format)->hkprefix = HotkeyPrefixNone; + (*format)->align = StringAlignmentNear; + (*format)->vertalign = StringAlignmentNear; + + return Ok; +} diff --git a/reactos/include/psdk/gdiplusenums.h b/reactos/include/psdk/gdiplusenums.h index 8e1148d7847..bc52bd5d732 100644 --- a/reactos/include/psdk/gdiplusenums.h +++ b/reactos/include/psdk/gdiplusenums.h @@ -227,6 +227,14 @@ enum StringAlignment StringAlignmentFar = 2 }; +enum StringDigitSubstitute +{ + StringDigitSubstituteUser = 0, + StringDigitSubstituteNone = 1, + StringDigitSubstituteNational = 2, + StringDigitSubstituteTraditional = 3 +}; + enum StringFormatFlags { StringFormatFlagsDirectionRightToLeft = 0x00000001, @@ -314,6 +322,13 @@ enum FlushIntention FlushIntentionSync = 1 }; +enum CoordinateSpace +{ + CoordinateSpaceWorld, + CoordinateSpacePage, + CoordinateSpaceDevice +}; + #ifndef __cplusplus typedef enum Unit Unit; @@ -339,6 +354,7 @@ typedef enum EmfType EmfType; typedef enum CompositingMode CompositingMode; typedef enum TextRenderingHint TextRenderingHint; typedef enum StringAlignment StringAlignment; +typedef enum StringDigitSubstitute StringDigitSubstitute; typedef enum StringTrimming StringTrimming; typedef enum FontStyle FontStyle; typedef enum StringFormatFlags StringFormatFlags; @@ -347,6 +363,7 @@ typedef enum PenAlignment GpPenAlignment; typedef enum ImageCodecFlags ImageCodecFlags; typedef enum CombineMode CombineMode; typedef enum FlushIntention FlushIntention; +typedef enum CoordinateSpace CoordinateSpace; #endif /* end of c typedefs */ diff --git a/reactos/include/psdk/gdiplusflat.h b/reactos/include/psdk/gdiplusflat.h index 9ef7ad75b5f..dc938ac0656 100644 --- a/reactos/include/psdk/gdiplusflat.h +++ b/reactos/include/psdk/gdiplusflat.h @@ -33,19 +33,25 @@ GpStatus WINGDIPAPI GdipCreatePen2(GpBrush*,REAL,GpUnit,GpPen**); GpStatus WINGDIPAPI GdipDeletePen(GpPen*); GpStatus WINGDIPAPI GdipGetPenBrushFill(GpPen*,GpBrush**); GpStatus WINGDIPAPI GdipGetPenColor(GpPen*,ARGB*); +GpStatus WINGDIPAPI GdipGetPenCustomStartCap(GpPen*,GpCustomLineCap**); +GpStatus WINGDIPAPI GdipGetPenCustomEndCap(GpPen*,GpCustomLineCap**); GpStatus WINGDIPAPI GdipGetPenDashArray(GpPen*,REAL*,INT); +GpStatus WINGDIPAPI GdipGetPenDashCount(GpPen*,INT*); GpStatus WINGDIPAPI GdipGetPenDashOffset(GpPen*,REAL*); GpStatus WINGDIPAPI GdipGetPenDashStyle(GpPen*,GpDashStyle*); +GpStatus WINGDIPAPI GdipGetPenMode(GpPen*,GpPenAlignment*); GpStatus WINGDIPAPI GdipSetPenBrushFill(GpPen*,GpBrush*); GpStatus WINGDIPAPI GdipSetPenColor(GpPen*,ARGB); GpStatus WINGDIPAPI GdipSetPenCustomEndCap(GpPen*,GpCustomLineCap*); GpStatus WINGDIPAPI GdipSetPenCustomStartCap(GpPen*,GpCustomLineCap*); GpStatus WINGDIPAPI GdipSetPenDashArray(GpPen*,GDIPCONST REAL*,INT); +GpStatus WINGDIPAPI GdipSetPenDashCap197819(GpPen*,GpDashCap); GpStatus WINGDIPAPI GdipSetPenDashOffset(GpPen*,REAL); GpStatus WINGDIPAPI GdipSetPenDashStyle(GpPen*,GpDashStyle); GpStatus WINGDIPAPI GdipSetPenEndCap(GpPen*,GpLineCap); GpStatus WINGDIPAPI GdipSetPenLineCap197819(GpPen*,GpLineCap,GpLineCap,GpDashCap); GpStatus WINGDIPAPI GdipSetPenLineJoin(GpPen*,GpLineJoin); +GpStatus WINGDIPAPI GdipSetPenMode(GpPen*,GpPenAlignment); GpStatus WINGDIPAPI GdipSetPenMiterLimit(GpPen*,REAL); GpStatus WINGDIPAPI GdipSetPenStartCap(GpPen*,GpLineCap); GpStatus WINGDIPAPI GdipSetPenWidth(GpPen*,REAL); @@ -69,9 +75,15 @@ GpStatus WINGDIPAPI GdipCreateLineBrushFromRect(GDIPCONST GpRectF*,ARGB,ARGB, LinearGradientMode,GpWrapMode,GpLineGradient**); GpStatus WINGDIPAPI GdipCreateLineBrushFromRectI(GDIPCONST GpRect*,ARGB,ARGB, LinearGradientMode,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngle(GDIPCONST GpRectF*, + ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); +GpStatus WINGDIPAPI GdipCreateLineBrushFromRectWithAngleI(GDIPCONST GpRect*, + ARGB,ARGB,REAL,BOOL,GpWrapMode,GpLineGradient**); + GpStatus WINGDIPAPI GdipCreateMetafileFromEmf(HENHMETAFILE,BOOL,GpMetafile**); GpStatus WINGDIPAPI GdipCreateMetafileFromWmf(HMETAFILE,BOOL, GDIPCONST WmfPlaceableFileHeader*,GpMetafile**); +GpStatus WINGDIPAPI GdipCreateMetafileFromWmfFile(GDIPCONST WCHAR*, GDIPCONST WmfPlaceableFileHeader*,GpMetafile**); GpStatus WINGDIPAPI GdipCreateStreamOnFile(GDIPCONST WCHAR*,UINT,IStream**); GpStatus WINGDIPAPI GdipDeleteGraphics(GpGraphics *); GpStatus WINGDIPAPI GdipDrawArc(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,REAL); @@ -80,6 +92,10 @@ GpStatus WINGDIPAPI GdipDrawBezier(GpGraphics*,GpPen*,REAL,REAL,REAL,REAL,REAL,R GpStatus WINGDIPAPI GdipDrawBezierI(GpGraphics*,GpPen*,INT,INT,INT,INT,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipDrawBeziers(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawBeziersI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipDrawClosedCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); +GpStatus WINGDIPAPI GdipDrawClosedCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipDrawClosedCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL); +GpStatus WINGDIPAPI GdipDrawClosedCurve2I(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipDrawCurve(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipDrawCurveI(GpGraphics*,GpPen*,GDIPCONST GpPoint*,INT); GpStatus WINGDIPAPI GdipDrawCurve2(GpGraphics*,GpPen*,GDIPCONST GpPointF*,INT,REAL); @@ -145,6 +161,10 @@ GpStatus WINGDIPAPI GdipGetTextRenderingHint(GpGraphics*,TextRenderingHint*); GpStatus WINGDIPAPI GdipGetWorldTransform(GpGraphics*,GpMatrix*); GpStatus WINGDIPAPI GdipMeasureString(GpGraphics*,GDIPCONST WCHAR*,INT, GDIPCONST GpFont*,GDIPCONST RectF*,GDIPCONST GpStringFormat*,RectF*,INT*,INT*); +GpStatus WINGDIPAPI GdipMeasureCharacterRanges(GpGraphics*, GDIPCONST WCHAR*, + INT, GDIPCONST GpFont*, GDIPCONST RectF*, GDIPCONST GpStringFormat*, INT, + GpRegion**); + GpStatus WINGDIPAPI GdipReleaseDC(GpGraphics*,HDC); GpStatus WINGDIPAPI GdipRestoreGraphics(GpGraphics*,GraphicsState); GpStatus WINGDIPAPI GdipRotateWorldTransform(GpGraphics*,REAL,GpMatrixOrder); @@ -179,15 +199,20 @@ GpStatus WINGDIPAPI GdipCreateTextureIAI(GpImage*,GDIPCONST GpImageAttributes*, GpStatus WINGDIPAPI GdipDeleteBrush(GpBrush*); GpStatus WINGDIPAPI GdipGetBrushType(GpBrush*,GpBrushType*); GpStatus WINGDIPAPI GdipGetLineGammaCorrection(GpLineGradient*,BOOL*); +GpStatus WINGDIPAPI GdipGetLineWrapMode(GpLineGradient*,GpWrapMode*); GpStatus WINGDIPAPI GdipGetLineRect(GpLineGradient*,GpRectF*); GpStatus WINGDIPAPI GdipGetLineRectI(GpLineGradient*,GpRect*); GpStatus WINGDIPAPI GdipGetLineColors(GpLineGradient*,ARGB*); +GpStatus WINGDIPAPI GdipGetPathGradientBlend(GpPathGradient*,REAL*,REAL*,INT); +GpStatus WINGDIPAPI GdipGetPathGradientBlendCount(GpPathGradient*,INT*); GpStatus WINGDIPAPI GdipGetPathGradientCenterColor(GpPathGradient*,ARGB*); GpStatus WINGDIPAPI GdipGetPathGradientCenterPoint(GpPathGradient*,GpPointF*); GpStatus WINGDIPAPI GdipGetPathGradientCenterPointI(GpPathGradient*,GpPoint*); GpStatus WINGDIPAPI GdipGetPathGradientFocusScales(GpPathGradient*,REAL*,REAL*); GpStatus WINGDIPAPI GdipGetPathGradientGammaCorrection(GpPathGradient*,BOOL*); GpStatus WINGDIPAPI GdipGetPathGradientPointCount(GpPathGradient*,INT*); +GpStatus WINGDIPAPI GdipGetPathGradientRect(GpPathGradient*,GpRectF*); +GpStatus WINGDIPAPI GdipGetPathGradientRectI(GpPathGradient*,GpRect*); GpStatus WINGDIPAPI GdipGetPathGradientSurroundColorsWithCount(GpPathGradient*, ARGB*,INT*); GpStatus WINGDIPAPI GdipGetPathGradientWrapMode(GpPathGradient*,GpWrapMode*); @@ -210,6 +235,10 @@ GpStatus WINGDIPAPI GdipSetPathGradientSurroundColorsWithCount(GpPathGradient*, GpStatus WINGDIPAPI GdipSetPathGradientWrapMode(GpPathGradient*,GpWrapMode); GpStatus WINGDIPAPI GdipSetSolidFillColor(GpSolidFill*,ARGB); GpStatus WINGDIPAPI GdipSetTextureTransform(GpTexture *,GDIPCONST GpMatrix*); +GpStatus WINGDIPAPI GdipTransformPoints(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace, + GpPointF *, INT); +GpStatus WINGDIPAPI GdipTransformPointsI(GpGraphics*, GpCoordinateSpace, GpCoordinateSpace, + GpPoint *, INT); GpStatus WINGDIPAPI GdipAddPathArc(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathArcI(GpPath*,INT,INT,INT,INT,REAL,REAL); @@ -217,6 +246,14 @@ GpStatus WINGDIPAPI GdipAddPathBezier(GpPath*,REAL,REAL,REAL,REAL,REAL,REAL,REAL GpStatus WINGDIPAPI GdipAddPathBezierI(GpPath*,INT,INT,INT,INT,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathBeziers(GpPath*,GDIPCONST GpPointF*,INT); GpStatus WINGDIPAPI GdipAddPathBeziersI(GpPath*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipAddPathClosedCurve(GpPath*,GDIPCONST GpPointF*,INT); +GpStatus WINGDIPAPI GdipAddPathClosedCurveI(GpPath*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipAddPathClosedCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL); +GpStatus WINGDIPAPI GdipAddPathClosedCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL); +GpStatus WINGDIPAPI GdipAddPathCurve(GpPath*,GDIPCONST GpPointF*,INT); +GpStatus WINGDIPAPI GdipAddPathCurveI(GpPath*,GDIPCONST GpPoint*,INT); +GpStatus WINGDIPAPI GdipAddPathCurve2(GpPath*,GDIPCONST GpPointF*,INT,REAL); +GpStatus WINGDIPAPI GdipAddPathCurve2I(GpPath*,GDIPCONST GpPoint*,INT,REAL); GpStatus WINGDIPAPI GdipAddPathEllipse(GpPath*,REAL,REAL,REAL,REAL); GpStatus WINGDIPAPI GdipAddPathEllipseI(GpPath*,INT,INT,INT,INT); GpStatus WINGDIPAPI GdipAddPathLine(GpPath*,REAL,REAL,REAL,REAL); @@ -247,10 +284,12 @@ GpStatus WINGDIPAPI GdipGetPathTypes(GpPath*,BYTE*,INT); GpStatus WINGDIPAPI GdipGetPathWorldBounds(GpPath*,GpRectF*,GDIPCONST GpMatrix*,GDIPCONST GpPen*); GpStatus WINGDIPAPI GdipGetPathWorldBoundsI(GpPath*,GpRect*,GDIPCONST GpMatrix*,GDIPCONST GpPen*); GpStatus WINGDIPAPI GdipGetPointCount(GpPath*,INT*); - GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*, +GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPoint(GpPath*,REAL,REAL,GpPen*, GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipIsOutlineVisiblePathPointI(GpPath*,INT,INT,GpPen*, GpGraphics*,BOOL*); +GpStatus WINGDIPAPI GdipIsVisiblePathPoint(GpPath*,REAL,REAL,GpGraphics*,BOOL*); +GpStatus WINGDIPAPI GdipIsVisiblePathPointI(GpPath*,INT,INT,GpGraphics*,BOOL*); GpStatus WINGDIPAPI GdipResetPath(GpPath*); GpStatus WINGDIPAPI GdipSetPathFillMode(GpPath*,GpFillMode); GpStatus WINGDIPAPI GdipStartPathFigure(GpPath*); @@ -261,8 +300,11 @@ GpStatus WINGDIPAPI GdipCreateMatrix(GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix2(REAL,REAL,REAL,REAL,REAL,REAL,GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix3(GDIPCONST GpRectF *,GDIPCONST GpPointF*,GpMatrix**); GpStatus WINGDIPAPI GdipCreateMatrix3I(GDIPCONST GpRect*,GDIPCONST GpPoint*,GpMatrix**); +GpStatus WINGDIPAPI GdipInvertMatrix(GpMatrix*); +GpStatus WINGDIPAPI GdipShearMatrix(GpMatrix*,REAL,REAL,GpMatrixOrder); GpStatus WINGDIPAPI GdipIsMatrixEqual(GDIPCONST GpMatrix*, GDIPCONST GpMatrix*, BOOL*); GpStatus WINGDIPAPI GdipIsMatrixIdentity(GDIPCONST GpMatrix*, BOOL*); +GpStatus WINGDIPAPI GdipIsMatrixInvertible(GDIPCONST GpMatrix*, BOOL*); GpStatus WINGDIPAPI GdipDeleteMatrix(GpMatrix*); GpStatus WINGDIPAPI GdipGetMatrixElements(GDIPCONST GpMatrix*,REAL*); @@ -281,9 +323,11 @@ GpStatus WINGDIPAPI GdipCreatePathIter(GpPathIterator**,GpPath*); GpStatus WINGDIPAPI GdipDeletePathIter(GpPathIterator*); GpStatus WINGDIPAPI GdipPathIterCopyData(GpPathIterator*,INT*,GpPointF*,BYTE*, INT,INT); +GpStatus WINGDIPAPI GdipPathIterNextMarker(GpPathIterator*,INT*,INT*,INT*); GpStatus WINGDIPAPI GdipPathIterNextSubpath(GpPathIterator*,INT*,INT*,INT*,BOOL*); GpStatus WINGDIPAPI GdipPathIterRewind(GpPathIterator*); GpStatus WINGDIPAPI GdipPathIterGetCount(GpPathIterator*,INT*); +GpStatus WINGDIPAPI GdipPathIterGetSubpathCount(GpPathIterator*,INT*); GpStatus WINGDIPAPI GdipPathIterEnumerate(GpPathIterator*,INT*,GpPointF*,BYTE*,INT); GpStatus WINGDIPAPI GdipPathIterHasCurve(GpPathIterator*,BOOL*); @@ -294,6 +338,10 @@ GpStatus WINGDIPAPI GdipDeleteCustomLineCap(GpCustomLineCap*); GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeCaps(GpCustomLineCap*,GpLineCap, GpLineCap); GpStatus WINGDIPAPI GdipGetCustomLineCapBaseCap(GpCustomLineCap*,GpLineCap*); +GpStatus WINGDIPAPI GdipGetCustomLineCapBaseInset(GpCustomLineCap*,REAL*); +GpStatus WINGDIPAPI GdipGetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin*); +GpStatus WINGDIPAPI GdipSetCustomLineCapStrokeJoin(GpCustomLineCap*,GpLineJoin); +GpStatus WINGDIPAPI GdipGetCustomLineCapWidthScale(GpCustomLineCap*,REAL*); GpStatus WINGDIPAPI GdipBitmapGetPixel(GpBitmap*,INT,INT,ARGB*); GpStatus WINGDIPAPI GdipBitmapSetPixel(GpBitmap*,INT,INT,ARGB); @@ -306,7 +354,9 @@ GpStatus WINGDIPAPI GdipConvertToEmfPlusToFile(const GpGraphics*,GpMetafile*,INT GpStatus WINGDIPAPI GdipConvertToEmfPlusToStream(const GpGraphics*,GpMetafile*,INT*,IStream*,EmfType,const WCHAR*,GpMetafile**); GpStatus WINGDIPAPI GdipCreateBitmapFromFile(GDIPCONST WCHAR*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromFileICM(GDIPCONST WCHAR*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromGdiDib(GDIPCONST BITMAPINFO*,VOID*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromGraphics(INT,INT,GpGraphics*,GpBitmap**); +GpStatus WINGDIPAPI GdipCreateBitmapFromResource(HINSTANCE,GDIPCONST WCHAR*,GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromScan0(INT,INT,INT,PixelFormat,BYTE*, GpBitmap**); GpStatus WINGDIPAPI GdipCreateBitmapFromStream(IStream*,GpBitmap**); @@ -370,25 +420,52 @@ GpStatus WINGDIPAPI GdipGetLogFontW(GpFont*,GpGraphics*,LOGFONTW*); GpStatus WINGDIPAPI GdipCloneFont(GpFont*,GpFont**); GpStatus WINGDIPAPI GdipGetFontUnit(GpFont*, Unit*); GpStatus WINGDIPAPI GdipGetFontSize(GpFont*, REAL*); +GpStatus WINGDIPAPI GdipGetFontHeightGivenDPI(GDIPCONST GpFont*, REAL, REAL*); GpStatus WINGDIPAPI GdipCreateFontFamilyFromName(GDIPCONST WCHAR*, GpFontCollection*, GpFontFamily**); +GpStatus WINGDIPAPI GdipCloneFontFamily(GpFontFamily*, GpFontFamily**); GpStatus WINGDIPAPI GdipDeleteFontFamily(GpFontFamily*); GpStatus WINGDIPAPI GdipGetFamilyName(GDIPCONST GpFontFamily*, WCHAR*, LANGID); +GpStatus WINGDIPAPI GdipGetCellAscent(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetCellDescent(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetEmHeight(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipGetLineSpacing(GDIPCONST GpFontFamily*, INT, UINT16*); +GpStatus WINGDIPAPI GdipIsStyleAvailable(GDIPCONST GpFontFamily *, INT, BOOL*); GpStatus WINGDIPAPI GdipGetGenericFontFamilySansSerif(GpFontFamily**); GpStatus WINGDIPAPI GdipGetGenericFontFamilySerif(GpFontFamily**); GpStatus WINGDIPAPI GdipGetGenericFontFamilyMonospace(GpFontFamily**); +GpStatus WINGDIPAPI GdipNewPrivateFontCollection(GpFontCollection**); +GpStatus WINGDIPAPI GdipDeletePrivateFontCollection(GpFontCollection**); +GpStatus WINGDIPAPI GdipPrivateAddFontFile(GpFontCollection*, GDIPCONST WCHAR*); +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyCount(GpFontCollection*, INT*); +GpStatus WINGDIPAPI GdipGetFontCollectionFamilyList(GpFontCollection*, INT, + GpFontFamily*[], INT*); + GpStatus WINGDIPAPI GdipCreateStringFormat(INT,LANGID,GpStringFormat**); GpStatus WINGDIPAPI GdipDeleteStringFormat(GpStringFormat*); +GpStatus WINGDIPAPI GdipStringFormatGetGenericDefault(GpStringFormat **); +GpStatus WINGDIPAPI GdipStringFormatGetGenericTypographic(GpStringFormat **); GpStatus WINGDIPAPI GdipGetStringFormatAlign(GpStringFormat*,StringAlignment*); +GpStatus WINGDIPAPI GdipGetStringFormatDigitSubstitution(GDIPCONST GpStringFormat*,LANGID*, + StringDigitSubstitute*); +GpStatus WINGDIPAPI GdipGetStringFormatFlags(GDIPCONST GpStringFormat*, INT*); GpStatus WINGDIPAPI GdipGetStringFormatHotkeyPrefix(GDIPCONST GpStringFormat*,INT*); GpStatus WINGDIPAPI GdipGetStringFormatLineAlign(GpStringFormat*,StringAlignment*); +GpStatus WINGDIPAPI GdipGetStringFormatMeasurableCharacterRangeCount( + GDIPCONST GpStringFormat*, INT*); +GpStatus WINGDIPAPI GdipGetStringFormatTabStopCount(GDIPCONST GpStringFormat*,INT*); +GpStatus WINGDIPAPI GdipGetStringFormatTabStops(GDIPCONST GpStringFormat*,INT,REAL*,REAL*); GpStatus WINGDIPAPI GdipGetStringFormatTrimming(GpStringFormat*,StringTrimming*); GpStatus WINGDIPAPI GdipSetStringFormatAlign(GpStringFormat*,StringAlignment); +GpStatus WINGDIPAPI GdipSetStringFormatDigitSubstitution(GpStringFormat*,LANGID,StringDigitSubstitute); GpStatus WINGDIPAPI GdipSetStringFormatHotkeyPrefix(GpStringFormat*,INT); GpStatus WINGDIPAPI GdipSetStringFormatLineAlign(GpStringFormat*,StringAlignment); +GpStatus WINGDIPAPI GdipSetStringFormatMeasurableCharacterRanges( + GpStringFormat*, INT, GDIPCONST CharacterRange*); +GpStatus WINGDIPAPI GdipSetStringFormatTabStops(GpStringFormat*,REAL,INT,GDIPCONST REAL*); GpStatus WINGDIPAPI GdipSetStringFormatTrimming(GpStringFormat*,StringTrimming); GpStatus WINGDIPAPI GdipCloneStringFormat(GDIPCONST GpStringFormat*,GpStringFormat**); diff --git a/reactos/include/psdk/gdiplusgpstubs.h b/reactos/include/psdk/gdiplusgpstubs.h index e2f8ab7e0ce..bb7c47f3a5a 100644 --- a/reactos/include/psdk/gdiplusgpstubs.h +++ b/reactos/include/psdk/gdiplusgpstubs.h @@ -21,7 +21,6 @@ #ifdef __cplusplus -class GpGraphics {}; class GpGraphics {}; class GpBrush {}; class GpSolidFill : public GpBrush {}; @@ -86,5 +85,6 @@ typedef Point GpPoint; typedef WrapMode GpWrapMode; typedef Color GpColor; typedef FlushIntention GpFlushIntention; +typedef CoordinateSpace GpCoordinateSpace; #endif diff --git a/reactos/include/psdk/gdiplustypes.h b/reactos/include/psdk/gdiplustypes.h index 29616e9d34f..4f97432bc64 100644 --- a/reactos/include/psdk/gdiplustypes.h +++ b/reactos/include/psdk/gdiplustypes.h @@ -236,6 +236,12 @@ typedef struct Rect INT Height; } Rect; +typedef struct CharacterRange +{ + INT First; + INT Length; +} CharacterRange; + typedef enum Status Status; #endif /* end of c typedefs */ From 286c019465f009202aed2120a379bb91ee20152a Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Tue, 5 Aug 2008 12:55:33 +0000 Subject: [PATCH 154/304] - Small fix cursors svn path=/trunk/; revision=35125 --- .../dll/win32/user32/resources/ocr_help.cur | Bin 4606 -> 4606 bytes reactos/dll/win32/user32/resources/ocr_no.cur | Bin 4606 -> 4606 bytes .../dll/win32/user32/resources/ocr_pen.cur | Bin 4606 -> 4606 bytes .../win32/user32/resources/ocr_sizeall.cur | Bin 4286 -> 4606 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/dll/win32/user32/resources/ocr_help.cur b/reactos/dll/win32/user32/resources/ocr_help.cur index 92f4d41402edb6e81a7e68c8f051a05e63cfdc08..52cd8599491075683e4863509de191abc84777f4 100644 GIT binary patch delta 57 zcmV-90LK6RBmN_h8Up|T0FfOn0RWLpv>~7Q|Njs8fBz5sAN~(M5B?q=58NIf56nIv P55PV?55Rx3AOYSGhW{23 delta 57 zcmeyT{7-p;6f+Y8(?nTaMy840TNLGg{{PSaqy8WNANha$cKmlA)NX2;~3( delta 48 xcmeyT{7+eyfq@AK6%?2lc!1D=k%2*tfdR;80P!cv>M}A-^j^hSzwsM~AONfF2oV4P diff --git a/reactos/dll/win32/user32/resources/ocr_pen.cur b/reactos/dll/win32/user32/resources/ocr_pen.cur index b180f3d97d03d8c1113071aa6b68e3aba779a160..551e85bf12f3edc5b50b75a4bd188cf8f74c0b49 100644 GIT binary patch delta 63 zcmeyT{7+eyfq@AK6%?2lK)`^Jfk6#OD=2_?3=?H_85t&e+X9JBImUvCEAm+%F#rF5 KV6zP4BLM(E9u4dO delta 63 zcmeyT{7+eyfq@AK6%?2l7=h4$k%2*tfdR;80P!cv>M}A-^tNSWoY*PHSTS)$KI;eO N|NkFsmSKD(002SQ4l4iv diff --git a/reactos/dll/win32/user32/resources/ocr_sizeall.cur b/reactos/dll/win32/user32/resources/ocr_sizeall.cur index eab28d08f1d255b4923c8c9c967de578ff8be317..d7610fa922795efc917beb579a0ba74a9d10a036 100644 GIT binary patch delta 318 zcmZWiF$%&!5S$zV?UKf{Mg+0cKA4a{=vx%Qq=@$7C(_!Bh%fO8DJ??AonRyGvh2<5 z%-ns_P1k_4j$?xz%Y7Thrq_Txj385#nw;CX_VAK~(<^bc(|v~X=<@w)dq>E)AOIj+0}ZdBM0|J51Q7UVl6n=$zc$j5-Z m?a5@vF4?k8wuL384KUUg7O#7+lU_dgm7_f6{+7pUREHlRCx8+F delta 32 lcmeyTyiZY#fq{vEkwHO$fq@?gR|qgL0EHMfhcT`Y003AQ1qc8D From 84282c468d160a3fa08ce8b01fe64b0dbe21f30b Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Tue, 5 Aug 2008 13:37:56 +0000 Subject: [PATCH 155/304] - Update icons svn path=/trunk/; revision=35126 --- reactos/dll/win32/shell32/res/icons/172.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/20.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/236.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/237.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/238.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/315.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/319.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/32.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/326.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/33.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/37.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/46.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/48.ico | Bin 40070 -> 40070 bytes reactos/dll/win32/shell32/res/icons/5.ico | Bin 40070 -> 40070 bytes .../win32/csrss/win32csr/res/terminal.ico | Bin 194710 -> 236566 bytes 15 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/dll/win32/shell32/res/icons/172.ico b/reactos/dll/win32/shell32/res/icons/172.ico index 2dfb1d7d2ab4612d1847470cce780a57cfa6313e..cf3a1413d1ddd11e6b9b276c9861c0b3479d8e3e 100644 GIT binary patch delta 741 zcmZvYyG{Z@6o#FJ*~^f?g2?PBF-TYqLFJwJiyTk~E8PF>sj5 zQv?-gmY=}K-Ox_Bu-urm3T~{j&hmU=3O-2&-mJ9F2(x)xjX4f>{e$u5e-LDwLS}K% zv$EXJADMA~lE1*Scu$^mgoG9`k~p<7QIZHu-!t)zA1u4&z?iUyPEjG+?lA;pf=7$zX)o(?)S50{h|8@MBuN- delta 722 zcmY+8O=}ZT6o$QXd*36@=@eP{<-A zPzo*v)B|0&^n-4+DOm*s1^+<(2fER1e}Z==>CAXHhxd8jbGZ9sX@4vYUn(<{EXjDJ zSlCzQMIcfThKiPuq+64hrbG$xYz$jOGO(nYm{hem7xf9>_@7(kcEsiQdBH!b1|F(v z%7&Q9i4B-4Z9Wodi_95WfaR$J12W;gG$Tt!R=lZC*fyw<#j0lO@w}rIWIZPirtl}r z;5RKT>&!}uSkg@s?BD@}7j#CF>O^K?*|#xy?{4mang}+<4}1%E!cD@6Igz--D-{ z>^~HRS2v_utzz;Kr)RGp<3--|OSM`J4+T1Z`y`Hv1x`Qn%{cmA;PU0}(^IF6M`Xd@ zZ8RFVRpfNkeRfl9HkhJ=`vPbTAlD!cv)e( z7=YRnnki%t$;X9HqZK{XUfDKT**Sr$<=S$Q>aAONe_z%Inf#Kg#24w66h#e-}#U8bbJgp>(eigfD9hrZ=xOzL^04JB5MH delta 522 zcmZ9IO-lk%6o&QQJ9lO@N9WTq8q7sPA8O@N5)wC}fom}k+_VWsaN#Bp0tMkhaoV)En5Wk1A&skzu&eXh0;(aI@Kj zTh3Oi1(_Vf?RFdPIbGL%k{yzuyOT$nbDD1Sik%Xf&FR H^Ur5LXQp0RE7}N8{>>rI#^j@$0Oe|P0=Z1O&KAL7*=P{ghsl}K0>s_i&G}!RxvQ&d za<67Dn3mOo&}*Tztu};z7D~tJK=^N=bgeFg&#MQa=R#>+eF%Rql=d}%@b5zDTtf)| QFO=>z0`oV^8fRt#0McP!LjV8( delta 287 zcmXZRF-wF17{+n(1=FCZp&^dAn(8vETdphz&qXv4ZZiW(8g2*_99#k+IEUk%p1Gyw zAaJ^&sky1SkI>W@QLobS`}6S37Rqd)JU^&Q79Leod>2_iWh+BgxiXyD;GsSU?dufs+FifU2 oP4OblvJB@3OnIK;Ls}FCZVs8svc!+Hsw(giQ(f0hZ#bR)0qs#(r~m)} diff --git a/reactos/dll/win32/shell32/res/icons/237.ico b/reactos/dll/win32/shell32/res/icons/237.ico index c73c7893e1197c5748b188fced719efa14983996..38f4843bc95545f5f31029af6f309b40fa05585d 100644 GIT binary patch delta 243 zcmZqM$<(%!X~QBmM&`+j+4OO%OudJuXp el-AXU@b^M#UjqpLE|ktSgz*1D=*_)GKQjR?f>WFT delta 243 zcmZqM$<(%!X~QBmMzP6@+4OycS5ixVTKV z)$V2X^z@v37D#)0drywl>1Fou@tOP`KWsZu9n#`-$%N!FEGkGqMPDn_Y ztgGM4oSd9Ic`uMIC@7fhYtYMFSXemuE|4xMDVdyW*vni|Q8D>1kZx#b*xYOMGZO%1 C2~4X1 diff --git a/reactos/dll/win32/shell32/res/icons/238.ico b/reactos/dll/win32/shell32/res/icons/238.ico index aef8e931462c787641af9530f09772aae8cf93b5..6acb384ab575b11ecb914537e06f5a5711ff3627 100644 GIT binary patch delta 240 zcmZqM$<(%!X~QBmM#jmD+4Ood%?7<7KC04rERq#{IgIxRtLg= n3#DsyA$(pv2t5}{>*_=Jd!e+i0fc`SO6MAa`J4Y5c4h$p8?I0U delta 240 zcmZqM$<(%!X~QBmMwZEo+4OdYOHEd?vpI(g6VhlWTQ*nWLhjCiCj`GRMTk zOr8s*6A}_8>+1J1CnqOQ-V3A)3JNCs8uT(378Xvv3#3a*N+#zT_A*ygRBZlh*qH?Y D8%an| diff --git a/reactos/dll/win32/shell32/res/icons/315.ico b/reactos/dll/win32/shell32/res/icons/315.ico index 5cb813f2d07b6fb785f0c184e79e645ef0a06318..631a88c90cfdf60ff0213535de7ff0618bff8b78 100644 GIT binary patch delta 148 zcmZqM$<(%!X@ed+lbYIO19m+Sl>nwTPhdaBHd&8PV{;u}6|1DYJiC|@2=E~Qh$}x? zP(*=IezTEC0W-$|1_t>C1_u7ktHi}cm>C!tHXqRz5&;|X&)$xSIXEJ8vb~clm~MAU S0MVOYIazQaG-~7wLz!)>iGB z+NPb%WyohlSmz zVD~9_LR%UqEypd5bD#mVUqE-`rR`gbY76}jQKoF597?`P7efRucjQ%LF4DkvG$8(T z4-o*e$Mf-h5NV; zu>Ockk^x7Dxq4>xdWA(b?>PtqINE~@uQ4GHNAMCK3g~Q0=CtM@NAMsP z3UCNkTNXSr4FSTS2N;G!ytyrs2Yfd78lH1F94I3&179L|{!li+%303bGMV8hPEE~0 zMJ5ZmVFV*y;-?+2;2~Y}``vE0e_$YzOSX7c4o@ED9aCz}@2+@sRonxa$>#3>z7u?S z_Q09e>kc@3#S^zf#p53L;@lQahyfPd>^sC4As)92g3l)i_PD3A_*RpbSiU?A`S$a7 zOd(zrtI?|H6YQRMuQd%UD}n3<@?_xna?S0r3t}`+({#Q%A;iz0ZSnF-=)wVAd3!xI zFGlIKE8$A#qvHH|HE0?bNjmsflznG(?8cIiN+-PIUKc&@TP_997={?b0$G;%HaRa{ z?>gfXX_t3sVLY)J-B6Tsg9gtt4BUbw0bS6D)c>A3(zQKNg@%QbL&z{V*fg*#CW(mt zOSklZHJ5jMXgqNh1~hSsKLG=vUVR^JQxMD>SqfjEk@%rI{jK%01M#4O$^NO;u0ck}w z_e)WH_X!57nZYu$5daOyp}Pni^4;CX2r(F^bOW@YYjZVlsl++rAw~5Y-ww9u4(&%U z0#NzA@wf9uulB1ir2#snW$3W=&fG*}hkjipH}!nMWP;`OESvL4_J(xFJC&^YD)qt{w0m9zkt)1n-!DI9Cv+uPIj zxqVdqBS!rJSAjSB=eX9wM*kPC4@ZsOdDf`k<2o8K`k!%~i5mT%xNgUc{$E`8vih)nRxkFUM;-KY~YVI zV7{fs6hJ1rT3(|;6Mt16?iw_B)mT+5Dh%ZC*r2WoqVi(!ijiQwDpPfsKjwq$FY+ou zSglf^jynd{A8}pf0ITfqb8E*NxIPmvjrx;opqE%w@xE4_ zEz5YVu}GGAo(%a~ISi|1OL1iwT1^H$pkO${8*Q0+l20UG!E<)I9cQ#&fiDrvA7tfO zIl&n%n=|a`fq`*QXWwAbk71pcC4Sic5+3N8=4O}6)m&fSnd~a_tQ_b&%G(FjnPykU ztt;cIzuZ^)9au?;4~!j}>Drnd-kx!XZJ==2?V286EhdCWmRzVi!lwZb+XR881;G|} zXQrD?rf{4PX3_CeGdJ&Wb^A%o%aUQb93$QEf8}j3gcYD@wd`;qCc3p*t4wL_JP#mcIU8 zTYJF}Vpvj^Wxhgh4$W4z)1ueuY0O0aI(6K#w}u0cQvC-^fE0D_ES3du6e3HRb@QA~NA5sz~v zB`PMK0hCltyOH@&C}er-jjB0F@Wx`^l-@u&;FR7%K{$lvaci(+MG=D_5#z=E!-fi* z(Hq7p@`TPS%JMSMifZ&r5PbC+22{#m8MzPu2JFyXCLH+c>Qg2$MV!zLV8NfI-N05& zb1W_i!c{n(qD6P0??{fs<>&lgj$do3XHVAA3s1N0+dC7)Rwj!6hV|D=mx);X5(?0P z`h&--#9lT+cxVsd^S2X1_*{O9{?UTIC+E~J>BIU8CpsQ{`q}3XAMWn%?(IL?fBaeSGi!C+ZHq&s?9sv9P$Xq})_)Ew8MsuB~t2`!;%X zEF+IkOpa%-<)(7eGqZCAo@P5b#QfQ&-)gCzo*vZV??;{fHniw(!`GT$qXa=fO`Jx- zuLM1Vnn)y2?|F?9MG^f1b!cb^P4OB9r;YxEnog(D{eVVgvsvW0pi#M84t)c4c6Js8 zIy7p2ejdGmy0Ni=hC4NCb8{2@4s~m53#|q@#v6ovzVBn@rav=q{`SRhG}rW)u6P%R3z)MAM?W#LR$I^)W5;il{Cy4K0o zg$sXxV;4@BE_ChhaG~Qr@SJ-Sl2RCXXCTAyyyx8WapB@BesL9l_b1LU@BbF~N@asN z`1HZc#df{3*ekx(YA{EiKVE*18LamrE_lBZuVa??GMVw-CV6-zU5g22u`60vizu7T zHluoc%V9$U;0N7evG_#O1k|4F>()TB<5&ZOB^H%x6+m6rw?ryeMb&CG$(Q3uQA3v) zz_R5#R8=H=eKcS6c`*1HRF3dLf}!{>81P7VD&Nq~Upvu|A>;*3QT9YpGfj?L3`-d1 zp+Pi32PBBH3Cia=FklI;B#kp@XwXEFqmDi_sa^-qC>}F#3guS8i%r7U>mztP zk@6Hr?Fvw}Y|5(I?vo4ECM3Ip#iP#`wSha0MP{>k1 ziatob$-C5m7D2IX)9eUji9{I^v{lC$oq!I_v~64S*A7x>O%)92aHOSRtAqHYVw;pe z6Ns=!s_KFP6)^}{0jj7dN=MW81i9VeI8Gx5%rJ(>z1DR>>&RjYX2#JBH+dQz*G|`6 zU4yY{qJTq&DWHZE1m__Jy^CuBGls2e1B}(8A_WZiDxOFnYk|>4pRd)y;`1)_Y3{lK z911M8*{0{m46t>zFhP{3HE+RUz*^7-QCyvbZfYu#105btPfyQ8qLo3ZcxG?qEu>GHh;&nhj$KmQa9 V-+Gm`H{|ozwR8M@X_cOz{{zd47k>Z% delta 2112 zcma);&rj1}7{|MIv|ZU86!xQ1f&F+}VXLeg;D*Y8fddCr7>j2QUW^B0;<-1@nqED4 z@DDI@!o-6Y&;A`AH2w!Z&--?38C&F=z(Vr*KEL0E^Gp8xl7IJyk4E4B%}sKZGPnEb z16Qe(JuT7@xW%k@5_uu*fBwjAZPhQnMTp@2ioT4*yyp{X@AZTPKNIe4E>KLECmj+} zHk)mRb+FhK0^AnnA9sqy;vpe2YE$*KIFQ=y#_YbsR*G7!2B2XWs|u5=qw4i~(pR^e z3>!Ms0G3tXq3a6e8>9K6&x66wpo^66Cm4$Ff&ojys(eE$f2E=!L%_>K(>4`_Se7WJ zgBFH)7!XU)2FZ$Qf%16~4A_F3OpY@UG!R7*nWG0oYBazzipLD1#&}h<(#>Wz-K2b@ zF@nd6w5PagSB9=tOV#yOk2V3OAwvy1Kts;SK^9mt^sFkR*TW1{p_R=kI3Q}sIgTc4 z^e7-j52Rk_U1mUwtT~QlwPkuliV6u@dbc||0b82oI1cg84pNY&4hD2|lXLx}>&K@Z zJG2FsK!H2bbr%e%kU_={P(@AC+QitD)mB>+MM4djVGNIVZ5T3XtI7`SOk^3Z^DH`^ zong2Jfwd7u#wEiRP{RrO^-zP+!LxuJ!_~C_#%@ue1_pc$E0XD1V06Xj>kY8@ybE)h zzG?u621jkRSpAp*uC5*=2=lDxRX7Yd3pOCeCjBoW0}a`EiJ9BEi9pqnP$Q|J3He+ne9TMR7Tz|Elf^E7eM>_iA3U7 zNbddnG!Fcl$w*+JU%u5@ew-oTkCC6EyuFe7KfeTgDUK83I6D<(1-aKM3KD=p$}^s` zr}!})T;Wq@mB!};Gj#(#vyAii9VgMzBMK)dY|wtuVc(H(%7H3WD`D+E8HDEqVQ=bz zuRLg$%4??+wb_T}AS~X`m}9I~1z)!9ZSy}aekZ&Te6eCad;1TDpdL^F diff --git a/reactos/dll/win32/shell32/res/icons/326.ico b/reactos/dll/win32/shell32/res/icons/326.ico index 4d9041a5111dca8baf0342748a7e9b125b0ba2cd..0d901c550d4f8f1493bf3aa05e8a263bbfce80ae 100644 GIT binary patch delta 2744 zcmai$2~?9;7RUbrZKq?MX|0YHgh3V&kSbOd2}w{WwVmR^l(7P(ifjSGngm%twy^JE zZ&(5eL>4Iotn52zA*|L>TkBM7J6m<8v(GtmoEMUqpq%6HocrB--}~S1-n^XilB|B6 ztbU!6AF0QWA0s6t1#xk4NJvP)wQJWfKR=Jz*;&lY%wTG23X_wQn3$Nr^z<~w$H&pz z+Y7l|j{g3Bbai#1qoV`u?d_0CrD$nsfkYxfb8|DAnwrqq*ocOP2GrHnAuB5jv9Ym; zkB`UT;2^|eF@@^tYE)KMqP)BuWo2b3DJem5aWM)D3sF!|fc*S?mJB zMn^|6HZ}$pi-p$KR!|g$#Kc4-CnqB}Hy0rxA&82KLPSIaI2;awgM-o5)&_ClA=KB` zBc1dV2Rq_B`DJ`hE%xKvxgNBJIG`ja9j%c^@nBAdRVjt*ZE3hWA%!%|2>}5C;PXP! znc#{0S37b2Vj6B<5#l1-8UFtMC`}5-<*c)~Hzmc2BoSYU+k;pgXv+(;h` zmW1K%SQA!Tld;su!Mr3BR6CmnUteDcI6jyXCg9GHkO)$+B;sPRAqKO;I5N2dyuH0q z8tQ=sDIZ_;S7EF)6sJ$0MlJh&T>rEfw|mR5+!Tk;_`dM+@7@GEC%k5OK_tz8!O@jEH=hcXpeTq$&)A19At<4vz=u61k#*?l*9{=gwpZNWGhx$ zlCUg}Ck=RHs8}o!-^Qkc6CMOU4h!{BSg2E2B(VrA2o=W0Dj8Ik^Es-JG$ah>H?2M~|^O&y+#C)Z~ z0*H~k;yk1*M|>_ghq(%W%#|yQ#N}rp2|9$tST@FUywFNC&4G4;O~%`0t`{;kQ6iDg z^Z75HAY%T@@9)p!-~Z9lGn)STBjIm^XX_~C(m(#GRiN{SKmJM0p9w!`^YG!rM~@!e z`-_&|@^|0dxu@X1l5f{|@ZdWQ-~V1qPrvcoo3~U@w{GA5a*eN)+)?uNU9AGg&*$dl z3kwU2+AI;4)vT;u|3Y0LV$!Cj`Q*CU0CJPgkQ;S&Hsb2FH9bY1BBuGs=vYs~271lX z_{5~9fzy@#fgrxPQ?va{G&nS@(VO-5T@E7fxq_#@3l`7ThCqMZjmn&{-e^S`VyQI-u9cgNgP)I4YUgO0QRSVt)bwMrj zty7-}>ol76QN8j*@fy|o3Z|n?WmWZhl~%^jQncXJ0E+V`6fpB8E7qy?`?txr2_a5z09Q+r<-Ykht)6fY-NRS|DxYLt+e^lX9FN^%O1 zN>%Bj_w2BYiREbRZV+;Laq1%tHQlWf7S7)2{Iv@sBBN9d&Kxv0KOYdNy}3ag9KurR zy?hVSKl1zd>~o;b`KtpPn_Kp8+rHy~zJcw& zgKwFb95U6n6O?W;eBJ1m#=A{S&CK_Zj#k#z))xD0*4A}@{_1O6U*ER<7dv*op|5XX z@Y*gz#rjs=7hZhfrJua~)6K8EOdgxJ{7jcD8wre!Ufis!L9m?fA!yt*Dtox)6$4%J z%PbJtpAsCf+$jjMG}9&jngoTGg=^l>O6faQo^Gwo^DS>GeVxkN a>{sT)D(`VXncq=)w(VLj`=4!Y=>GwM225oD delta 1897 zcma)-%}X0W7{=esj*aF^ccV%CNOW6Wu&u2^DHhutBnQP5EaV_!Az~<@Scs6r9xUr2 zNDD3m#zPP3p^!rlDM;f%A-#FXp#={;TIfH}g1wh^X4lP5)|mJl_MM&mJ@d>vOR~Gi zX!jTu|7bhe1t=5>kVqupYqzvE|-H`HVr@PM^IF=aQab&(^9^=KE5uXfB%Rp|LAj9(xnA^0@n~U6zqux zLY*`i;CR%I*DjXg41(CsVDkPhJ3v5@kiUbJCVnUsws_4NII6=is)VT=41cSPG!lXW za&;R#^IRc3X!08EBN&thx^V{w4%q=gbfd3-LQ&dTaG2wzDCMaxTeQah6l@#3=w??h zGcZw8tE47g5(5pMbMZ!=mytK%!wl3+n!h%}xDClHz%cNnHNH3po=0+|*J#;dnyMLr zM*!IQvsWNWDAIqmft~_ADBNe#lt+?0gxm4VfI}RQ2EvXbVq4<+r<=lI>vuo{#DUQk z2Cff9!Ht%^$b-haecaO)Lk0I+@7OCzVzkf4=eICS;9lF{k%l830w%D}<|QNse78DC z^I08xJswHA#$S=mONdIOlAU6c$ZH+GS!K396*Jk=tRa1J$zZW;xn>zIC+{9J6YLbp zGiJzb$jLK2Zsi+Q^ft@U0S%yH%U?()=QtV^-Hy&Ab6$?Q8E=RgJjj@rpVQy}Ye0cbbOixD0i^*~0UZ2#3csx#`w{>BDex7`ym45HY zlRLVwxVT8Z(Ymy>M4sQ(g=8{Ge$l$Tyi8tC>B8#jD)Habg|)Rc@}AaoI!&hT>%zvy j2KhoO{d|$9)4H&=wMBl=n$PFSs~KHTRkiwe=IzV>_<{Mr diff --git a/reactos/dll/win32/shell32/res/icons/33.ico b/reactos/dll/win32/shell32/res/icons/33.ico index 5276b06bd9712b92b621d260c0321bfb016a43db..df31dc28d1b483488d207c9bb367de1f65abf9b8 100644 GIT binary patch delta 2118 zcmai#zjESM6vp8SBWV$~79I55n;z-+%t2lDm$^VO-b1&m@~HbB92Iu%i^R@g$dw^BF791xfc$OzvDx8Hi1_n+Z)O z3_3YUfUw=ZdKlm)CK^Kk>Y~_100=(`@t7Y8^A7xjt|$uSdUvx?vy>irKKfsmp=V(L zfY|By%}%|uNg_M|8juibJRYzfL(QtM*6Z~zAMqcu7RUbeSQrX05&-xe@T<)j$UQ$S z#6Sas4A$%MIGv&{5Y6TlBXU6Ihc27z^%_#bsbgcO!q_q3albhpkJlH;m;!-A8aA&` zo3q1g8yp77NMKGE=2Qe?fE|eEn)#P`f6^{Cc++WMrd`H#KnOJ3x#wRnXM6~!0k%yL zvB!1X3y%Qt9*BYI6vtvX1iN|*y8*WXM#u-q`x`8P0Cu6}chN8HBa-+-Ec;1TFvfrq zga9TFb^+7Aj6nNpTfswry4Mmv0sq-qZiSBH)YBvE{&f4dVE)_BXsKGQRI1wmy8xP7 z_#5%OimH@&((m_6y~7N6QY;pqgQ~~JA2S{0RdQXI=U4Q_Y20IuJF27#(+~M`e=?aM zp_DjAa0mQ;i9G~1j>PAD5bFI761^zlMu1Iq-O>0(z33R&=f`YY)U;D{M5y&A%Y`;Wa9N$ z!|=fAu*g7Y7X2KZ&I=D*aR3k9eR%KX{{M_~>Nu|EYL?^3y6ri#Bg?Xd>#94m+064~ zqHX_c3f$>OBWi1|<&8!o-Fr2%KnGZ}q7eENHF}ow17Lh|&bxiX;4+<;V9+dE?j=|9 z{3s%qr09Lz3DZg icfB$PSHX46&cFA*OTO#Tvj2Syq-^J;c^jyys(sk}kXXazT|?n>VMsjf7}qyk;5XO(qisRjv9}RPA1+O(q3+O$H={>w?>@zD@hjw){&B zD0>jW5}+7aPW!JnTYkS80zi0-aNYKaoUW*{4W#_?V9-(&ca=R^6-!A)|MD+cg6GNo zet)1S#VqLLBm(?eZTc`^84~3I07XSbbTZmC!-e*TF6fVDXEuSfDghLHfkZGpd3 z34zr0eJ%vb7}8&_N27R(+CWq)Q%0nK#1CC=uGecQ38#*YT?xjH0gwBeqtR%65sfJj zIHZ1MirSnVBvX3eMI(VVT{I^O5Pj@GIM>X7o%ToVVuLrCc+I%WSPlq*N-cH$3+4x?*$j^iS>@2lIov`%y5l(-6{Hs1(`8g5u`CKl4 zAFvIexr)CL$9Ysvl=xn+Cw31K;7KNvIR@oBog=2hv_#vsCFz#DI1PI&2#2{?e*7Z+ z+#8R_Na$ktYbWeW|0zNYg8_UF0U=lTAMsaL2;5T9XTW8_v@G6?MM(TAdam1rE5op* zx!z?JRL=W}U(OLYL@CKWy_00924RJP{RnYsWafJAjlC1Xx?pO`v? zP$LBDGfTxyYP=%SHh~$i2|Cd+#N>4w*UVpbnV)MIpBf1uK~YdEVKq@50_vJmC;EKM zhZ_n3`<4bvSon*Aq4TgDD25OMn@$0M1V=@LI#JI!;gZrTBn(}zJ0>BH27Y4Wsv*Hr zK^pIL!xm!~>afW`7?iw5r}e@CR~X=+y9f6jKlSJFl312)*ao#Mt!_G&W@(y6abN4! zY<ojW_P?oN)SdNKC_~&Tu%aJ6{YbXdlpb}cHGH1(1JF2sDcQY7Lr8Qk!k|%8 z>qeiX{ozuqTPIl)$Enhs*VMq_pY2;_xb^t0s`L0^gIBe?U-Ca0ifHw-?rUka3|5_K x@NLHk-gmMBUpoX>OAzUC@O$Swfy?LMeKlAfeV-Mq{?6Ao@b>B5A4k9a@DDGI5J~_5 diff --git a/reactos/dll/win32/shell32/res/icons/37.ico b/reactos/dll/win32/shell32/res/icons/37.ico index 6778c565e3f62f441da48f2a47a0a0b38518adcd..f5953fe9a3215334a33d44d9e490ab7db8adc923 100644 GIT binary patch delta 514 zcmZqM$<(%!X~QBmW+qv_$q(7YCVyaKpL~FggD!cv)e( z7=YRnnki%t$;X9HqZK{XUfDKT**Sr$<=S$Q>aAONe_z%Inf#Kg#_BDX;??UNZLkRyblQ9~hu=B>#Tm`eXoe~`9E^qN{1{l|JiIl%`2Fgh?;;=RLa9M zPn+|!xkxmUS;gtPW=dqGO}iCV3lc?!+wC^o za&|f$D3loPcDwMv>3JTU?lbKBKD==D`+Yb+V0bVXz$fQ$I0Sac@OV6)I!C?U55fR) Apa1{> diff --git a/reactos/dll/win32/shell32/res/icons/46.ico b/reactos/dll/win32/shell32/res/icons/46.ico index 639935d2bf77ad9d2274745b5f46d71d3be0f877..bc5711c71a0df4b21f2b4cf152f0cd2b1436854e 100644 GIT binary patch delta 192 zcmZqM$<(%!X~Rd>Nvy@2Q`ok!PvR3|{Igk`4fl4N?6mJxAU;?Ry0!ARsxYy2<>{cSt)-=< zqvtT$NcqlWz6iI?Au7tuq7ShFpf3}=ffBcF-8y&vJP;iPgM$YT?%lT!KZ2+Pl0aP- zFJ1(i05k_^o@K(Ft00q(A3X#_JGX5CqRkuDtzENf&8p?gmo8qiXyJl+v**s9F?0Hq z=~E{|(4-0dKn73*C=QebssXA5st4-Yx_JZ81fW}hrU7lcc<$`x3mPZHu!j0-`@c+P z_wL=ha`o!*6DL5v0E3O2HlZPiI8ecTE6AudHGL}?b?@A{eeUcT zU^r~ux^=^bbt_k{Sg~T+isj3I3?Kpu0;P^0J9_Qf)klv&J{R5m#BUiZazt%j5pvHR E02Y5-ZU6uP diff --git a/reactos/dll/win32/shell32/res/icons/48.ico b/reactos/dll/win32/shell32/res/icons/48.ico index 0422e2b8172c1ccb2d974fca676541f29f5f3876..f1f858eb2c07a57bdbd9feab676954c9a8fb400a 100644 GIT binary patch delta 4779 zcmai$3rt(r8OM+BC5B53c6gXe{J_`-?AQi_4cI^c^Yn|BG-&I(ppllgtV%PKT!>b`T%wYd;) z`^&!Pp6~m8-#O>rdmhK%W{$tjjOt}Meos9**4~cL;CVE1ZUp(yP9Xonvf!2JBF7FK zKxY=0(bCcqI%2n@@ren<509fGH8tq;>C?zR_c4lo97TN{9cUQ-$L_2l)Hj5Njvht( zfX|99qi{Hkj_%us&YeGxIzGOGy8U6~URp;JtLvz5c@6PL&!GP9ZZrh-fx$ue4|jS&__s`F8v*~F)m5~-x{NGm$C2d>^uzB*XS%x35XAL3ozTB=G(J8) z*2cWT2)&GX>{e2RERE;+RG#l7Dpjgo_X&yO?VA6lY$79(Amfoc@6M5z+|dT#MdU^O_Von z;WHu`85y-CAbVp3&_KXuBMsaa0DMLUZa}k@rx9Bku)r+GyeAP45fM|?rbi^R5J7+^ zK?62W%1-BlO-=5C0(c2KTDSdQzDl2-o?f4mgI{!Er9$Mn5X}$IAA}z%j98Ssg{NcT zH9W;F78tQ{bBEeXN7xdPbDMt?Y9W6j{P7#AoGQhXLJJfFD#>u(Mj~qg$wB6fkCtncD#18 z8J*bIfzHBih<8@|&{>o;wTPOQ){r^6g!ghu5PN#56Ry5x-BKem~LjUAxr4W+Rm8qZDyJ#Jv~@~Wlk?A&WJ`s$L>tkkckqzI2oY8<)qSR z#2u+BHI*RwYM8)e`A^v*Gxb~J^4M&6*YJ7?XpQ-6cY`AMB9%2I4$v3i^U-BWyl(i_ zz7nh)N1H>Lm*;Y40dMkIy|H+8*i-@wf}^3den%NBY0BIZpD)wuk@!ufNJ(LG(T=j> z;yRVeo`e?=37{Zt-sksOjF(rKK6IalcK?t2Y$?VDLMH&-GE5adP2wj)q-izZKri2@7)mKy}iw z5#;F~KxalqkYR2S9fj%FJ+*))*4NPp96}ct7s<3!!2$FD91`I`i@IUj4WAws-sBxm zq7&!QxzSPNhUs<;rd|KSB8sl9qx0}zT3bW?aA?Jc)&4u{==703Gz>Y{zz*{gb=B9S zUXKT<-kC%7&~{I64{Cq79S!vMqCq$;kHTS;UtEX(s_?zsd=?)_59j_7Pt`1#s=Fij zc$1%>UrvrAve;ZhsL1Yc?JC{5(`h!Rq-=}XtG5@~OMP{)wV6ywNgMW5Wn#O|QdI0J z4fzZPRg=eK#(Bhrt*AI_7i5n(bG=q;261rY%}~cqYR4U7xY{yMQL){g>2PGZcJHud zP&@vHwCQBQ7e`S}__A=gG91>qbzux>tFo(b{~4|fCTEys+&Z=rq^;tr5Z((IP8|gC z8aKnk=gyYMlf?jH4;qUL8Y@_~La(&wXd<-&E6?KQ7@dv@6f|tID;Omn3a4yjm>6GE zQv(q-Mp)b$^Z`xWUPpEt@M5=u<6@3NKc4wS3Po9R%--CB75{=cZp@{h=Zc;?{5<_V z`b76L&mM&P=Z_rjJN*1J&mHXUc{1*WFZeMztqDVxqS){f?BvKBzY=Im&CHrN$YQkWlJfoUn_O6zj*vHL0;BL_$SI}{Ux#fjaV;q zQU7sQ5qJH=g&WH^anxI`pW@ohTg$lC;+EE~(c0&?SFrDi@<)_MU9Rcq{8V&q`s(}_ zw^oF@ay^b-xpx~A-%#ShrHiLtIyHa&>W!P9Z6S_VkQ_5tFTX!O9sTG!&hcdh$#MJ3 zyEuosk`NQ`{ds6;==vugNr=1u_!1MZQ)1>C&hgQwpWIJWcu0=lzx&S1FTeb^&lV-b zy{}erj=xZ1_WG4e^D}?Hxg;T0zy1mn-|>TW8qfFY1ESvzBHk) z(JbD3NqN07KjtH4Rg*@n7YUK32eLamJMm3xC+tK+0_o(Xve} vPl@Fx4>{yB^RqvBVL<5GlPwhNb?~$*eUspwnVl7$+UsP&Irhrl75{$#=lImP delta 4881 zcmai$dsI_L9><4!F>rYW1wsNzfROMoAqfOA0ul%T0wfS1ARt)mvaRjX%2v14b3Bdh zT4h~bu!CK!XxWxlYSB``7OfB3TAzTR_*~smi!DA&TegR@|8#$IZ+M9A+3z{`G4uQU zX71dX-~49dA!_3xszd7HNKQ>fTkIBu8oE$xdn+=x^&s=rQPk4VfU1*|k^IIOY8)Ct zSBHmD_3#)%8(LA#>Ke4ArUtbPkD`&05wuRFLft(*XtmvrgiYOO9r!ghHzV`F4K#FP z2p#Eywp*IfhWq2FwYCPK)s3ie{d!cPQt6TZ&?wUD^~hwgpyrAS)DE!y#(mVWWdo`< zTTuMS1nL=^K&wZ`k#KzrT320-x|*BuQI{|`vpy9y*=_h+7m2Q^widMlcYkaQjgF0? z_3$xKZQUrU1wP1Zh7asUjWDPcS}n5KY^b}Tp);D=MRneFO>pt{QkQs$L}rmFtwgQH zu~gVxbqPgL5n6^}w0w9g@q${ZpW2+nXXGhR%P=W&hM(j?>c#$EW|^W$%b%21t4%6l z4Qd&wlT8ZVBS`z;;Xw@0GAHs*43c?XYLDa@^+_J2I+P!yR`Wn+BDFdO>H-|1R8Af< zRl-R+u#&TqP4QwmJJ2WHq#y^mNu|t`gIUbAAWxZ;HiFNj7^cLvG?Ujn zN$DC*x>Fi(naQUYPRlX3^N@xVW1h{?ALSylQP9qVmZqbpD^7*VRUq~ zi;K$~&|;m_QDZPn@(zS30XSrE3iAypO-zhTNC=FLjh$PtnCmqx%3zRBcL020NJt^; z;g*=V0r*4;w6R7_8m`h@biPpe!yf zCVa}1c;XT8$RBc1vI0JZZ6E$Wh+@QwLcN}Jk)Q7#yr9%#NsNqyNtkP!Gs}VF6=DW> zP`*AtHPpw)Crcj5zL{V($kX;g7&AQfbeBOAV(1K zl36314n?FV@X;xA6*9q02P@}5ob-0FoFWcpyO!`oVe?=H6w^~Cv&y~oIXMIeY2_&q zB9SOU?))&lUJ{{|iM2BB|C1>o4na9i1?1(<{7+wa-V+EliiaccgSELQ) zoH&6>>l#o6)z90*$H$sPr0_{3w4cK>Dwz8-@gA;h)J)#uDZs!K&nY-~GBbE^gpWYw zl>01kfNCMTIKW)7ue*w$jHdpj0NfQ7Q&9m7wJqU|Aa}q2JCVNAa2p~7RJRH=g!qG z20Su+8t`JfoMq2fskjmN2)x83Zw5{IyV7(dB!x+PRw|pd-2x`t2RrSroU&)8iXDUq z$>#B-()sh}xa1K)m;dnRVWkjQVVd0u07FtKeVjm+wU z4#w3Z<9MGiCb+Ay5uq(zC>~;N1H|5%tHWq$d;+z1bl{(ak}PuQ9UmV@5QwM_&Yg7) zb*L&e71hF7*Z0T(N`*cLPM=0AYF8jzDa0?FUmM^+EgYVJYYertwZYYb(?nsO>q<*e z>F5NiO-=2Lr4EvKUF?9wNn}Mq*!ro}0rAGU%6VM9l`If`6p?cj3t3)QP>@tmAW4uE5I}4Y7|8cij1G3n z0-8#Y&}7#U8yEv3$%kURNzxYy6DScZd0NYJb2>zl`h1y2k)24>iPDT13ER*De=nkt zm;{EBNT>x0v$K8yTkk~)$xxWgY>Hy}%oMM*v^21#$%I16EL|Yv>V+0B10>pz5U>)n z7o+D4dO<|q)Kc~G(zz|->Zx1{5&NIWjiEYq(m^I7BP%o4np;?0^z<{;FTS*L)!J8H zS+{oe+E-p&wX%A}v&ALFIeEER*;q?e^RjZX?MsSrV^k#1R%kPr(qL(q)8LJz(OTZJ zs;7(@=}={-O<5-VQFH=rD=K8mIe;Y1PoQ$Fcu*z6sZ=r#kg|$$+&^DO=jK^}TEaJ) z(k*!w_>3*v>Rb2j!L`Z&>`;2~Dwb8`S_x9cBrQ&|7T7HLR{S4jFaxwD&zh8+1U5rw zrRoEUe!Hv`^E6xOrX?l#EqLxIU4kRDTj`w@OYx`hZ2i+JoEf{7{$yJ{z8o7vxBYP? z=EYUg2Y0=VpNWg1J2!8_Z$bHZ*8%*ivmBwTq|cu3#T#{z%;3cfw?=PwZ+{bis@uez z?K^k-?&z@(-ou&ko0#7IJ}4dE(~2)c>E!8C-`~4)^56md%z|?MYq7C?Lxa6T1AUhU zf4F-G8x}~JW5eOeB$KS zEYa51_VDL1(#A<3_Pp6}{>sI3gZKOPC3fxFg9h}`9kf>Fa7?xXUi*><`>w~ zOh&S*U90?p!tZ7nrJpqY{Z#+Ci`OnU zH8ssbzxe7)Ol2CSZR=kJ#Ti-o1 z&^Iu2@o}W<;6W_QGD;yP0O`Ll@Ho=Z`3ZgBIhFK&XzGO=A-(sFKjXR_ zBi#mkACwO^ZO5Zfey_C^$K(p>3xnseIoC+-%kcF87|r+u^mT`R#A6U&A*G wV}k4Pwl_A{&72-6Zhf<11j1NR6eEQF>~Z_%`mOl+A}w9_*Ug=~itd>I3yXpO*Z=?k diff --git a/reactos/dll/win32/shell32/res/icons/5.ico b/reactos/dll/win32/shell32/res/icons/5.ico index 066d5ddca2c38ec731734fdbd49581bbb4a69a14..7fd4302eb78565660f5a6b9eaa54423e614f9f6f 100644 GIT binary patch delta 1913 zcmb`HT~HHO6vs~zK8o!OAEp>YAc-Up3ExDa6#_~477`#KAW5JUR6=P)L`(dLN{g+v zK)ig0fQZqkl$NrcYKEz`Odo8W!q`s7nf9R_`_f1I(w9Eidv^nDs1JSUZ}#lnbN=U^ zy}Ntv4*0kOKJH?4ME1#Kx^P76F7Hp3^!im1k@d=3)F79ooBwc{FL?z-p3O|SPB z=C=3d4bSyE^B*q&AyP0sJ&hOsFRsq|bwS4!G%_+WIy#Eijvs+AF*)g)ax?P6 zEoo|MGTDxrPn>+G`;b4c&(7!_*3P%O4%F4v;hZK@d;8nAqjat6V?E#?H)wgI_06^t z3`rtcCR2Mgu5$Q@f?fd6*wA=TQ;Z=w{z@jZUT{|m@3Ai7j4m87Pn zrKhK7U@|i^v$C>t6f}E@z8xdv^Z6->iHQ=4Bq=#LS&rWgrVSfYKq|!|ftF>mJ+w|v zSZ5S6cY_4BE?kE%6p3ke@7mPSz39KH9sq=&V=NSp#CR;@;A^%4_SyCv`$f#j%H$nXeCCNusYQV-@7_t)n&z_6@I$Y4_{9A zgSB1*XKOQ%NNAueJAdOKi#Qi8aatXst&q115XCpsSejcb&1SQu8Mhk~ml^7fMq@)m zV?)D1JmALj$8l$9wK{E$PFt(h>9lqFD7ubJrN$jrQd(A0T25N1qVfO}$IX#n;7}G8 zDhu-qluBjc{-SJh;~d4_eW`46^XPbnBvZ}~r>17naoL`fE%CH;QYTR&P1-^-iO0n! z2-hE493!SLcN1Y}MC>NJ(A~Hvq6ZL;KWM1mcz7hn*);0Y_=UuYQQK-GxN*Xynl-Sh-I%MwX{4 zW_xo19=C+8wFY=A0iL*&op~X^dm7-W%GjB60Uo!Ut+fVt-Q@!GbGeeWa&d)`ho6}` zU9rUde>WF(s;Yy7o>eEIHN`7vhc+s#&S;=03hxJ$rB(Vp_p}??1H6?0Z<|gT!puWj rU0yiZcr^al_zPmc>Qw7fl4^>1_?F1#AMY|F^}J??`(HXq|D^OEB~M)G delta 1902 zcmbVNOHfm16h0(K#HkX20V0BiSB!{)@-Qf(5E9-A3JnH`3L!uc1L0KyHkvA0XhHau z@JLaC76r7Bh!`F%<8!B5(|uzNJ*(&?H<^lS?pv;ZuIs31!&7+&xt&bj>>hpTvI37! zXKJmme0HU+cD3qiJCm<(Xl!c!q@bjv1Z&E521ARfmFcCr_$d~cVY9yae9Z*~f)>## zoz9@bE_KF4+Cj)YS6Zgc$wknb)lRw!ji#~+)9P)T+_^=?Sy|cHIkd>tNToS*7W4ct zp2wz>r}DEHur+L>k5z@I@%b|OW)F|_j7+wG{<=CT^Kb`8la2)@A3u?j`TM*yPs`yhnAzP<+{A|ga0QTX1yd!un@3`zmGd$566 zj7bV69T~ZAtpFf=E1RMBy0B|KAFx}v247)FD1)$_>v{6T@9*$80A4HX;-RIByJ5NE zwc83&bnV#ob{SxOk$?OreFlaG0qF(E5$Nvj2FukeWF{aeu&&++3kwT?lz|>Y0sQsL zcW|>N2dd9klRpE3{0jRa1sWoT3X#&ZRja*VF^AyUH zlq{$63uyd!6w*MNCNspFiNlH#g$hMprpA&tsh(t$)R(E!YPBRpsv|jd<&a0D z)a9Y1lc%hQJDQl7AR%(55_f?TPb{p5;y^|EHS3{%Q~6FwXDU(EmzI{u2mfubE>IEVf$_YFxQQwP1 zB_(Qk3(pfpENx9ln50=@qF>*SvEQ}p&4t>3;z<(+MG@BQ~_Zf=fVzxO81tu9fayPPgw zyhxpA=E(2&)0yk53SIr^4t@Ob$K+pGq`+L1?!I@IF5b9Gw(@d1zq(34y?d8#zH^fz z?_H$YNGHAbYk;ntrRj6av~=|xtz1~4$lNrYzj2M;{rFv4x_6b%ojXUiLK_5%(6yi5 zAa`dceel5t5aJw_`)jGzT}z=z1Z9*}3Y}l3$oV-6or%!J*Kg4I%NNNV2~h-6cH-Q% z8#lmcmCmlO(wnz$)2-XLsB<|$7k_$_T!Bt{=cD&&X?d9zmlx^w`*-lWO>^tZRN`)= z%U7?`#jEQS09GIzptCpD={LXm4SoEZk10AGrFWJ0?$O;3q4BNDboKgGDsh$5JMX+h zx9{Ahwy2jr{D%)|8QLtLU8b|wR_Ma5YvhGi*I^NN0M|eI2)_@(5P4QtaGyk>)jCDj z&QSC`ert;q<+4y<8A2^1pOH4+4w%z6H#avnPMFZA3X0q8_1CZFjVSL;*m6@sIYtS07 z&j;u@wmAVD=y4M0Hjo1xbOz(&iftk@cG%(it;k`sg-28ju!wW8j=M55&A_h1zvTbo zSlM#gkoD9lS6$uAG>U@5$cVsk)gc|!bg%}e1pf96cEC?BD@#{gbptbC01Agy2H@sU z83e74<`{(dRCKB~udM7;-N1l=ccFGw7$j921r@8g*~^yrG#Z==Y~~3D(q>?wY3s7N zqz1uYteH=5ho8#+22uI~wdt_X01J*<;5x>h#SN<_3I->dWz~Ng8@ZI}X;@_dB-r-PU5325gf=|kS4;Ng&WyG;vxOS8{DYOLsvk<=ci94 zBqdGoPCWb%y%~W(!b}>20cL=@aoA>#T-pfjIWlutJS!ur1=Z`&4wr{Z>rouy8Lx&R zmd$o)Bdpj2^hj9ReqbhZ0dFP9&9995-;x-^A$c3{M|AunM~*1?eR|rSfkP;e8oA#< ziXq)Uyd{4kif47hs2Mh0Qj5H8gp zNiHFdkA{w=pqkzk4C44B8h-P_;SmjAIg&FxtpC@U9Sx14y^%zbhhs2Z#|%bP1%SPk z+`0lvf*w0Cz{}>as=>6YdBKZ^*5P6c4ZBm2C9QQb6&-b3EchQM#p33hTvkB}2K7{* zkY6u(G%Y2i$h;Nb#R{M?00mJ0^;_*D&!o^R)u~~Xfx$w|z>K$s!^PK9T1Z7w#9kQ1 z&6Y_ae<}-sK|UHEDg#R@u^#T6>M{f%c*rc*I+EEpI_t$VYM zm4}{SEgqH>En_iM5Kn>2t7!lRKGvX)wUhaJv&JIFjt#bc5*D(g#OLpN0=|M~vSi>E z`M>~gov~xl$xq56&cN)IRp78e0koD~b^Ko6zyIibf4{_M4&@oAVJAgO_b}US82EfD zgE>1>dujQxV-bFHMvj%24nd1OJCS0zC>ijF-KfEo&OqSX+fN^#41vcOn1Dsr@s92^ z$>V4W+8?JqI=;himKL(vl!bgS@Cy?S3k~Mx>>cgx?N4M33MR6;AMS=q#b6=71f3U& zFBOnm@EAINVo+fw$I6G&9;OERRR;L_`g9Ez@?%p|Dub@&K`}Kvh(Se5OGQOXWmG<7{0Iy#RSrES^jaRZOOzDbZb=$G+7BhZ z;5fIxC_ExGh`~g04Wgn2#1HZDq0{Pp#dno`F0o3JkB+JefI$olBz}Hm0wxmp7Ga=@ zO2!{MrUXtLe>_{etHj+q+Vubyk^%SjV^hft&~mVxGBF*Gj^VaxY^{8vMbcvi8r`Lm zq9qLbZrtg(OF>&148$3CTm5r1Z2crRNB@TTL(51dk%5zDQy z(Tv25z-F{tzd;R&G%z?4KFr>iR1Eeu9q2p&`V4Ob^@u8oZ%&?6ZKkxeJl0l_WFH)I zS41+H&@?zKEyNmt!67EWMdNXxrze?>34E9lSR|6b?>y`^D_(DAN(LqkHZC-q3M6Y; zT1>OnV~;J5j_y()G2S(>0=C2K1k>@o1_kC-e1+M>S#Z5DX*@)==uGei(Rm~=7!Z%y zVV%L=y?f^mEomf7rEPLm66*EzC@`98H<(HY((0SDWN z8K3v&iIn&dTv=Muxkx@b2a(V@h(scn$1Hdm*hc*LzBgwM1o=&;TgZym^X{VAM2Z_s zx0WJOy1|gp?S;G9$Y3S~gIN#LtS6BTj#N%M8#NKU6+?0^_lOIepFXZQA^oPwO$m{hjL?V%~?Md1Gl71!MNX>AT zs_48!3v4PATt6)-#)1nA%`qOlGT;jiUN5&}cA$h|IJC<(GP?N1Z7Rk!jPQr~Kp)1_ zaFX|;Ev|ub-%BF_DmU_pz?i_s#;Ey~w@t$@-#X^WzMwHPUD^L#)5$B}`mV|L|2LoB z25($9`5pg9Gb)j?8MpAu-#<30aP$S@Qs_E8L5fLAL_@N$_vAVuSKmFhiEvjJ|QN)W(-&&(p#F?z!x=4ZLhzQ5fLNl}o3^xR5 z3wsfLah8_*5JqwL!*>t|a+caqfWt621mh}VJhbqO^;=gFa&cCKU7SPQ2Zvs);vB** zHa0$^Mp`VGO1UGOk}hp@|MOg|Qo{1B7jIU!AAmD%J37!F&nOFOcbVJ^H0@oHxYysV z35is%V*}(^xYCT^l{gg_i%}L1N&xkO)VHMi<>rPUw+*plzji2885|qa0mlZ-mguBj z21OOK@srP`we}?^Ro8e3B+)n(stjw0;mk=(udniD?@3JY=b?2|;5?p_s7Ypi(!W@z@5$cv_V0_VzCU5Uqup zN}q0gcO?S`2h9W8DPzHH($f9{HHJ1P*NaX7gbe{05JLO1MBS?!+zotx>_jpra;UWu z$76+YH479vq@z9%(8!FXQ~`s%fshZ!5()w1In}1hzKGWT*Z0TL^k$4mAh1ytP~cU@{0abJ3!Fy;P!eSfmrW#6 z+0X+41E{I(@sb0^hLr69XEg}}b)IbjbF!1kktPhPZ*+}kv)F>r7+Wll262uA1RJtF}tCj)iR7=ZPv1$EvJlTh~A41j}>uyWE~R|i0xPGq|?3OpOvht6Q)Rco-27fM!)f z0cbr`4M@$oRbxsF-FNxwf-!+`8A-#_ef94#w@l;dT!*2QUQ zOYSHolYD|yJfE*u;)M)&>>Hmch*a+%KIEuXAn5o+nHLqlBS}DfG$f##0Vh=fdvu3> z&;G?FYj$l}S()>p@IoOa4S7bqIj2>10i{W2tc| zOy%acz2BqajWb>hcW)ElUM}BO|+bxN*sPRNggwZ##!!gtlEXjRyaao|IlE zsWF;~lfr@?2`KP-1YS1Z)SKfIwO)b7Ms1sJOeDo{r~=N;7HnTFRanSIUlBolAT7NVhz;Qc9^|@>Ufv z6`&Xe%*`$vvN{_~bL^!Qw7>+^{A4I`e7LAc!A%2FCG}ebUH7&vQpN$z3|J=tvw|b7t$TQQ z<)mSl4oP+VLLU#_o9rt}!`~rmM$p-7N+dPO%x}N9&pd1 zFJn;wRlHUR$RlGairgh=zE^0jNaf?0rAdHw7QSh+f()pK3%G>tyivzE63rm>Ul7VS z>Uh0EV;!%liSZQtPM*xu@c@{JC5);Y6nE1!07J9r`&oL!F;s~PnAr-zlX-#!8f!0y zQxj}p(rRAX6Z-GM-4>cfhjPF_Xat1U`b1S#)j^Q1xR6#Ac01KiCE}Si0fA>~1_3ip z3X+c);koS^A2<@m=-eLg1WPA~%?Lw+RPj!#+6!~WO#oB&2t0J91O7p!1`a`^gjH4S zwwD4jut7ErSgUotqNK(QI5~)hpb@WIbuO~vk|gvaAWpIVOphcOVL?b3Ee2pP39uj> zmLC(tR($^whn(X_{MPP}c+sfD)9;z4rtL;#^dXCF6S!yaU?c#}29Io;eVYpg{>MXg z0JKM0W2&nduZTwd!Enc?rGmdLZ>&V@J95fRR_G@Sw?eB zCGM*-h1eTovG?L3fq=c^0USo72|g6O*>-STo7rU}d^cjlrIqM_-7Nv@284)w_O~F5 z-4bI1vV``Dfd?Te56WP%2SP$Ve%1Kx<95R^)DB5Y;x%oAZ6II|pdl>eV?eWFu_yNl zAO3h^!fp>l(dAe12#;Q!x!0d67Mah*P0uN=jNV7YHeP3S=o?mI!eE?|>(}Tqt3zK> zCDmKTUN?<+pxXxr*T%*b)0MZa=JG4^HnZ!>xXoP09eY8WME^@m_g`tuGWT6Mo@KVZ zh0V12%0K3qOT@9<6xhtQ#lO+ALu=hNu3QP&%zeTg&c3g8{4{s?brGAd7BaZQ^%;t> zPBE!abA^|?-4wmEM(1xzcR0Jj#Z1N8a`K1#VqPH60Sv_=bQxZ1c88yT{TfeFROtH6 z>#9o}Qy-_pv~q2g*d;!#y2NWkZhHOi-W4+xuid?&&Ppt#CFFwzG1(A)cDTBERw7SA zO7ZVe&-@Hke zF_%+whj%W*>kUhY35h|twrfLPI(vN`GZUea*Na~pCV#GD^Z_#w*$ocIeRu`a96!1z zT;a>mrgJd>!Pj`I$~6^#^-_E{ zPzizjh=zf3>RGRsZRGDA>yRg;NIOU-#AXZOjSAh;g@vkJN_tn&2&9j(Ce%{O125`I zR2#6^R078@1j1>pMo~20#@U)u45z|jHn&#=%IM&GVF*3PPfSB$Z?%du<q! zDBE3-=L;Z_6llutV<7L&`M0}@ds@Sp@=d}fjKj^rRFS5-n_w7s)_F_B8rv`b>I2?QV_7jW<{5Sk_A z8XR=a9%2`RP6xA(syP(7S0(C_K-IqJs02#F8FbdSBnniOmXJjisB2URJvB+D9jd0cPTy5;$qfJ0xdj}_7F%Sizbi?)H60duH$shw$v|l9!-Es zF%1K!6i8Gf?rK${^qw)Zxu6=&doIv9d+5;Ogzb^e)TI;7q6j}762}W1kHldqfU~)I zXit^xkwl^T674VWAW%(L0f35wSn|T_1(2tp8qe2};Uk^H6MGKgHa@r~`&8b8gi>(| z1Wp%lIywXn&yCDIHCwW{=g>g~P>*KiNdnHXAZ6<|XQ)9hH`LmUed5)F?Gwqg`DZklp8S6in?34ay;z+%1pk1gk;1qXAf$Y9$bd+&8e!cuueaYe>egPd?EZJ+z9oA&vz3NxePccx~ z0MrwWhNnWIL3ZcOl|T~I{h`IGQzzzG*M>w#X8fpB;1m>$3xP0qLB$DGl$Tf7N&s{4 zP|NJx{7K~`tJ=_zb66K4F(H6PN6nM08Rl82K$+!pbB%K)2XXhzo@!)Q2s9PuZ#bON zzbtUVqn<>ZL8Z?$XEN>0-t%Z+uSxgu3J2W${K*FCr!sC2@7e_mg~J_DgFybl!9L;p zn$6lf$EE^FkyNR+3e|}R3OGsv(5Qbf)Hla*9c7S;38-bfKi0 zQYu}nQh_r*4jg|RCo^+~1p=|ZPnSwD2&F1|g5?sHA7m4m&5mRsy$|b_i0T&JR^Zl3 zGMV5B1^9^*O$`DE-taL*Nok5%GW%w_-EN*~DMgA)CDe?YNr=UF#Qc0F1S;<6NCfKZ zn{h|tA~9Z^R7F{)xTYui1_xCfWhyQafDjdBph8d}AS8?6e2k~YUqf{r0BuQjlw%Kac(qd9iMo z=Av8q@TPFlwPEow1db|VF|qg}Vz=V%xfOO^xrJ+v7Y>sPh7}4o9xoWiF1eCUmvGOW zM>MOpMp$4uN}Zt)TzA*SvR%AZSS|d7XW`glR~@_TIMS6}c1u^WxR}vz$DXfbH{Bc- z4P!T5Bm9BdVqv_17`y1A)6>Gcrn%`f_gp7}PSq10thCMHniXctAmU*;J5j ziuQ6kOP+8zSb{zb7CjvQ;mraDa5-HnfHNx-Ht2Ku9TMevg1Auz~${8k0_sH z^BoRt(t@6-f;s?zSpe8jq9UzghjRKQ9RTGWT)qeji1KaoJr9APl~ZX-MrzwyG+=2Rx#@$KGu&a#dB?5NuHq8QnZMn=zAC!3W!tT3#_TKo$VJMOcK+ zdgMsjkqqwIkCxTsq_u8ayrMz{(93so`2}?Nn&&bG%MOkLA$u;b8eOl}tx-QXV}$}i zhvM+60!(y!RDcm+G|kuSEjxIyY%phAO8{UX=x}t4@@D(QgecD=H1&|8zNx7;vbU@( zQVm|BwVb@+@&ig%R<{cl2%1O7B|tg4cfdGNUK`1tJve$Wl3Y$d7669w0uM3A}+7s^EKgA1sFF+L!mC5BmX7 zG@zFEj*iF6m!kCO!Mz!^Qk(i_U1(#X4#6A)_^yt#07W`L?Vdfc($Uef!ANY+9`x&l z3#20zgb<*pD51Rdc+6yK%Pt!{+Gdjd?^^E3p-WhAbe@QGzfG}003$%J6#%iADbf%F zcP5n7#MmN4KURK36JgwmKxwH!uQhZ;I7j9IqLL~G%Q4-UAVt4o0Pu9P345)9Bm4GA z2yDAF5R=|?PA$Coc4+U5NZs>D-28#18CS;J>Kp|AABt-(4jR1kbF14qJ zx!XF4DZFwm5t9kN1e595vBuoo3Rb{u9?Q}M@bm?+WY5$Td}*SrL6`Zhx+uq58KB$i z&w{5%XyD0QSkMFjiYh?dBKzYgY?2nMHOtf8omhTIcMTxHF)6H&u8N-6zaPu%907ni z37~LDEh7z~>XKR&7Qj3)ae$q0sse?D9W_P?IIRQf+&O{i{lh{42EepD9Uxz=L(yRq zHK?i`uT6Pd9Xloj7#}|{U@XrL8zbRmoQf2A5*io*x_b{9%WCOV0P@_StnTq~dl3uZ z9mVj2Gc&Ono;tP0|HluELjeGo?RMz!Noni=8lzku00&0x58)X=7O}jDn$_;llI4Nm=^oPp zfD-o!v*EM@A?k!js4pa7gw&+kOYO4k+a=8^jO}!6Y*?z}KIF9U8XETqn*m{{(68OwlQMj%ajXDz{5h@Sb9 z=$YR|Kn@4kh@cw7ir!uX@bGHh+(EzhkrH3hd-c|JEO5Ro=8u*)HjUkoW8~HMTWU1eUmm4*B_;mw`2nsiJ3zHvZ^` zYIpo>k$jOQZ7*%?+4h2xlvf@a>P{r}2I&J5vRrp&gN*dD^9un3vTg0{qMt3+ZBc_m zd47_szaK4gqHa3|4tJuF>VoWSWGE=;=j<(Q9DN~TFVv_Cc__Bk^%>P&$cy~0>H-%E zbceWXYEp38U0;o1OfCS*<^mRx++j1)HNsc96!LdjAig@`N{@X_mEde5e|ACk1dl^$ z)2u{#>t>?CP+;rjt!LEyBbMy!f_=t0bLvos*y)`_jDtb{21qnwX;2Gje$1@+pjNC= zJBb2``Lzo^-`Jq$AQ?QgHNPvrp#cKLrAQCRj+iZFmE&;kn;mA;Z3y*% z^B0&QPvNlE{V& zWVeX|p&?nIBvO4jwp!K;5yj^#L4n|AaSohcEZmX2Bqm&-feSR`he9L13AB((k=rD^1{GjeF)rIkwc-O= zYqKGLD4rj&>W9V-mZ>d`5>T|cR_iP(NT5JVi=hB|QBKj5%GKJSqu^Dcw-ogJEfA<{ zVnXBv7n6zO;#n-o3(7MAKO2+ex`|}|I@uOfq|g^wq$9m#@EK2pI^Rh7Q=;d zi-oh3*<5a1%w_xZPyt3a+*~AaJu~$PH!;XCjkloS(#GX0Z@+8KcB9k2iGdSATlb=o zmMi}p3#DE8_+4|Ea)J4v9riD@SN^3Kt9%vB8u7hmrR}WP2!pxs3*e`>YSVF`QBte+ z%{Skq#;9Mcn!;mHt7xOW_x}5$HS1TOfxOdL@kAR#YID;%n#lYIX9{awa(oC2mV^+t z&3|m>=B-j-2_Ofnk zW6<5)yd?`?w|4UN(qLhBo+DrDx~qG4DXuG>R-4(HQ|-y_@aFBw);@S*?=Ee%x29X$ z&DOSR4ESc3_?!-723)tcrnk12S=;=5`FuIgQLbj-P@_Uzuf+9sYesQZN#16jZy>)f zi?2v3EUj!+dS!;bev8xBRD}q(n*1#7#hzAL*_)eQnF)Z3fdftbaPd`f7A;3wTV-x< z`o7F|``!xlo0|sk#S?j|WR~)_%I@x#T)y64TU)|yN$y@36qrnSX;#(LwN=9Bqh>(Y zn!m%c!O5ABEkC2uY*w%D+sB=6J&V8**Xxooz=q)qz_10a1l;k?q z-CkCdTb9}0Exx?sR+pRo`$cc4J+r%ry0tl1DfaDlJSN>TvmB@7Ej#A~PNn_QMiBjY zTgDxtv@Zm$z=*xhdWicp)it<{bWP7KYT% zUt7bPPK#nDj9AMFqvX>VelPbo;!kQdQUGr#exqT{X8aMV%i^u)M!9KpeQ)9ASb9b8oNvJSs;;ieO8yEo zx3pwu<65KAUZGw#KDTXg5oe@0(?W`#cg^cU&#Pn}cfcaZqP%2V`(FFj4?aN&zz{t`X) zm1pSbXTMA<%6aT~oLKfg=suf9yT-~K86@a7LGFnNfc_{Mo!e*PJH^lK}0>ba+A zQTYO$c=q#j{QQ%2?3vF}Y~^v9e0rH$hkNO@H-1EyUcF3j{pr7_5I*qAjaTW*|K=rn z`g_WY^o46L(38LWO*(Vs>$LpJ*J$ab3t0c`D>VJ>r>SMcPd9$}16upex9Jc5@DJ#~ z*f2f$(pTy6?>tLOYtPW)^H0(2SHD2h%2^s;IZc7j&eHxz4^zh@Q7Z3t(|50bkCf-X zN^iXRWBP;F{*XF`dg;lRFVOq{aFvdTm$NQ+b zxtcDne+Slln!f*o8+7gWzDuP|H8l9xVfs)1?LX7%_g|onqk~j4)J;k)Hnqe2^HS}I zm+bXU`sz2HrzgMoJM_EPze|^|yh^zh4yx&IqnbcFm3KAc*8=VELp)9eetDH8^z2uk zqbEN9Il2s?Us!*UY>onQxU0#rw}$4Pd4zuW=YL2)z|S+$OC|eisid`zc9j+?D0qQB z^W+(N;iYx@`Zw1or(ic_7v_?!Bp(_0S3o(%d35@-kJIY6zCmAl_B=iF>{sZ^%CmI- zfE)}h(ub`XGYxLaLmFKZprP%B-3JecYUub|1^!MTi&+9-R4d9#;p@X#z_#-sUP1Lg2 zO)ZE(YG`Sqy2b{os^M`z=hb@wX&n^{UMiLhH zsT9*3@r@?<3<+II!kB|-!}8nx`RAXfmtJ~_zW2TF(QB{0Mz`?^`uWd)PJi<^e?!0g z{MSdHnu0em}wQzu@<4s;%8bfZir4 zXU=TW`uZll`6fgvL;)uXG@?KU3iwfA7zL(K;Ik<3{3f0G?j|!%pts(7>rZt0$xnWA zf6Z)u{6}xR@x2c=e*D1)Wq*8MgtO?IoA;eq3h?U7pl>NiIDhZH^IPzHzwqLVFRp*? zb1ysp_P+DwXU{z+=xbkl-uaFD&d)u0_Vd4k;IpTmdTPa)d*8XRc=FUEez7v(MduUu zozd>YN1CUO@-XOg&hOuM2D*cT^+Sy#h~j(BS#jUl?(yv3--W2B9-rU&qx(*Hr|Rk( o8k@Y$%`JZC{UizRCsTsDIN*2Z0en&ExmTWl#q`Iom`%U=zxM)Z2><{9 delta 170 zcmbQXgKyeL?s^6WMg~rX1_ltVz`(%6$S@7aPDp_AXD~2K1BwL%K=~O!{t`w84-Y6m z0wmAG;NSq|y8!tqObiAFP`(C`zk-QD0cbSXd=Vi30uzIT1e7nv0~C0|#2_F572p8! UKQJ|mE@>BC!nj>@2@~TF0N)82H~;_u From e55530aef8bae4d13f4c0a30d8909a7a4302dc9e Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Tue, 5 Aug 2008 14:45:40 +0000 Subject: [PATCH 156/304] - Add cred.c from Wine svn path=/trunk/; revision=35127 --- reactos/dll/win32/advapi32/advapi32.def | 20 +- reactos/dll/win32/advapi32/advapi32.rbuild | 1 + reactos/dll/win32/advapi32/crypt/crypt.h | 1 + reactos/dll/win32/advapi32/sec/cred.c | 1705 ++++++++++++++++++++ 4 files changed, 1717 insertions(+), 10 deletions(-) create mode 100644 reactos/dll/win32/advapi32/sec/cred.c diff --git a/reactos/dll/win32/advapi32/advapi32.def b/reactos/dll/win32/advapi32/advapi32.def index af2bf1ab8e9..14f567d3100 100644 --- a/reactos/dll/win32/advapi32/advapi32.def +++ b/reactos/dll/win32/advapi32/advapi32.def @@ -112,12 +112,12 @@ CreateServiceA@52 CreateServiceW@52 ;CreateTraceInstanceId@8 CreateWellKnownSid@16 -;CredDeleteA@12 -;CredDeleteW@12 -;CredEnumerateA@16 -;CredEnumerateW@16 -;CredFree@4 -;CredGetSessionTypes@8 +CredDeleteA@12 +CredDeleteW@12 +CredEnumerateA@16 +CredEnumerateW@16 +CredFree@4 +CredGetSessionTypes@8 ;CredGetTargetInfoA@12 ;CredGetTargetInfoW@12 ;CredIsMarshaledCredentialA@4 @@ -125,18 +125,18 @@ CreateWellKnownSid@16 ;CredMarshalCredentialA@12 ;CredMarshalCredentialW@12 ;CredProfileLoaded -;CredReadA +CredReadA ;CredReadDomainCredentialsA ;CredReadDomainCredentialsW -;CredReadW +CredReadW ;CredRenameA ;CredRenameW ;CredUnmarshalCredentialA ;CredUnmarshalCredentialW -;CredWriteA +CredWriteA ;CredWriteDomainCredentialsA ;CredWriteDomainCredentialsW -;CredWriteW +CredWriteW ;CredpConvertCredential ;CredpConvertTargetInfo ;CredpDecodeCredential diff --git a/reactos/dll/win32/advapi32/advapi32.rbuild b/reactos/dll/win32/advapi32/advapi32.rbuild index a074ebc724c..8199e92e650 100644 --- a/reactos/dll/win32/advapi32/advapi32.rbuild +++ b/reactos/dll/win32/advapi32/advapi32.rbuild @@ -41,6 +41,7 @@ ac.c audit.c + cred.c lsa.c misc.c sec.c diff --git a/reactos/dll/win32/advapi32/crypt/crypt.h b/reactos/dll/win32/advapi32/crypt/crypt.h index 2548d5731b1..b36499d574d 100644 --- a/reactos/dll/win32/advapi32/crypt/crypt.h +++ b/reactos/dll/win32/advapi32/crypt/crypt.h @@ -113,6 +113,7 @@ VOID WINAPI MD4Update( MD4_CTX *ctx, const unsigned char *buf, unsigned int len VOID WINAPI MD4Final(MD4_CTX *ctx); void arc4_init(arc4_info *a4i, const BYTE *key, unsigned int keyLen); void arc4_ProcessString(arc4_info *a4i, BYTE *inoutString, unsigned int length); +NTSTATUS WINAPI SystemFunction032(struct ustring *data, struct ustring *key); #endif /* __WINE_CRYPT_H_ */ diff --git a/reactos/dll/win32/advapi32/sec/cred.c b/reactos/dll/win32/advapi32/sec/cred.c new file mode 100644 index 00000000000..9041e6507de --- /dev/null +++ b/reactos/dll/win32/advapi32/sec/cred.c @@ -0,0 +1,1705 @@ +/* + * Credential Management APIs + * + * Copyright 2007 Robert Shearman for CodeWeavers + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include +#include + +#include "windef.h" +#include "winbase.h" +#include "winreg.h" +#include "wincred.h" +#include "winternl.h" + +#ifdef __APPLE__ +# include +# include +# include +#endif + +#include "../crypt/crypt.h" + +#include "wine/unicode.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(cred); + +/* the size of the ARC4 key used to encrypt the password data */ +#define KEY_SIZE 8 + +static const WCHAR wszCredentialManagerKey[] = {'S','o','f','t','w','a','r','e','\\','W','i','n','e','\\', + 'C','r','e','d','e','n','t','i','a','l',' ','M','a','n','a','g','e','r',0}; +static const WCHAR wszEncryptionKeyValue[] = {'E','n','c','r','y','p','t','i','o','n','K','e','y',0}; + +static const WCHAR wszFlagsValue[] = {'F','l','a','g','s',0}; +static const WCHAR wszTypeValue[] = {'T','y','p','e',0}; +static const WCHAR wszCommentValue[] = {'C','o','m','m','e','n','t',0}; +static const WCHAR wszLastWrittenValue[] = {'L','a','s','t','W','r','i','t','t','e','n',0}; +static const WCHAR wszPersistValue[] = {'P','e','r','s','i','s','t',0}; +static const WCHAR wszTargetAliasValue[] = {'T','a','r','g','e','t','A','l','i','a','s',0}; +static const WCHAR wszUserNameValue[] = {'U','s','e','r','N','a','m','e',0}; +static const WCHAR wszPasswordValue[] = {'P','a','s','s','w','o','r','d',0}; + +static DWORD read_credential_blob(HKEY hkey, const BYTE key_data[KEY_SIZE], + LPBYTE credential_blob, + DWORD *credential_blob_size) +{ + DWORD ret; + DWORD type; + + *credential_blob_size = 0; + ret = RegQueryValueExW(hkey, wszPasswordValue, 0, &type, NULL, credential_blob_size); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_BINARY) + return ERROR_REGISTRY_CORRUPT; + if (credential_blob) + { + struct ustring data; + struct ustring key; + + ret = RegQueryValueExW(hkey, wszPasswordValue, 0, &type, (LPVOID)credential_blob, + credential_blob_size); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_BINARY) + return ERROR_REGISTRY_CORRUPT; + + key.Length = key.MaximumLength = KEY_SIZE; + key.Buffer = (unsigned char *)key_data; + + data.Length = data.MaximumLength = *credential_blob_size; + data.Buffer = credential_blob; + SystemFunction032(&data, &key); + } + return ERROR_SUCCESS; +} + +static DWORD registry_read_credential(HKEY hkey, PCREDENTIALW credential, + const BYTE key_data[KEY_SIZE], + char *buffer, DWORD *len) +{ + DWORD type; + DWORD ret; + DWORD count; + + ret = RegQueryValueExW(hkey, NULL, 0, &type, NULL, &count); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + *len += count; + if (credential) + { + credential->TargetName = (LPWSTR)buffer; + ret = RegQueryValueExW(hkey, NULL, 0, &type, (LPVOID)credential->TargetName, + &count); + if (ret != ERROR_SUCCESS || type != REG_SZ) return ret; + buffer += count; + } + + ret = RegQueryValueExW(hkey, wszCommentValue, 0, &type, NULL, &count); + if (ret != ERROR_FILE_NOT_FOUND && ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + *len += count; + if (credential) + { + credential->Comment = (LPWSTR)buffer; + ret = RegQueryValueExW(hkey, wszCommentValue, 0, &type, (LPVOID)credential->Comment, + &count); + if (ret == ERROR_FILE_NOT_FOUND) + credential->Comment = NULL; + else if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + else + buffer += count; + } + + ret = RegQueryValueExW(hkey, wszTargetAliasValue, 0, &type, NULL, &count); + if (ret != ERROR_FILE_NOT_FOUND && ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + *len += count; + if (credential) + { + credential->TargetAlias = (LPWSTR)buffer; + ret = RegQueryValueExW(hkey, wszTargetAliasValue, 0, &type, (LPVOID)credential->TargetAlias, + &count); + if (ret == ERROR_FILE_NOT_FOUND) + credential->TargetAlias = NULL; + else if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + else + buffer += count; + } + + ret = RegQueryValueExW(hkey, wszUserNameValue, 0, &type, NULL, &count); + if (ret != ERROR_FILE_NOT_FOUND && ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + *len += count; + if (credential) + { + credential->UserName = (LPWSTR)buffer; + ret = RegQueryValueExW(hkey, wszUserNameValue, 0, &type, (LPVOID)credential->UserName, + &count); + if (ret == ERROR_FILE_NOT_FOUND) + { + credential->UserName = NULL; + ret = ERROR_SUCCESS; + } + else if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_SZ) + return ERROR_REGISTRY_CORRUPT; + else + buffer += count; + } + + ret = read_credential_blob(hkey, key_data, NULL, &count); + if (ret != ERROR_FILE_NOT_FOUND && ret != ERROR_SUCCESS) + return ret; + *len += count; + if (credential) + { + credential->CredentialBlob = (LPBYTE)buffer; + ret = read_credential_blob(hkey, key_data, credential->CredentialBlob, &count); + if (ret == ERROR_FILE_NOT_FOUND) + { + credential->CredentialBlob = NULL; + ret = ERROR_SUCCESS; + } + else if (ret != ERROR_SUCCESS) + return ret; + credential->CredentialBlobSize = count; + buffer += count; + } + + /* FIXME: Attributes */ + if (credential) + { + credential->AttributeCount = 0; + credential->Attributes = NULL; + } + + if (!credential) return ERROR_SUCCESS; + + count = sizeof(credential->Flags); + ret = RegQueryValueExW(hkey, wszFlagsValue, NULL, &type, (LPVOID)&credential->Flags, + &count); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_DWORD) + return ERROR_REGISTRY_CORRUPT; + count = sizeof(credential->Type); + ret = RegQueryValueExW(hkey, wszTypeValue, NULL, &type, (LPVOID)&credential->Type, + &count); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_DWORD) + return ERROR_REGISTRY_CORRUPT; + + count = sizeof(credential->LastWritten); + ret = RegQueryValueExW(hkey, wszLastWrittenValue, NULL, &type, (LPVOID)&credential->LastWritten, + &count); + if (ret != ERROR_SUCCESS) + return ret; + else if (type != REG_BINARY) + return ERROR_REGISTRY_CORRUPT; + count = sizeof(credential->Persist); + ret = RegQueryValueExW(hkey, wszPersistValue, NULL, &type, (LPVOID)&credential->Persist, + &count); + if (ret == ERROR_SUCCESS && type != REG_DWORD) + return ERROR_REGISTRY_CORRUPT; + return ret; +} + +#ifdef __APPLE__ +static DWORD mac_read_credential_from_item(SecKeychainItemRef item, BOOL require_password, + PCREDENTIALW credential, char *buffer, + DWORD *len) +{ + OSStatus status; + UInt32 i; + UInt32 cred_blob_len; + void *cred_blob; + LPWSTR domain = NULL; + LPWSTR user = NULL; + BOOL user_name_present = FALSE; + SecKeychainAttributeInfo info; + SecKeychainAttributeList *attr_list; + UInt32 info_tags[] = { kSecServerItemAttr, kSecSecurityDomainItemAttr, kSecAccountItemAttr, + kSecCommentItemAttr, kSecCreationDateItemAttr }; + info.count = sizeof(info_tags)/sizeof(info_tags[0]); + info.tag = info_tags; + info.format = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, &cred_blob_len, &cred_blob); + if (status == errSecAuthFailed && !require_password) + { + cred_blob_len = 0; + cred_blob = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, &cred_blob_len, NULL); + } + if (status != noErr) + { + WARN("SecKeychainItemCopyAttributesAndData returned status %ld\n", status); + return ERROR_NOT_FOUND; + } + + for (i = 0; i < attr_list->count; i++) + if (attr_list->attr[i].tag == kSecAccountItemAttr && attr_list->attr[i].data) + { + user_name_present = TRUE; + break; + } + if (!user_name_present) + { + WARN("no kSecAccountItemAttr for item\n"); + return ERROR_NOT_FOUND; + } + + if (buffer) + { + credential->Flags = 0; + credential->Type = CRED_TYPE_DOMAIN_PASSWORD; + credential->TargetName = NULL; + credential->Comment = NULL; + memset(&credential->LastWritten, 0, sizeof(credential->LastWritten)); + credential->CredentialBlobSize = 0; + credential->CredentialBlob = NULL; + credential->Persist = CRED_PERSIST_LOCAL_MACHINE; + credential->AttributeCount = 0; + credential->Attributes = NULL; + credential->TargetAlias = NULL; + credential->UserName = NULL; + } + for (i = 0; i < attr_list->count; i++) + { + switch (attr_list->attr[i].tag) + { + case kSecServerItemAttr: + TRACE("kSecServerItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (!attr_list->attr[i].data) continue; + if (buffer) + { + INT str_len; + credential->TargetName = (LPWSTR)buffer; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, (LPWSTR)buffer, 0xffff); + credential->TargetName[str_len] = '\0'; + buffer += (str_len + 1) * sizeof(WCHAR); + *len += (str_len + 1) * sizeof(WCHAR); + } + else + { + INT str_len; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, NULL, 0); + *len += (str_len + 1) * sizeof(WCHAR); + } + break; + case kSecAccountItemAttr: + { + INT str_len; + TRACE("kSecAccountItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (!attr_list->attr[i].data) continue; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, NULL, 0); + user = HeapAlloc(GetProcessHeap(), 0, (str_len + 1) * sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, user, str_len); + user[str_len] = '\0'; + break; + } + case kSecCommentItemAttr: + TRACE("kSecCommentItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (!attr_list->attr[i].data) continue; + if (buffer) + { + INT str_len; + credential->Comment = (LPWSTR)buffer; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, (LPWSTR)buffer, 0xffff); + credential->Comment[str_len] = '\0'; + buffer += (str_len + 1) * sizeof(WCHAR); + *len += (str_len + 1) * sizeof(WCHAR); + } + else + { + INT str_len; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, NULL, 0); + *len += (str_len + 1) * sizeof(WCHAR); + } + break; + case kSecSecurityDomainItemAttr: + { + INT str_len; + TRACE("kSecSecurityDomainItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (!attr_list->attr[i].data) continue; + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, NULL, 0); + domain = HeapAlloc(GetProcessHeap(), 0, (str_len + 1) * sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[i].data, + attr_list->attr[i].length, domain, str_len); + domain[str_len] = '\0'; + break; + } + case kSecCreationDateItemAttr: + TRACE("kSecCreationDateItemAttr: %.*s\n", (int)attr_list->attr[i].length, + (char *)attr_list->attr[i].data); + if (buffer) + { + LARGE_INTEGER win_time; + struct tm tm; + time_t time; + memset(&tm, 0, sizeof(tm)); + strptime(attr_list->attr[i].data, "%Y%m%d%H%M%SZ", &tm); + time = mktime(&tm); + RtlSecondsSince1970ToTime(time, &win_time); + credential->LastWritten.dwLowDateTime = win_time.u.LowPart; + credential->LastWritten.dwHighDateTime = win_time.u.HighPart; + } + break; + } + } + + if (user) + { + INT str_len; + if (buffer) + credential->UserName = (LPWSTR)buffer; + if (domain) + { + str_len = strlenW(domain); + *len += (str_len + 1) * sizeof(WCHAR); + if (buffer) + { + memcpy(credential->UserName, domain, str_len * sizeof(WCHAR)); + /* FIXME: figure out when to use an '@' */ + credential->UserName[str_len] = '\\'; + buffer += (str_len + 1) * sizeof(WCHAR); + } + } + str_len = strlenW(user); + *len += (str_len + 1) * sizeof(WCHAR); + if (buffer) + { + memcpy(buffer, user, (str_len + 1) * sizeof(WCHAR)); + buffer += (str_len + 1) * sizeof(WCHAR); + TRACE("UserName = %s\n", debugstr_w(credential->UserName)); + } + } + HeapFree(GetProcessHeap(), 0, user); + HeapFree(GetProcessHeap(), 0, domain); + + if (cred_blob) + { + if (buffer) + { + INT str_len; + credential->CredentialBlob = (BYTE *)buffer; + str_len = MultiByteToWideChar(CP_UTF8, 0, cred_blob, cred_blob_len, + (LPWSTR)buffer, 0xffff); + credential->CredentialBlobSize = str_len * sizeof(WCHAR); + buffer += str_len * sizeof(WCHAR); + *len += str_len * sizeof(WCHAR); + } + else + { + INT str_len; + str_len = MultiByteToWideChar(CP_UTF8, 0, cred_blob, cred_blob_len, + NULL, 0); + *len += str_len * sizeof(WCHAR); + } + } + SecKeychainItemFreeAttributesAndData(attr_list, cred_blob); + return ERROR_SUCCESS; +} +#endif + +static DWORD write_credential_blob(HKEY hkey, LPCWSTR target_name, DWORD type, + const BYTE key_data[KEY_SIZE], + const BYTE *credential_blob, DWORD credential_blob_size) +{ + LPBYTE encrypted_credential_blob; + struct ustring data; + struct ustring key; + DWORD ret; + + key.Length = key.MaximumLength = KEY_SIZE; + key.Buffer = (unsigned char *)key_data; + + encrypted_credential_blob = HeapAlloc(GetProcessHeap(), 0, credential_blob_size); + if (!encrypted_credential_blob) return ERROR_OUTOFMEMORY; + + memcpy(encrypted_credential_blob, credential_blob, credential_blob_size); + data.Length = data.MaximumLength = credential_blob_size; + data.Buffer = encrypted_credential_blob; + SystemFunction032(&data, &key); + + ret = RegSetValueExW(hkey, wszPasswordValue, 0, REG_BINARY, (LPVOID)encrypted_credential_blob, credential_blob_size); + HeapFree(GetProcessHeap(), 0, encrypted_credential_blob); + + return ret; +} + +static DWORD registry_write_credential(HKEY hkey, const CREDENTIALW *credential, + const BYTE key_data[KEY_SIZE], BOOL preserve_blob) +{ + DWORD ret; + FILETIME LastWritten; + + GetSystemTimeAsFileTime(&LastWritten); + + ret = RegSetValueExW(hkey, wszFlagsValue, 0, REG_DWORD, (LPVOID)&credential->Flags, + sizeof(credential->Flags)); + if (ret != ERROR_SUCCESS) return ret; + ret = RegSetValueExW(hkey, wszTypeValue, 0, REG_DWORD, (LPVOID)&credential->Type, + sizeof(credential->Type)); + if (ret != ERROR_SUCCESS) return ret; + ret = RegSetValueExW(hkey, NULL, 0, REG_SZ, (LPVOID)credential->TargetName, + sizeof(WCHAR)*(strlenW(credential->TargetName)+1)); + if (ret != ERROR_SUCCESS) return ret; + if (credential->Comment) + { + ret = RegSetValueExW(hkey, wszCommentValue, 0, REG_SZ, (LPVOID)credential->Comment, + sizeof(WCHAR)*(strlenW(credential->Comment)+1)); + if (ret != ERROR_SUCCESS) return ret; + } + ret = RegSetValueExW(hkey, wszLastWrittenValue, 0, REG_BINARY, (LPVOID)&LastWritten, + sizeof(LastWritten)); + if (ret != ERROR_SUCCESS) return ret; + ret = RegSetValueExW(hkey, wszPersistValue, 0, REG_DWORD, (LPVOID)&credential->Persist, + sizeof(credential->Persist)); + if (ret != ERROR_SUCCESS) return ret; + /* FIXME: Attributes */ + if (credential->TargetAlias) + { + ret = RegSetValueExW(hkey, wszTargetAliasValue, 0, REG_SZ, (LPVOID)credential->TargetAlias, + sizeof(WCHAR)*(strlenW(credential->TargetAlias)+1)); + if (ret != ERROR_SUCCESS) return ret; + } + if (credential->UserName) + { + ret = RegSetValueExW(hkey, wszUserNameValue, 0, REG_SZ, (LPVOID)credential->UserName, + sizeof(WCHAR)*(strlenW(credential->UserName)+1)); + if (ret != ERROR_SUCCESS) return ret; + } + if (!preserve_blob) + { + ret = write_credential_blob(hkey, credential->TargetName, credential->Type, + key_data, credential->CredentialBlob, + credential->CredentialBlobSize); + } + return ret; +} + +#ifdef __APPLE__ +static DWORD mac_write_credential(const CREDENTIALW *credential, BOOL preserve_blob) +{ + OSStatus status; + SecKeychainItemRef keychain_item; + char *username; + char *domain = NULL; + char *password; + char *servername; + UInt32 userlen; + UInt32 domainlen = 0; + UInt32 pwlen; + UInt32 serverlen; + LPCWSTR p; + SecKeychainAttribute attrs[1]; + SecKeychainAttributeList attr_list; + + if (credential->Flags) + FIXME("Flags 0x%x not written\n", credential->Flags); + if (credential->Type != CRED_TYPE_DOMAIN_PASSWORD) + FIXME("credential type of %d not supported\n", credential->Type); + if (credential->Persist != CRED_PERSIST_LOCAL_MACHINE) + FIXME("persist value of %d not supported\n", credential->Persist); + if (credential->AttributeCount) + FIXME("custom attributes not supported\n"); + + p = strchrW(credential->UserName, '\\'); + if (p) + { + domainlen = WideCharToMultiByte(CP_UTF8, 0, credential->UserName, + p - credential->UserName, NULL, 0, NULL, NULL); + domain = HeapAlloc(GetProcessHeap(), 0, (domainlen + 1) * sizeof(*domain)); + WideCharToMultiByte(CP_UTF8, 0, credential->UserName, p - credential->UserName, + domain, domainlen, NULL, NULL); + domain[domainlen] = '\0'; + p++; + } + else + p = credential->UserName; + userlen = WideCharToMultiByte(CP_UTF8, 0, p, -1, NULL, 0, NULL, NULL); + username = HeapAlloc(GetProcessHeap(), 0, userlen * sizeof(*username)); + WideCharToMultiByte(CP_UTF8, 0, p, -1, username, userlen, NULL, NULL); + + serverlen = WideCharToMultiByte(CP_UTF8, 0, credential->TargetName, -1, NULL, 0, NULL, NULL); + servername = HeapAlloc(GetProcessHeap(), 0, serverlen * sizeof(*servername)); + WideCharToMultiByte(CP_UTF8, 0, credential->TargetName, -1, servername, serverlen, NULL, NULL); + pwlen = WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)credential->CredentialBlob, + credential->CredentialBlobSize / sizeof(WCHAR), NULL, 0, NULL, NULL); + password = HeapAlloc(GetProcessHeap(), 0, pwlen * sizeof(*domain)); + WideCharToMultiByte(CP_UTF8, 0, (LPCWSTR)credential->CredentialBlob, + credential->CredentialBlobSize / sizeof(WCHAR), password, pwlen, NULL, NULL); + + TRACE("adding server %s, domain %s, username %s using Keychain\n", servername, domain, username); + status = SecKeychainAddInternetPassword(NULL, strlen(servername), servername, + strlen(domain), domain, strlen(username), + username, 0, NULL, 0, + 0 /* no protocol */, + kSecAuthenticationTypeDefault, + strlen(password), password, &keychain_item); + if (status != noErr) + ERR("SecKeychainAddInternetPassword returned %ld\n", status); + if (status == errSecDuplicateItem) + { + SecKeychainItemRef keychain_item; + + status = SecKeychainFindInternetPassword(NULL, strlen(servername), servername, + strlen(domain), domain, + strlen(username), username, + 0, NULL /* any path */, 0, + 0 /* any protocol */, + 0 /* any authentication type */, + 0, NULL, &keychain_item); + if (status != noErr) + ERR("SecKeychainFindInternetPassword returned %ld\n", status); + } + HeapFree(GetProcessHeap(), 0, domain); + HeapFree(GetProcessHeap(), 0, username); + HeapFree(GetProcessHeap(), 0, servername); + if (status != noErr) + { + HeapFree(GetProcessHeap(), 0, password); + return ERROR_GEN_FAILURE; + } + if (credential->Comment) + { + attr_list.count = 1; + attr_list.attr = attrs; + attrs[0].tag = kSecCommentItemAttr; + attrs[0].length = WideCharToMultiByte(CP_UTF8, 0, credential->Comment, -1, NULL, 0, NULL, NULL); + if (attrs[0].length) attrs[0].length--; + attrs[0].data = HeapAlloc(GetProcessHeap(), 0, attrs[0].length); + WideCharToMultiByte(CP_UTF8, 0, credential->Comment, -1, attrs[0].data, attrs[0].length, NULL, NULL); + } + else + { + attr_list.count = 0; + attr_list.attr = NULL; + } + status = SecKeychainItemModifyAttributesAndData(keychain_item, &attr_list, + preserve_blob ? 0 : strlen(password), + preserve_blob ? NULL : password); + if (credential->Comment) + HeapFree(GetProcessHeap(), 0, attrs[0].data); + HeapFree(GetProcessHeap(), 0, password); + /* FIXME: set TargetAlias attribute */ + CFRelease(keychain_item); + return ERROR_SUCCESS; +} +#endif + +static DWORD open_cred_mgr_key(HKEY *hkey, BOOL open_for_write) +{ + return RegCreateKeyExW(HKEY_CURRENT_USER, wszCredentialManagerKey, 0, + NULL, REG_OPTION_NON_VOLATILE, + KEY_READ | (open_for_write ? KEY_WRITE : 0), NULL, hkey, NULL); +} + +static DWORD get_cred_mgr_encryption_key(HKEY hkeyMgr, BYTE key_data[KEY_SIZE]) +{ + static const BYTE my_key_data[KEY_SIZE] = { 0 }; + DWORD type; + DWORD count; + FILETIME ft; + ULONG seed; + ULONG value; + DWORD ret; + + memcpy(key_data, my_key_data, KEY_SIZE); + + count = KEY_SIZE; + ret = RegQueryValueExW(hkeyMgr, wszEncryptionKeyValue, NULL, &type, (LPVOID)key_data, + &count); + if (ret == ERROR_SUCCESS) + { + if (type != REG_BINARY) + return ERROR_REGISTRY_CORRUPT; + else + return ERROR_SUCCESS; + } + if (ret != ERROR_FILE_NOT_FOUND) + return ret; + + GetSystemTimeAsFileTime(&ft); + seed = ft.dwLowDateTime; + value = RtlUniform(&seed); + *(DWORD *)key_data = value; + seed = ft.dwHighDateTime; + value = RtlUniform(&seed); + *(DWORD *)(key_data + 4) = value; + + ret = RegSetValueExW(hkeyMgr, wszEncryptionKeyValue, 0, REG_BINARY, + (LPVOID)key_data, KEY_SIZE); + if (ret == ERROR_ACCESS_DENIED) + { + ret = open_cred_mgr_key(&hkeyMgr, TRUE); + if (ret == ERROR_SUCCESS) + { + ret = RegSetValueExW(hkeyMgr, wszEncryptionKeyValue, 0, REG_BINARY, + (LPVOID)key_data, KEY_SIZE); + RegCloseKey(hkeyMgr); + } + } + return ret; +} + +static LPWSTR get_key_name_for_target(LPCWSTR target_name, DWORD type) +{ + static const WCHAR wszGenericPrefix[] = {'G','e','n','e','r','i','c',':',' ',0}; + static const WCHAR wszDomPasswdPrefix[] = {'D','o','m','P','a','s','s','w','d',':',' ',0}; + INT len; + LPCWSTR prefix = NULL; + LPWSTR key_name, p; + + len = strlenW(target_name); + if (type == CRED_TYPE_GENERIC) + { + prefix = wszGenericPrefix; + len += sizeof(wszGenericPrefix)/sizeof(wszGenericPrefix[0]); + } + else + { + prefix = wszDomPasswdPrefix; + len += sizeof(wszDomPasswdPrefix)/sizeof(wszDomPasswdPrefix[0]); + } + + key_name = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!key_name) return NULL; + + strcpyW(key_name, prefix); + strcatW(key_name, target_name); + + for (p = key_name; *p; p++) + if (*p == '\\') *p = '_'; + + return key_name; +} + +static BOOL credential_matches_filter(HKEY hkeyCred, LPCWSTR filter) +{ + LPWSTR target_name; + DWORD ret; + DWORD type; + DWORD count; + LPCWSTR p; + + if (!filter) return TRUE; + + ret = RegQueryValueExW(hkeyCred, NULL, 0, &type, NULL, &count); + if (ret != ERROR_SUCCESS) + return FALSE; + else if (type != REG_SZ) + return FALSE; + + target_name = HeapAlloc(GetProcessHeap(), 0, count); + if (!target_name) + return FALSE; + ret = RegQueryValueExW(hkeyCred, NULL, 0, &type, (LPVOID)target_name, &count); + if (ret != ERROR_SUCCESS || type != REG_SZ) + { + HeapFree(GetProcessHeap(), 0, target_name); + return FALSE; + } + + TRACE("comparing filter %s to target name %s\n", debugstr_w(filter), + debugstr_w(target_name)); + + p = strchrW(filter, '*'); + ret = CompareStringW(GetThreadLocale(), 0, filter, + (p && !p[1] ? p - filter : -1), target_name, + (p && !p[1] ? p - filter : -1)) == CSTR_EQUAL; + + HeapFree(GetProcessHeap(), 0, target_name); + return ret; +} + +static DWORD registry_enumerate_credentials(HKEY hkeyMgr, LPCWSTR filter, + LPWSTR target_name, + DWORD target_name_len, BYTE key_data[KEY_SIZE], + PCREDENTIALW *credentials, char **buffer, + DWORD *len, DWORD *count) +{ + DWORD i; + DWORD ret; + for (i = 0;; i++) + { + HKEY hkeyCred; + ret = RegEnumKeyW(hkeyMgr, i, target_name, target_name_len+1); + if (ret == ERROR_NO_MORE_ITEMS) + { + ret = ERROR_SUCCESS; + break; + } + else if (ret != ERROR_SUCCESS) + { + ret = ERROR_SUCCESS; + continue; + } + TRACE("target_name = %s\n", debugstr_w(target_name)); + ret = RegOpenKeyExW(hkeyMgr, target_name, 0, KEY_QUERY_VALUE, &hkeyCred); + if (ret != ERROR_SUCCESS) + { + ret = ERROR_SUCCESS; + continue; + } + if (!credential_matches_filter(hkeyCred, filter)) + { + RegCloseKey(hkeyCred); + continue; + } + if (buffer) + { + *len = sizeof(CREDENTIALW); + credentials[*count] = (PCREDENTIALW)*buffer; + } + else + *len += sizeof(CREDENTIALW); + ret = registry_read_credential(hkeyCred, buffer ? credentials[*count] : NULL, + key_data, buffer ? *buffer + sizeof(CREDENTIALW) : NULL, + len); + RegCloseKey(hkeyCred); + if (ret != ERROR_SUCCESS) break; + if (buffer) *buffer += *len; + (*count)++; + } + return ret; +} + +#ifdef __APPLE__ +static DWORD mac_enumerate_credentials(LPCWSTR filter, PCREDENTIALW *credentials, + char *buffer, DWORD *len, DWORD *count) +{ + SecKeychainSearchRef search; + SecKeychainItemRef item; + OSStatus status; + Boolean saved_user_interaction_allowed; + DWORD ret; + + SecKeychainGetUserInteractionAllowed(&saved_user_interaction_allowed); + SecKeychainSetUserInteractionAllowed(false); + + status = SecKeychainSearchCreateFromAttributes(NULL, kSecInternetPasswordItemClass, NULL, &search); + if (status == noErr) + { + while (SecKeychainSearchCopyNext(search, &item) == noErr) + { + SecKeychainAttributeInfo info; + SecKeychainAttributeList *attr_list; + UInt32 info_tags[] = { kSecServerItemAttr }; + info.count = sizeof(info_tags)/sizeof(info_tags[0]); + info.tag = info_tags; + info.format = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, NULL, NULL); + if (status != noErr) + { + WARN("SecKeychainItemCopyAttributesAndData returned status %ld\n", status); + continue; + } + if (buffer) + { + *len = sizeof(CREDENTIALW); + credentials[*count] = (PCREDENTIALW)buffer; + } + else + *len += sizeof(CREDENTIALW); + if (attr_list->count != 1 || attr_list->attr[0].tag != kSecServerItemAttr) continue; + TRACE("server item: %.*s\n", (int)attr_list->attr[0].length, (char *)attr_list->attr[0].data); + /* FIXME: filter based on attr_list->attr[0].data */ + SecKeychainItemFreeAttributesAndData(attr_list, NULL); + ret = mac_read_credential_from_item(item, FALSE, + buffer ? credentials[*count] : NULL, + buffer ? buffer + sizeof(CREDENTIALW) : NULL, + len); + CFRelease(item); + if (ret == ERROR_SUCCESS) + { + (*count)++; + if (buffer) buffer += *len; + } + } + CFRelease(search); + } + else + ERR("SecKeychainSearchCreateFromAttributes returned status %ld\n", status); + SecKeychainSetUserInteractionAllowed(saved_user_interaction_allowed); + return ERROR_SUCCESS; +} + +static DWORD mac_delete_credential(LPCWSTR TargetName) +{ + OSStatus status; + SecKeychainSearchRef search; + status = SecKeychainSearchCreateFromAttributes(NULL, kSecInternetPasswordItemClass, NULL, &search); + if (status == noErr) + { + SecKeychainItemRef item; + while (SecKeychainSearchCopyNext(search, &item) == noErr) + { + SecKeychainAttributeInfo info; + SecKeychainAttributeList *attr_list; + UInt32 info_tags[] = { kSecServerItemAttr }; + LPWSTR target_name; + INT str_len; + info.count = sizeof(info_tags)/sizeof(info_tags[0]); + info.tag = info_tags; + info.format = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, NULL, NULL); + if (status != noErr) + { + WARN("SecKeychainItemCopyAttributesAndData returned status %ld\n", status); + continue; + } + if (attr_list->count != 1 || attr_list->attr[0].tag != kSecServerItemAttr) + { + CFRelease(item); + continue; + } + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[0].data, attr_list->attr[0].length, NULL, 0); + target_name = HeapAlloc(GetProcessHeap(), 0, (str_len + 1) * sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[0].data, attr_list->attr[0].length, target_name, str_len); + /* nul terminate */ + target_name[str_len] = '\0'; + if (strcmpiW(TargetName, target_name)) + { + CFRelease(item); + HeapFree(GetProcessHeap(), 0, target_name); + continue; + } + HeapFree(GetProcessHeap(), 0, target_name); + SecKeychainItemFreeAttributesAndData(attr_list, NULL); + SecKeychainItemDelete(item); + CFRelease(item); + CFRelease(search); + + return ERROR_SUCCESS; + } + CFRelease(search); + } + return ERROR_NOT_FOUND; +} +#endif + +static void convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW, PCREDENTIALA CredentialA, DWORD *len) +{ + char *buffer = (char *)CredentialA + sizeof(CREDENTIALA); + INT string_len; + + *len += sizeof(CREDENTIALA); + if (!CredentialA) + { + if (CredentialW->TargetName) *len += WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetName, -1, NULL, 0, NULL, NULL); + if (CredentialW->Comment) *len += WideCharToMultiByte(CP_ACP, 0, CredentialW->Comment, -1, NULL, 0, NULL, NULL); + *len += CredentialW->CredentialBlobSize; + if (CredentialW->TargetAlias) *len += WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetAlias, -1, NULL, 0, NULL, NULL); + if (CredentialW->UserName) *len += WideCharToMultiByte(CP_ACP, 0, CredentialW->UserName, -1, NULL, 0, NULL, NULL); + + return; + } + + CredentialA->Flags = CredentialW->Flags; + CredentialA->Type = CredentialW->Type; + if (CredentialW->TargetName) + { + CredentialA->TargetName = buffer; + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetName, -1, CredentialA->TargetName, -1, NULL, NULL); + buffer += string_len; + *len += string_len; + } + else + CredentialA->TargetName = NULL; + if (CredentialW->Comment) + { + CredentialA->Comment = buffer; + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->Comment, -1, CredentialA->Comment, -1, NULL, NULL); + buffer += string_len; + *len += string_len; + } + else + CredentialA->Comment = NULL; + CredentialA->LastWritten = CredentialW->LastWritten; + CredentialA->CredentialBlobSize = CredentialW->CredentialBlobSize; + if (CredentialW->CredentialBlobSize) + { + CredentialA->CredentialBlob =(LPBYTE)buffer; + memcpy(CredentialA->CredentialBlob, CredentialW->CredentialBlob, + CredentialW->CredentialBlobSize); + buffer += CredentialW->CredentialBlobSize; + *len += CredentialW->CredentialBlobSize; + } + else + CredentialA->CredentialBlob = NULL; + CredentialA->Persist = CredentialW->Persist; + CredentialA->AttributeCount = 0; + CredentialA->Attributes = NULL; /* FIXME */ + if (CredentialW->TargetAlias) + { + CredentialA->TargetAlias = buffer; + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetAlias, -1, CredentialA->TargetAlias, -1, NULL, NULL); + buffer += string_len; + *len += string_len; + } + else + CredentialA->TargetAlias = NULL; + if (CredentialW->UserName) + { + CredentialA->UserName = buffer; + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->UserName, -1, CredentialA->UserName, -1, NULL, NULL); + buffer += string_len; + *len += string_len; + } + else + CredentialA->UserName = NULL; +} + +static void convert_PCREDENTIALA_to_PCREDENTIALW(const CREDENTIALA *CredentialA, PCREDENTIALW CredentialW, DWORD *len) +{ + char *buffer = (char *)CredentialW + sizeof(CREDENTIALW); + INT string_len; + + *len += sizeof(CREDENTIALW); + if (!CredentialW) + { + if (CredentialA->TargetName) *len += sizeof(WCHAR) * MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetName, -1, NULL, 0); + if (CredentialA->Comment) *len += sizeof(WCHAR) * MultiByteToWideChar(CP_ACP, 0, CredentialA->Comment, -1, NULL, 0); + *len += CredentialA->CredentialBlobSize; + if (CredentialA->TargetAlias) *len += sizeof(WCHAR) * MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetAlias, -1, NULL, 0); + if (CredentialA->UserName) *len += sizeof(WCHAR) * MultiByteToWideChar(CP_ACP, 0, CredentialA->UserName, -1, NULL, 0); + + return; + } + + CredentialW->Flags = CredentialA->Flags; + CredentialW->Type = CredentialA->Type; + if (CredentialA->TargetName) + { + CredentialW->TargetName = (LPWSTR)buffer; + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetName, -1, CredentialW->TargetName, -1); + buffer += sizeof(WCHAR) * string_len; + *len += sizeof(WCHAR) * string_len; + } + else + CredentialW->TargetName = NULL; + if (CredentialA->Comment) + { + CredentialW->Comment = (LPWSTR)buffer; + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->Comment, -1, CredentialW->Comment, -1); + buffer += sizeof(WCHAR) * string_len; + *len += sizeof(WCHAR) * string_len; + } + else + CredentialW->Comment = NULL; + CredentialW->LastWritten = CredentialA->LastWritten; + CredentialW->CredentialBlobSize = CredentialA->CredentialBlobSize; + if (CredentialA->CredentialBlobSize) + { + CredentialW->CredentialBlob =(LPBYTE)buffer; + memcpy(CredentialW->CredentialBlob, CredentialA->CredentialBlob, + CredentialA->CredentialBlobSize); + buffer += CredentialA->CredentialBlobSize; + *len += CredentialA->CredentialBlobSize; + } + else + CredentialW->CredentialBlob = NULL; + CredentialW->Persist = CredentialA->Persist; + CredentialW->AttributeCount = 0; + CredentialW->Attributes = NULL; /* FIXME */ + if (CredentialA->TargetAlias) + { + CredentialW->TargetAlias = (LPWSTR)buffer; + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetAlias, -1, CredentialW->TargetAlias, -1); + buffer += sizeof(WCHAR) * string_len; + *len += sizeof(WCHAR) * string_len; + } + else + CredentialW->TargetAlias = NULL; + if (CredentialA->UserName) + { + CredentialW->UserName = (LPWSTR)buffer; + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->UserName, -1, CredentialW->UserName, -1); + buffer += sizeof(WCHAR) * string_len; + *len += sizeof(WCHAR) * string_len; + } + else + CredentialW->UserName = NULL; +} + +/****************************************************************************** + * CredDeleteA [ADVAPI32.@] + */ +BOOL WINAPI CredDeleteA(LPCSTR TargetName, DWORD Type, DWORD Flags) +{ + LPWSTR TargetNameW; + DWORD len; + BOOL ret; + + TRACE("(%s, %d, 0x%x)\n", debugstr_a(TargetName), Type, Flags); + + if (!TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + len = MultiByteToWideChar(CP_ACP, 0, TargetName, -1, NULL, 0); + TargetNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!TargetNameW) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + MultiByteToWideChar(CP_ACP, 0, TargetName, -1, TargetNameW, len); + + ret = CredDeleteW(TargetNameW, Type, Flags); + + HeapFree(GetProcessHeap(), 0, TargetNameW); + + return ret; +} + +/****************************************************************************** + * CredDeleteW [ADVAPI32.@] + */ +BOOL WINAPI CredDeleteW(LPCWSTR TargetName, DWORD Type, DWORD Flags) +{ + HKEY hkeyMgr; + DWORD ret; + LPWSTR key_name; + + TRACE("(%s, %d, 0x%x)\n", debugstr_w(TargetName), Type, Flags); + + if (!TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Type != CRED_TYPE_GENERIC && Type != CRED_TYPE_DOMAIN_PASSWORD) + { + FIXME("unhandled type %d\n", Type); + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Flags) + { + FIXME("unhandled flags 0x%x\n", Flags); + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + +#ifdef __APPLE__ + if (Type == CRED_TYPE_DOMAIN_PASSWORD) + { + ret = mac_delete_credential(TargetName); + if (ret == ERROR_SUCCESS) + return TRUE; + } +#endif + + ret = open_cred_mgr_key(&hkeyMgr, TRUE); + if (ret != ERROR_SUCCESS) + { + WARN("couldn't open/create manager key, error %d\n", ret); + SetLastError(ERROR_NO_SUCH_LOGON_SESSION); + return FALSE; + } + + key_name = get_key_name_for_target(TargetName, Type); + ret = RegDeleteKeyW(hkeyMgr, key_name); + HeapFree(GetProcessHeap(), 0, key_name); + RegCloseKey(hkeyMgr); + if (ret != ERROR_SUCCESS) + { + SetLastError(ERROR_NOT_FOUND); + return FALSE; + } + + return TRUE; +} + +/****************************************************************************** + * CredEnumerateA [ADVAPI32.@] + */ +BOOL WINAPI CredEnumerateA(LPCSTR Filter, DWORD Flags, DWORD *Count, + PCREDENTIALA **Credentials) +{ + LPWSTR FilterW; + PCREDENTIALW *CredentialsW; + DWORD i; + DWORD len; + char *buffer; + + TRACE("(%s, 0x%x, %p, %p)\n", debugstr_a(Filter), Flags, Count, Credentials); + + if (Filter) + { + len = MultiByteToWideChar(CP_ACP, 0, Filter, -1, NULL, 0); + FilterW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!FilterW) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + MultiByteToWideChar(CP_ACP, 0, Filter, -1, FilterW, len); + } + else + FilterW = NULL; + + if (!CredEnumerateW(FilterW, Flags, Count, &CredentialsW)) + { + HeapFree(GetProcessHeap(), 0, FilterW); + return FALSE; + } + HeapFree(GetProcessHeap(), 0, FilterW); + + len = *Count * sizeof(PCREDENTIALA); + for (i = 0; i < *Count; i++) + convert_PCREDENTIALW_to_PCREDENTIALA(CredentialsW[i], NULL, &len); + + *Credentials = HeapAlloc(GetProcessHeap(), 0, len); + if (!*Credentials) + { + CredFree(CredentialsW); + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + + buffer = (char *)&(*Credentials)[*Count]; + for (i = 0; i < *Count; i++) + { + len = 0; + (*Credentials)[i] = (PCREDENTIALA)buffer; + convert_PCREDENTIALW_to_PCREDENTIALA(CredentialsW[i], (*Credentials)[i], &len); + buffer += len; + } + + CredFree(CredentialsW); + + return TRUE; +} + +/****************************************************************************** + * CredEnumerateW [ADVAPI32.@] + */ +BOOL WINAPI CredEnumerateW(LPCWSTR Filter, DWORD Flags, DWORD *Count, + PCREDENTIALW **Credentials) +{ + HKEY hkeyMgr; + DWORD ret; + LPWSTR target_name; + DWORD target_name_len; + DWORD len; + char *buffer; + BYTE key_data[KEY_SIZE]; + + TRACE("(%s, 0x%x, %p, %p)\n", debugstr_w(Filter), Flags, Count, Credentials); + + if (Flags) + { + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + ret = open_cred_mgr_key(&hkeyMgr, FALSE); + if (ret != ERROR_SUCCESS) + { + WARN("couldn't open/create manager key, error %d\n", ret); + SetLastError(ERROR_NO_SUCH_LOGON_SESSION); + return FALSE; + } + + ret = get_cred_mgr_encryption_key(hkeyMgr, key_data); + if (ret != ERROR_SUCCESS) + { + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + + ret = RegQueryInfoKeyW(hkeyMgr, NULL, NULL, NULL, NULL, &target_name_len, NULL, NULL, NULL, NULL, NULL, NULL); + if (ret != ERROR_SUCCESS) + { + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + + target_name = HeapAlloc(GetProcessHeap(), 0, (target_name_len+1)*sizeof(WCHAR)); + if (!target_name) + { + RegCloseKey(hkeyMgr); + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + + *Count = 0; + len = 0; + ret = registry_enumerate_credentials(hkeyMgr, Filter, target_name, target_name_len, + key_data, NULL, NULL, &len, Count); +#ifdef __APPLE__ + if (ret == ERROR_SUCCESS) + ret = mac_enumerate_credentials(Filter, NULL, NULL, &len, Count); +#endif + if (ret == ERROR_SUCCESS && *Count == 0) + ret = ERROR_NOT_FOUND; + if (ret != ERROR_SUCCESS) + { + HeapFree(GetProcessHeap(), 0, target_name); + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + len += *Count * sizeof(PCREDENTIALW); + + if (ret == ERROR_SUCCESS) + { + buffer = HeapAlloc(GetProcessHeap(), 0, len); + *Credentials = (PCREDENTIALW *)buffer; + if (buffer) + { + buffer += *Count * sizeof(PCREDENTIALW); + *Count = 0; + ret = registry_enumerate_credentials(hkeyMgr, Filter, target_name, + target_name_len, key_data, + *Credentials, &buffer, &len, + Count); +#ifdef __APPLE__ + if (ret == ERROR_SUCCESS) + ret = mac_enumerate_credentials(Filter, *Credentials, + buffer, &len, Count); +#endif + } + else + ret = ERROR_OUTOFMEMORY; + } + + HeapFree(GetProcessHeap(), 0, target_name); + RegCloseKey(hkeyMgr); + + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; +} + +/****************************************************************************** + * CredFree [ADVAPI32.@] + */ +VOID WINAPI CredFree(PVOID Buffer) +{ + HeapFree(GetProcessHeap(), 0, Buffer); +} + +/****************************************************************************** + * CredReadA [ADVAPI32.@] + */ +BOOL WINAPI CredReadA(LPCSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALA *Credential) +{ + LPWSTR TargetNameW; + PCREDENTIALW CredentialW; + DWORD len; + + TRACE("(%s, %d, 0x%x, %p)\n", debugstr_a(TargetName), Type, Flags, Credential); + + if (!TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + len = MultiByteToWideChar(CP_ACP, 0, TargetName, -1, NULL, 0); + TargetNameW = HeapAlloc(GetProcessHeap(), 0, len * sizeof(WCHAR)); + if (!TargetNameW) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + MultiByteToWideChar(CP_ACP, 0, TargetName, -1, TargetNameW, len); + + if (!CredReadW(TargetNameW, Type, Flags, &CredentialW)) + { + HeapFree(GetProcessHeap(), 0, TargetNameW); + return FALSE; + } + HeapFree(GetProcessHeap(), 0, TargetNameW); + + len = 0; + convert_PCREDENTIALW_to_PCREDENTIALA(CredentialW, NULL, &len); + *Credential = HeapAlloc(GetProcessHeap(), 0, len); + if (!*Credential) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + len = 0; + convert_PCREDENTIALW_to_PCREDENTIALA(CredentialW, *Credential, &len); + + CredFree(CredentialW); + + return TRUE; +} + +/****************************************************************************** + * CredReadW [ADVAPI32.@] + */ +BOOL WINAPI CredReadW(LPCWSTR TargetName, DWORD Type, DWORD Flags, PCREDENTIALW *Credential) +{ + HKEY hkeyMgr; + HKEY hkeyCred; + DWORD ret; + LPWSTR key_name; + DWORD len; + BYTE key_data[KEY_SIZE]; + + TRACE("(%s, %d, 0x%x, %p)\n", debugstr_w(TargetName), Type, Flags, Credential); + + if (!TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Type != CRED_TYPE_GENERIC && Type != CRED_TYPE_DOMAIN_PASSWORD) + { + FIXME("unhandled type %d\n", Type); + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Flags) + { + FIXME("unhandled flags 0x%x\n", Flags); + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + +#ifdef __APPLE__ + if (Type == CRED_TYPE_DOMAIN_PASSWORD) + { + OSStatus status; + SecKeychainSearchRef search; + status = SecKeychainSearchCreateFromAttributes(NULL, kSecInternetPasswordItemClass, NULL, &search); + if (status == noErr) + { + SecKeychainItemRef item; + while (SecKeychainSearchCopyNext(search, &item) == noErr) + { + SecKeychainAttributeInfo info; + SecKeychainAttributeList *attr_list; + UInt32 info_tags[] = { kSecServerItemAttr }; + LPWSTR target_name; + INT str_len; + info.count = sizeof(info_tags)/sizeof(info_tags[0]); + info.tag = info_tags; + info.format = NULL; + status = SecKeychainItemCopyAttributesAndData(item, &info, NULL, &attr_list, NULL, NULL); + len = sizeof(**Credential); + if (status != noErr) + { + WARN("SecKeychainItemCopyAttributesAndData returned status %ld\n", status); + continue; + } + if (attr_list->count != 1 || attr_list->attr[0].tag != kSecServerItemAttr) + { + CFRelease(item); + continue; + } + str_len = MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[0].data, attr_list->attr[0].length, NULL, 0); + target_name = HeapAlloc(GetProcessHeap(), 0, (str_len + 1) * sizeof(WCHAR)); + MultiByteToWideChar(CP_UTF8, 0, attr_list->attr[0].data, attr_list->attr[0].length, target_name, str_len); + /* nul terminate */ + target_name[str_len] = '\0'; + if (strcmpiW(TargetName, target_name)) + { + CFRelease(item); + HeapFree(GetProcessHeap(), 0, target_name); + continue; + } + HeapFree(GetProcessHeap(), 0, target_name); + SecKeychainItemFreeAttributesAndData(attr_list, NULL); + ret = mac_read_credential_from_item(item, TRUE, NULL, NULL, &len); + if (ret == ERROR_SUCCESS) + { + *Credential = HeapAlloc(GetProcessHeap(), 0, len); + if (*Credential) + { + len = sizeof(**Credential); + ret = mac_read_credential_from_item(item, TRUE, *Credential, + (char *)(*Credential + 1), &len); + } + else + ret = ERROR_OUTOFMEMORY; + CFRelease(item); + CFRelease(search); + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; + } + CFRelease(item); + } + CFRelease(search); + } + } +#endif + + ret = open_cred_mgr_key(&hkeyMgr, FALSE); + if (ret != ERROR_SUCCESS) + { + WARN("couldn't open/create manager key, error %d\n", ret); + SetLastError(ERROR_NO_SUCH_LOGON_SESSION); + return FALSE; + } + + ret = get_cred_mgr_encryption_key(hkeyMgr, key_data); + if (ret != ERROR_SUCCESS) + { + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + + key_name = get_key_name_for_target(TargetName, Type); + ret = RegOpenKeyExW(hkeyMgr, key_name, 0, KEY_QUERY_VALUE, &hkeyCred); + HeapFree(GetProcessHeap(), 0, key_name); + if (ret != ERROR_SUCCESS) + { + TRACE("credentials for target name %s not found\n", debugstr_w(TargetName)); + SetLastError(ERROR_NOT_FOUND); + return FALSE; + } + + len = sizeof(**Credential); + ret = registry_read_credential(hkeyCred, NULL, key_data, NULL, &len); + if (ret == ERROR_SUCCESS) + { + *Credential = HeapAlloc(GetProcessHeap(), 0, len); + if (*Credential) + { + len = sizeof(**Credential); + ret = registry_read_credential(hkeyCred, *Credential, key_data, + (char *)(*Credential + 1), &len); + } + else + ret = ERROR_OUTOFMEMORY; + } + + RegCloseKey(hkeyCred); + RegCloseKey(hkeyMgr); + + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; +} + +/****************************************************************************** + * CredWriteA [ADVAPI32.@] + */ +BOOL WINAPI CredWriteA(PCREDENTIALA Credential, DWORD Flags) +{ + BOOL ret; + DWORD len; + PCREDENTIALW CredentialW; + + TRACE("(%p, 0x%x)\n", Credential, Flags); + + if (!Credential || !Credential->TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + len = 0; + convert_PCREDENTIALA_to_PCREDENTIALW(Credential, NULL, &len); + CredentialW = HeapAlloc(GetProcessHeap(), 0, len); + if (!CredentialW) + { + SetLastError(ERROR_OUTOFMEMORY); + return FALSE; + } + len = 0; + convert_PCREDENTIALA_to_PCREDENTIALW(Credential, CredentialW, &len); + + ret = CredWriteW(CredentialW, Flags); + + HeapFree(GetProcessHeap(), 0, CredentialW); + + return ret; +} + +/****************************************************************************** + * CredWriteW [ADVAPI32.@] + */ +BOOL WINAPI CredWriteW(PCREDENTIALW Credential, DWORD Flags) +{ + HKEY hkeyMgr; + HKEY hkeyCred; + DWORD ret; + LPWSTR key_name; + BYTE key_data[KEY_SIZE]; + + TRACE("(%p, 0x%x)\n", Credential, Flags); + + if (!Credential || !Credential->TargetName) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + if (Flags & ~CRED_PRESERVE_CREDENTIAL_BLOB) + { + FIXME("unhandled flags 0x%x\n", Flags); + SetLastError(ERROR_INVALID_FLAGS); + return FALSE; + } + + if (Credential->Type != CRED_TYPE_GENERIC && Credential->Type != CRED_TYPE_DOMAIN_PASSWORD) + { + FIXME("unhandled type %d\n", Credential->Type); + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + TRACE("Credential->TargetName = %s\n", debugstr_w(Credential->TargetName)); + TRACE("Credential->UserName = %s\n", debugstr_w(Credential->UserName)); + + if (Credential->Type == CRED_TYPE_DOMAIN_PASSWORD) + { + if (!Credential->UserName || + (!strchrW(Credential->UserName, '\\') && !strchrW(Credential->UserName, '@'))) + { + ERR("bad username %s\n", debugstr_w(Credential->UserName)); + SetLastError(ERROR_BAD_USERNAME); + return FALSE; + } + } + +#ifdef __APPLE__ + if (!Credential->AttributeCount && + Credential->Type == CRED_TYPE_DOMAIN_PASSWORD && + (Credential->Persist == CRED_PERSIST_LOCAL_MACHINE || Credential->Persist == CRED_PERSIST_ENTERPRISE)) + { + ret = mac_write_credential(Credential, Flags & CRED_PRESERVE_CREDENTIAL_BLOB); + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; + } +#endif + + ret = open_cred_mgr_key(&hkeyMgr, FALSE); + if (ret != ERROR_SUCCESS) + { + WARN("couldn't open/create manager key, error %d\n", ret); + SetLastError(ERROR_NO_SUCH_LOGON_SESSION); + return FALSE; + } + + ret = get_cred_mgr_encryption_key(hkeyMgr, key_data); + if (ret != ERROR_SUCCESS) + { + RegCloseKey(hkeyMgr); + SetLastError(ret); + return FALSE; + } + + key_name = get_key_name_for_target(Credential->TargetName, Credential->Type); + ret = RegCreateKeyExW(hkeyMgr, key_name, 0, NULL, + Credential->Persist == CRED_PERSIST_SESSION ? REG_OPTION_VOLATILE : REG_OPTION_NON_VOLATILE, + KEY_READ|KEY_WRITE, NULL, &hkeyCred, NULL); + HeapFree(GetProcessHeap(), 0, key_name); + if (ret != ERROR_SUCCESS) + { + TRACE("credentials for target name %s not found\n", + debugstr_w(Credential->TargetName)); + SetLastError(ERROR_NOT_FOUND); + return FALSE; + } + + ret = registry_write_credential(hkeyCred, Credential, key_data, + Flags & CRED_PRESERVE_CREDENTIAL_BLOB); + + RegCloseKey(hkeyCred); + RegCloseKey(hkeyMgr); + + if (ret != ERROR_SUCCESS) + { + SetLastError(ret); + return FALSE; + } + return TRUE; +} + +/****************************************************************************** + * CredGetSessionTypes [ADVAPI32.@] + */ +BOOL WINAPI CredGetSessionTypes(DWORD persistCount, LPDWORD persists) +{ + TRACE("(%u, %p)\n", persistCount, persists); + + memset(persists, CRED_PERSIST_NONE, persistCount*sizeof(*persists)); + if (CRED_TYPE_GENERIC < persistCount) + { + persists[CRED_TYPE_GENERIC] = CRED_PERSIST_ENTERPRISE; + + if (CRED_TYPE_DOMAIN_PASSWORD < persistCount) + { + persists[CRED_TYPE_DOMAIN_PASSWORD] = CRED_PERSIST_ENTERPRISE; + } + } + return TRUE; +} From c20321a3f672cd7a166ab7dbc79e86794508e23e Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Tue, 5 Aug 2008 16:30:03 +0000 Subject: [PATCH 157/304] Fix Wine-ish code, which doesn't work in ReactOS and only works in Wine by accident svn path=/trunk/; revision=35128 --- reactos/dll/win32/advapi32/sec/cred.c | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/reactos/dll/win32/advapi32/sec/cred.c b/reactos/dll/win32/advapi32/sec/cred.c index 9041e6507de..13d29d56358 100644 --- a/reactos/dll/win32/advapi32/sec/cred.c +++ b/reactos/dll/win32/advapi32/sec/cred.c @@ -26,13 +26,6 @@ #include "winreg.h" #include "wincred.h" #include "winternl.h" - -#ifdef __APPLE__ -# include -# include -# include -#endif - #include "../crypt/crypt.h" #include "wine/unicode.h" @@ -946,7 +939,10 @@ static void convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW, if (CredentialW->TargetName) { CredentialA->TargetName = buffer; - string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetName, -1, CredentialA->TargetName, -1, NULL, NULL); + + /* Buffer is guaranteed to be large enough */ + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetName, -1, CredentialA->TargetName, 0x7FFFFFFF, NULL, NULL); + buffer += string_len; *len += string_len; } @@ -955,7 +951,7 @@ static void convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW, if (CredentialW->Comment) { CredentialA->Comment = buffer; - string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->Comment, -1, CredentialA->Comment, -1, NULL, NULL); + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->Comment, -1, CredentialA->Comment, 0x7FFFFFFF, NULL, NULL); buffer += string_len; *len += string_len; } @@ -979,7 +975,7 @@ static void convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW, if (CredentialW->TargetAlias) { CredentialA->TargetAlias = buffer; - string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetAlias, -1, CredentialA->TargetAlias, -1, NULL, NULL); + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->TargetAlias, -1, CredentialA->TargetAlias, 0x7FFFFFFF, NULL, NULL); buffer += string_len; *len += string_len; } @@ -988,7 +984,7 @@ static void convert_PCREDENTIALW_to_PCREDENTIALA(const CREDENTIALW *CredentialW, if (CredentialW->UserName) { CredentialA->UserName = buffer; - string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->UserName, -1, CredentialA->UserName, -1, NULL, NULL); + string_len = WideCharToMultiByte(CP_ACP, 0, CredentialW->UserName, -1, CredentialA->UserName, 0x7FFFFFFF, NULL, NULL); buffer += string_len; *len += string_len; } @@ -1018,7 +1014,7 @@ static void convert_PCREDENTIALA_to_PCREDENTIALW(const CREDENTIALA *CredentialA, if (CredentialA->TargetName) { CredentialW->TargetName = (LPWSTR)buffer; - string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetName, -1, CredentialW->TargetName, -1); + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetName, -1, CredentialW->TargetName, 0x7FFFFFFF); buffer += sizeof(WCHAR) * string_len; *len += sizeof(WCHAR) * string_len; } @@ -1027,7 +1023,7 @@ static void convert_PCREDENTIALA_to_PCREDENTIALW(const CREDENTIALA *CredentialA, if (CredentialA->Comment) { CredentialW->Comment = (LPWSTR)buffer; - string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->Comment, -1, CredentialW->Comment, -1); + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->Comment, -1, CredentialW->Comment, 0x7FFFFFFF); buffer += sizeof(WCHAR) * string_len; *len += sizeof(WCHAR) * string_len; } @@ -1051,7 +1047,7 @@ static void convert_PCREDENTIALA_to_PCREDENTIALW(const CREDENTIALA *CredentialA, if (CredentialA->TargetAlias) { CredentialW->TargetAlias = (LPWSTR)buffer; - string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetAlias, -1, CredentialW->TargetAlias, -1); + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->TargetAlias, -1, CredentialW->TargetAlias, 0x7FFFFFFF); buffer += sizeof(WCHAR) * string_len; *len += sizeof(WCHAR) * string_len; } @@ -1060,7 +1056,7 @@ static void convert_PCREDENTIALA_to_PCREDENTIALW(const CREDENTIALA *CredentialA, if (CredentialA->UserName) { CredentialW->UserName = (LPWSTR)buffer; - string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->UserName, -1, CredentialW->UserName, -1); + string_len = MultiByteToWideChar(CP_ACP, 0, CredentialA->UserName, -1, CredentialW->UserName, 0x7FFFFFFF); buffer += sizeof(WCHAR) * string_len; *len += sizeof(WCHAR) * string_len; } From 305fa7aff92b30b3d048e5e78f10769a142074a8 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Tue, 5 Aug 2008 16:40:24 +0000 Subject: [PATCH 158/304] Short version of average16 added. svn path=/trunk/; revision=35130 --- reactos/subsystems/win32/win32k/dib/dib16bpp.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/dib/dib16bpp.c b/reactos/subsystems/win32/win32k/dib/dib16bpp.c index c0a19c54182..7d4417cd0d1 100644 --- a/reactos/subsystems/win32/win32k/dib/dib16bpp.c +++ b/reactos/subsystems/win32/win32k/dib/dib16bpp.c @@ -499,7 +499,8 @@ __inline PIXEL average16(PIXEL a, PIXEL b) return res; */ - return a; // FIXME: Depend on SetStretchMode + // This one is the short form of the correct one ;-) + return (((a ^ b) & 0xf7deU) >> 1) + (a & b); } //NOTE: If you change something here, please do the same in other dibXXbpp.c files! From b86b32b0c47a8342769716a5925697f38a3ee0d0 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 5 Aug 2008 18:00:46 +0000 Subject: [PATCH 159/304] - Get rid of sprintf usage in default_dbg_vprintf. - This make tracing macro usage safe in crt sprintf implementation and simplify overall codepath (no need for intermediate buffer). - Solution inspired by hackbunny's suggestion, fixes bug 3632. See issue #3632 for more details. svn path=/trunk/; revision=35131 --- reactos/lib/3rdparty/libwine/debug.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/reactos/lib/3rdparty/libwine/debug.c b/reactos/lib/3rdparty/libwine/debug.c index 4dff5eae48c..64a9bc94226 100644 --- a/reactos/lib/3rdparty/libwine/debug.c +++ b/reactos/lib/3rdparty/libwine/debug.c @@ -42,6 +42,16 @@ DbgPrint( IN ... ); +ULONG +__cdecl +vDbgPrintExWithPrefix( + IN LPCSTR Prefix, + IN ULONG ComponentId, + IN ULONG Level, + IN LPCSTR Format, + IN va_list ap); + + static const char * const debug_classes[] = { "fixme", "err", "warn", "trace" }; #define MAX_DEBUG_OPTIONS 256 @@ -384,10 +394,7 @@ static const char *default_dbgstr_wn( const WCHAR *str, int n ) /* default implementation of wine_dbg_vprintf */ static int default_dbg_vprintf( const char *format, va_list args ) { - char buffer[512]; - vsnprintf( buffer, sizeof(buffer), format, args ); - buffer[sizeof(buffer) - 1] = '\0'; - return DbgPrint( "%s", buffer ); + return vDbgPrintExWithPrefix(NULL, -1, 0, format, args); } From 81538de14ade6855c485ef647cf86a2ac7ad6c2c Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 5 Aug 2008 19:07:27 +0000 Subject: [PATCH 160/304] - Revert 35131 till a more complete fix is available. svn path=/trunk/; revision=35132 --- reactos/lib/3rdparty/libwine/debug.c | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/reactos/lib/3rdparty/libwine/debug.c b/reactos/lib/3rdparty/libwine/debug.c index 64a9bc94226..4dff5eae48c 100644 --- a/reactos/lib/3rdparty/libwine/debug.c +++ b/reactos/lib/3rdparty/libwine/debug.c @@ -42,16 +42,6 @@ DbgPrint( IN ... ); -ULONG -__cdecl -vDbgPrintExWithPrefix( - IN LPCSTR Prefix, - IN ULONG ComponentId, - IN ULONG Level, - IN LPCSTR Format, - IN va_list ap); - - static const char * const debug_classes[] = { "fixme", "err", "warn", "trace" }; #define MAX_DEBUG_OPTIONS 256 @@ -394,7 +384,10 @@ static const char *default_dbgstr_wn( const WCHAR *str, int n ) /* default implementation of wine_dbg_vprintf */ static int default_dbg_vprintf( const char *format, va_list args ) { - return vDbgPrintExWithPrefix(NULL, -1, 0, format, args); + char buffer[512]; + vsnprintf( buffer, sizeof(buffer), format, args ); + buffer[sizeof(buffer) - 1] = '\0'; + return DbgPrint( "%s", buffer ); } From 79590b9458a753732e05c66b7cc406e604f7d7db Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Tue, 5 Aug 2008 21:08:43 +0000 Subject: [PATCH 161/304] - Remove memcmp NTOS export added in rev 34611 as real NT does not export it. svn path=/trunk/; revision=35134 --- reactos/ntoskrnl/ntoskrnl_i386.def | 1 - 1 file changed, 1 deletion(-) diff --git a/reactos/ntoskrnl/ntoskrnl_i386.def b/reactos/ntoskrnl/ntoskrnl_i386.def index 730b4740f21..919e539e0ca 100644 --- a/reactos/ntoskrnl/ntoskrnl_i386.def +++ b/reactos/ntoskrnl/ntoskrnl_i386.def @@ -1549,7 +1549,6 @@ mbstowcs mbtowc memchr memcpy -memcmp memmove memset qsort From 762c1e58de2a4080e4be6d444bd731d503c01055 Mon Sep 17 00:00:00 2001 From: James Tabor Date: Wed, 6 Aug 2008 02:05:17 +0000 Subject: [PATCH 162/304] Win32k Timers: - This is relative to bugs 3634 and 2393. Please leave additional information in bug report 2393. - Timer code should not be associated with message queues, since theses types of queues are subject to being destroyed. This creates a problem of loosing timers. - This is a first part of a rewrite of the timers. Moving the timers from the message queue to a linked list very similar to our DCE code. This will simplify timer handling too. svn path=/trunk/; revision=35138 --- .../subsystems/win32/win32k/include/timer.h | 12 ++++++ reactos/subsystems/win32/win32k/ntuser/hook.c | 2 +- .../subsystems/win32/win32k/ntuser/timer.c | 43 +++++++++++++++---- 3 files changed, 48 insertions(+), 9 deletions(-) diff --git a/reactos/subsystems/win32/win32k/include/timer.h b/reactos/subsystems/win32/win32k/include/timer.h index ea99591dfa1..d44e38e1e3a 100644 --- a/reactos/subsystems/win32/win32k/include/timer.h +++ b/reactos/subsystems/win32/win32k/include/timer.h @@ -1,6 +1,18 @@ #ifndef _WIN32K_TIMER_H #define _WIN32K_TIMER_H +typedef struct _TIMER +{ + LIST_ENTRY ptmrList; + PW32THREADINFO pti; + PWINDOW_OBJECT pWnd; // hWnd + UINT_PTR nID; // Specifies a nonzero timer identifier. + INT cmsCountdown; // uElapse + INT cmsRate; // uElapse + FLONG flags; + TIMERPROC pfn; // lpTimerFunc +} TIMER, *PTIMER; + NTSTATUS FASTCALL InitTimerImpl(VOID); BOOL FASTCALL IntKillTimer(HWND Wnd, UINT_PTR IDEvent, BOOL SystemTimer); UINT_PTR FASTCALL IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL SystemTimer); diff --git a/reactos/subsystems/win32/win32k/ntuser/hook.c b/reactos/subsystems/win32/win32k/ntuser/hook.c index acddc1c3779..1f8846a5de0 100644 --- a/reactos/subsystems/win32/win32k/ntuser/hook.c +++ b/reactos/subsystems/win32/win32k/ntuser/hook.c @@ -1131,7 +1131,7 @@ NtUserSetWindowsHookEx( ModuleName.MaximumLength); if (! NT_SUCCESS(Status)) { - ExFreePool(Hook->ModuleName.Buffer); + ExFreePool(Hook->ModuleName.Buffer); UserDereferenceObject(Hook); IntRemoveHook(Hook, WinStaObj, FALSE); if (NULL != Thread) diff --git a/reactos/subsystems/win32/win32k/ntuser/timer.c b/reactos/subsystems/win32/win32k/ntuser/timer.c index c61cd1f7f04..9db2c4ca6a9 100644 --- a/reactos/subsystems/win32/win32k/ntuser/timer.c +++ b/reactos/subsystems/win32/win32k/ntuser/timer.c @@ -16,12 +16,11 @@ * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ -/* $Id$ - * +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * PURPOSE: Window timers messages - * FILE: subsys/win32k/ntuser/timer.c + * FILE: subsystems/win32/win32k/ntuser/timer.c * PROGRAMER: Gunnar * Thomas Weidenmueller (w3seek@users.sourceforge.net) * REVISION HISTORY: 10/04/2003 Implemented System Timers @@ -37,6 +36,8 @@ /* GLOBALS *******************************************************************/ +static PTIMER FirstpTmr = NULL; + /* Windows 2000 has room for 32768 window-less timers */ #define NUM_WINDOW_LESS_TIMERS 1024 @@ -148,20 +149,40 @@ IntSetTimer(HWND Wnd, UINT_PTR IDEvent, UINT Elapse, TIMERPROC TimerFunc, BOOL S BOOL FASTCALL IntKillTimer(HWND Wnd, UINT_PTR IDEvent, BOOL SystemTimer) { + PWINDOW_OBJECT Window = NULL; + DPRINT("IntKillTimer wnd %x id %p systemtimer %s\n", Wnd, IDEvent, SystemTimer ? "TRUE" : "FALSE"); - if (! MsqKillTimer(PsGetCurrentThreadWin32Thread()->MessageQueue, Wnd, - IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER)) + if (Wnd) { - DPRINT1("Unable to locate timer in message queue\n"); - SetLastWin32Error(ERROR_INVALID_PARAMETER); - return FALSE; + Window = UserGetWindowObject(Wnd); + + if (! MsqKillTimer(PsGetCurrentThreadWin32Thread()->MessageQueue, Wnd, + IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER)) + { + // Give it another chance to find the timer. + if (Window && !( MsqKillTimer(Window->MessageQueue, Wnd, + IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER))) + { + DPRINT1("Unable to locate timer in message queue for Window.\n"); + SetLastWin32Error(ERROR_INVALID_PARAMETER); + return FALSE; + } + } } /* window-less timer? */ if ((Wnd == NULL) && ! SystemTimer) { + if (! MsqKillTimer(PsGetCurrentThreadWin32Thread()->MessageQueue, Wnd, + IDEvent, SystemTimer ? WM_SYSTIMER : WM_TIMER)) + { + DPRINT1("Unable to locate timer in message queue for Window-less timer.\n"); + SetLastWin32Error(ERROR_INVALID_PARAMETER); + return FALSE; + } + /* Release the id */ IntLockWindowlessTimerBitmap(); @@ -195,6 +216,12 @@ InitTimerImpl(VOID) /* yes we need this, since ExAllocatePool isn't supposed to zero out allocated memory */ RtlClearAllBits(&WindowLessTimersBitMap); + if (!FirstpTmr) + { + FirstpTmr = ExAllocatePoolWithTag(PagedPool, sizeof(TIMER), TAG_TIMERBMP); + if (FirstpTmr) InitializeListHead(&FirstpTmr->ptmrList); + } + return STATUS_SUCCESS; } From 74c43744f4cefa081b95314fb66c5b24e7ec3db2 Mon Sep 17 00:00:00 2001 From: Steven Edwards Date: Wed, 6 Aug 2008 10:34:36 +0000 Subject: [PATCH 163/304] Match Wine behavior for AllowSetForegroundWindow Only show the debug message once svn path=/trunk/; revision=35139 --- reactos/dll/win32/user32/windows/window.c | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/user32/windows/window.c b/reactos/dll/win32/user32/windows/window.c index 7b97c8a55b8..f598c38f999 100644 --- a/reactos/dll/win32/user32/windows/window.c +++ b/reactos/dll/win32/user32/windows/window.c @@ -46,8 +46,13 @@ User32CallSendAsyncProcForKernel(PVOID Arguments, ULONG ArgumentLength) BOOL STDCALL AllowSetForegroundWindow(DWORD dwProcessId) { - UNIMPLEMENTED; - return(FALSE); + static BOOL show_message = TRUE; + if (show_message) + { + UNIMPLEMENTED; + show_message = FALSE; + } + return TRUE; } From a0ea339453b5986057d0474a85c2a8bd575a4667 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 6 Aug 2008 10:52:33 +0000 Subject: [PATCH 164/304] - Add more intrinsic defines. - SVN maintenance. svn path=/trunk/; revision=35140 --- reactos/ntoskrnl/include/internal/ntoskrnl.h | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/ntoskrnl.h b/reactos/ntoskrnl/include/internal/ntoskrnl.h index 8c2400e1b8a..c78a02ffbe6 100644 --- a/reactos/ntoskrnl/include/internal/ntoskrnl.h +++ b/reactos/ntoskrnl/include/internal/ntoskrnl.h @@ -28,11 +28,15 @@ // We are very lazy on ARM -- we just import intrinsics // Question: Why wasn't this done for x86 too? (see fastintrlck.asm) // -#define InterlockedDecrement _InterlockedDecrement -#define InterlockedIncrement _InterlockedIncrement -#define InterlockedCompareExchange _InterlockedCompareExchange -#define InterlockedExchange _InterlockedExchange -#define InterlockedExchangeAdd _InterlockedExchangeAdd +#define InterlockedDecrement _InterlockedDecrement +#define InterlockedDecrement16 _InterlockedDecrement16 +#define InterlockedIncrement _InterlockedIncrement +#define InterlockedIncrement16 _InterlockedIncrement16 +#define InterlockedCompareExchange _InterlockedCompareExchange +#define InterlockedCompareExchange16 _InterlockedCompareExchange16 +#define InterlockedCompareExchange64 _InterlockedCompareExchange64 +#define InterlockedExchange _InterlockedExchange +#define InterlockedExchangeAdd _InterlockedExchangeAdd #include "ke.h" #include "i386/mm.h" From 90abd2fa2c99e85ee44e4f67e18573757f3b78f3 Mon Sep 17 00:00:00 2001 From: Christoph von Wittich Date: Wed, 6 Aug 2008 11:00:39 +0000 Subject: [PATCH 165/304] null termninate strings in GetCharWidthsA, GetCharWidth32A, GetCharABCWidthsFloatA, GetCharABCWidthsA, GetCharABCWidthsFloatA better error checking svn path=/trunk/; revision=35141 --- reactos/dll/win32/gdi32/objects/font.c | 121 ++++++++++++++++--------- 1 file changed, 80 insertions(+), 41 deletions(-) diff --git a/reactos/dll/win32/gdi32/objects/font.c b/reactos/dll/win32/gdi32/objects/font.c index eaeceb97999..becc851ecab 100644 --- a/reactos/dll/win32/gdi32/objects/font.c +++ b/reactos/dll/win32/gdi32/objects/font.c @@ -512,7 +512,7 @@ GetCharABCWidthsFloatW(HDC hdc, UINT LastChar, LPABCFLOAT abcF) { -DPRINT("GetCharABCWidthsFloatW\n"); + DPRINT("GetCharABCWidthsFloatW\n"); if ((!abcF) || (FirstChar > LastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -537,7 +537,7 @@ GetCharWidthFloatW(HDC hdc, UINT iLastChar, PFLOAT pxBuffer) { -DPRINT("GetCharWidthsFloatW\n"); + DPRINT("GetCharWidthsFloatW\n"); if ((!pxBuffer) || (iFirstChar > iLastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -562,7 +562,7 @@ GetCharWidthW(HDC hdc, UINT iLastChar, LPINT lpBuffer) { -DPRINT("GetCharWidthsW\n"); + DPRINT("GetCharWidthsW\n"); if ((!lpBuffer) || (iFirstChar > iLastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -587,7 +587,7 @@ GetCharWidth32W(HDC hdc, UINT iLastChar, LPINT lpBuffer) { -DPRINT("GetCharWidths32W\n"); + DPRINT("GetCharWidths32W\n"); if ((!lpBuffer) || (iFirstChar > iLastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -613,7 +613,7 @@ GetCharABCWidthsW(HDC hdc, UINT LastChar, LPABC lpabc) { -DPRINT("GetCharABCWidthsW\n"); + DPRINT("GetCharABCWidthsW\n"); if ((!lpabc) || (FirstChar > LastChar)) { SetLastError(ERROR_INVALID_PARAMETER); @@ -639,26 +639,35 @@ GetCharWidthA( LPINT lpBuffer ) { -DPRINT("GetCharWidthsA\n"); INT i, wlen, count = (INT)(iLastChar - iFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharWidthsA\n"); if(count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); - for(i = 0; i < count; i++) - str[i] = (BYTE)(iFirstChar + i); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; - wstr = FONT_mbtowc(NULL, str, count, &wlen, NULL); + for(i = 0; i < count; i++) + str[i] = (BYTE)(iFirstChar + i); + str[i] = '\0'; + + wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL); + if (!wstr) + { + HeapFree(GetProcessHeap(), 0, str); + return FALSE; + } ret = NtGdiGetCharWidthW( hdc, wstr[0], - (ULONG) count, - (PWCHAR) wstr, - GCW_NOFLOAT, - (PVOID) lpBuffer); + (ULONG) count, + (PWCHAR) wstr, + GCW_NOFLOAT, + (PVOID) lpBuffer); HeapFree(GetProcessHeap(), 0, str); HeapFree(GetProcessHeap(), 0, wstr); @@ -678,26 +687,34 @@ GetCharWidth32A( LPINT lpBuffer ) { -DPRINT("GetCharWidths32A\n"); INT i, wlen, count = (INT)(iLastChar - iFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharWidths32A\n"); if(count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; for(i = 0; i < count; i++) - str[i] = (BYTE)(iFirstChar + i); + str[i] = (BYTE)(iFirstChar + i); + str[i] = '\0'; - wstr = FONT_mbtowc(NULL, str, count, &wlen, NULL); + wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL); + if (!wstr) + { + HeapFree(GetProcessHeap(), 0, str); + return FALSE; + } ret = NtGdiGetCharWidthW( hdc, wstr[0], - (ULONG) count, - (PWCHAR) wstr, - GCW_NOFLOAT|GCW_WIN32, - (PVOID) lpBuffer); + (ULONG) count, + (PWCHAR) wstr, + GCW_NOFLOAT|GCW_WIN32, + (PVOID) lpBuffer); HeapFree(GetProcessHeap(), 0, str); HeapFree(GetProcessHeap(), 0, wstr); @@ -717,20 +734,27 @@ GetCharWidthFloatA( PFLOAT pxBuffer ) { -DPRINT("GetCharWidthsFloatA\n"); INT i, wlen, count = (INT)(iLastChar - iFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharWidthsFloatA\n"); if(count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; for(i = 0; i < count; i++) - str[i] = (BYTE)(iFirstChar + i); - - wstr = FONT_mbtowc(NULL, str, count, &wlen, NULL); + str[i] = (BYTE)(iFirstChar + i); + str[i] = '\0'; + wstr = FONT_mbtowc(NULL, str, count+1, &wlen, NULL); + if (!wstr) + { + HeapFree(GetProcessHeap(), 0, str); + return FALSE; + } ret = NtGdiGetCharWidthW( hdc, wstr[0], (ULONG) count, (PWCHAR) wstr, 0, (PVOID) pxBuffer); HeapFree(GetProcessHeap(), 0, str); @@ -751,26 +775,34 @@ GetCharABCWidthsA( LPABC lpabc ) { -DPRINT("GetCharABCWidthsA\n"); INT i, wlen, count = (INT)(uLastChar - uFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharABCWidthsA\n"); if(count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; for(i = 0; i < count; i++) - str[i] = (BYTE)(uFirstChar + i); + str[i] = (BYTE)(uFirstChar + i); + str[i] = '\0'; - wstr = FONT_mbtowc(hdc, str, count, &wlen, NULL); + wstr = FONT_mbtowc(hdc, str, count+1, &wlen, NULL); + if (!wstr) + { + HeapFree(GetProcessHeap(), 0, str); + return FALSE; + } ret = NtGdiGetCharABCWidthsW( hdc, wstr[0], - (ULONG)count, - (PWCHAR)wstr, - GCABCW_NOFLOAT, - (PVOID)lpabc); + (ULONG)count, + (PWCHAR)wstr, + GCABCW_NOFLOAT, + (PVOID)lpabc); HeapFree(GetProcessHeap(), 0, str); HeapFree(GetProcessHeap(), 0, wstr); @@ -790,21 +822,28 @@ GetCharABCWidthsFloatA( LPABCFLOAT lpABCF ) { -DPRINT("GetCharABCWidthsFloatA\n"); INT i, wlen, count = (INT)(iLastChar - iFirstChar + 1); LPSTR str; LPWSTR wstr; BOOL ret = TRUE; + DPRINT("GetCharABCWidthsFloatA\n"); if (count <= 0) return FALSE; - str = HeapAlloc(GetProcessHeap(), 0, count); + str = HeapAlloc(GetProcessHeap(), 0, count+1); + if (!str) + return FALSE; for(i = 0; i < count; i++) str[i] = (BYTE)(iFirstChar + i); + str[i] = '\0'; - wstr = FONT_mbtowc( hdc, str, count, &wlen, NULL ); - + wstr = FONT_mbtowc( hdc, str, count+1, &wlen, NULL ); + if (!wstr) + { + HeapFree( GetProcessHeap(), 0, str ); + return FALSE; + } ret = NtGdiGetCharABCWidthsW( hdc,wstr[0],(ULONG)count, (PWCHAR)wstr, 0, (PVOID)lpABCF); HeapFree( GetProcessHeap(), 0, str ); @@ -824,7 +863,7 @@ GetCharABCWidthsI(HDC hdc, LPWORD pgi, LPABC lpabc) { -DPRINT("GetCharABCWidthsI\n"); + DPRINT("GetCharABCWidthsI\n"); return NtGdiGetCharABCWidthsW( hdc, giFirst, (ULONG) cgi, @@ -845,7 +884,7 @@ GetCharWidthI(HDC hdc, LPINT lpBuffer ) { -DPRINT("GetCharWidthsI\n"); + DPRINT("GetCharWidthsI\n"); if (!lpBuffer || (!pgi && (giFirst == MAXUSHORT))) // Cannot be at max. { SetLastError(ERROR_INVALID_PARAMETER); From 2a31d8815df0f7793a2f6408ae539db69abc7088 Mon Sep 17 00:00:00 2001 From: Steven Edwards Date: Wed, 6 Aug 2008 11:04:54 +0000 Subject: [PATCH 166/304] SetLastError to ERROR_CALL_NOT_IMPLEMENTED Wine does it, its already a stub, it can only help... svn path=/trunk/; revision=35142 --- reactos/dll/win32/kernel32/misc/stubs.c | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/dll/win32/kernel32/misc/stubs.c b/reactos/dll/win32/kernel32/misc/stubs.c index d197b4acdde..754f2fa4125 100644 --- a/reactos/dll/win32/kernel32/misc/stubs.c +++ b/reactos/dll/win32/kernel32/misc/stubs.c @@ -963,6 +963,7 @@ GetVolumePathNameW( ) { STUB; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); return 0; } From 77993cf0e3e845e0d22d90244916685333a81405 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Wed, 6 Aug 2008 11:56:49 +0000 Subject: [PATCH 167/304] - Sync RegGetValueA/W with wine head svn path=/trunk/; revision=35143 --- reactos/dll/win32/advapi32/reg/reg.c | 40 +++++++++++++++++----------- 1 file changed, 25 insertions(+), 15 deletions(-) diff --git a/reactos/dll/win32/advapi32/reg/reg.c b/reactos/dll/win32/advapi32/reg/reg.c index de3c2ac4d55..c1feb0f62d1 100644 --- a/reactos/dll/win32/advapi32/reg/reg.c +++ b/reactos/dll/win32/advapi32/reg/reg.c @@ -1831,7 +1831,11 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, hKey, debugstr_w(pszSubKey), debugstr_w(pszValue), dwFlags, pdwType, pvData, pcbData, cbData); - if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND)) + if (pvData && !pcbData) + return ERROR_INVALID_PARAMETER; + + if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) && + ((dwFlags & RRF_RT_ANY) != RRF_RT_ANY)) return ERROR_INVALID_PARAMETER; if (pszSubKey && pszSubKey[0]) @@ -1849,7 +1853,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, (dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND))) { do { - if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf); + HeapFree(GetProcessHeap(), 0, pvBuf); pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData); if (!pvBuf) @@ -1858,7 +1862,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, break; } - if (ret == ERROR_MORE_DATA) + if (ret == ERROR_MORE_DATA || !pvData) ret = RegQueryValueExW(hKey, pszValue, NULL, &dwType, pvBuf, &cbData); else @@ -1876,19 +1880,20 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, if (ret == ERROR_SUCCESS) { + /* Recheck dwType in case it changed since the first call */ if (dwType == REG_EXPAND_SZ) { cbData = ExpandEnvironmentStringsW(pvBuf, pvData, - pcbData ? *pcbData : 0); + pcbData ? *pcbData : 0) * sizeof(WCHAR); dwType = REG_SZ; - if(pcbData && cbData > *pcbData) + if(pvData && pcbData && cbData > *pcbData) ret = ERROR_MORE_DATA; } - else if (pcbData) + else if (pvData) CopyMemory(pvData, pvBuf, *pcbData); } - if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf); + HeapFree(GetProcessHeap(), 0, pvBuf); } if (pszSubKey && pszSubKey[0]) @@ -1896,7 +1901,7 @@ RegGetValueW( HKEY hKey, LPCWSTR pszSubKey, LPCWSTR pszValue, RegpApplyRestrictions(dwFlags, dwType, cbData, &ret); - if (pcbData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) + if (pvData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) ZeroMemory(pvData, *pcbData); if (pdwType) *pdwType = dwType; @@ -1924,7 +1929,11 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, hKey, pszSubKey, pszValue, dwFlags, pdwType, pvData, pcbData, cbData); - if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND)) + if (pvData && !pcbData) + return ERROR_INVALID_PARAMETER; + + if ((dwFlags & RRF_RT_REG_EXPAND_SZ) && !(dwFlags & RRF_NOEXPAND) && + ((dwFlags & RRF_RT_ANY) != RRF_RT_ANY)) return ERROR_INVALID_PARAMETER; if (pszSubKey && pszSubKey[0]) @@ -1942,7 +1951,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, (dwType == REG_EXPAND_SZ && !(dwFlags & RRF_NOEXPAND))) { do { - if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf); + HeapFree(GetProcessHeap(), 0, pvBuf); pvBuf = HeapAlloc(GetProcessHeap(), 0, cbData); if (!pvBuf) @@ -1951,7 +1960,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, break; } - if (ret == ERROR_MORE_DATA) + if (ret == ERROR_MORE_DATA || !pvData) ret = RegQueryValueExA(hKey, pszValue, NULL, &dwType, pvBuf, &cbData); else @@ -1969,19 +1978,20 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, if (ret == ERROR_SUCCESS) { + /* Recheck dwType in case it changed since the first call */ if (dwType == REG_EXPAND_SZ) { cbData = ExpandEnvironmentStringsA(pvBuf, pvData, pcbData ? *pcbData : 0); dwType = REG_SZ; - if(pcbData && cbData > *pcbData) + if(pvData && pcbData && cbData > *pcbData) ret = ERROR_MORE_DATA; } - else if (pcbData) + else if (pvData) CopyMemory(pvData, pvBuf, *pcbData); } - if (pvBuf) HeapFree(GetProcessHeap(), 0, pvBuf); + HeapFree(GetProcessHeap(), 0, pvBuf); } if (pszSubKey && pszSubKey[0]) @@ -1989,7 +1999,7 @@ RegGetValueA( HKEY hKey, LPCSTR pszSubKey, LPCSTR pszValue, RegpApplyRestrictions(dwFlags, dwType, cbData, &ret); - if (pcbData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) + if (pvData && ret != ERROR_SUCCESS && (dwFlags & RRF_ZEROONFAILURE)) ZeroMemory(pvData, *pcbData); if (pdwType) *pdwType = dwType; From 6735beea51634b694b1d85df70e2003efc8583f4 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 6 Aug 2008 12:03:34 +0000 Subject: [PATCH 168/304] - Rename alloc/free to vfalloc/vffree to not conflict with other apps vfatlib links to. svn path=/trunk/; revision=35144 --- reactos/lib/fslib/vfatlib/check/check.c | 4 +-- reactos/lib/fslib/vfatlib/check/common.c | 12 ++++----- reactos/lib/fslib/vfatlib/check/common.h | 4 +-- reactos/lib/fslib/vfatlib/check/fat.c | 8 +++--- reactos/lib/fslib/vfatlib/check/file.c | 6 ++--- reactos/lib/fslib/vfatlib/check/io.c | 32 ++++++++++++------------ reactos/lib/fslib/vfatlib/check/lfn.c | 28 ++++++++++----------- 7 files changed, 47 insertions(+), 47 deletions(-) diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c index 09a223be1a0..7b3ddcd61ed 100644 --- a/reactos/lib/fslib/vfatlib/check/check.c +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -130,7 +130,7 @@ loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern) DIR_ENT *root; int next_free = 0, scan; - root = alloc(fs->root_entries*sizeof(DIR_ENT)); + root = vfalloc(fs->root_entries*sizeof(DIR_ENT)); fs_read(fs->root_start,fs->root_entries*sizeof(DIR_ENT),root); while (next_free < (int)fs->root_entries) @@ -151,7 +151,7 @@ loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern) if (scan == (int)fs->root_entries) break; if (++curr_num >= 10000) die("Unable to create unique name"); } - free(root); + vffree(root); } ++n_files; return offset; diff --git a/reactos/lib/fslib/vfatlib/check/common.c b/reactos/lib/fslib/vfatlib/check/common.c index 527041a6256..d8be79e3fcd 100644 --- a/reactos/lib/fslib/vfatlib/check/common.c +++ b/reactos/lib/fslib/vfatlib/check/common.c @@ -44,7 +44,7 @@ void pdie(char *msg,...) } -void *alloc(int size) +void *vfalloc(int size) { void *ptr; @@ -61,7 +61,7 @@ void *alloc(int size) return ptr; } -void free(void *ptr) +void vffree(void *ptr) { RtlFreeHeap(RtlGetProcessHeap(), 0, ptr); } @@ -70,10 +70,10 @@ void *qalloc(void **root,int size) { LINK *link; - link = alloc(sizeof(LINK)); + link = vfalloc(sizeof(LINK)); link->next = *root; *root = link; - return link->data = alloc(size); + return link->data = vfalloc(size); } @@ -84,8 +84,8 @@ void qfree(void **root) while (*root) { this = (LINK *) *root; *root = this->next; - free(this->data); - free(this); + vffree(this->data); + vffree(this); } } diff --git a/reactos/lib/fslib/vfatlib/check/common.h b/reactos/lib/fslib/vfatlib/check/common.h index db29ca42ee6..0b001e6da93 100644 --- a/reactos/lib/fslib/vfatlib/check/common.h +++ b/reactos/lib/fslib/vfatlib/check/common.h @@ -17,8 +17,8 @@ void pdie(char *msg,...); /* Like die, but appends an error message according to the state of errno. */ -void *alloc(int size); -void free(void *ptr); +void *vfalloc(int size); +void vffree(void *ptr); /* mallocs SIZE bytes and returns a pointer to the data. Terminates the program if malloc fails. */ diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/reactos/lib/fslib/vfatlib/check/fat.c index 86ad5067185..34a8461d867 100644 --- a/reactos/lib/fslib/vfatlib/check/fat.c +++ b/reactos/lib/fslib/vfatlib/check/fat.c @@ -55,11 +55,11 @@ void read_fat(DOS_FS *fs) if (eff_size % 512) { eff_size += 512 - (eff_size % 512); } - first = alloc(eff_size); + first = vfalloc(eff_size); fs_read(fs->fat_start,eff_size,first); use = first; if (fs->nfats > 1) { - second = alloc(eff_size); + second = vfalloc(eff_size); fs_read(fs->fat_start+fs->fat_size,eff_size,second); } else @@ -106,9 +106,9 @@ void read_fat(DOS_FS *fs) i-2,fs->fat[i].value,fs->clusters+2-1); set_fat(fs,i,-1); } - free(first); + vffree(first); if (second) - free(second); + vffree(second); } diff --git a/reactos/lib/fslib/vfatlib/check/file.c b/reactos/lib/fslib/vfatlib/check/file.c index 4cb2efb12fe..d3cf2ecfa00 100644 --- a/reactos/lib/fslib/vfatlib/check/file.c +++ b/reactos/lib/fslib/vfatlib/check/file.c @@ -128,7 +128,7 @@ void file_add(char *path,FD_TYPE type) die("Ambiguous name: \"%s\"",path); else if (here && !strncmp(name,walk->name,MSDOS_NAME)) break; if (!walk) { - walk = alloc(sizeof(FDSC)); + walk = vfalloc(sizeof(FDSC)); strncpy(walk->name,name,MSDOS_NAME); walk->type = here ? fdt_none : type; walk->first = NULL; @@ -203,7 +203,7 @@ void file_modify(FDSC **curr,unsigned char *fixed) die("Internal error: file_modify"); } next = (*this)->next; - free(*this); + vffree(*this); *this = next; } @@ -218,7 +218,7 @@ static void report_unused(FDSC *this) else if (this->type != fdt_none) VfatPrint("Warning: did not %s file %s\n",this->type == fdt_drop ? "drop" : "undelete",file_name((unsigned char*)this->name)); - free(this); + vffree(this); this = next; } } diff --git a/reactos/lib/fslib/vfatlib/check/io.c b/reactos/lib/fslib/vfatlib/check/io.c index eb47b166013..623a843121c 100644 --- a/reactos/lib/fslib/vfatlib/check/io.c +++ b/reactos/lib/fslib/vfatlib/check/io.c @@ -86,14 +86,14 @@ void fs_read(loff_t pos,int size,void *data) const loff_t seekpos_aligned = pos - (pos % 512); // TMN: const size_t seek_delta = (size_t)(pos - seekpos_aligned); // TMN: const size_t readsize = (size_t)(pos - seekpos_aligned) + readsize_aligned; // TMN: - char* tmpBuf = alloc(readsize_aligned); // TMN: + char* tmpBuf = vfalloc(readsize_aligned); // TMN: if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %I64d",pos); if ((got = read(fd,tmpBuf,readsize_aligned)) < 0) pdie("Read %d bytes at %I64d",size,pos); assert(got >= size); got = size; assert(seek_delta + size <= readsize); memcpy(data, tmpBuf+seek_delta, size); - free(tmpBuf); + vffree(tmpBuf); #else // TMN: if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); if ((got = read(fd,data,size)) < 0) pdie("Read %d bytes at %lld",size,pos); @@ -119,15 +119,15 @@ int fs_test(loff_t pos,int size) #if 1 // TMN const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; // TMN: const loff_t seekpos_aligned = pos - (pos % 512); // TMN: - scratch = alloc(readsize_aligned); + scratch = vfalloc(readsize_aligned); if (llseek(fd,seekpos_aligned,0) != seekpos_aligned) pdie("Seek to %lld",pos); okay = read(fd,scratch,readsize_aligned) == (int)readsize_aligned; - free(scratch); + vffree(scratch); #else // TMN: if (llseek(fd,pos,0) != pos) pdie("Seek to %lld",pos); - scratch = alloc(size); + scratch = vfalloc(size); okay = read(fd,scratch,size) == size; - free(scratch); + vffree(scratch); #endif // TMN: return okay; } @@ -148,7 +148,7 @@ void fs_write(loff_t pos,int size,void *data) /* Aloc temp buffer if write is not aligned */ if (use_read) - scratch = alloc(readsize_aligned); + scratch = vfalloc(readsize_aligned); else scratch = data; @@ -167,16 +167,16 @@ void fs_write(loff_t pos,int size,void *data) /* Write it back */ if ((did = write(fd,scratch,readsize_aligned)) == (int)readsize_aligned) { - if (use_read) free(scratch); + if (use_read) vffree(scratch); return; } if (did < 0) pdie("Write %d bytes at %I64d",size,pos); die("Wrote %d bytes instead of %d at %I64d",did,size,pos); } - new = alloc(sizeof(CHANGE)); + new = vfalloc(sizeof(CHANGE)); new->pos = pos; - memcpy(new->data = alloc(new->size = size),data,size); + memcpy(new->data = vfalloc(new->size = size),data,size); new->next = NULL; if (last) last->next = new; else changes = new; @@ -190,9 +190,9 @@ void fs_write(loff_t pos,int size,void *data) if (did < 0) pdie("Write %d bytes at %lld",size,pos); die("Wrote %d bytes instead of %d at %lld",did,size,pos); } - new = alloc(sizeof(CHANGE)); + new = vfalloc(sizeof(CHANGE)); new->pos = pos; - memcpy(new->data = alloc(new->size = size),data,size); + memcpy(new->data = vfalloc(new->size = size),data,size); new->next = NULL; if (last) last->next = new; else changes = new; @@ -215,8 +215,8 @@ static void fs_flush(void) fs_write(this->pos, this->size, this->data); - free(this->data); - free(this); + vffree(this->data); + vffree(this); } /* Restore values */ @@ -233,8 +233,8 @@ int fs_close(int write) if (write) fs_flush(); else while (changes) { next = changes->next; - free(changes->data); - free(changes); + vffree(changes->data); + vffree(changes); changes = next; } if (close(fd) < 0) pdie("closing file system"); diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/reactos/lib/fslib/vfatlib/check/lfn.c index 71d95b2bbf2..01fb697d184 100644 --- a/reactos/lib/fslib/vfatlib/check/lfn.c +++ b/reactos/lib/fslib/vfatlib/check/lfn.c @@ -81,7 +81,7 @@ static char *cnv_unicode( const unsigned char *uni, int maxlen, int use_q ) else len += 4; } - cp = out = use_q ? qalloc( &mem_queue, len+1 ) : alloc( len+1 ); + cp = out = use_q ? qalloc( &mem_queue, len+1 ) : vfalloc( len+1 ); for( up = uni; (up-uni)/2 < maxlen && (up[0] || up[1]); up += 2 ) { if (UNICODE_CONVERTABLE(up[0],up[1])) @@ -132,10 +132,10 @@ static void clear_lfn_slots( int start, int end ) void lfn_reset( void ) { if (lfn_unicode) - free( lfn_unicode ); + vffree( lfn_unicode ); lfn_unicode = NULL; if (lfn_offsets) - free( lfn_offsets ); + vffree( lfn_offsets ); lfn_offsets = NULL; lfn_slot = -1; } @@ -169,8 +169,8 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) char *part2 = CNV_PARTS_SO_FAR(); VfatPrint( " It could be that the LFN start bit is wrong here\n" " if \"%s\" seems to match \"%s\".\n", part1, part2 ); - free( part1 ); - free( part2 ); + vffree( part1 ); + vffree( part2 ); can_clear = 1; } if (interactive) { @@ -197,8 +197,8 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) } lfn_slot = lfn->id & LFN_ID_SLOTMASK; lfn_checksum = lfn->alias_checksum; - lfn_unicode = alloc( (lfn_slot*CHARS_PER_LFN+1)*2 ); - lfn_offsets = alloc( lfn_slot*sizeof(loff_t) ); + lfn_unicode = vfalloc( (lfn_slot*CHARS_PER_LFN+1)*2 ); + lfn_offsets = vfalloc( lfn_slot*sizeof(loff_t) ); lfn_parts = 0; } else if (lfn_slot == -1) { @@ -219,7 +219,7 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) switch( get_key( "123", "?" )) { case '1': if (!lfn_offsets) - lfn_offsets = alloc( sizeof(loff_t) ); + lfn_offsets = vfalloc( sizeof(loff_t) ); lfn_offsets[0] = dir_offset; clear_lfn_slots( 0, 0 ); lfn_reset(); @@ -233,8 +233,8 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) sizeof(lfn->id), &lfn->id ); lfn_slot = lfn->id & LFN_ID_SLOTMASK; lfn_checksum = lfn->alias_checksum; - lfn_unicode = alloc( (lfn_slot*CHARS_PER_LFN+1)*2 ); - lfn_offsets = alloc( lfn_slot*sizeof(loff_t) ); + lfn_unicode = vfalloc( (lfn_slot*CHARS_PER_LFN+1)*2 ); + lfn_offsets = vfalloc( lfn_slot*sizeof(loff_t) ); lfn_parts = 0; break; } @@ -255,8 +255,8 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) char *part2 = CNV_PARTS_SO_FAR(); VfatPrint( " It could be that just the number is wrong\n" " if \"%s\" seems to match \"%s\".\n", part1, part2 ); - free( part1 ); - free( part2 ); + vffree( part1 ); + vffree( part2 ); can_fix = 1; } if (interactive) { @@ -381,7 +381,7 @@ char *lfn_get( DIR_ENT *de ) VfatPrint( "Unfinished long file name \"%s\".\n" " (Start may have been overwritten by %s)\n", long_name, short_name ); - free( long_name ); + vffree( long_name ); if (interactive) { VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" "3: Fix numbering (truncates long name and attaches " @@ -421,7 +421,7 @@ char *lfn_get( DIR_ENT *de ) VfatPrint( "Wrong checksum for long file name \"%s\".\n" " (Short name %s may have changed without updating the long name)\n", long_name, short_name ); - free( long_name ); + vffree( long_name ); if (interactive) { VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" "3: Fix checksum (attaches to short name %s)\n", From 516e0bb3944749336e3af1647597087cdc734682 Mon Sep 17 00:00:00 2001 From: Steven Edwards Date: Wed, 6 Aug 2008 12:48:36 +0000 Subject: [PATCH 169/304] added library section msxml3, mfc40, runtimes: vc6, vc2005, vc2005sp1, vc2008runtime,vb3,vb4,vb5,vb6 Most don't work yet. svn path=/trunk/; revision=35145 --- .../applications/downloader/downloader.xml | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/rosapps/applications/downloader/downloader.xml b/rosapps/applications/downloader/downloader.xml index 2cf6f3dddd2..9354675c734 100644 --- a/rosapps/applications/downloader/downloader.xml +++ b/rosapps/applications/downloader/downloader.xml @@ -116,6 +116,76 @@ http://www.zeckensack.de/glide/archive/GlideWrapper084c.exe + + + msxml3 + 3.0 + MSXML3 is needed for some MSI Installers. + http://download.microsoft.com/download/8/8/8/888f34b7-4f54-4f06-8dac-fa29b19f33dd/msxml3.msi + + + mfc40 + 4.0 + MFC 4 is needed by some applications + http://download.microsoft.com/download/ole/ole2v/3.5/w351/en-us/ole2v.exe + + + + vb3run + 3.0 + Visual Basic 3 Runtime + http://download.microsoft.com/download/vb30/utility/1/w9xnt4/en-us/vb3run.exe + + + + vb4run + 4.0 + Visual Basic 4 Runtime + http://download.microsoft.com/download/vb40ent/sample27/1/w9xnt4/en-us/vb4run.exe + + + + vb5run + 5.0 + Visual Basic 5 Runtime + http://download.microsoft.com/download/vb50pro/utility/1/win98/en-us/msvbvm50.exe + + + + vb6run + 6.0 + Visual Basic 6 Runtime + http://download.microsoft.com/download/vb60pro/install/6/win98me/en-us/vbrun60.exe + + + + vc6run + 6.0 + Visual Studio 6 Runtime + http://download.microsoft.com/download/vc60pro/update/1/w9xnt4/en-us/vc6redistsetup_enu.exe + + + + vc2005run + 7.0 + Visual Studio 2005 Runtime + http://download.microsoft.com/download/d/3/4/d342efa6-3266-4157-a2ec-5174867be706/vcredist_x86.exe + + + + vc2005sp1run + 7.1 + Visual Studio 2005 Runtime SP1 + http://download.microsoft.com/download/e/1/c/e1c773de-73ba-494a-a5ba-f24906ecf088/vcredist_x86.exe + + + + vc2008run + 8.0 + Visual Studio 2008 Runtime + http://download.microsoft.com/download/1/1/1/1116b75a-9ec3-481a-a3c8-1777b5381140/vcredist_x86.exe + + From a75b65456740d96e01fffeec735609b762e2b73d Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 6 Aug 2008 13:07:28 +0000 Subject: [PATCH 170/304] - Replace stupid concept of using a set of global variables for various boolean flags (1 variable per 1 flag) by a concept of one global var having a specified set of flags (FSCHECK_VERBOSE, etc). svn path=/trunk/; revision=35146 --- reactos/lib/fslib/vfatlib/check/boot.c | 20 ++++++------- reactos/lib/fslib/vfatlib/check/check.c | 24 +++++++-------- reactos/lib/fslib/vfatlib/check/dosfsck.h | 15 +++++----- reactos/lib/fslib/vfatlib/check/fat.c | 18 ++++++------ reactos/lib/fslib/vfatlib/check/io.c | 8 ++--- reactos/lib/fslib/vfatlib/check/lfn.c | 36 +++++++++++------------ 6 files changed, 60 insertions(+), 61 deletions(-) diff --git a/reactos/lib/fslib/vfatlib/check/boot.c b/reactos/lib/fslib/vfatlib/check/boot.c index 9a12eef8ddd..4f60c182230 100644 --- a/reactos/lib/fslib/vfatlib/check/boot.c +++ b/reactos/lib/fslib/vfatlib/check/boot.c @@ -119,10 +119,10 @@ static void check_backup_boot(DOS_FS *fs, struct boot_sector *b, int lss) VfatPrint( "And there is no space for creating one!\n" ); return; } - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1) Create one\n2) Do without a backup\n" ); else VfatPrint( " Auto-creating backup boot block.\n" ); - if (!interactive || get_key("12","?") == '1') { + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { int bbs; /* The usual place for the backup boot sector is sector 6. Choose * that or the last reserved sector. */ @@ -167,12 +167,12 @@ static void check_backup_boot(DOS_FS *fs, struct boot_sector *b, int lss) } VfatPrint( "\n" ); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1) Copy original to backup\n" "2) Copy backup to original\n" "3) No action\n" ); else VfatPrint( " Not automatically fixing this.\n" ); - switch (interactive ? get_key("123","?") : '3') { + switch ((FsCheckFlags & FSCHECK_INTERACTIVE) ? get_key("123","?") : '3') { case '1': fs_write(fs->backupboot_start,sizeof(*b),b); break; @@ -200,10 +200,10 @@ static void read_fsinfo(DOS_FS *fs, struct boot_sector *b,int lss) if (!b->info_sector) { VfatPrint( "No FSINFO sector\n" ); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1) Create one\n2) Do without FSINFO\n" ); else VfatPrint( " Not automatically creating it.\n" ); - if (interactive && get_key("12","?") == '1') { + if ((FsCheckFlags & FSCHECK_INTERACTIVE) && get_key("12","?") == '1') { /* search for a free reserved sector (not boot sector and not * backup boot sector) */ __u32 s; @@ -248,10 +248,10 @@ static void read_fsinfo(DOS_FS *fs, struct boot_sector *b,int lss) VfatPrint( " Offset %llu: 0x%04x != expected 0x%04x\n", (__u64)offsetof(struct info_sector,boot_sign), CF_LE_W(i.boot_sign),0xaa55); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1) Correct\n2) Don't correct (FSINFO invalid then)\n" ); else VfatPrint( " Auto-correcting it.\n" ); - if (!interactive || get_key("12","?") == '1') { + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { init_fsinfo(&i); fs_write(fs->fsinfo_start,sizeof(i),&i); } @@ -280,7 +280,7 @@ void read_boot(DOS_FS *fs) fs->nfats = b.fats; sectors = GET_UNALIGNED_W(b.sectors); total_sectors = sectors ? sectors : CF_LE_L(b.total_sect); - if (verbose) VfatPrint("Checking we can access the last sector of the filesystem\n"); + if (FsCheckFlags & FSCHECK_VERBOSE) VfatPrint("Checking we can access the last sector of the filesystem\n"); /* Can't access last odd sector anyway, so round down */ fs_test((loff_t)((total_sectors & ~1)-1)*(loff_t)logical_sector_size, logical_sector_size); @@ -358,7 +358,7 @@ void read_boot(DOS_FS *fs) /* ++roman: On Atari, these two fields are often left uninitialized */ if (!atari_format && (!b.secs_track || !b.heads)) die("Invalid disk format in boot sector."); - if (verbose) dump_boot(fs,&b,logical_sector_size); + if (FsCheckFlags & FSCHECK_VERBOSE) dump_boot(fs,&b,logical_sector_size); } /* Local Variables: */ diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c index 7b3ddcd61ed..bc7ca7946ed 100644 --- a/reactos/lib/fslib/vfatlib/check/check.c +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -267,7 +267,7 @@ static int bad_name(unsigned char *name) /* Only complain about too much suspicious chars in interactive mode, * never correct them automatically. The chars are all basically ok, so we * shouldn't auto-correct such names. */ - if (interactive && suspicious > 6) + if ((FsCheckFlags & FSCHECK_INTERACTIVE) && suspicious > 6) return 1; return 0; } @@ -365,11 +365,11 @@ static int handle_dot(DOS_FS *fs,DOS_FILE *file,int dots) name = strncmp((char*)file->dir_ent.name,MSDOS_DOT,MSDOS_NAME) ? ".." : "."; if (!(file->dir_ent.attr & ATTR_DIR)) { VfatPrint("%s\n Is a non-directory.\n",path_name(file)); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint("1) Drop it\n2) Auto-rename\n3) Rename\n" "4) Convert to directory\n"); else VfatPrint(" Auto-renaming it.\n"); - switch (interactive ? get_key("1234","?") : '2') { + switch ((FsCheckFlags & FSCHECK_INTERACTIVE) ? get_key("1234","?") : '2') { case '1': drop_file(fs,file); return 1; @@ -483,7 +483,7 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) "is FAT32 root dir.\n", clusters*fs->cluster_size ); do_trunc = 1; } - else if (interactive) + else if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint("1) Truncate first to %lu bytes%s\n" "2) Truncate second to %lu bytes\n",clusters*fs->cluster_size, restart ? " and restart" : "",clusters2*fs->cluster_size); @@ -491,7 +491,7 @@ static int check_file(DOS_FS *fs,DOS_FILE *file) fs->cluster_size); if (do_trunc != 2 && (do_trunc == 1 || - (interactive && get_key("12","?") == '1'))) { + ((FsCheckFlags & FSCHECK_INTERACTIVE) && get_key("12","?") == '1'))) { prev = 0; clusters = 0; for (this = FSTART(owner,fs); this > 0 && this != -1; this = @@ -561,7 +561,7 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) VfatPrint("%s\n Has a large number of bad entries. (%d/%d)\n", path_name(parent),bad,good+bad); if (!dots) VfatPrint( " Not dropping root directory.\n" ); - else if (!interactive) VfatPrint(" Not dropping it in auto-mode.\n"); + else if (!(FsCheckFlags & FSCHECK_INTERACTIVE)) VfatPrint(" Not dropping it in auto-mode.\n"); else if (get_key("yn","Drop directory ? (y/n)") == 'y') { truncate_file(fs,parent,0); MODIFY(parent,name[0],DELETED_FLAG); @@ -584,11 +584,11 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) if (!((*walk)->dir_ent.attr & ATTR_VOLUME) && bad_name((*walk)->dir_ent.name)) { VfatPrint("%s\n Bad file name.\n",path_name(*walk)); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint("1) Drop file\n2) Rename file\n3) Auto-rename\n" "4) Keep it\n"); else VfatPrint(" Auto-renaming it.\n"); - switch (interactive ? get_key("1234","?") : '3') { + switch ((FsCheckFlags & FSCHECK_INTERACTIVE) ? get_key("1234","?") : '3') { case '1': drop_file(fs,*walk); walk = &(*walk)->next; @@ -616,12 +616,12 @@ static int check_dir(DOS_FS *fs,DOS_FILE **root,int dots) VfatPrint("%s\n Duplicate directory entry.\n First %s\n", path_name(*walk),file_stat(*walk)); VfatPrint(" Second %s\n",file_stat(*scan)); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint("1) Drop first\n2) Drop second\n3) Rename first\n" "4) Rename second\n5) Auto-rename first\n" "6) Auto-rename second\n"); else VfatPrint(" Auto-renaming second.\n"); - switch (interactive ? get_key("123456","?") : '6') { + switch ((FsCheckFlags & FSCHECK_INTERACTIVE) ? get_key("123456","?") : '6') { case '1': drop_file(fs,*walk); *walk = (*walk)->next; @@ -789,7 +789,7 @@ static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, if (type == fdt_undelete) undelete(fs,new); **chain = new; *chain = &new->next; - if (list) { + if (FsCheckFlags & FSCHECK_LIST_FILES) { VfatPrint("Checking file %s",path_name(new)); if (new->lfn) VfatPrint(" (%s)", file_name(new->dir_ent.name) ); @@ -799,7 +799,7 @@ static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, strncmp((char*)de.name,MSDOS_DOT,MSDOS_NAME) != 0 && strncmp((char*)de.name,MSDOS_DOTDOT,MSDOS_NAME) != 0) ++n_files; - test_file(fs,new,test); + test_file(fs,new,FsCheckFlags & FSCHECK_TEST_READ); } diff --git a/reactos/lib/fslib/vfatlib/check/dosfsck.h b/reactos/lib/fslib/vfatlib/check/dosfsck.h index eb9360eeaab..0134996c75b 100644 --- a/reactos/lib/fslib/vfatlib/check/dosfsck.h +++ b/reactos/lib/fslib/vfatlib/check/dosfsck.h @@ -29,13 +29,6 @@ typedef __int64 ll_t; #endif -#define _LINUX_STAT_H /* hack to avoid inclusion of */ -#define _LINUX_STRING_H_ /* hack to avoid inclusion of */ -#define _LINUX_FS_H /* hack to avoid inclusion of */ - -//#include -//# include "types.h" - #ifdef _M_IX86 #include "byteorder.h" #endif @@ -165,7 +158,13 @@ typedef struct { #define offsetof(t,e) ((int)&(((t *)0)->e)) #endif -extern int interactive,list,verbose,test,write_immed; +#define FSCHECK_INTERACTIVE 0x01 +#define FSCHECK_LIST_FILES 0x02 +#define FSCHECK_TEST_READ 0x04 +#define FSCHECK_VERBOSE 0x08 +#define FSCHECK_IMMEDIATE_WRITE 0x10 + +extern ULONG FsCheckFlags; extern int atari_format; extern unsigned n_files; extern void *mem_queue; diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/reactos/lib/fslib/vfatlib/check/fat.c index 34a8461d867..ba7ee9bd65b 100644 --- a/reactos/lib/fslib/vfatlib/check/fat.c +++ b/reactos/lib/fslib/vfatlib/check/fat.c @@ -79,7 +79,7 @@ void read_fat(DOS_FS *fs) fs_write(fs->fat_start,eff_size,use = second); } if (first_ok && second_ok) { - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { VfatPrint("FATs differ but appear to be intact. Use which FAT ?\n" "1) Use first FAT\n2) Use second FAT\n"); if (get_key("12","?") == '1') @@ -199,7 +199,7 @@ void fix_bad(DOS_FS *fs) { unsigned long i; - if (verbose) + if (FsCheckFlags & FSCHECK_VERBOSE) VfatPrint("Checking for bad clusters.\n"); for (i = 2; i < fs->clusters+2; i++) if (!get_owner(fs,i) && !FAT_IS_BAD(fs,fs->fat[i].value)) @@ -215,7 +215,7 @@ void reclaim_free(DOS_FS *fs) int reclaimed; unsigned long i; - if (verbose) + if (FsCheckFlags & FSCHECK_VERBOSE) VfatPrint("Checking for unused clusters.\n"); reclaimed = 0; for (i = 2; i < fs->clusters+2; i++) @@ -261,7 +261,7 @@ void reclaim_file(DOS_FS *fs) int reclaimed,files,changed; unsigned long i,next,walk; - if (verbose) + if (FsCheckFlags & FSCHECK_VERBOSE) VfatPrint("Reclaiming unconnected clusters.\n"); for (i = 2; i < fs->clusters+2; i++) fs->fat[i].prev = 0; for (i = 2; i < fs->clusters+2; i++) { @@ -324,25 +324,25 @@ unsigned long update_free(DOS_FS *fs) if (!fs->fsinfo_start) return free; - if (verbose) + if (FsCheckFlags & FSCHECK_VERBOSE) VfatPrint("Checking free cluster summary.\n"); if (fs->free_clusters >= 0) { if (free != fs->free_clusters) { VfatPrint( "Free cluster summary wrong (%ld vs. really %ld)\n", fs->free_clusters,free); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1) Correct\n2) Don't correct\n" ); else VfatPrint( " Auto-correcting.\n" ); - if (!interactive || get_key("12","?") == '1') + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') do_set = 1; } } else { VfatPrint( "Free cluster summary uninitialized (should be %ld)\n", free ); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1) Set it\n2) Leave it uninitialized\n" ); else VfatPrint( " Auto-setting.\n" ); - if (!interactive || get_key("12","?") == '1') + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') do_set = 1; } diff --git a/reactos/lib/fslib/vfatlib/check/io.c b/reactos/lib/fslib/vfatlib/check/io.c index 623a843121c..b266cad069d 100644 --- a/reactos/lib/fslib/vfatlib/check/io.c +++ b/reactos/lib/fslib/vfatlib/check/io.c @@ -139,7 +139,7 @@ void fs_write(loff_t pos,int size,void *data) int did; #if 1 //SAE - if (write_immed) { + if (FsCheckFlags & FSCHECK_IMMEDIATE_WRITE) { void *scratch; const size_t readsize_aligned = (size % 512) ? (size + (512 - (size % 512))) : size; const loff_t seekpos_aligned = pos - (pos % 512); @@ -204,10 +204,10 @@ void fs_write(loff_t pos,int size,void *data) static void fs_flush(void) { CHANGE *this; - int old_write_immed = write_immed; + int old_write_immed = (FsCheckFlags & FSCHECK_IMMEDIATE_WRITE); /* Disable writes to the list now */ - write_immed = 1; + FsCheckFlags |= FSCHECK_IMMEDIATE_WRITE; while (changes) { this = changes; @@ -220,7 +220,7 @@ static void fs_flush(void) } /* Restore values */ - write_immed = old_write_immed; + if (!old_write_immed) FsCheckFlags ^= FSCHECK_IMMEDIATE_WRITE; } diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/reactos/lib/fslib/vfatlib/check/lfn.c index 01fb697d184..0aad9ae3055 100644 --- a/reactos/lib/fslib/vfatlib/check/lfn.c +++ b/reactos/lib/fslib/vfatlib/check/lfn.c @@ -173,13 +173,13 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) vffree( part2 ); can_clear = 1; } - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { VfatPrint( "1: Delete previous LFN\n2: Leave it as it is.\n" ); if (can_clear) VfatPrint( "3: Clear start bit and concatenate LFNs\n" ); } else VfatPrint( " Not auto-correcting this.\n" ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { switch( get_key( can_clear ? "123" : "12", "?" )) { case '1': clear_lfn_slots( 0, lfn_parts-1 ); @@ -210,12 +210,12 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) VfatPrint( "Long filename fragment \"%s\" found outside a LFN " "sequence.\n (Maybe the start bit is missing on the " "last fragment)\n", part ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { VfatPrint( "1: Delete fragment\n2: Leave it as it is.\n" "3: Set start bit\n" ); } else VfatPrint( " Not auto-correcting this.\n" ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { switch( get_key( "123", "?" )) { case '1': if (!lfn_offsets) @@ -259,13 +259,13 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) vffree( part2 ); can_fix = 1; } - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { VfatPrint( "1: Delete LFN\n2: Leave it as it is (and ignore LFN so far)\n" ); if (can_fix) VfatPrint( "3: Correct sequence number\n" ); } else VfatPrint( " Not auto-correcting this.\n" ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { switch( get_key( can_fix ? "123" : "12", "?" )) { case '1': lfn_offsets[lfn_parts++] = dir_offset; @@ -291,12 +291,12 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) VfatPrint( "Checksum in long filename part wrong " "(%02x vs. expected %02x).\n", lfn->alias_checksum, lfn_checksum ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" "3: Correct checksum\n" ); } else VfatPrint( " Not auto-correcting this.\n" ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { switch( get_key( "123", "?" )) { case '1': lfn_offsets[lfn_parts++] = dir_offset; @@ -326,10 +326,10 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) if (lfn->reserved != 0) { VfatPrint( "Reserved field in VFAT long filename slot is not 0 " "(but 0x%02x).\n", lfn->reserved ); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1: Fix.\n2: Leave it.\n" ); else VfatPrint( "Auto-setting to 0.\n" ); - if (!interactive || get_key("12","?") == '1') { + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { lfn->reserved = 0; fs_write( dir_offset+offsetof(LFN_ENT,reserved), sizeof(lfn->reserved), &lfn->reserved ); @@ -338,10 +338,10 @@ void lfn_add_slot( DIR_ENT *de, loff_t dir_offset ) if (lfn->start != CT_LE_W(0)) { VfatPrint( "Start cluster field in VFAT long filename slot is not 0 " "(but 0x%04x).\n", lfn->start ); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1: Fix.\n2: Leave it.\n" ); else VfatPrint( "Auto-setting to 0.\n" ); - if (!interactive || get_key("12","?") == '1') { + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { lfn->start = CT_LE_W(0); fs_write( dir_offset+offsetof(LFN_ENT,start), sizeof(lfn->start),&lfn->start ); @@ -382,13 +382,13 @@ char *lfn_get( DIR_ENT *de ) " (Start may have been overwritten by %s)\n", long_name, short_name ); vffree( long_name ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" "3: Fix numbering (truncates long name and attaches " "it to short name %s)\n", short_name ); } else VfatPrint( " Not auto-correcting this.\n" ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { switch( get_key( "123", "?" )) { case '1': clear_lfn_slots( 0, lfn_parts-1 ); @@ -422,13 +422,13 @@ char *lfn_get( DIR_ENT *de ) " (Short name %s may have changed without updating the long name)\n", long_name, short_name ); vffree( long_name ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { VfatPrint( "1: Delete LFN\n2: Leave it as it is.\n" "3: Fix checksum (attaches to short name %s)\n", short_name ); } else VfatPrint( " Not auto-correcting this.\n" ); - if (interactive) { + if (FsCheckFlags & FSCHECK_INTERACTIVE) { switch( get_key( "123", "?" )) { case '1': clear_lfn_slots( 0, lfn_parts-1 ); @@ -461,10 +461,10 @@ void lfn_check_orphaned(void) long_name = CNV_PARTS_SO_FAR(); VfatPrint("Orphaned long file name part \"%s\"\n", long_name); - if (interactive) + if (FsCheckFlags & FSCHECK_INTERACTIVE) VfatPrint( "1: Delete.\n2: Leave it.\n" ); else VfatPrint( " Auto-deleting.\n" ); - if (!interactive || get_key("12","?") == '1') { + if (!(FsCheckFlags & FSCHECK_INTERACTIVE) || get_key("12","?") == '1') { clear_lfn_slots(0, lfn_parts - 1); } lfn_reset(); From a804e14f3cfff2ddc37ec09abdc8597f1add8a9d Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Wed, 6 Aug 2008 15:41:09 +0000 Subject: [PATCH 171/304] - GetUserNameW: Re-set an_len to the actual buffer size before second LookupAccountSidW call; set *lpSize correctly; fix leakage of hToken in failure cases. - GetUserNameA: Don't include nul terminator when calculating NameW.Length. Remove redundant nul termination of NameA (RtlUnicodeStringToAnsiString already does it) svn path=/trunk/; revision=35147 --- reactos/dll/win32/advapi32/sec/misc.c | 20 ++++++++------------ 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/reactos/dll/win32/advapi32/sec/misc.c b/reactos/dll/win32/advapi32/sec/misc.c index 35868ea2d1b..2455a7c1608 100644 --- a/reactos/dll/win32/advapi32/sec/misc.c +++ b/reactos/dll/win32/advapi32/sec/misc.c @@ -739,9 +739,8 @@ GetUserNameA( LPSTR lpszName, LPDWORD lpSize ) lpSize); if(Ret) { - NameW.Length = (*lpSize) * sizeof(WCHAR); + NameW.Length = (*lpSize - 1) * sizeof(WCHAR); RtlUnicodeStringToAnsiString(&NameA, &NameW, FALSE); - NameA.Buffer[NameA.Length] = '\0'; *lpSize = NameA.Length + 1; } @@ -791,6 +790,7 @@ GetUserNameW ( LPWSTR lpszName, LPDWORD lpSize ) if ( !tu_buf ) { SetLastError ( ERROR_NOT_ENOUGH_MEMORY ); + CloseHandle ( hToken ); return FALSE; } if ( !GetTokenInformation ( hToken, TokenUser, tu_buf, 36, &tu_len ) || tu_len > 36 ) @@ -800,6 +800,7 @@ GetUserNameW ( LPWSTR lpszName, LPDWORD lpSize ) if ( !tu_buf ) { SetLastError ( ERROR_NOT_ENOUGH_MEMORY ); + CloseHandle ( hToken ); return FALSE; } if ( !GetTokenInformation ( hToken, TokenUser, tu_buf, tu_len, &tu_len ) ) @@ -811,6 +812,7 @@ GetUserNameW ( LPWSTR lpszName, LPDWORD lpSize ) return FALSE; } } + CloseHandle ( hToken ); token_user = (TOKEN_USER*)tu_buf; an_len = *lpSize; @@ -836,27 +838,21 @@ GetUserNameW ( LPWSTR lpszName, LPDWORD lpSize ) return FALSE; } } + an_len = *lpSize; if ( !LookupAccountSidW ( NULL, token_user->User.Sid, lpszName, &an_len, domain_name, &dn_len, &snu ) ) { /* don't call SetLastError(), as LookupAccountSid() ought to have set one */ LocalFree ( domain_name ); - CloseHandle ( hToken ); + LocalFree ( tu_buf ); + *lpSize = an_len; return FALSE; } } LocalFree ( domain_name ); LocalFree ( tu_buf ); - CloseHandle ( hToken ); - - if ( an_len > *lpSize ) - { - *lpSize = an_len; - SetLastError(ERROR_INSUFFICIENT_BUFFER); - return FALSE; - } - + *lpSize = an_len + 1; return TRUE; } From 91f8d86ffc67208da5f0762882c6b17ba9bfedab Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 6 Aug 2008 17:48:04 +0000 Subject: [PATCH 172/304] * OpenWith dialog must have WS_POPUP style in order to show up properly - fixes bug 3635 svn path=/trunk/; revision=35149 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 2 +- reactos/dll/win32/shell32/lang/ca-ES.rc | 2 +- reactos/dll/win32/shell32/lang/cs-CZ.rc | 2 +- reactos/dll/win32/shell32/lang/da-DK.rc | 2 +- reactos/dll/win32/shell32/lang/de-DE.rc | 2 +- reactos/dll/win32/shell32/lang/el-GR.rc | 2 +- reactos/dll/win32/shell32/lang/es-ES.rc | 2 +- reactos/dll/win32/shell32/lang/fi-FI.rc | 2 +- reactos/dll/win32/shell32/lang/fr-FR.rc | 2 +- reactos/dll/win32/shell32/lang/hu-HU.rc | 2 +- reactos/dll/win32/shell32/lang/it-IT.rc | 2 +- reactos/dll/win32/shell32/lang/ja-JP.rc | 2 +- reactos/dll/win32/shell32/lang/ko-KR.rc | 2 +- reactos/dll/win32/shell32/lang/nl-NL.rc | 2 +- reactos/dll/win32/shell32/lang/no-NO.rc | 2 +- reactos/dll/win32/shell32/lang/pl-PL.rc | 2 +- reactos/dll/win32/shell32/lang/pt-BR.rc | 2 +- reactos/dll/win32/shell32/lang/pt-PT.rc | 2 +- reactos/dll/win32/shell32/lang/ru-RU.rc | 2 +- reactos/dll/win32/shell32/lang/sk-SK.rc | 2 +- reactos/dll/win32/shell32/lang/sl-SI.rc | 2 +- reactos/dll/win32/shell32/lang/sv-SE.rc | 2 +- reactos/dll/win32/shell32/lang/tr-TR.rc | 2 +- reactos/dll/win32/shell32/lang/zh-CN.rc | 2 +- reactos/dll/win32/shell32/lang/zh-TW.rc | 2 +- 25 files changed, 25 insertions(+), 25 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 8e1e95fe688..42ef0534030 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -357,7 +357,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION " " FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 98375d0f01c..25af924b114 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 9811b2b87d8..a26048a2ca3 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -360,7 +360,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Otevt v..." FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index 2456d37c66f..acf0f04edb9 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index 477f2593318..ea4ff5897ea 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -361,7 +361,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "ffnen mit" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 6cc5616f975..b68244bf2db 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION " " FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index 54348b105fb..f24bb7c822a 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -360,7 +360,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Abrir con" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 1f815ef8ec6..380b2314cef 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 92633562c7c..b22e37f68ac 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -362,7 +362,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Ouvrir avec" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 8b871c32f77..ff28a1e907c 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -361,7 +361,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 4c0d83f1a07..bec7d5995b3 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -359,7 +359,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Apri con" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index dc8bf8a2dd4..19c87ca98bb 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 9, "MS UI Gothic", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index 496b721e241..9aa44ea0de7 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index f89f4605ddd..7379264762e 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index 07fa132814f..893428da959 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -337,7 +337,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "pne med" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index 7cc22455663..f97b6bfe73f 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -364,7 +364,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Otwrz za pomoc" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index de84fa3f517..e347039b66c 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -360,7 +360,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 4f65147eb95..370a379409b 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -360,7 +360,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index b6075d2eab1..3c69d74573a 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION " " FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index c9f2b04b1b1..53df2a925d5 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -364,7 +364,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Otvori v programe" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index e1213815764..d2b84c9b423 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 75a0fb2a894..85181d70d11 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index ede4a62b3f8..e4af8518be3 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -358,7 +358,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index c912ddcb42d..039835bb796 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -347,7 +347,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index 014550ea030..f1a4dcb34d0 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -359,7 +359,7 @@ BEGIN END OPEN_WITH_PROGRAMM_DLG DIALOGEX 0, 0, 264, 256 -STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION +STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION CAPTION "Open With" FONT 8, "MS Shell Dlg", 0, 0, 0x0 BEGIN From 5d937518077561aa69539ff6c399c7ec65252a09 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 6 Aug 2008 18:18:43 +0000 Subject: [PATCH 173/304] * Enable/Disable finish button based on the right edit control * fixes bug 3625 svn path=/trunk/; revision=35150 --- reactos/dll/cpl/appwiz/createlink.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/cpl/appwiz/createlink.c b/reactos/dll/cpl/appwiz/createlink.c index 047f1ff16ac..357e538df59 100644 --- a/reactos/dll/cpl/appwiz/createlink.c +++ b/reactos/dll/cpl/appwiz/createlink.c @@ -188,7 +188,7 @@ FinishDlgProc(HWND hwndDlg, switch(HIWORD(wParam)) { case EN_CHANGE: - if (SendDlgItemMessage(hwndDlg, IDC_SHORTCUT_LOCATION, WM_GETTEXTLENGTH, 0, 0)) + if (SendDlgItemMessage(hwndDlg, IDC_SHORTCUT_NAME, WM_GETTEXTLENGTH, 0, 0)) { PropSheet_SetWizButtons(GetParent(hwndDlg), PSWIZB_BACK | PSWIZB_FINISH); } From 403be95f6513ca0b47a83d803e75344b3b5cb90c Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 6 Aug 2008 21:11:14 +0000 Subject: [PATCH 174/304] - add CLSID_FontsFolderShortcut for fonts shell folder svn path=/trunk/; revision=35151 --- reactos/include/psdk/shlguid.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/psdk/shlguid.h b/reactos/include/psdk/shlguid.h index e76a6ddb548..55cf01b36d7 100644 --- a/reactos/include/psdk/shlguid.h +++ b/reactos/include/psdk/shlguid.h @@ -116,7 +116,7 @@ DEFINE_GUID(CLSID_ControlPanel, 0x21EC2020, 0x3AEA, 0x1069, 0xA2, 0xDD, 0x08, 0x DEFINE_GUID(CLSID_Printers, 0x2227A280, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, 0x2B, 0x30, 0x30, 0x9D); DEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03); DEFINE_GUID(CLSID_FolderShortcut, 0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); - +DEFINE_GUID(CLSID_FontsFolderShortcut, 0xD20EA4E1, 0x3957, 0x11D2, 0xA4, 0x0B, 0x0C, 0x50, 0x20, 0x52, 0x41,0x52); DEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57); DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0xd0); From 31fcd8ee63131702a6f100c564393c0d4893d32f Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 7 Aug 2008 01:02:34 +0000 Subject: [PATCH 175/304] * halfplement fonts shell folder * fix registration of nethood shell folder and printer shell folder - displaying is if'd out currently svn path=/trunk/; revision=35153 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 3 + reactos/dll/win32/shell32/lang/ca-ES.rc | 3 + reactos/dll/win32/shell32/lang/cs-CZ.rc | 3 + reactos/dll/win32/shell32/lang/da-DK.rc | 3 + reactos/dll/win32/shell32/lang/de-DE.rc | 3 + reactos/dll/win32/shell32/lang/el-GR.rc | 3 + reactos/dll/win32/shell32/lang/en-GB.rc | 3 + reactos/dll/win32/shell32/lang/en-US.rc | 3 + reactos/dll/win32/shell32/lang/es-ES.rc | 3 + reactos/dll/win32/shell32/lang/fi-FI.rc | 3 + reactos/dll/win32/shell32/lang/fr-FR.rc | 3 + reactos/dll/win32/shell32/lang/hu-HU.rc | 3 + reactos/dll/win32/shell32/lang/it-IT.rc | 3 + reactos/dll/win32/shell32/lang/ja-JP.rc | 3 + reactos/dll/win32/shell32/lang/ko-KR.rc | 3 + reactos/dll/win32/shell32/lang/nl-NL.rc | 3 + reactos/dll/win32/shell32/lang/no-NO.rc | 13 + reactos/dll/win32/shell32/lang/pl-PL.rc | 3 + reactos/dll/win32/shell32/lang/pt-BR.rc | 3 + reactos/dll/win32/shell32/lang/pt-PT.rc | 3 + reactos/dll/win32/shell32/lang/ru-RU.rc | 3 + reactos/dll/win32/shell32/lang/sk-SK.rc | 3 + reactos/dll/win32/shell32/lang/sl-SI.rc | 3 + reactos/dll/win32/shell32/lang/sv-SE.rc | 3 + reactos/dll/win32/shell32/lang/tr-TR.rc | 3 + reactos/dll/win32/shell32/lang/uk-UA.rc | 3 + reactos/dll/win32/shell32/lang/zh-CN.rc | 3 + reactos/dll/win32/shell32/lang/zh-TW.rc | 3 + reactos/dll/win32/shell32/pidl.c | 5 + reactos/dll/win32/shell32/pidl.h | 3 +- reactos/dll/win32/shell32/regsvr.c | 58 +- reactos/dll/win32/shell32/shell32.rbuild | 1 + reactos/dll/win32/shell32/shell32_main.h | 1 + reactos/dll/win32/shell32/shellole.c | 3 +- reactos/dll/win32/shell32/shfldr_fonts.c | 655 +++++++++++++++++++++++ reactos/dll/win32/shell32/shresdef.h | 3 + 36 files changed, 808 insertions(+), 15 deletions(-) create mode 100644 reactos/dll/win32/shell32/shfldr_fonts.c diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 42ef0534030..47b1737d79d 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -714,6 +714,9 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 25af924b114..684923a6c92 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -710,4 +710,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index a26048a2ca3..676ef9adb73 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -712,4 +712,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index acf0f04edb9..87e4a50e4df 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index ea4ff5897ea..03a965cea7f 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -712,4 +712,7 @@ BEGIN IDS_PREVIEW_VERB "Vorschau" IDS_FILE_FOLDER "%u Dateien, %u Ordner" + IDS_PRINTERS "Drucker" + IDS_FONTS "Schriftarten" + IDS_INSTALLNEWFONT "Neue Schriftart installieren..." END diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index b68244bf2db..fa6dcf7107d 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 65cfda4b430..04eae991aee 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index 2bb84f00698..b54f54cf873 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -712,4 +712,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index f24bb7c822a..ca5b75807e8 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -713,4 +713,7 @@ BEGIN IDS_PREVIEW_VERB "Vista previa" IDS_FILE_FOLDER "%u Archivos, %u Carpetas" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 380b2314cef..b2b9f75252a 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index b22e37f68ac..d1fda84d685 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -715,4 +715,7 @@ BEGIN IDS_PREVIEW_VERB "Apercevoir" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index ff28a1e907c..f13e1a82ae9 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -714,4 +714,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index bec7d5995b3..630ee78ca12 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -712,4 +712,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index 19c87ca98bb..a916b5a7c5e 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index 9aa44ea0de7..c8ddf2b4061 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 7379264762e..7646070b54e 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index 893428da959..62d8a9516cc 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -679,4 +679,17 @@ BEGIN IDS_INI_FILE "Konfigurasjon innstilling" IDS_LNK_FILE "Snarvei" IDS_SYS_FILE "Systemfil" + + IDS_OPEN_VERB "Open" + IDS_RUNAS_VERB "Run as " + IDS_EDIT_VERB "Edit" + IDS_FIND_VERB "Find" + IDS_PRINT_VERB "Print" + IDS_PLAY_VERB "Play" + IDS_PREVIEW_VERB "Preview" + + IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index f97b6bfe73f..4b5d0e33571 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -717,4 +717,7 @@ BEGIN IDS_PREVIEW_VERB "Podgld" IDS_FILE_FOLDER "%u Plikw, %u Katalogw" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index e347039b66c..ffb735954e2 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -713,4 +713,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 370a379409b..70b9c18da60 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -713,4 +713,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 3c69d74573a..d9ec9528dee 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -709,4 +709,7 @@ BEGIN IDS_PREVIEW_VERB "" IDS_FILE_FOLDER "%u , %u " + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 53df2a925d5..c26c7f9f376 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -717,4 +717,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" //Nhad, Ukka, Prezrie ??? IDS_FILE_FOLDER "sbory: %u, prieinky: %u" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index d2b84c9b423..7233f2b842e 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 85181d70d11..97e9daa5883 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index e4af8518be3..f236f2f25b7 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -711,4 +711,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 32648cc4544..a6db6508e25 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -712,4 +712,7 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 039835bb796..9972007aedf 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -699,5 +699,8 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index f1a4dcb34d0..0cb39c12550 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -712,6 +712,9 @@ BEGIN IDS_PREVIEW_VERB "Preview" IDS_FILE_FOLDER "%u Files, %u Folders" + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END #pragma code_page(default) diff --git a/reactos/dll/win32/shell32/pidl.c b/reactos/dll/win32/shell32/pidl.c index 9cf62ce0d94..ff9cfd144ae 100644 --- a/reactos/dll/win32/shell32/pidl.c +++ b/reactos/dll/win32/shell32/pidl.c @@ -1643,6 +1643,11 @@ LPITEMIDLIST _ILCreateNetHood(void) return _ILCreateGuid(PT_GUID, &CLSID_NetworkPlaces); } +LPITEMIDLIST _ILCreateFont(void) +{ + + return _ILCreateGuid(PT_GUID, &CLSID_FontsFolderShortcut); +} BOOL _ILIsMyComputer(LPCITEMIDLIST pidl) { diff --git a/reactos/dll/win32/shell32/pidl.h b/reactos/dll/win32/shell32/pidl.h index 148d901859d..476fb05c7c6 100644 --- a/reactos/dll/win32/shell32/pidl.h +++ b/reactos/dll/win32/shell32/pidl.h @@ -255,7 +255,8 @@ LPITEMIDLIST _ILCreateIExplore (void); LPITEMIDLIST _ILCreateControlPanel (void); LPITEMIDLIST _ILCreatePrinters (void); LPITEMIDLIST _ILCreateNetwork (void); -LPITEMIDLIST _ILCreateNetHood (void); +LPITEMIDLIST _ILCreateNetHood (void); +LPITEMIDLIST _ILCreateFont (void); LPITEMIDLIST _ILCreateBitBucket (void); LPITEMIDLIST _ILCreateDrive (LPCWSTR); diff --git a/reactos/dll/win32/shell32/regsvr.c b/reactos/dll/win32/shell32/regsvr.c index 14c665e28b4..8b455bed855 100644 --- a/reactos/dll/win32/shell32/regsvr.c +++ b/reactos/dll/win32/shell32/regsvr.c @@ -602,24 +602,49 @@ static struct regsvr_coclass const coclass_list[] = { }, { &CLSID_Printers, "Printers & Fax", - 0, + IDS_PRINTERS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_PRINTER + }, + { &CLSID_MyComputer, + "My Computer", + IDS_MYCOMPUTER, NULL, "shell32.dll", "Apartment" }, - { &CLSID_MyComputer, - "My Computer", - IDS_MYCOMPUTER, - NULL, - "shell32.dll", - "Apartment" - }, { &CLSID_NetworkPlaces, - "My Network Places", - IDS_NETWORKPLACE, - NULL, - "shell32.dll", - "Apartment" + "My Network Places", + IDS_NETWORKPLACE, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_MY_NETWORK_PLACES + }, + { &CLSID_FontsFolderShortcut, + "Fonts", + IDS_FONTS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_WANTSFORPARSING|SHELLFOLDER_CALLFORATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_FONTS_FOLDER }, { &CLSID_Shortcut, "Shortcut", @@ -731,6 +756,8 @@ static const WCHAR wszMyComputer[] = { 'M','y','C','o','m','p','u','t','e','r',0 static const WCHAR wszControlPanel[] = { 'C','o','n','t','r','o','l','P','a','n','e','l',0 }; static const WCHAR wszFolderOptions[] = { 'F','o','l','d','e','r',' ','O','p','t','i','o','n','s',0 }; static const WCHAR wszNethoodFolder[] = { 'N','e','t','h','o','o','d',' ','f','o','l','d','e','r',0}; +static const WCHAR wszPrinters[] = { 'P','r','i','n','t','e','r','s',0 }; +static const WCHAR wszFonts[] = { 'F','o','n','t','s',0 }; const GUID CLSID_FolderOptions = { 0x6DFD7C5C, 0x2451, 0x11d3, {0xa2,0x99,0x00,0xC0,0x4F,0x8e,0xf6,0xaf} }; @@ -768,6 +795,11 @@ static struct regsvr_namespace const namespace_extensions_list[] = { wszFolderOptions }, #if 0 + { + &CLSID_FontsFolderShortcut, + wszControlPanel, + wszFonts + }, { &CLSID_Printers, wszControlPanel, diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild index 6011eb59060..94b80af6154 100644 --- a/reactos/dll/win32/shell32/shell32.rbuild +++ b/reactos/dll/win32/shell32/shell32.rbuild @@ -75,4 +75,5 @@ shv_item_new.c folder_options.c shfldr_netplaces.c + shfldr_fonts.c diff --git a/reactos/dll/win32/shell32/shell32_main.h b/reactos/dll/win32/shell32/shell32_main.h index 285a5738b3d..0ea0a394020 100644 --- a/reactos/dll/win32/shell32/shell32_main.h +++ b/reactos/dll/win32/shell32/shell32_main.h @@ -95,6 +95,7 @@ HRESULT WINAPI ISF_MyComputer_Constructor(IUnknown * pUnkOuter, REFIID riid, LPV HRESULT WINAPI ISF_Printers_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI ISF_MyDocuments_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI ISF_NetworkPlaces_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); +HRESULT WINAPI ISF_Fonts_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI IDropTargetHelper_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV); HRESULT WINAPI IControlPanel_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); diff --git a/reactos/dll/win32/shell32/shellole.c b/reactos/dll/win32/shell32/shellole.c index 0ec2af3da96..389de77f1a2 100644 --- a/reactos/dll/win32/shell32/shellole.c +++ b/reactos/dll/win32/shell32/shellole.c @@ -75,7 +75,8 @@ static const struct { {&CLSID_FolderShortcut, &FolderShortcut_Constructor}, #endif {&CLSID_MyDocuments, &ISF_MyDocuments_Constructor}, - {&CLSID_NetworkPlaces, &ISF_NetworkPlaces_Constructor}, + {&CLSID_NetworkPlaces, &ISF_NetworkPlaces_Constructor}, + {&CLSID_FontsFolderShortcut, &ISF_Fonts_Constructor}, {&CLSID_Printers, &ISF_Printers_Constructor}, {&CLSID_RecycleBin, &RecycleBin_Constructor}, {&CLSID_OpenWith, &SHEOW_Constructor}, diff --git a/reactos/dll/win32/shell32/shfldr_fonts.c b/reactos/dll/win32/shell32/shfldr_fonts.c new file mode 100644 index 00000000000..bfe43e957e3 --- /dev/null +++ b/reactos/dll/win32/shell32/shfldr_fonts.c @@ -0,0 +1,655 @@ +/* + * Fonts folder + * + * Copyright 2008 Johannes Anderwald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#include "wine/port.h" + +#include +#include +#include +#include + +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include "winerror.h" +#include "windef.h" +#include "winbase.h" +#include "winreg.h" + +#include "pidl.h" +#include "enumidlist.h" +#include "undocshell.h" +#include "shell32_main.h" +#include "shresdef.h" +#include "wine/debug.h" +#include "debughlp.h" +#include "shfldr.h" +#include "shlwapi.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/*********************************************************************** +* IShellFolder implementation +*/ + +typedef struct { + const IShellFolder2Vtbl *lpVtbl; + LONG ref; + const IPersistFolder2Vtbl *lpVtblPersistFolder2; + + /* both paths are parsible from the desktop */ + LPITEMIDLIST pidlRoot; /* absolute pidl */ +} IGenericSFImpl; + +static const IShellFolder2Vtbl vt_ShellFolder2; +static const IPersistFolder2Vtbl vt_NP_PersistFolder2; + + +#define _IPersistFolder2_Offset ((int)(&(((IGenericSFImpl*)0)->lpVtblPersistFolder2))) +#define _ICOM_THIS_From_IPersistFolder2(class, name) class* This = (class*)(((char*)name)-_IPersistFolder2_Offset); + +#define _IUnknown_(This) (IUnknown*)&(This->lpVtbl) +#define _IShellFolder_(This) (IShellFolder*)&(This->lpVtbl) +#define _IPersistFolder2_(This) (IPersistFolder2*)&(This->lpVtblPersistFolder2) + +static shvheader FontsSFHeader[] = { + {IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN9, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10} +}; + +#define FontsSHELLVIEWCOLUMNS 2 + +/************************************************************************** +* ISF_Fonts_Constructor +*/ +HRESULT WINAPI ISF_Fonts_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv) +{ + IGenericSFImpl *sf; + + TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid)); + + if (!ppv) + return E_POINTER; + if (pUnkOuter) + return CLASS_E_NOAGGREGATION; + + sf = (IGenericSFImpl *) HeapAlloc ( GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof (IGenericSFImpl)); + if (!sf) + return E_OUTOFMEMORY; + + sf->ref = 0; + sf->lpVtbl = &vt_ShellFolder2; + sf->lpVtblPersistFolder2 = &vt_NP_PersistFolder2; + sf->pidlRoot = _ILCreateFont(); /* my qualified pidl */ + + if (!SUCCEEDED (IUnknown_QueryInterface (_IUnknown_ (sf), riid, ppv))) + { + IUnknown_Release (_IUnknown_ (sf)); + return E_NOINTERFACE; + } + + TRACE ("--(%p)\n", sf); + return S_OK; +} + +/************************************************************************** + * ISF_Fonts_fnQueryInterface + * + * NOTE + * supports not IPersist/IPersistFolder + */ +static HRESULT WINAPI ISF_Fonts_fnQueryInterface (IShellFolder2 *iface, REFIID riid, LPVOID *ppvObj) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(%s,%p)\n", This, shdebugstr_guid (riid), ppvObj); + + *ppvObj = NULL; + + if (IsEqualIID (riid, &IID_IUnknown) || + IsEqualIID (riid, &IID_IShellFolder) || + IsEqualIID (riid, &IID_IShellFolder2)) + { + *ppvObj = This; + } + else if (IsEqualIID (riid, &IID_IPersist) || + IsEqualIID (riid, &IID_IPersistFolder) || + IsEqualIID (riid, &IID_IPersistFolder2)) + { + *ppvObj = _IPersistFolder2_ (This); + } + + if (*ppvObj) + { + IUnknown_AddRef ((IUnknown *) (*ppvObj)); + TRACE ("-- Interface: (%p)->(%p)\n", ppvObj, *ppvObj); + return S_OK; + } + TRACE ("-- Interface: E_NOINTERFACE\n"); + return E_NOINTERFACE; +} + +static ULONG WINAPI ISF_Fonts_fnAddRef (IShellFolder2 * iface) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + ULONG refCount = InterlockedIncrement(&This->ref); + + TRACE ("(%p)->(count=%u)\n", This, refCount - 1); + + return refCount; +} + +static ULONG WINAPI ISF_Fonts_fnRelease (IShellFolder2 * iface) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + ULONG refCount = InterlockedDecrement(&This->ref); + + TRACE ("(%p)->(count=%u)\n", This, refCount + 1); + + if (!refCount) { + TRACE ("-- destroying IShellFolder(%p)\n", This); + SHFree (This->pidlRoot); + HeapFree (GetProcessHeap(), 0, This); + } + return refCount; +} + +/************************************************************************** +* ISF_Fonts_fnParseDisplayName +*/ +static HRESULT WINAPI ISF_Fonts_fnParseDisplayName (IShellFolder2 * iface, + HWND hwndOwner, LPBC pbcReserved, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + HRESULT hr = E_UNEXPECTED; + + TRACE ("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", This, + hwndOwner, pbcReserved, lpszDisplayName, debugstr_w (lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; /* strange but like the original */ + + TRACE ("(%p)->(-- ret=0x%08x)\n", This, hr); + + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnEnumObjects +*/ +static HRESULT WINAPI ISF_Fonts_fnEnumObjects (IShellFolder2 * iface, + HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, + hwndOwner, dwFlags, ppEnumIDList); + + *ppEnumIDList = IEnumIDList_Constructor(); + + TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList); + + return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; +} + +/************************************************************************** +* ISF_Fonts_fnBindToObject +*/ +static HRESULT WINAPI ISF_Fonts_fnBindToObject (IShellFolder2 * iface, + LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This, + pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + + return SHELL32_BindToChild (This->pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** +* ISF_Fonts_fnBindToStorage +*/ +static HRESULT WINAPI ISF_Fonts_fnBindToStorage (IShellFolder2 * iface, + LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", This, + pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** +* ISF_Fonts_fnCompareIDs +*/ + +static HRESULT WINAPI ISF_Fonts_fnCompareIDs (IShellFolder2 * iface, + LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", This, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (_IShellFolder_ (This), lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** +* ISF_Fonts_fnCreateViewObject +*/ +static HRESULT WINAPI ISF_Fonts_fnCreateViewObject (IShellFolder2 * iface, + HWND hwndOwner, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", This, + hwndOwner, shdebugstr_guid (riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppvOut); + IShellView_Release (pShellView); + } + } + TRACE ("-- (%p)->(interface=%p)\n", This, ppvOut); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetAttributesOf +*/ +static HRESULT WINAPI ISF_Fonts_fnGetAttributesOf (IShellFolder2 * iface, + UINT cidl, LPCITEMIDLIST * apidl, DWORD * rgfInOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + HRESULT hr = S_OK; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", This, + cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if (cidl == 0) + { + IShellFolder *psfParent = NULL; + LPCITEMIDLIST rpidl = NULL; + + hr = SHBindToParent(This->pidlRoot, &IID_IShellFolder, (LPVOID*)&psfParent, (LPCITEMIDLIST*)&rpidl); + if(SUCCEEDED(hr)) + { + SHELL32_GetItemAttributes (psfParent, rpidl, rgfInOut); + IShellFolder_Release(psfParent); + } + } + else + { + while (cidl > 0 && *apidl) + { + pdump (*apidl); + SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut); + apidl++; + cidl--; + } + } + + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetUIObjectOf +* +* PARAMETERS +* hwndOwner [in] Parent window for any output +* cidl [in] array size +* apidl [in] simple pidl array +* riid [in] Requested Interface +* prgfInOut [ ] reserved +* ppvObject [out] Resulting Interface +* +*/ +static HRESULT WINAPI ISF_Fonts_fnGetUIObjectOf (IShellFolder2 * iface, + HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, REFIID riid, + UINT * prgfInOut, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", This, + hwndOwner, cidl, apidl, shdebugstr_guid (riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IContextMenu) && (cidl >= 1)) + { + pObj = (LPUNKNOWN) ISvItemCm_Constructor ((IShellFolder *) iface, This->pidlRoot, apidl, cidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1)) + { + pObj = (LPUNKNOWN) IDataObject_Constructor (hwndOwner, This->pidlRoot, apidl, cidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) + { + hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08x\n", This, hr); + return hr; +} + +/************************************************************************** +* ISF_Fonts_fnGetDisplayNameOf +* +*/ +static HRESULT WINAPI ISF_Fonts_fnGetDisplayNameOf (IShellFolder2 * iface, + LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + return E_NOTIMPL; +} + +/************************************************************************** +* ISF_Fonts_fnSetNameOf +* Changes the name of a file object or subfolder, possibly changing its item +* identifier in the process. +* +* PARAMETERS +* hwndOwner [in] Owner window for output +* pidl [in] simple pidl of item to change +* lpszName [in] the items new display name +* dwFlags [in] SHGNO formatting flags +* ppidlOut [out] simple pidl returned +*/ +static HRESULT WINAPI ISF_Fonts_fnSetNameOf (IShellFolder2 * iface, + HWND hwndOwner, LPCITEMIDLIST pidl, /*simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)->(%p,pidl=%p,%s,%u,%p)\n", This, + hwndOwner, pidl, debugstr_w (lpName), dwFlags, pPidlOut); + return E_FAIL; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDefaultSearchGUID ( + IShellFolder2 * iface, GUID * pguid) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_Fonts_fnEnumSearches (IShellFolder2 * iface, + IEnumExtraSearch ** ppenum) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDefaultColumn (IShellFolder2 * iface, + DWORD dwRes, ULONG * pSort, ULONG * pDisplay) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)\n", This); + + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDefaultColumnState ( + IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)\n", This); + + if (!pcsFlags || iColumn >= FontsSHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = FontsSFHeader[iColumn].pcsFlags; + return S_OK; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDetailsEx (IShellFolder2 * iface, + LPCITEMIDLIST pidl, const SHCOLUMNID * pscid, VARIANT * pv) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_Fonts_fnGetDetailsOf (IShellFolder2 * iface, + LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)->(%p %i %p)\n", This, pidl, iColumn, psd); + + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_Fonts_fnMapColumnToSCID (IShellFolder2 * iface, + UINT column, SHCOLUMNID * pscid) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)\n", This); + + return E_NOTIMPL; +} + +static const IShellFolder2Vtbl vt_ShellFolder2 = { + ISF_Fonts_fnQueryInterface, + ISF_Fonts_fnAddRef, + ISF_Fonts_fnRelease, + ISF_Fonts_fnParseDisplayName, + ISF_Fonts_fnEnumObjects, + ISF_Fonts_fnBindToObject, + ISF_Fonts_fnBindToStorage, + ISF_Fonts_fnCompareIDs, + ISF_Fonts_fnCreateViewObject, + ISF_Fonts_fnGetAttributesOf, + ISF_Fonts_fnGetUIObjectOf, + ISF_Fonts_fnGetDisplayNameOf, + ISF_Fonts_fnSetNameOf, + /* ShellFolder2 */ + ISF_Fonts_fnGetDefaultSearchGUID, + ISF_Fonts_fnEnumSearches, + ISF_Fonts_fnGetDefaultColumn, + ISF_Fonts_fnGetDefaultColumnState, + ISF_Fonts_fnGetDetailsEx, + ISF_Fonts_fnGetDetailsOf, + ISF_Fonts_fnMapColumnToSCID +}; + +/************************************************************************ + * INPFldr_PersistFolder2_QueryInterface + */ +static HRESULT WINAPI INPFldr_PersistFolder2_QueryInterface (IPersistFolder2 * iface, + REFIID iid, LPVOID * ppvObj) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)\n", This); + + return IUnknown_QueryInterface (_IUnknown_ (This), iid, ppvObj); +} + +/************************************************************************ + * INPFldr_PersistFolder2_AddRef + */ +static ULONG WINAPI INPFldr_PersistFolder2_AddRef (IPersistFolder2 * iface) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_AddRef (_IUnknown_ (This)); +} + +/************************************************************************ + * ISFPersistFolder_Release + */ +static ULONG WINAPI INPFldr_PersistFolder2_Release (IPersistFolder2 * iface) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_Release (_IUnknown_ (This)); +} + +/************************************************************************ + * INPFldr_PersistFolder2_GetClassID + */ +static HRESULT WINAPI INPFldr_PersistFolder2_GetClassID ( + IPersistFolder2 * iface, CLSID * lpClassId) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)\n", This); + + if (!lpClassId) + return E_POINTER; + + *lpClassId = CLSID_FontsFolderShortcut; + + return S_OK; +} + +/************************************************************************ + * INPFldr_PersistFolder2_Initialize + * + * NOTES: it makes no sense to change the pidl + */ +static HRESULT WINAPI INPFldr_PersistFolder2_Initialize ( + IPersistFolder2 * iface, LPCITEMIDLIST pidl) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(%p)\n", This, pidl); + + return E_NOTIMPL; +} + +/************************************************************************** + * IPersistFolder2_fnGetCurFolder + */ +static HRESULT WINAPI INPFldr_PersistFolder2_GetCurFolder ( + IPersistFolder2 * iface, LPITEMIDLIST * pidl) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(%p)\n", This, pidl); + + if (!pidl) + return E_POINTER; + + *pidl = ILClone (This->pidlRoot); + + return S_OK; +} + +static const IPersistFolder2Vtbl vt_NP_PersistFolder2 = +{ + INPFldr_PersistFolder2_QueryInterface, + INPFldr_PersistFolder2_AddRef, + INPFldr_PersistFolder2_Release, + INPFldr_PersistFolder2_GetClassID, + INPFldr_PersistFolder2_Initialize, + INPFldr_PersistFolder2_GetCurFolder +}; diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index 4be17316838..e93a0798928 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -87,6 +87,8 @@ #define IDS_DRIVE_CDROM 73 #define IDS_DRIVE_NETWORK 74 #define IDS_NETWORKPLACE 75 +#define IDS_FONTS 76 +#define IDS_PRINTERS 77 #define IDS_CREATEFOLDER_DENIED 128 #define IDS_CREATEFOLDER_CAPTION 129 @@ -142,6 +144,7 @@ #define IDS_PREVIEW_VERB 306 #define IDS_FILE_FOLDER 307 #define IDS_CREATELINK 308 +#define IDS_INSTALLNEWFONT 309 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 From d1884b0cf8e950292848186b98d329a34580ee24 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 7 Aug 2008 01:24:33 +0000 Subject: [PATCH 176/304] - enable registration of fonts shell folder svn path=/trunk/; revision=35154 --- reactos/dll/win32/shell32/regsvr.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/shell32/regsvr.c b/reactos/dll/win32/shell32/regsvr.c index 8b455bed855..59c95d13a51 100644 --- a/reactos/dll/win32/shell32/regsvr.c +++ b/reactos/dll/win32/shell32/regsvr.c @@ -639,7 +639,7 @@ static struct regsvr_coclass const coclass_list[] = { NULL, "shell32.dll", "Apartment", - SHELLFOLDER_ATTRIBUTES|SHELLFOLDER_WANTSFORPARSING|SHELLFOLDER_CALLFORATTRIBUTES, + SHELLFOLDER_ATTRIBUTES, SFGAO_FOLDER, 0, NULL, @@ -794,12 +794,12 @@ static struct regsvr_namespace const namespace_extensions_list[] = { wszControlPanel, wszFolderOptions }, -#if 0 { &CLSID_FontsFolderShortcut, wszControlPanel, wszFonts }, +#if 0 { &CLSID_Printers, wszControlPanel, From 7fa9c85299328132ce92ff62c21a251887c5e1fb Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Thu, 7 Aug 2008 06:04:49 +0000 Subject: [PATCH 177/304] Merge aicom-network-fixes up to 35155 svn path=/trunk/; revision=35156 --- reactos/dll/win32/msafd/misc/dllmain.c | 17 +++++++++++------ reactos/drivers/network/afd/afd/connect.c | 1 + reactos/drivers/network/afd/afd/listen.c | 4 ++++ reactos/drivers/network/afd/afd/read.c | 13 +++++++------ reactos/drivers/network/afd/afd/write.c | 3 +-- reactos/drivers/network/tcpip/datalink/lan.c | 13 +++++++++++-- 6 files changed, 35 insertions(+), 16 deletions(-) diff --git a/reactos/dll/win32/msafd/misc/dllmain.c b/reactos/dll/win32/msafd/misc/dllmain.c index ba148c8b462..4c520e132af 100644 --- a/reactos/dll/win32/msafd/misc/dllmain.c +++ b/reactos/dll/win32/msafd/misc/dllmain.c @@ -286,7 +286,9 @@ DWORD MsafdReturnWithErrno( NTSTATUS Status, LPINT Errno, DWORD Received, case STATUS_END_OF_FILE: *Errno = WSAESHUTDOWN; break; case STATUS_PENDING: *Errno = WSA_IO_PENDING; break; case STATUS_BUFFER_OVERFLOW: *Errno = WSAEMSGSIZE; break; + case STATUS_INSUFFICIENT_RESOURCES: *Errno = WSA_NOT_ENOUGH_MEMORY; break; case STATUS_INVALID_CONNECTION: *Errno = WSAEAFNOSUPPORT; break; + case STATUS_REMOTE_NOT_LISTENING: *Errno = WSAECONNRESET; break; default: DbgPrint("MSAFD: Error %x is unknown\n", Status); *Errno = WSAEINVAL; break; @@ -513,6 +515,7 @@ WSPBind( /* Wait for return */ if (Status == STATUS_PENDING) { WaitForSingleObject(SockEvent, INFINITE); + Status = IOSB.Status; } /* Set up Socket Data */ @@ -522,7 +525,7 @@ WSPBind( NtClose( SockEvent ); return MsafdReturnWithErrno - ( IOSB.Status, lpErrno, IOSB.Information, NULL ); + ( Status, lpErrno, 0, NULL ); } int @@ -566,6 +569,7 @@ WSPListen( /* Wait for return */ if (Status == STATUS_PENDING) { WaitForSingleObject(SockEvent, INFINITE); + Status = IOSB.Status; } /* Set to Listening */ @@ -574,7 +578,7 @@ WSPListen( NtClose( SockEvent ); return MsafdReturnWithErrno - ( IOSB.Status, lpErrno, IOSB.Information, NULL ); + ( Status, lpErrno, 0, NULL ); } @@ -1247,7 +1251,7 @@ WSPConnect( NtClose( SockEvent ); - return MsafdReturnWithErrno( IOSB.Status, lpErrno, 0, NULL ); + return MsafdReturnWithErrno( Status, lpErrno, 0, NULL ); } int WSPAPI @@ -1310,13 +1314,14 @@ WSPShutdown( /* Wait for return */ if (Status == STATUS_PENDING) { WaitForSingleObject(SockEvent, INFINITE); + Status = IOSB.Status; } AFD_DbgPrint(MID_TRACE,("Ending\n")); NtClose( SockEvent ); - return MsafdReturnWithErrno( IOSB.Status, lpErrno, 0, NULL ); + return MsafdReturnWithErrno( Status, lpErrno, 0, NULL ); } @@ -1401,7 +1406,7 @@ WSPGetSockName( } return MsafdReturnWithErrno - ( IOSB.Status, lpErrno, 0, NULL ); + ( Status, lpErrno, 0, NULL ); } @@ -1486,7 +1491,7 @@ WSPGetPeerName( } return MsafdReturnWithErrno - ( IOSB.Status, lpErrno, 0, NULL ); + ( Status, lpErrno, 0, NULL ); } INT diff --git a/reactos/drivers/network/afd/afd/connect.c b/reactos/drivers/network/afd/afd/connect.c index b451afb172d..9db0240de8c 100644 --- a/reactos/drivers/network/afd/afd/connect.c +++ b/reactos/drivers/network/afd/afd/connect.c @@ -95,6 +95,7 @@ static NTSTATUS NTAPI StreamSocketConnectComplete AFD_DbgPrint(MID_TRACE,("Completing connect %x\n", NextIrp)); NextIrp->IoStatus.Status = Status; NextIrp->IoStatus.Information = 0; + if( NextIrp->MdlAddress ) UnlockRequest( NextIrp, IoGetCurrentIrpStackLocation( NextIrp ) ); IoCompleteRequest( NextIrp, IO_NETWORK_INCREMENT ); } diff --git a/reactos/drivers/network/afd/afd/listen.c b/reactos/drivers/network/afd/afd/listen.c index 0f59006d722..edf1e502868 100644 --- a/reactos/drivers/network/afd/afd/listen.c +++ b/reactos/drivers/network/afd/afd/listen.c @@ -31,6 +31,8 @@ static VOID SatisfyAccept( PAFD_DEVICE_EXTENSION DeviceExt, FCB->RemoteAddress = TaCopyTransportAddress( Qelt->ConnInfo->RemoteAddress ); + if( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); + Irp->IoStatus.Information = 0; Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); @@ -70,6 +72,8 @@ static VOID SatisfyPreAccept( PIRP Irp, PAFD_TDI_OBJECT_QELT Qelt ) { AFD_DbgPrint(MID_TRACE,("IPAddr->Address[0].Address[0].sin_addr %x\n", IPAddr->Address[0].Address[0].in_addr)); + if( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); + Irp->IoStatus.Information = ((PCHAR)&IPAddr[1]) - ((PCHAR)ListenReceive); Irp->IoStatus.Status = STATUS_SUCCESS; IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); diff --git a/reactos/drivers/network/afd/afd/read.c b/reactos/drivers/network/afd/afd/read.c index 0775a490340..e9efcb8708a 100644 --- a/reactos/drivers/network/afd/afd/read.c +++ b/reactos/drivers/network/afd/afd/read.c @@ -168,11 +168,8 @@ static NTSTATUS ReceiveActivity( PAFD_FCB FCB, PIRP Irp ) { FCB, FCB->Recv.Content)); /*OskitDumpBuffer( FCB->Recv.Window, FCB->Recv.Content );*/ - Status = STATUS_SUCCESS; - /* Try to clear some requests */ - while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) && - NT_SUCCESS(Status) ) { + while( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) ) { NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_RECV]); NextIrp = @@ -476,10 +473,14 @@ PacketSocketRecvComplete( InsertTailList( &FCB->DatagramList, &DatagramRecv->ListEntry ); } else Status = STATUS_NO_MEMORY; + if( !NT_SUCCESS( Status ) ) { + SocketStateUnlock( FCB ); + return Status; + } + /* Satisfy as many requests as we can */ - while( NT_SUCCESS(Status) && - !IsListEmpty( &FCB->DatagramList ) && + while( !IsListEmpty( &FCB->DatagramList ) && !IsListEmpty( &FCB->PendingIrpList[FUNCTION_RECV] ) ) { AFD_DbgPrint(MID_TRACE,("Looping trying to satisfy request\n")); ListEntry = RemoveHeadList( &FCB->DatagramList ); diff --git a/reactos/drivers/network/afd/afd/write.c b/reactos/drivers/network/afd/afd/write.c index df9d3894c48..ac3dffde831 100644 --- a/reactos/drivers/network/afd/afd/write.c +++ b/reactos/drivers/network/afd/afd/write.c @@ -85,8 +85,7 @@ static NTSTATUS NTAPI SendComplete FCB->Send.BytesUsed -= Irp->IoStatus.Information; if( !FCB->Send.BytesUsed && - !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) && - NT_SUCCESS(Status) ) { + !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) { NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]); NextIrp = diff --git a/reactos/drivers/network/tcpip/datalink/lan.c b/reactos/drivers/network/tcpip/datalink/lan.c index e88bb9d85ab..a26e8d4e864 100644 --- a/reactos/drivers/network/tcpip/datalink/lan.c +++ b/reactos/drivers/network/tcpip/datalink/lan.c @@ -839,20 +839,25 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, ExAllocatePool(NonPagedPool, sizeof(KEY_BASIC_INFORMATION)); ULONG KbioLength = sizeof(KEY_BASIC_INFORMATION), ResultLength; + if( !Kbio ) return STATUS_INSUFFICIENT_RESOURCES; + RtlInitUnicodeString (&EnumKeyName, CCS_ROOT L"\\Control\\Class\\" TCPIP_GUID); Status = OpenRegistryKey( &EnumKeyName, &EnumKey ); - if( !NT_SUCCESS(Status) ) + if( !NT_SUCCESS(Status) ) { TI_DbgPrint(DEBUG_DATALINK,("Couldn't open Enum key %wZ: %x\n", &EnumKeyName, Status)); + ExFreePool( Kbio ); + return Status; + } for( i = 0; NT_SUCCESS(Status); i++ ) { Status = ZwEnumerateKey( EnumKey, i, KeyBasicInformation, Kbio, KbioLength, &ResultLength ); - if( Status == STATUS_BUFFER_TOO_SMALL ) { + if( Status == STATUS_BUFFER_TOO_SMALL || Status == STATUS_BUFFER_OVERFLOW ) { ExFreePool( Kbio ); KbioLength = ResultLength; Kbio = ExAllocatePool( NonPagedPool, KbioLength ); @@ -862,6 +867,8 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, if( !NT_SUCCESS(Status) ) { TI_DbgPrint(DEBUG_DATALINK,("Couldn't enum key child %d\n", i)); + NtClose( EnumKey ); + ExFreePool( Kbio ); return Status; } } @@ -875,6 +882,7 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, ( &EnumKeyName, &TargetKeyName, Name, DeviceDesc ); if( NT_SUCCESS(Status) ) { NtClose( EnumKey ); + ExFreePool( Kbio ); return Status; } else Status = STATUS_SUCCESS; } @@ -883,6 +891,7 @@ static NTSTATUS FindDeviceDescForAdapter( PUNICODE_STRING Name, RtlInitUnicodeString( DeviceDesc, L"" ); AppendUnicodeString( DeviceDesc, &TargetKeyName, FALSE ); NtClose( EnumKey ); + ExFreePool( Kbio ); return STATUS_UNSUCCESSFUL; } From 4ec67d948c1404e4a76706a4fa7d3ef51aa26577 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 7 Aug 2008 08:55:34 +0000 Subject: [PATCH 178/304] * implement retrieving column names for nethood & font shell folder * make column names mui aware svn path=/trunk/; revision=35157 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 5 +++ reactos/dll/win32/shell32/lang/ca-ES.rc | 5 +++ reactos/dll/win32/shell32/lang/cs-CZ.rc | 5 +++ reactos/dll/win32/shell32/lang/da-DK.rc | 5 +++ reactos/dll/win32/shell32/lang/de-DE.rc | 5 +++ reactos/dll/win32/shell32/lang/el-GR.rc | 5 +++ reactos/dll/win32/shell32/lang/en-GB.rc | 5 +++ reactos/dll/win32/shell32/lang/en-US.rc | 5 +++ reactos/dll/win32/shell32/lang/es-ES.rc | 5 +++ reactos/dll/win32/shell32/lang/fi-FI.rc | 5 +++ reactos/dll/win32/shell32/lang/fr-FR.rc | 5 +++ reactos/dll/win32/shell32/lang/hu-HU.rc | 5 +++ reactos/dll/win32/shell32/lang/it-IT.rc | 5 +++ reactos/dll/win32/shell32/lang/ja-JP.rc | 5 +++ reactos/dll/win32/shell32/lang/ko-KR.rc | 5 +++ reactos/dll/win32/shell32/lang/nl-NL.rc | 5 +++ reactos/dll/win32/shell32/lang/no-NO.rc | 5 +++ reactos/dll/win32/shell32/lang/pl-PL.rc | 5 +++ reactos/dll/win32/shell32/lang/pt-BR.rc | 5 +++ reactos/dll/win32/shell32/lang/pt-PT.rc | 5 +++ reactos/dll/win32/shell32/lang/ru-RU.rc | 5 +++ reactos/dll/win32/shell32/lang/sk-SK.rc | 5 +++ reactos/dll/win32/shell32/lang/sl-SI.rc | 5 +++ reactos/dll/win32/shell32/lang/sv-SE.rc | 5 +++ reactos/dll/win32/shell32/lang/tr-TR.rc | 5 +++ reactos/dll/win32/shell32/lang/uk-UA.rc | 5 +++ reactos/dll/win32/shell32/lang/zh-CN.rc | 5 +++ reactos/dll/win32/shell32/lang/zh-TW.rc | 5 +++ reactos/dll/win32/shell32/shfldr_fonts.c | 35 ++++++++++++++++-- reactos/dll/win32/shell32/shfldr_netplaces.c | 39 +++++++++++++++++--- reactos/dll/win32/shell32/shresdef.h | 5 +++ 31 files changed, 210 insertions(+), 9 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 47b1737d79d..b45b50caad8 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -595,8 +595,13 @@ BEGIN IDS_SHV_COLUMN9 "" IDS_SHV_COLUMN10 "" IDS_SHV_COLUMN11 "" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM " " IDS_SHV_COLUMN_DELDATE " " + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" // special folders IDS_DESKTOP " " diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 684923a6c92..ac6db9bd05e 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 676ef9adb73..3b96a8ab7ae 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -594,8 +594,13 @@ BEGIN IDS_SHV_COLUMN9 "Koment" IDS_SHV_COLUMN10 "Vlastnk" IDS_SHV_COLUMN11 "Skupina" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Pvodn umstn" IDS_SHV_COLUMN_DELDATE "Odstranno" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Plocha" diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index 87e4a50e4df..afbf725be69 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index 03a965cea7f..91d1bf4176d 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -594,8 +594,13 @@ BEGIN IDS_SHV_COLUMN9 "Kommentar" IDS_SHV_COLUMN10 "Besitzer" IDS_SHV_COLUMN11 "Gruppe" + IDS_SHV_COLUMN12 "Dateinamen" + IDS_SHV_COLUMN13 "Kategorie" IDS_SHV_COLUMN_DELFROM "Ursprung" IDS_SHV_COLUMN_DELDATE "Gelscht am" + IDS_SHV_COLUMN_FONTTYPE "Schriftartentyp" + IDS_SHV_COLUMN_WORKGROUP "Arbeitsgruppe" + IDS_SHV_NETWORKLOCATION "Netzwerkstandort" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index fa6dcf7107d..c11fe4d38ed 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "" IDS_SHV_COLUMN10 "" IDS_SHV_COLUMN11 "" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM " " IDS_SHV_COLUMN_DELDATE " " + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP " " diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 04eae991aee..0e749495f9f 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index b54f54cf873..bd64228f3ee 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -593,8 +593,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index ca5b75807e8..c6bfe8a6a4d 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -594,8 +594,13 @@ BEGIN IDS_SHV_COLUMN9 "Comentarios" IDS_SHV_COLUMN10 "Propietario" IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Ubicacin original" IDS_SHV_COLUMN_DELDATE "Fecha de eliminacin" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Escritorio" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index b2b9f75252a..d0a7c4cd740 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Kommentit" IDS_SHV_COLUMN10 "Omistaja" IDS_SHV_COLUMN11 "Ryhm" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Typyt" diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index d1fda84d685..df41379101d 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -596,8 +596,13 @@ BEGIN IDS_SHV_COLUMN9 "Commentaires" IDS_SHV_COLUMN10 "Propritaire" IDS_SHV_COLUMN11 "Groupe" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Localisation d'origine" IDS_SHV_COLUMN_DELDATE "Date de suppression" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Bureau" diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index f13e1a82ae9..370c4fd3d63 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -595,8 +595,13 @@ BEGIN IDS_SHV_COLUMN9 "Megjegyzsek" IDS_SHV_COLUMN10 "Tulajdonos" IDS_SHV_COLUMN11 "Csoport" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Asztal" diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 630ee78ca12..1530d2a2076 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -593,8 +593,13 @@ BEGIN IDS_SHV_COLUMN9 "Commenti" IDS_SHV_COLUMN10 "Proprietario" IDS_SHV_COLUMN11 "Gruppo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Posizione originale" IDS_SHV_COLUMN_DELDATE "Data di cancellazione" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index a916b5a7c5e..a0767b56845 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Rg" IDS_SHV_COLUMN10 "L" IDS_SHV_COLUMN11 "O[v" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "fXNgbv" diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index c8ddf2b4061..7ec532ed1c9 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 7646070b54e..358e9135f9f 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index 62d8a9516cc..e90433a219e 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -571,8 +571,13 @@ BEGIN IDS_SHV_COLUMN9 "Kommentarer" IDS_SHV_COLUMN10 "Eier" IDS_SHV_COLUMN11 "Gruppe" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Opprinnelig plassering" IDS_SHV_COLUMN_DELDATE "Dato slettet" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Skrivebord" diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index 4b5d0e33571..a0bc75683d8 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -598,8 +598,13 @@ BEGIN IDS_SHV_COLUMN9 "Komentarz" IDS_SHV_COLUMN10 "Waciciel" IDS_SHV_COLUMN11 "Grupa" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Lokacja oryginalna" IDS_SHV_COLUMN_DELDATE "Data usunicia" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Pulpit" diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index ffb735954e2..e96b707ee3f 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -594,8 +594,13 @@ BEGIN IDS_SHV_COLUMN9 "Comentrios" IDS_SHV_COLUMN10 "Dono" IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "rea de trabalho" diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 70b9c18da60..4c3094c5432 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -594,8 +594,13 @@ BEGIN IDS_SHV_COLUMN9 "Comentrios" IDS_SHV_COLUMN10 "Dono" IDS_SHV_COLUMN11 "Grupo" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Ambiente de trabalho" diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index d9ec9528dee..72f1bb754b7 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -591,8 +591,13 @@ BEGIN IDS_SHV_COLUMN9 "" IDS_SHV_COLUMN10 "" IDS_SHV_COLUMN11 "" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM " " IDS_SHV_COLUMN_DELDATE " " + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP " " diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index c26c7f9f376..802ac355577 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -598,8 +598,13 @@ BEGIN IDS_SHV_COLUMN9 "Poznmky" //Comments IDS_SHV_COLUMN10 "Vlastnk" IDS_SHV_COLUMN11 "Skupina" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Pvod" //Pvodn umiestnenie IDS_SHV_COLUMN_DELDATE "Odstrnen" //Dtum zmazania + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Pracovn plocha" diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index 7233f2b842e..63b80b1c380 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 97e9daa5883..c9da3be1074 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index f236f2f25b7..21454bb057b 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -592,8 +592,13 @@ BEGIN IDS_SHV_COLUMN9 "Aklamalar" IDS_SHV_COLUMN10 "Sahip" IDS_SHV_COLUMN11 "Grup" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "zgn konum" IDS_SHV_COLUMN_DELDATE "Silinme tarihi" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Masast" diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index a6db6508e25..0139ea37be4 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -593,8 +593,13 @@ BEGIN IDS_SHV_COLUMN9 "" IDS_SHV_COLUMN10 "" IDS_SHV_COLUMN11 "" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM " " IDS_SHV_COLUMN_DELDATE " " + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP " " diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 9972007aedf..23869ddc10e 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -581,8 +581,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "" diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index 0cb39c12550..cdc6ad2e378 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -593,8 +593,13 @@ BEGIN IDS_SHV_COLUMN9 "Comments" IDS_SHV_COLUMN10 "Owner" IDS_SHV_COLUMN11 "Group" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" IDS_SHV_COLUMN_DELFROM "Original location" IDS_SHV_COLUMN_DELDATE "Date deleted" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/shfldr_fonts.c b/reactos/dll/win32/shell32/shfldr_fonts.c index bfe43e957e3..8539a508a47 100644 --- a/reactos/dll/win32/shell32/shfldr_fonts.c +++ b/reactos/dll/win32/shell32/shfldr_fonts.c @@ -72,11 +72,19 @@ static const IPersistFolder2Vtbl vt_NP_PersistFolder2; #define _IPersistFolder2_(This) (IPersistFolder2*)&(This->lpVtblPersistFolder2) static shvheader FontsSFHeader[] = { - {IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, - {IDS_SHV_COLUMN9, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10} + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_FONTTYPE , SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN12, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} }; -#define FontsSHELLVIEWCOLUMNS 2 +#define COLUMN_NAME 0 +#define COLUMN_TYPE 1 +#define COLUMN_SIZE 2 +#define COLUMN_FILENAME 3 + + +#define FontsSHELLVIEWCOLUMNS (4) /************************************************************************** * ISF_Fonts_Constructor @@ -516,6 +524,27 @@ static HRESULT WINAPI ISF_Fonts_fnGetDetailsOf (IShellFolder2 * iface, LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) { IGenericSFImpl *This = (IGenericSFImpl *)iface; + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + + TRACE("(%p, %p, %d, %p)\n", This, pidl, iColumn, psd); + + if (iColumn >= FontsSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = FontsSFHeader[iColumn].fmt; + psd->cxChar = FontsSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, FontsSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.u.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + return IShellFolder2_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &psd->str); FIXME ("(%p)->(%p %i %p)\n", This, pidl, iColumn, psd); diff --git a/reactos/dll/win32/shell32/shfldr_netplaces.c b/reactos/dll/win32/shell32/shfldr_netplaces.c index 1216341d8ee..adf27f33fb6 100644 --- a/reactos/dll/win32/shell32/shfldr_netplaces.c +++ b/reactos/dll/win32/shell32/shfldr_netplaces.c @@ -45,6 +45,7 @@ #include "wine/debug.h" #include "debughlp.h" #include "shfldr.h" +#include "shlwapi.h" WINE_DEFAULT_DEBUG_CHANNEL (shell); @@ -73,11 +74,18 @@ static const IPersistFolder2Vtbl vt_NP_PersistFolder2; #define _IPersistFolder2_(This) (IPersistFolder2*)&(This->lpVtblPersistFolder2) static shvheader NetworkPlacesSFHeader[] = { - {IDS_SHV_COLUMN1, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, - {IDS_SHV_COLUMN9, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10} + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN13, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN_WORKGROUP, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_NETWORKLOCATION, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} }; -#define NETWORKPLACESSHELLVIEWCOLUMNS 2 +#define COLUMN_NAME 0 +#define COLUMN_CATEGORY 1 +#define COLUMN_WORKGROUP 2 +#define COLUMN_NETLOCATION 3 + +#define NETWORKPLACESSHELLVIEWCOLUMNS 4 /************************************************************************** * ISF_NetworkPlaces_Constructor @@ -209,11 +217,11 @@ static HRESULT WINAPI ISF_NetworkPlaces_fnEnumObjects (IShellFolder2 * iface, TRACE ("(%p)->(HWND=%p flags=0x%08x pplist=%p)\n", This, hwndOwner, dwFlags, ppEnumIDList); - *ppEnumIDList = IEnumIDList_Constructor(); + *ppEnumIDList = NULL; //IEnumIDList_Constructor(); TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList); - - return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; + return S_FALSE; + // return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; } /************************************************************************** @@ -517,6 +525,25 @@ static HRESULT WINAPI ISF_NetworkPlaces_fnGetDetailsOf (IShellFolder2 * iface, LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) { IGenericSFImpl *This = (IGenericSFImpl *)iface; + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + + if (iColumn >= NETWORKPLACESSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = NetworkPlacesSFHeader[iColumn].fmt; + psd->cxChar = NetworkPlacesSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, NetworkPlacesSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.u.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + return IShellFolder2_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &psd->str); FIXME ("(%p)->(%p %i %p)\n", This, pidl, iColumn, psd); diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index e93a0798928..7adea1d815e 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -145,6 +145,11 @@ #define IDS_FILE_FOLDER 307 #define IDS_CREATELINK 308 #define IDS_INSTALLNEWFONT 309 +#define IDS_SHV_COLUMN_FONTTYPE 310 +#define IDS_SHV_COLUMN12 311 +#define IDS_SHV_COLUMN13 312 +#define IDS_SHV_COLUMN_WORKGROUP 313 +#define IDS_SHV_NETWORKLOCATION 314 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 From fb10f6e7eaea819ff30514f0116b9a8fe86faede Mon Sep 17 00:00:00 2001 From: Pierre Schweitzer Date: Thu, 7 Aug 2008 09:11:14 +0000 Subject: [PATCH 179/304] Updated French translation for regedit.exe svn path=/trunk/; revision=35158 --- reactos/base/applications/regedit/lang/fr-FR.rc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/base/applications/regedit/lang/fr-FR.rc b/reactos/base/applications/regedit/lang/fr-FR.rc index a28b2e41fcb..b3e7f078d75 100644 --- a/reactos/base/applications/regedit/lang/fr-FR.rc +++ b/reactos/base/applications/regedit/lang/fr-FR.rc @@ -138,8 +138,8 @@ BEGIN MENUITEM "Valeur chane", ID_EDIT_NEW_STRINGVALUE MENUITEM "Valeur &binaire", ID_EDIT_NEW_BINARYVALUE MENUITEM "Valeur mot &double", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "Valeur chane &multiple", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Valeur chane &extensible", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END END POPUP "" @@ -152,8 +152,8 @@ BEGIN MENUITEM "Valeur chane", ID_EDIT_NEW_STRINGVALUE MENUITEM "Valeur &binaire", ID_EDIT_NEW_BINARYVALUE MENUITEM "Valeur mot &double", ID_EDIT_NEW_DWORDVALUE - MENUITEM "&Multi-String Value", ID_EDIT_NEW_MULTISTRINGVALUE - MENUITEM "&Expandable String Value", ID_EDIT_NEW_EXPANDABLESTRINGVALUE + MENUITEM "Valeur chane &multiple", ID_EDIT_NEW_MULTISTRINGVALUE + MENUITEM "Valeur chane &extensible", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END MENUITEM "Cherche", ID_EDIT_FIND MENUITEM SEPARATOR From 37fb2794f07cbee86b9aafe902972e5a1c54da0d Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Thu, 7 Aug 2008 10:53:23 +0000 Subject: [PATCH 180/304] Sync Winhlp32 and Wordpad to Wine HEAD (Still the same problems with wordpad....) svn path=/trunk/; revision=35159 --- reactos/base/applications/winhlp32/hlpfile.c | 133 +++++++++-------- reactos/base/applications/winhlp32/hlpfile.h | 5 + .../base/applications/winhlp32/lang/da-DK.rc | 2 - .../base/applications/winhlp32/lang/de-DE.rc | 2 - .../base/applications/winhlp32/lang/en-US.rc | 2 - .../base/applications/winhlp32/lang/fr-FR.rc | 2 - .../base/applications/winhlp32/lang/ko-KR.rc | 9 +- .../base/applications/winhlp32/lang/nl-NL.rc | 10 +- .../base/applications/winhlp32/lang/no-NO.rc | 16 +- .../base/applications/winhlp32/lang/pl-PL.rc | 2 - .../base/applications/winhlp32/lang/ru-RU.rc | 6 +- .../base/applications/winhlp32/lang/sl-SI.rc | 2 - reactos/base/applications/winhlp32/lex.yy.c | 107 +++++++------ reactos/base/applications/winhlp32/macro.c | 23 ++- .../base/applications/winhlp32/macro.lex.l | 67 +++++---- reactos/base/applications/winhlp32/winhelp.c | 42 ++++-- reactos/base/applications/winhlp32/winhelp.h | 1 + reactos/base/applications/wordpad/En.rc | 4 + reactos/base/applications/wordpad/Nl.rc | 141 +++++++++--------- reactos/base/applications/wordpad/No.rc | 4 + reactos/base/applications/wordpad/print.c | 2 +- reactos/base/applications/wordpad/wordpad.c | 41 ++++- reactos/base/applications/wordpad/wordpad.h | 6 +- 23 files changed, 377 insertions(+), 252 deletions(-) diff --git a/reactos/base/applications/winhlp32/hlpfile.c b/reactos/base/applications/winhlp32/hlpfile.c index 93042ead4e0..77be1378e34 100644 --- a/reactos/base/applications/winhlp32/hlpfile.c +++ b/reactos/base/applications/winhlp32/hlpfile.c @@ -55,19 +55,19 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE*, LPCSTR); static BOOL HLPFILE_ReadFileToBuffer(HLPFILE*, HFILE); static BOOL HLPFILE_FindSubFile(HLPFILE*, LPCSTR, BYTE**, BYTE**); static BOOL HLPFILE_SystemCommands(HLPFILE*); -static INT HLPFILE_UncompressedLZ77_Size(BYTE *ptr, BYTE *end); -static BYTE* HLPFILE_UncompressLZ77(BYTE *ptr, BYTE *end, BYTE *newptr); +static INT HLPFILE_UncompressedLZ77_Size(const BYTE *ptr, const BYTE *end); +static BYTE* HLPFILE_UncompressLZ77(const BYTE *ptr, const BYTE *end, BYTE *newptr); static BOOL HLPFILE_UncompressLZ77_Phrases(HLPFILE*); static BOOL HLPFILE_Uncompress_Phrases40(HLPFILE*); static BOOL HLPFILE_Uncompress_Topic(HLPFILE*); static BOOL HLPFILE_GetContext(HLPFILE*); static BOOL HLPFILE_GetKeywords(HLPFILE*); static BOOL HLPFILE_GetMap(HLPFILE*); -static BOOL HLPFILE_AddPage(HLPFILE*, BYTE*, BYTE*, unsigned, unsigned); -static BOOL HLPFILE_SkipParagraph(HLPFILE*, BYTE *, BYTE*, unsigned*); +static BOOL HLPFILE_AddPage(HLPFILE*, const BYTE*, const BYTE*, unsigned, unsigned); +static BOOL HLPFILE_SkipParagraph(HLPFILE*, const BYTE*, const BYTE*, unsigned*); static void HLPFILE_Uncompress2(HLPFILE*, const BYTE*, const BYTE*, BYTE*, const BYTE*); static BOOL HLPFILE_Uncompress3(HLPFILE*, char*, const char*, const BYTE*, const BYTE*); -static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE** dst, unsigned dstsz); +static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE* dst, unsigned dstsz); static BOOL HLPFILE_ReadFont(HLPFILE* hlpfile); /*********************************************************************** @@ -370,10 +370,10 @@ static BOOL HLPFILE_DoReadHlpFile(HLPFILE *hlpfile, LPCSTR lpszPath) * * HLPFILE_AddPage */ -static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned ref, unsigned offset) +static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, const BYTE *buf, const BYTE *end, unsigned ref, unsigned offset) { HLPFILE_PAGE* page; - BYTE* title; + const BYTE* title; UINT titlesize, blocksize, datalen; char* ptr; HLPFILE_MACRO*macro; @@ -457,70 +457,70 @@ static BOOL HLPFILE_AddPage(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned ref return TRUE; } -static long fetch_long(BYTE** ptr) +static long fetch_long(const BYTE** ptr) { long ret; if (*(*ptr) & 1) { - ret = (*(unsigned long*)(*ptr) - 0x80000000L) / 2; + ret = (*(const unsigned long*)(*ptr) - 0x80000000L) / 2; (*ptr) += 4; } else { - ret = (*(unsigned short*)(*ptr) - 0x8000) / 2; + ret = (*(const unsigned short*)(*ptr) - 0x8000) / 2; (*ptr) += 2; } return ret; } -static unsigned long fetch_ulong(BYTE** ptr) +static unsigned long fetch_ulong(const BYTE** ptr) { unsigned long ret; if (*(*ptr) & 1) { - ret = *(unsigned long*)(*ptr) / 2; + ret = *(const unsigned long*)(*ptr) / 2; (*ptr) += 4; } else { - ret = *(unsigned short*)(*ptr) / 2; + ret = *(const unsigned short*)(*ptr) / 2; (*ptr) += 2; } return ret; } -static short fetch_short(BYTE** ptr) +static short fetch_short(const BYTE** ptr) { short ret; if (*(*ptr) & 1) { - ret = (*(unsigned short*)(*ptr) - 0x8000) / 2; + ret = (*(const unsigned short*)(*ptr) - 0x8000) / 2; (*ptr) += 2; } else { - ret = (*(unsigned char*)(*ptr) - 0x80) / 2; + ret = (*(const unsigned char*)(*ptr) - 0x80) / 2; (*ptr)++; } return ret; } -static unsigned short fetch_ushort(BYTE** ptr) +static unsigned short fetch_ushort(const BYTE** ptr) { unsigned short ret; if (*(*ptr) & 1) { - ret = *(unsigned short*)(*ptr) / 2; + ret = *(const unsigned short*)(*ptr) / 2; (*ptr) += 2; } else { - ret = *(unsigned char*)(*ptr) / 2; + ret = *(const unsigned char*)(*ptr) / 2; (*ptr)++; } return ret; @@ -530,9 +530,9 @@ static unsigned short fetch_ushort(BYTE** ptr) * * HLPFILE_SkipParagraph */ -static BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsigned* len) +static BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, const BYTE *buf, const BYTE *end, unsigned* len) { - BYTE *tmp; + const BYTE *tmp; if (!hlpfile->first_page) {WINE_WARN("no page\n"); return FALSE;}; if (buf + 0x19 > end) {WINE_WARN("header too small\n"); return FALSE;}; @@ -553,11 +553,11 @@ static BOOL HLPFILE_SkipParagraph(HLPFILE *hlpfile, BYTE *buf, BYTE *end, unsign * * Decompress the data part of a bitmap or a metafile */ -static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE packing) +static const BYTE* HLPFILE_DecompressGfx(const BYTE* src, unsigned csz, unsigned sz, BYTE packing, + BYTE** alloc) { - BYTE* dst; + const BYTE* dst; BYTE* tmp; - BYTE* tmp2; unsigned sz77; WINE_TRACE("Unpacking (%d) from %u bytes to %u bytes\n", packing, csz, sz); @@ -568,19 +568,18 @@ static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE if (sz != csz) WINE_WARN("Bogus gfx sizes (uncompressed): %u / %u\n", sz, csz); dst = src; + *alloc = NULL; break; case 1: /* RunLen */ - tmp = dst = HeapAlloc(GetProcessHeap(), 0, sz); + dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz); if (!dst) return NULL; - HLPFILE_UncompressRLE(src, src + csz, &tmp, sz); - if (tmp - dst != sz) - WINE_WARN("Bogus gfx sizes (RunLen): %lu/%u\n", (SIZE_T)(tmp - dst), sz); + HLPFILE_UncompressRLE(src, src + csz, *alloc, sz); break; case 2: /* LZ77 */ sz77 = HLPFILE_UncompressedLZ77_Size(src, src + csz); - dst = HeapAlloc(GetProcessHeap(), 0, sz77); + dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz77); if (!dst) return NULL; - HLPFILE_UncompressLZ77(src, src + csz, dst); + HLPFILE_UncompressLZ77(src, src + csz, *alloc); if (sz77 != sz) WINE_WARN("Bogus gfx sizes (LZ77): %u / %u\n", sz77, sz); break; @@ -589,15 +588,13 @@ static BYTE* HLPFILE_DecompressGfx(BYTE* src, unsigned csz, unsigned sz, BYTE tmp = HeapAlloc(GetProcessHeap(), 0, sz77); if (!tmp) return FALSE; HLPFILE_UncompressLZ77(src, src + csz, tmp); - dst = tmp2 = HeapAlloc(GetProcessHeap(), 0, sz); + dst = *alloc = HeapAlloc(GetProcessHeap(), 0, sz); if (!dst) { HeapFree(GetProcessHeap(), 0, tmp); return FALSE; } - HLPFILE_UncompressRLE(tmp, tmp + sz77, &tmp2, sz); - if (tmp2 - dst != sz) - WINE_WARN("Bogus gfx sizes (LZ77+RunLen): %lu / %u\n", (SIZE_T)(tmp2 - dst), sz); + HLPFILE_UncompressRLE(tmp, tmp + sz77, *alloc, sz); HeapFree(GetProcessHeap(), 0, tmp); break; default: @@ -779,10 +776,11 @@ static BOOL HLPFILE_RtfAddTransparentBitmap(struct RtfData* rd, const BITMAPINFO * HLPFILE_RtfAddBitmap * */ -static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, BYTE* beg, BYTE type, BYTE pack) +static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, const BYTE* beg, BYTE type, BYTE pack) { - BYTE* ptr; - BYTE* pict_beg; + const BYTE* ptr; + const BYTE* pict_beg; + BYTE* alloc = NULL; BITMAPINFO* bi; unsigned long off, csz; unsigned nc = 0; @@ -840,7 +838,7 @@ static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, BYTE* beg, BYTE type, BYTE ptr += 4; } } - pict_beg = HLPFILE_DecompressGfx(beg + off, csz, bi->bmiHeader.biSizeImage, pack); + pict_beg = HLPFILE_DecompressGfx(beg + off, csz, bi->bmiHeader.biSizeImage, pack, &alloc); if (clrImportant == 1 && nc > 0) { @@ -868,7 +866,7 @@ static BOOL HLPFILE_RtfAddBitmap(struct RtfData* rd, BYTE* beg, BYTE type, BYTE ret = TRUE; done: HeapFree(GetProcessHeap(), 0, bi); - if (pict_beg != beg + off) HeapFree(GetProcessHeap(), 0, pict_beg); + HeapFree(GetProcessHeap(), 0, alloc); return ret; } @@ -877,12 +875,13 @@ done: * HLPFILE_RtfAddMetaFile * */ -static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack) +static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, const BYTE* beg, BYTE pack) { - BYTE* ptr; + const BYTE* ptr; unsigned long size, csize; unsigned long off, hsoff; - BYTE* bits; + const BYTE* bits; + BYTE* alloc = NULL; char tmp[256]; unsigned mm; BOOL ret; @@ -907,13 +906,13 @@ static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack) WINE_TRACE("sz=%lu csz=%lu offs=%lu/%u,%lu\n", size, csize, off, ptr - beg, hsoff); - bits = HLPFILE_DecompressGfx(beg + off, csize, size, pack); + bits = HLPFILE_DecompressGfx(beg + off, csize, size, pack, &alloc); if (!bits) return FALSE; ret = HLPFILE_RtfAddHexBytes(rd, bits, size) && HLPFILE_RtfAddControl(rd, "}"); - if (bits != beg + off) HeapFree(GetProcessHeap(), 0, bits); + HeapFree(GetProcessHeap(), 0, alloc); return ret; } @@ -923,7 +922,7 @@ static BOOL HLPFILE_RtfAddMetaFile(struct RtfData* rd, BYTE* beg, BYTE pack) * */ static BOOL HLPFILE_RtfAddGfxByAddr(struct RtfData* rd, HLPFILE *hlpfile, - BYTE* ref, unsigned long size) + const BYTE* ref, unsigned long size) { unsigned i, numpict; @@ -932,9 +931,9 @@ static BOOL HLPFILE_RtfAddGfxByAddr(struct RtfData* rd, HLPFILE *hlpfile, for (i = 0; i < numpict; i++) { - BYTE* beg; - BYTE* ptr; - BYTE type, pack; + const BYTE* beg; + const BYTE* ptr; + BYTE type, pack; WINE_TRACE("Offset[%d] = %x\n", i, GET_UINT(ref, (1 + i) * 4)); beg = ptr = ref + GET_UINT(ref, (1 + i) * 4); @@ -1043,7 +1042,7 @@ static BOOL HLPFILE_BrowseParagraph(HLPFILE_PAGE* page, struct RtfData* rd, BYTE *buf, BYTE* end, unsigned* parlen) { UINT textsize; - BYTE *format, *format_end; + const BYTE *format, *format_end; char *text, *text_base, *text_end; long size, blocksize, datalen; unsigned short bits; @@ -1640,7 +1639,7 @@ BOOL HLPFILE_BrowsePage(HLPFILE_PAGE* page, struct RtfData* rd, case 0x20: case 0x23: if (!HLPFILE_BrowseParagraph(page, rd, buf, end, &parlen)) return FALSE; - if (relative >= index * 0x8000 + offs) + if (relative > index * 0x8000 + offs) rd->char_pos_rel = rd->char_pos; offs += parlen; break; @@ -1887,6 +1886,17 @@ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile) hlpfile->flags = flags; hlpfile->charset = DEFAULT_CHARSET; + if (hlpfile->version <= 16) + { + char *str = (char*)buf + 0x15; + + hlpfile->lpszTitle = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1); + if (!hlpfile->lpszTitle) return FALSE; + lstrcpy(hlpfile->lpszTitle, str); + WINE_TRACE("Title: %s\n", hlpfile->lpszTitle); + /* Nothing more to parse */ + return TRUE; + } for (ptr = buf + 0x15; ptr + 4 <= end; ptr += GET_USHORT(ptr, 2) + 4) { char *str = (char*) ptr + 4; @@ -1996,7 +2006,7 @@ static BOOL HLPFILE_SystemCommands(HLPFILE* hlpfile) * * HLPFILE_UncompressedLZ77_Size */ -static INT HLPFILE_UncompressedLZ77_Size(BYTE *ptr, BYTE *end) +static INT HLPFILE_UncompressedLZ77_Size(const BYTE *ptr, const BYTE *end) { int i, newsize = 0; @@ -2023,7 +2033,7 @@ static INT HLPFILE_UncompressedLZ77_Size(BYTE *ptr, BYTE *end) * * HLPFILE_UncompressLZ77 */ -static BYTE *HLPFILE_UncompressLZ77(BYTE *ptr, BYTE *end, BYTE *newptr) +static BYTE *HLPFILE_UncompressLZ77(const BYTE *ptr, const BYTE *end, BYTE *newptr) { int i; @@ -2349,10 +2359,10 @@ static BOOL HLPFILE_Uncompress3(HLPFILE* hlpfile, char* dst, const char* dst_end * * */ -static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE** dst, unsigned dstsz) +static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE* dst, unsigned dstsz) { BYTE ch; - BYTE* sdst = *dst + dstsz; + BYTE* sdst = dst + dstsz; while (src < end) { @@ -2360,21 +2370,21 @@ static void HLPFILE_UncompressRLE(const BYTE* src, const BYTE* end, BYTE** dst, if (ch & 0x80) { ch &= 0x7F; - if ((*dst) + ch <= sdst) - memcpy(*dst, src, ch); + if (dst + ch <= sdst) + memcpy(dst, src, ch); src += ch; } else { - if ((*dst) + ch <= sdst) - memset(*dst, (char)*src, ch); + if (dst + ch <= sdst) + memset(dst, (char)*src, ch); src++; } - *dst += ch; + dst += ch; } - if (*dst != sdst) + if (dst != sdst) WINE_WARN("Buffer X-flow: d(%lu) instead of d(%u)\n", - (SIZE_T)(*dst - (sdst - dstsz)), dstsz); + (SIZE_T)(dst - (sdst - dstsz)), dstsz); } /************************************************************************** @@ -2641,5 +2651,6 @@ void HLPFILE_FreeHlpFile(HLPFILE* hlpfile) HeapFree(GetProcessHeap(), 0, hlpfile->phrases_offsets); HeapFree(GetProcessHeap(), 0, hlpfile->phrases_buffer); HeapFree(GetProcessHeap(), 0, hlpfile->topic_map); + HeapFree(GetProcessHeap(), 0, hlpfile->help_on_file); HeapFree(GetProcessHeap(), 0, hlpfile); } diff --git a/reactos/base/applications/winhlp32/hlpfile.h b/reactos/base/applications/winhlp32/hlpfile.h index d1467c1208d..829a9b9fff5 100644 --- a/reactos/base/applications/winhlp32/hlpfile.h +++ b/reactos/base/applications/winhlp32/hlpfile.h @@ -132,6 +132,11 @@ typedef struct tagHlpFileFile unsigned numWindows; HLPFILE_WINDOWINFO* windows; HICON hIcon; + + BOOL has_popup_color; + COLORREF popup_color; + + LPSTR help_on_file; } HLPFILE; /* diff --git a/reactos/base/applications/winhlp32/lang/da-DK.rc b/reactos/base/applications/winhlp32/lang/da-DK.rc index 886943ae381..927fc32079f 100644 --- a/reactos/base/applications/winhlp32/lang/da-DK.rc +++ b/reactos/base/applications/winhlp32/lang/da-DK.rc @@ -73,8 +73,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Annuller", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/de-DE.rc b/reactos/base/applications/winhlp32/lang/de-DE.rc index 1be4838fd1e..49cda6d152e 100644 --- a/reactos/base/applications/winhlp32/lang/de-DE.rc +++ b/reactos/base/applications/winhlp32/lang/de-DE.rc @@ -72,8 +72,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Abbrechen", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/en-US.rc b/reactos/base/applications/winhlp32/lang/en-US.rc index 7c46e2b2879..1276f9ccc1e 100644 --- a/reactos/base/applications/winhlp32/lang/en-US.rc +++ b/reactos/base/applications/winhlp32/lang/en-US.rc @@ -72,8 +72,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Cancel", IDCANCEL, 120, 170, 50, 12 } IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_ENGLISH, SUBLANG_DEFAULT diff --git a/reactos/base/applications/winhlp32/lang/fr-FR.rc b/reactos/base/applications/winhlp32/lang/fr-FR.rc index 2c6d112c2ea..60acba8b5f8 100644 --- a/reactos/base/applications/winhlp32/lang/fr-FR.rc +++ b/reactos/base/applications/winhlp32/lang/fr-FR.rc @@ -75,8 +75,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Annuler", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/ko-KR.rc b/reactos/base/applications/winhlp32/lang/ko-KR.rc index 18c59ab9196..3b059741b91 100644 --- a/reactos/base/applications/winhlp32/lang/ko-KR.rc +++ b/reactos/base/applications/winhlp32/lang/ko-KR.rc @@ -73,10 +73,15 @@ FONT 8, "MS Shell Dlg" CAPTION "ε" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "Ȯ(&O)", IDOK, 40, 170, 50, 12 - PUSHBUTTON "(&C)", IDCANCEL, 120, 170, 50, 12 } +IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_KOREAN, SUBLANG_DEFAULT +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "ã" +{ + LTEXT " ", -1, 10, 10, 180, 150 +} /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/nl-NL.rc b/reactos/base/applications/winhlp32/lang/nl-NL.rc index 4dece1d4903..6a8747a859e 100644 --- a/reactos/base/applications/winhlp32/lang/nl-NL.rc +++ b/reactos/base/applications/winhlp32/lang/nl-NL.rc @@ -72,8 +72,14 @@ FONT 8, "MS Shell Dlg" CAPTION "Index" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Annuleren", IDCANCEL, 120, 170, 50, 12 +} + +IDD_SEARCH DIALOG DISCARDABLE 0, 0, 200, 190 LANGUAGE LANG_DUTCH, SUBLANG_NEUTRAL +STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU +FONT 8, "MS Shell Dlg" +CAPTION "Zoeken" +{ + LTEXT "Nog niet geimplementeerd", -1, 10, 10, 180, 150 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/no-NO.rc b/reactos/base/applications/winhlp32/lang/no-NO.rc index 2301c7cd966..1632da6d427 100644 --- a/reactos/base/applications/winhlp32/lang/no-NO.rc +++ b/reactos/base/applications/winhlp32/lang/no-NO.rc @@ -26,17 +26,17 @@ MAIN_MENU MENU LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL MENUITEM "&pne", MNID_FILE_OPEN MENUITEM SEPARATOR MENUITEM "Skriv &ut", MNID_FILE_PRINT - MENUITEM "Opp&sett av skriveren ...", MNID_FILE_SETUP + MENUITEM "Opp&sett av skriveren...", MNID_FILE_SETUP MENUITEM SEPARATOR MENUITEM "&Avslutt", MNID_FILE_EXIT } POPUP "R&ediger" { - MENUITEM "&Kopier ...", MNID_EDIT_COPYDLG + MENUITEM "&Kopier...", MNID_EDIT_COPYDLG MENUITEM SEPARATOR - MENUITEM "K&ommenter ...", MNID_EDIT_ANNOTATE + MENUITEM "K&ommenter...", MNID_EDIT_ANNOTATE } POPUP "&Bokmerke" { - MENUITEM "&Definer ...", MNID_BKMK_DEFINE + MENUITEM "&Definer...", MNID_BKMK_DEFINE } POPUP "&Innstillinger" { POPUP "Synlighet" @@ -58,7 +58,7 @@ MAIN_MENU MENU LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL MENUITEM "&Hjelp til Hjelp", MNID_HELP_HELPON MENUITEM "All&tid verst", MNID_HELP_HELPTOP MENUITEM SEPARATOR - MENUITEM "&Informasjon ...", MNID_HELP_ABOUT + MENUITEM "&Informasjon...", MNID_HELP_ABOUT #ifdef WINELIB MENUITEM "&Om Wine", MNID_HELP_WINE #endif @@ -71,8 +71,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Innhold" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Avbryt", IDCANCEL, 120, 170, 50, 12 } /* Strings */ @@ -98,9 +96,9 @@ CONTEXT_MENU MENU LANGUAGE LANG_NORWEGIAN, SUBLANG_NORWEGIAN_BOKMAL BEGIN POPUP "" BEGIN - MENUITEM "Kommentar ...", MNID_CTXT_ANNOTATE + MENUITEM "Kommentar...", MNID_CTXT_ANNOTATE MENUITEM "Kopier", MNID_CTXT_COPY - MENUITEM "Skriv ut ...", MNID_CTXT_PRINT + MENUITEM "Skriv ut...", MNID_CTXT_PRINT POPUP "Skriftstrrelse" BEGIN MENUITEM "Liten", MNID_CTXT_FONTS_SMALL diff --git a/reactos/base/applications/winhlp32/lang/pl-PL.rc b/reactos/base/applications/winhlp32/lang/pl-PL.rc index b8234273e64..17d5d22e346 100644 --- a/reactos/base/applications/winhlp32/lang/pl-PL.rc +++ b/reactos/base/applications/winhlp32/lang/pl-PL.rc @@ -73,8 +73,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Indeks" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Anuluj", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lang/ru-RU.rc b/reactos/base/applications/winhlp32/lang/ru-RU.rc index b2ea9ad5656..af0097b7eea 100644 --- a/reactos/base/applications/winhlp32/lang/ru-RU.rc +++ b/reactos/base/applications/winhlp32/lang/ru-RU.rc @@ -71,8 +71,6 @@ FONT 8, "MS Shell Dlg" CAPTION "" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&OK", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&", IDCANCEL, 120, 170, 50, 12 } /* Strings */ @@ -85,13 +83,13 @@ STID_INFO, " STID_NOT_IMPLEMENTED, " " STID_HLPFILE_ERROR_s, " `%s'" STID_INDEX, "&" -STID_CONTENTS, "Summary" +STID_CONTENTS, "" STID_BACK, "&" STID_ALL_FILES, " (*.*)" STID_HELP_FILES_HLP, " (*.hlp)" STID_FILE_NOT_FOUND_s " '%s'. ?" STID_NO_RICHEDIT " richedit" -STID_PSH_INDEX, "Help topics: " +STID_PSH_INDEX, ": " } CONTEXT_MENU MENU LANGUAGE LANG_RUSSIAN, SUBLANG_DEFAULT diff --git a/reactos/base/applications/winhlp32/lang/sl-SI.rc b/reactos/base/applications/winhlp32/lang/sl-SI.rc index f28b9f1c028..f1a213d9ab9 100644 --- a/reactos/base/applications/winhlp32/lang/sl-SI.rc +++ b/reactos/base/applications/winhlp32/lang/sl-SI.rc @@ -73,8 +73,6 @@ FONT 8, "MS Shell Dlg" CAPTION "Indeks" { LISTBOX IDC_INDEXLIST, 10, 10, 180, 150, LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_BORDER - PUSHBUTTON "&V redu", IDOK, 40, 170, 50, 12 - PUSHBUTTON "&Prekliči", IDCANCEL, 120, 170, 50, 12 } /* Strings */ diff --git a/reactos/base/applications/winhlp32/lex.yy.c b/reactos/base/applications/winhlp32/lex.yy.c index 5747c715bd5..c91bc9e2b9d 100644 --- a/reactos/base/applications/winhlp32/lex.yy.c +++ b/reactos/base/applications/winhlp32/lex.yy.c @@ -387,7 +387,7 @@ char *yytext; * Help Viewer * * Copyright 1996 Ulrich Schmid - * Copyright 2002 Eric Pouech + * Copyright 2002,2008 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -421,16 +421,22 @@ char *yytext; WINE_DEFAULT_DEBUG_CHANNEL(winhelp); -static LPCSTR macroptr; -static LPSTR strptr; -static int quote_stack[32]; -static unsigned int quote_stk_idx = 0; +struct lex_data { + LPCSTR macroptr; + LPSTR strptr; + int quote_stack[32]; + unsigned quote_stk_idx; + LPSTR cache_string[32]; + int cache_used; +}; +static struct lex_data* lex_data = NULL; + struct lexret yylval; #define YY_INPUT(buf,result,max_size)\ - if ((result = *macroptr ? 1 : 0)) buf[0] = *macroptr++; + if ((result = *lex_data->macroptr ? 1 : 0)) buf[0] = *lex_data->macroptr++; -#line 434 "lex.yy.c" +#line 440 "lex.yy.c" /* Macros after this point can all be overridden by user definitions in * section 1. @@ -581,10 +587,10 @@ YY_DECL register char *yy_cp, *yy_bp; register int yy_act; -#line 49 "macro.lex.l" +#line 55 "macro.lex.l" -#line 588 "lex.yy.c" +#line 594 "lex.yy.c" if ( yy_init ) { @@ -669,92 +675,94 @@ do_action: /* This label is used only to access EOF actions. */ case 1: YY_RULE_SETUP -#line 51 "macro.lex.l" +#line 57 "macro.lex.l" yylval.integer = strtol(yytext, NULL, 10); return INTEGER; YY_BREAK case 2: YY_RULE_SETUP -#line 52 "macro.lex.l" +#line 58 "macro.lex.l" yylval.integer = strtol(yytext, NULL, 16); return INTEGER; YY_BREAK case 3: YY_RULE_SETUP -#line 54 "macro.lex.l" +#line 60 "macro.lex.l" return MACRO_Lookup(yytext, &yylval); YY_BREAK case 4: -#line 57 "macro.lex.l" +#line 63 "macro.lex.l" case 5: -#line 58 "macro.lex.l" +#line 64 "macro.lex.l" case 6: -#line 59 "macro.lex.l" +#line 65 "macro.lex.l" case 7: -#line 60 "macro.lex.l" +#line 66 "macro.lex.l" case 8: -#line 61 "macro.lex.l" +#line 67 "macro.lex.l" case 9: YY_RULE_SETUP -#line 61 "macro.lex.l" +#line 67 "macro.lex.l" { - if (quote_stk_idx == 0 || - (yytext[0] == '\"' && quote_stack[quote_stk_idx - 1] != '\"') || + if (lex_data->quote_stk_idx == 0 || + (yytext[0] == '\"' && lex_data->quote_stack[lex_data->quote_stk_idx - 1] != '\"') || (yytext[0] == '`')) { /* opening a new one */ - if (quote_stk_idx == 0) + if (lex_data->quote_stk_idx == 0) { - strptr = HeapAlloc(GetProcessHeap(), 0, strlen(macroptr) + 1); - yylval.string = strptr; + assert(lex_data->cache_used < sizeof(lex_data->cache_string) / sizeof(lex_data->cache_string[0])); + lex_data->strptr = lex_data->cache_string[lex_data->cache_used] = HeapAlloc(GetProcessHeap(), 0, strlen(lex_data->macroptr) + 1); + yylval.string = lex_data->strptr; + lex_data->cache_used++; BEGIN(quote); } - else *strptr++ = yytext[0]; - quote_stack[quote_stk_idx++] = yytext[0]; - assert(quote_stk_idx < sizeof(quote_stack) / sizeof(quote_stack[0])); + else *lex_data->strptr++ = yytext[0]; + lex_data->quote_stack[lex_data->quote_stk_idx++] = yytext[0]; + assert(lex_data->quote_stk_idx < sizeof(lex_data->quote_stack) / sizeof(lex_data->quote_stack[0])); } else { if (yytext[0] == '`') assert(0); /* close the current quote */ - if (--quote_stk_idx == 0) + if (--lex_data->quote_stk_idx == 0) { BEGIN INITIAL; - *strptr++ = '\0'; + *lex_data->strptr++ = '\0'; return STRING; } - else *strptr++ = yytext[0]; + else *lex_data->strptr++ = yytext[0]; } } YY_BREAK case 10: YY_RULE_SETUP -#line 91 "macro.lex.l" -*strptr++ = yytext[0]; +#line 99 "macro.lex.l" +*lex_data->strptr++ = yytext[0]; YY_BREAK case 11: YY_RULE_SETUP -#line 92 "macro.lex.l" -*strptr++ = yytext[1]; +#line 100 "macro.lex.l" +*lex_data->strptr++ = yytext[1]; YY_BREAK case YY_STATE_EOF(quote): -#line 93 "macro.lex.l" +#line 101 "macro.lex.l" return 0; YY_BREAK case 12: YY_RULE_SETUP -#line 95 "macro.lex.l" +#line 103 "macro.lex.l" YY_BREAK case 13: YY_RULE_SETUP -#line 96 "macro.lex.l" +#line 104 "macro.lex.l" return yytext[0]; YY_BREAK case 14: YY_RULE_SETUP -#line 97 "macro.lex.l" +#line 105 "macro.lex.l" ECHO; YY_BREAK -#line 758 "lex.yy.c" +#line 766 "lex.yy.c" case YY_STATE_EOF(INITIAL): yyterminate(); @@ -1640,7 +1648,7 @@ int main() return 0; } #endif -#line 97 "macro.lex.l" +#line 105 "macro.lex.l" #if 0 @@ -1807,11 +1815,17 @@ static int MACRO_CallVoidFunc(FARPROC fn, const char* args) BOOL MACRO_ExecuteMacro(LPCSTR macro) { + struct lex_data curr_lex_data, *prev_lex_data; + BOOL ret = TRUE; int t; WINE_TRACE("%s\n", wine_dbgstr_a(macro)); - macroptr = macro; + prev_lex_data = lex_data; + lex_data = &curr_lex_data; + + memset(lex_data, 0, sizeof(*lex_data)); + lex_data->macroptr = macro; while ((t = yylex()) != EMPTY) { @@ -1830,17 +1844,18 @@ BOOL MACRO_ExecuteMacro(LPCSTR macro) } switch (t = yylex()) { - case EMPTY: return 1; + case EMPTY: goto done; case ';': break; - default: return 0; + default: ret = FALSE; goto done; } } - HeapFree(GetProcessHeap(), 0, strptr); - strptr = NULL; - quote_stk_idx = 0; +done: + for (t = 0; t < lex_data->cache_used; t++) + HeapFree(GetProcessHeap(), 0, lex_data->cache_string[t]); + lex_data = prev_lex_data; - return 1; + return ret; } #ifndef yywrap diff --git a/reactos/base/applications/winhlp32/macro.c b/reactos/base/applications/winhlp32/macro.c index d8607c58d64..19bf19619ff 100644 --- a/reactos/base/applications/winhlp32/macro.c +++ b/reactos/base/applications/winhlp32/macro.c @@ -2,7 +2,7 @@ * Help Viewer * * Copyright 1996 Ulrich Schmid - * Copyright 2002 Eric Pouech + * Copyright 2002, 2008 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -555,8 +555,14 @@ void CALLBACK MACRO_GotoMark(LPCSTR str) void CALLBACK MACRO_HelpOn(void) { + LPCSTR file; + WINE_TRACE("()\n"); - MACRO_JumpContents((Globals.wVersion > 4) ? "winhelp32.hlp" : "winhelp.hlp", NULL); + file = Globals.active_win->page->file->help_on_file; + if (!file) + file = (Globals.wVersion > 4) ? "winhlp32.hlp" : "winhelp.hlp"; + + MACRO_JumpContents(file, NULL); } void CALLBACK MACRO_HelpOnTop(void) @@ -890,12 +896,19 @@ void CALLBACK MACRO_SetContents(LPCSTR str, LONG u) void CALLBACK MACRO_SetHelpOnFile(LPCSTR str) { - WINE_FIXME("(\"%s\")\n", str); + WINE_TRACE("(\"%s\")\n", str); + + HeapFree(GetProcessHeap(), 0, Globals.active_win->page->file->help_on_file); + Globals.active_win->page->file->help_on_file = HeapAlloc(GetProcessHeap(), 0, strlen(str) + 1); + if (Globals.active_win->page->file->help_on_file) + strcpy(Globals.active_win->page->file->help_on_file, str); } -void CALLBACK MACRO_SetPopupColor(LONG u1, LONG u2, LONG u3) +void CALLBACK MACRO_SetPopupColor(LONG r, LONG g, LONG b) { - WINE_FIXME("(%u, %u, %u)\n", u1, u2, u3); + WINE_TRACE("(%x, %x, %x)\n", r, g, b); + Globals.active_win->page->file->has_popup_color = TRUE; + Globals.active_win->page->file->popup_color = RGB(r, g, b); } void CALLBACK MACRO_ShellExecute(LPCSTR str1, LPCSTR str2, LONG u1, LONG u2, LPCSTR str3, LPCSTR str4) diff --git a/reactos/base/applications/winhlp32/macro.lex.l b/reactos/base/applications/winhlp32/macro.lex.l index 03c518f2959..0594a2d6fc5 100644 --- a/reactos/base/applications/winhlp32/macro.lex.l +++ b/reactos/base/applications/winhlp32/macro.lex.l @@ -3,7 +3,7 @@ * Help Viewer * * Copyright 1996 Ulrich Schmid - * Copyright 2002 Eric Pouech + * Copyright 2002,2008 Eric Pouech * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -36,14 +36,20 @@ WINE_DEFAULT_DEBUG_CHANNEL(winhelp); -static LPCSTR macroptr; -static LPSTR strptr; -static int quote_stack[32]; -static unsigned int quote_stk_idx = 0; +struct lex_data { + LPCSTR macroptr; + LPSTR strptr; + int quote_stack[32]; + unsigned quote_stk_idx; + LPSTR cache_string[32]; + int cache_used; +}; +static struct lex_data* lex_data = NULL; + struct lexret yylval; #define YY_INPUT(buf,result,max_size)\ - if ((result = *macroptr ? 1 : 0)) buf[0] = *macroptr++; + if ((result = *lex_data->macroptr ? 1 : 0)) buf[0] = *lex_data->macroptr++; %} %% @@ -59,37 +65,39 @@ struct lexret yylval; \` | \" | \' { - if (quote_stk_idx == 0 || - (yytext[0] == '\"' && quote_stack[quote_stk_idx - 1] != '\"') || + if (lex_data->quote_stk_idx == 0 || + (yytext[0] == '\"' && lex_data->quote_stack[lex_data->quote_stk_idx - 1] != '\"') || (yytext[0] == '`')) { /* opening a new one */ - if (quote_stk_idx == 0) + if (lex_data->quote_stk_idx == 0) { - strptr = HeapAlloc(GetProcessHeap(), 0, strlen(macroptr) + 1); - yylval.string = strptr; + assert(lex_data->cache_used < sizeof(lex_data->cache_string) / sizeof(lex_data->cache_string[0])); + lex_data->strptr = lex_data->cache_string[lex_data->cache_used] = HeapAlloc(GetProcessHeap(), 0, strlen(lex_data->macroptr) + 1); + yylval.string = lex_data->strptr; + lex_data->cache_used++; BEGIN(quote); } - else *strptr++ = yytext[0]; - quote_stack[quote_stk_idx++] = yytext[0]; - assert(quote_stk_idx < sizeof(quote_stack) / sizeof(quote_stack[0])); + else *lex_data->strptr++ = yytext[0]; + lex_data->quote_stack[lex_data->quote_stk_idx++] = yytext[0]; + assert(lex_data->quote_stk_idx < sizeof(lex_data->quote_stack) / sizeof(lex_data->quote_stack[0])); } else { if (yytext[0] == '`') assert(0); /* close the current quote */ - if (--quote_stk_idx == 0) + if (--lex_data->quote_stk_idx == 0) { BEGIN INITIAL; - *strptr++ = '\0'; + *lex_data->strptr++ = '\0'; return STRING; } - else *strptr++ = yytext[0]; + else *lex_data->strptr++ = yytext[0]; } } -. *strptr++ = yytext[0]; -\\. *strptr++ = yytext[1]; +. *lex_data->strptr++ = yytext[0]; +\\. *lex_data->strptr++ = yytext[1]; <> return 0; " " @@ -260,11 +268,17 @@ static int MACRO_CallVoidFunc(FARPROC fn, const char* args) BOOL MACRO_ExecuteMacro(LPCSTR macro) { + struct lex_data curr_lex_data, *prev_lex_data; + BOOL ret = TRUE; int t; WINE_TRACE("%s\n", wine_dbgstr_a(macro)); - macroptr = macro; + prev_lex_data = lex_data; + lex_data = &curr_lex_data; + + memset(lex_data, 0, sizeof(*lex_data)); + lex_data->macroptr = macro; while ((t = yylex()) != EMPTY) { @@ -283,17 +297,18 @@ BOOL MACRO_ExecuteMacro(LPCSTR macro) } switch (t = yylex()) { - case EMPTY: return 1; + case EMPTY: goto done; case ';': break; - default: return 0; + default: ret = FALSE; goto done; } } - HeapFree(GetProcessHeap(), 0, strptr); - strptr = NULL; - quote_stk_idx = 0; +done: + for (t = 0; t < lex_data->cache_used; t++) + HeapFree(GetProcessHeap(), 0, lex_data->cache_string[t]); + lex_data = prev_lex_data; - return 1; + return ret; } #ifndef yywrap diff --git a/reactos/base/applications/winhlp32/winhelp.c b/reactos/base/applications/winhlp32/winhelp.c index 407d92ff617..91f68c297cd 100644 --- a/reactos/base/applications/winhlp32/winhelp.c +++ b/reactos/base/applications/winhlp32/winhelp.c @@ -5,6 +5,7 @@ * 2002 Sylvain Petreolle * 2002, 2008 Eric Pouech * 2004 Ken Belleau + * 2008 Kirill K. Smirnov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -58,7 +59,7 @@ static void WINHELP_DeleteButtons(WINHELP_WINDOW*); static void WINHELP_SetupText(HWND hWnd, WINHELP_WINDOW *win, ULONG relative); static void WINHELP_DeletePageLinks(HLPFILE_PAGE* page); -WINHELP_GLOBALS Globals = {3, NULL, TRUE, NULL, NULL, NULL, NULL, NULL, {{{NULL,NULL}},0}}; +WINHELP_GLOBALS Globals = {3, NULL, TRUE, NULL, NULL, NULL, NULL, NULL, {{{NULL,NULL}},0}, NULL}; #define CTL_ID_BUTTON 0x700 #define CTL_ID_TEXT 0x701 @@ -228,7 +229,10 @@ static HLPFILE_WINDOWINFO* WINHELP_GetPopupWindowInfo(HLPFILE* hlpfile, wi.style = SW_SHOW; wi.win_style = WS_POPUP | WS_BORDER; - wi.sr_color = parent->info->sr_color; + if (parent->page->file->has_popup_color) + wi.sr_color = parent->page->file->popup_color; + else + wi.sr_color = parent->info->sr_color; wi.nsr_color = 0xFFFFFF; return &wi; @@ -1098,6 +1102,8 @@ static DWORD CALLBACK WINHELP_RtfStreamIn(DWORD_PTR cookie, BYTE* buff, static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative) { + /* At first clear area - needed by EM_POSFROMCHAR/EM_SETSCROLLPOS */ + SendMessage(hTextWnd, WM_SETTEXT, 0, (LPARAM)""); SendMessage(hTextWnd, WM_SETREDRAW, FALSE, 0); SendMessage(hTextWnd, EM_SETBKGNDCOLOR, 0, (LPARAM)win->info->sr_color); /* set word-wrap to window size (undocumented) */ @@ -1127,10 +1133,6 @@ static void WINHELP_SetupText(HWND hTextWnd, WINHELP_WINDOW* win, ULONG relative pt.x = 0; pt.y = ptl.y; SendMessage(hTextWnd, EM_SETSCROLLPOS, 0, (LPARAM)&pt); } - else - { - SendMessage(hTextWnd, WM_SETTEXT, 0, (LPARAM)""); - } SendMessage(hTextWnd, WM_SETREDRAW, TRUE, 0); InvalidateRect(hTextWnd, NULL, TRUE); } @@ -1169,10 +1171,21 @@ static LRESULT CALLBACK WINHELP_ButtonBoxWndProc(HWND hWnd, UINT msg, WPARAM wPa 0, 0, 0, 0, hWnd, (HMENU) button->wParam, Globals.hInstance, 0); - if (button->hWnd) { + if (button->hWnd) + { if (Globals.button_proc == NULL) + { + NONCLIENTMETRICSW ncm; Globals.button_proc = (WNDPROC) GetWindowLongPtr(button->hWnd, GWLP_WNDPROC); + + ncm.cbSize = sizeof(NONCLIENTMETRICSW); + SystemParametersInfoW(SPI_GETNONCLIENTMETRICS, + sizeof(NONCLIENTMETRICSW), &ncm, 0); + Globals.hButtonFont = CreateFontIndirectW(&ncm.lfMenuFont); + } SetWindowLongPtr(button->hWnd, GWLP_WNDPROC, (LONG_PTR) WINHELP_ButtonWndProc); + if (Globals.hButtonFont) + SendMessage(button->hWnd, WM_SETFONT, (WPARAM)Globals.hButtonFont, TRUE); } } hDc = GetDC(button->hWnd); @@ -1558,12 +1571,6 @@ struct index_data /************************************************************************** * WINHELP_IndexDlgProc * - * Index dialog callback function. - * - * nResult passed to EndDialog: - * 1: CANCEL button - * >1: valid offset value +2. - * EndDialog itself can return 0 (error). */ INT_PTR CALLBACK WINHELP_IndexDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { @@ -1579,6 +1586,15 @@ INT_PTR CALLBACK WINHELP_IndexDlgProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM id->jump = FALSE; id->offset = 1; return TRUE; + case WM_COMMAND: + switch (HIWORD(wParam)) + { + case LBN_DBLCLK: + if (LOWORD(wParam) == IDC_INDEXLIST) + SendMessage(GetParent(hWnd), PSM_PRESSBUTTON, PSBTN_OK, 0); + break; + } + break; case WM_NOTIFY: switch (((NMHDR*)lParam)->code) { diff --git a/reactos/base/applications/winhlp32/winhelp.h b/reactos/base/applications/winhlp32/winhelp.h index 4d8e0446f7e..ac3f874c792 100644 --- a/reactos/base/applications/winhlp32/winhelp.h +++ b/reactos/base/applications/winhlp32/winhelp.h @@ -137,6 +137,7 @@ typedef struct WNDPROC button_proc; WINHELP_DLL* dlls; WINHELP_PAGESET history; + HFONT hButtonFont; } WINHELP_GLOBALS; extern WINHELP_GLOBALS Globals; diff --git a/reactos/base/applications/wordpad/En.rc b/reactos/base/applications/wordpad/En.rc index 87f5a97f007..b9e455226c7 100644 --- a/reactos/base/applications/wordpad/En.rc +++ b/reactos/base/applications/wordpad/En.rc @@ -234,4 +234,8 @@ BEGIN "Are you sure that you wish to do this?" STRING_INVALID_NUMBER, "Invalid number format" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documents are not supported" + STRING_WRITE_FAILED, "Could not save the file." + STRING_WRITE_ACCESS_DENIED, "You do not have access to save the file." + STRING_OPEN_FAILED, "Could not open the file." + STRING_OPEN_ACCESS_DENIED, "You do not have access to open the file." END diff --git a/reactos/base/applications/wordpad/Nl.rc b/reactos/base/applications/wordpad/Nl.rc index bde4be3661d..73da63f28dd 100644 --- a/reactos/base/applications/wordpad/Nl.rc +++ b/reactos/base/applications/wordpad/Nl.rc @@ -1,5 +1,6 @@ /* * Copyright 2006 by Hans Leidekker + * Copyright 2008 by Frans Kool * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -24,12 +25,12 @@ BEGIN BEGIN MENUITEM "&Nieuw...\tCtrl+N" ID_FILE_NEW MENUITEM "&Openen...\tCtrl+O", ID_FILE_OPEN - MENUITEM "O&pslaan\tCtrl+S", ID_FILE_SAVE + MENUITEM "Op&slaan\tCtrl+S", ID_FILE_SAVE MENUITEM "Ops&laan als...", ID_FILE_SAVEAS MENUITEM SEPARATOR MENUITEM "&Print...\tCtrl+P", ID_PRINT - MENUITEM "Print previe&w...", ID_PREVIEW - MENUITEM "Pag&e setup...", ID_PRINTSETUP + MENUITEM "Print &voorbeeld...", ID_PREVIEW + MENUITEM "Pa&gina setup...", ID_PRINTSETUP MENUITEM SEPARATOR MENUITEM "&Afsluiten", ID_FILE_EXIT END @@ -44,9 +45,9 @@ BEGIN MENUITEM "&Verwijderen\tDel", ID_EDIT_CLEAR MENUITEM "&Alles selecteren\tCtrl+A", ID_EDIT_SELECTALL MENUITEM SEPARATOR - MENUITEM "&Find...\tCrtl+F", ID_FIND - MENUITEM "Find &next\tF3", ID_FIND_NEXT - MENUITEM "&Replace...\tCtrl+H", ID_REPLACE + MENUITEM "&Zoeken...\tCrtl+F", ID_FIND + MENUITEM "Zoek vo&lgende\tF3", ID_FIND_NEXT + MENUITEM "Ve&rvang...\tCtrl+H", ID_REPLACE MENUITEM SEPARATOR MENUITEM "Alleen &lezen", ID_EDIT_READONLY MENUITEM "&Gewijzigd", ID_EDIT_MODIFIED @@ -60,24 +61,24 @@ BEGIN MENUITEM "&Haal tekst", ID_EDIT_GETTEXT END END - POPUP "&View" + POPUP "&Bekijken" BEGIN - MENUITEM "&Toolbar", ID_TOGGLE_TOOLBAR - MENUITEM "&Formatbar", ID_TOGGLE_FORMATBAR - MENUITEM "&Ruler", ID_TOGGLE_RULER - MENUITEM "&Statusbar", ID_TOGGLE_STATUSBAR + MENUITEM "&Toolbalk", ID_TOGGLE_TOOLBAR + MENUITEM "&Formaatbalk", ID_TOGGLE_FORMATBAR + MENUITEM "&Lineaal", ID_TOGGLE_RULER + MENUITEM "&Statusbalk", ID_TOGGLE_STATUSBAR MENUITEM SEPARATOR - MENUITEM "&Options...", ID_VIEWPROPERTIES + MENUITEM "&Opties...", ID_VIEWPROPERTIES END - POPUP "&Insert" + POPUP "&Invoegen" BEGIN - MENUITEM "&Date and time...", ID_DATETIME + MENUITEM "&Datum en tijd...", ID_DATETIME END POPUP "&Opmaak" BEGIN - MENUITEM "&Font...", ID_FONTSETTINGS + MENUITEM "&Lettertype...", ID_FONTSETTINGS MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph..." ID_PARAFORMAT + MENUITEM "&Paragraaf..." ID_PARAFORMAT MENUITEM "&Tabs..." ID_TABSTOPS POPUP "&Achtergrond" BEGIN @@ -87,7 +88,7 @@ BEGIN END POPUP "&Help" BEGIN - MENUITEM "&About Wine Wordpad" ID_ABOUT + MENUITEM "&Over Wine Wordpad" ID_ABOUT END END @@ -100,48 +101,48 @@ BEGIN MENUITEM "&Plakken", ID_EDIT_PASTE MENUITEM SEPARATOR MENUITEM "&Bullet points" ID_BULLET - MENUITEM "&Paragraph...", ID_PARAFORMAT + MENUITEM "&Paragraaf...", ID_PARAFORMAT END END IDD_DATETIME DIALOG DISCARDABLE 30, 20, 130, 80 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "Date and time" +CAPTION "Datum en tijd" FONT 10, "MS Sans Serif" BEGIN - LTEXT "Available formats",0,3,2,100,15 + LTEXT "Beschikbare formaten",0,3,2,100,15 LISTBOX IDC_DATETIME,3,12,80,65,LBS_NOINTEGRALHEIGHT PUSHBUTTON "&OK",IDOK,87,12,40,12 - PUSHBUTTON "&Cancel",IDCANCEL,87,26,40,12 + PUSHBUTTON "&Annuleren",IDCANCEL,87,26,40,12 END IDD_NEWFILE DIALOG DISCARDABLE 30, 20, 140, 80 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -CAPTION "New" +CAPTION "Nieuw" FONT 10, "MS Sans Serif" BEGIN - LTEXT "New document type",0,3,2,100,15 + LTEXT "Nieuw document type",0,3,2,100,15 LISTBOX IDC_NEWFILE,3,12,90,65,LBS_NOINTEGRALHEIGHT PUSHBUTTON "&OK",IDOK,97,12,40,12 - PUSHBUTTON "&Cancel",IDCANCEL,97,26,40,12 + PUSHBUTTON "&Annuleren",IDCANCEL,97,26,40,12 END IDD_PARAFORMAT DIALOG DISCARDABLE 30, 20, 200, 110 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU -Caption "Paragraph format" +Caption "Paragraaf formaat" FONT 8, "MS Shell Dlg" BEGIN GROUPBOX "Indentation", 0, 10, 10, 120, 68 - LTEXT "Left", 0, 15, 22, 40, 13 + LTEXT "Links", 0, 15, 22, 40, 13 EDITTEXT IDC_PARA_LEFT, 55, 20, 60, 13 - LTEXT "Right", 0, 15, 40, 40, 13 + LTEXT "Rechts", 0, 15, 40, 40, 13 EDITTEXT IDC_PARA_RIGHT, 55, 38, 60, 13 - LTEXT "First line", 0, 15, 58, 40, 13 + LTEXT "Eerste regel", 0, 15, 58, 40, 13 EDITTEXT IDC_PARA_FIRST, 55, 56, 60, 13 - LTEXT "Alignment", 0, 15, 87, 40, 13 + LTEXT "Uitlijning", 0, 15, 87, 40, 13 COMBOBOX IDC_PARA_ALIGN, 55, 85, 60, 60, CBS_DROPDOWNLIST PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15 - PUSHBUTTON "&Cancel", IDCANCEL, 137, 33, 50, 15 + PUSHBUTTON "&Annuleren", IDCANCEL, 137, 33, 50, 15 END IDD_TABSTOPS DIALOG DISCARDABLE 30, 20, 200, 110 @@ -151,11 +152,11 @@ FONT 8, "MS SHell DLg" BEGIN GROUPBOX "Tab stops", 0, 10, 10, 120, 90 COMBOBOX IDC_TABSTOPS, 20, 20, 100, 60, CBS_SIMPLE | CBS_SORT - DEFPUSHBUTTON "&Add", ID_TAB_ADD, 20, 80, 45, 15 - PUSHBUTTON "&Remove", ID_TAB_DEL, 72, 80, 45, 15 + DEFPUSHBUTTON "&Toevoegen", ID_TAB_ADD, 20, 80, 45, 15 + PUSHBUTTON "&Verwijderen", ID_TAB_DEL, 72, 80, 45, 15 PUSHBUTTON "&OK", IDOK, 137, 15, 50, 15 - PUSHBUTTON "&Cancel", IDCANCEL, 137, 33, 50, 15 - PUSHBUTTON "Remove al&l", ID_TAB_EMPTY, 137, 51, 50, 15 + PUSHBUTTON "&Annuleren", IDCANCEL, 137, 33, 50, 15 + PUSHBUTTON "Verwijder al&len", ID_TAB_EMPTY, 137, 51, 50, 15 END IDD_FORMATOPTS DIALOG DISCARDABLE 0, 0, 280, 110 @@ -163,59 +164,59 @@ STYLE DS_SYSMODAL Caption "" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Line wrapping", 0, 10, 10, 130, 85 - RADIOBUTTON "Wrap text by the &window border", IDC_PAGEFMT_WW, 18, 25, 117, 15 - RADIOBUTTON "Wrap text by the &margin", IDC_PAGEFMT_WM, 18, 45, 117, 15 + GROUPBOX "Regel afbreken", 0, 10, 10, 130, 85 + RADIOBUTTON "Breek tekst af bij &venster rand", IDC_PAGEFMT_WW, 18, 25, 117, 15 + RADIOBUTTON "Breek tekst af bij de &marge", IDC_PAGEFMT_WM, 18, 45, 117, 15 GROUPBOX "Toolbars", 0, 150, 10, 120, 85 - CHECKBOX "&Toolbar", IDC_PAGEFMT_TB, 160, 20, 80, 15 - CHECKBOX "&Formatbar", IDC_PAGEFMT_FB, 160, 38, 80, 15 - CHECKBOX "&Ruler", IDC_PAGEFMT_RU, 160, 56, 80, 15 - CHECKBOX "&Statusbar", IDC_PAGEFMT_SB, 160, 74, 80, 15 + CHECKBOX "&Toolbalk", IDC_PAGEFMT_TB, 160, 20, 80, 15 + CHECKBOX "&Formaatbalk", IDC_PAGEFMT_FB, 160, 38, 80, 15 + CHECKBOX "&Lineaal", IDC_PAGEFMT_RU, 160, 56, 80, 15 + CHECKBOX "&Statusbalk", IDC_PAGEFMT_SB, 160, 74, 80, 15 LTEXT "", IDC_PAGEFMT_ID, 0,0,0,0 END STRINGTABLE DISCARDABLE BEGIN - STRING_RICHTEXT_FILES_RTF, "Rich text format (*.rtf)" - STRING_TEXT_FILES_TXT, "Text documents (*.txt)" - STRING_TEXT_FILES_UNICODE_TXT, "Unicode text document (*.txt)" - STRING_ALL_FILES, "All documents (*.*)" + STRING_RICHTEXT_FILES_RTF, "Rich text formaat (*.rtf)" + STRING_TEXT_FILES_TXT, "Tekst documenten (*.txt)" + STRING_TEXT_FILES_UNICODE_TXT, "Unicode tekst document (*.txt)" + STRING_ALL_FILES, "Alle documenten (*.*)" END STRINGTABLE DISCARDABLE BEGIN - STRING_ALIGN_LEFT, "Left" - STRING_ALIGN_RIGHT, "Right" - STRING_ALIGN_CENTER, "Center" + STRING_ALIGN_LEFT, "Links" + STRING_ALIGN_RIGHT, "Rechts" + STRING_ALIGN_CENTER, "Gecentreerd" END STRINGTABLE DISCARDABLE BEGIN - STRING_NEWFILE_RICHTEXT, "Rich text document" - STRING_NEWFILE_TXT, "Text document" - STRING_NEWFILE_TXT_UNICODE, "Unicode text document" + STRING_NEWFILE_RICHTEXT, "Rich tekst document" + STRING_NEWFILE_TXT, "Tekst document" + STRING_NEWFILE_TXT_UNICODE, "Unicode tekst document" END STRINGTABLE DISCARDABLE BEGIN - STRING_PRINTER_FILES_PRN, "Printer files (*.PRN)" + STRING_PRINTER_FILES_PRN, "Printer bestanden (*.PRN)" END STRINGTABLE DISCARDABLE BEGIN - STRING_VIEWPROPS_TITLE, "Options" - STRING_VIEWPROPS_TEXT, "Text" - STRING_VIEWPROPS_RICHTEXT, "Rich text" + STRING_VIEWPROPS_TITLE, "Opties" + STRING_VIEWPROPS_TEXT, "Tekst" + STRING_VIEWPROPS_RICHTEXT, "Rich tekst" END STRINGTABLE DISCARDABLE BEGIN STRING_PREVIEW_PRINT, "Print" - STRING_PREVIEW_NEXTPAGE, "Next page" - STRING_PREVIEW_PREVPAGE, "Previous page" - STRING_PREVIEW_TWOPAGES, "Two pages" - STRING_PREVIEW_ONEPAGE, "One page" - STRING_PREVIEW_CLOSE, "Close" + STRING_PREVIEW_NEXTPAGE, "Volgende pagina" + STRING_PREVIEW_PREVPAGE, "Vorige pagina" + STRING_PREVIEW_TWOPAGES, "Twee pagina's" + STRING_PREVIEW_ONEPAGE, "Een pagina" + STRING_PREVIEW_CLOSE, "Sluiten" END STRINGTABLE DISCARDABLE @@ -226,12 +227,16 @@ END STRINGTABLE DISCARDABLE BEGIN STRING_DEFAULT_FILENAME, "Document" - STRING_PROMPT_SAVE_CHANGES, "Save changes to '%s'?" - STRING_SEARCH_FINISHED, "Finished searching the document." - STRING_LOAD_RICHED_FAILED, "Failed to load the RichEdit library." - STRING_SAVE_LOSEFORMATTING, "You have chosen to save in plain text format, " \ - "which will cause all formatting to be lost. " \ - "Are you sure that you wish to do this?" - STRING_INVALID_NUMBER, "Invalid number format" - STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documents are not supported" + STRING_PROMPT_SAVE_CHANGES, "Wijzigingen opslaan van '%s'?" + STRING_SEARCH_FINISHED, "Doorzoeken van document beeindigd." + STRING_LOAD_RICHED_FAILED, "Laden van de RichEdit library is mislukt." + STRING_SAVE_LOSEFORMATTING, "U koos voor opslaan in gewoon tekst formaat, " \ + "waardoor alle formatering verloren zal gaan. " \ + "Weet u zeker dat u dit wilt?" + STRING_INVALID_NUMBER, "Foutief nummer formaat" + STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documenten zijn niet ondersteund" + STRING_WRITE_FAILED, "Bestand kon niet opgeslagen worden." + STRING_WRITE_ACCESS_DENIED, "Onvoldoende rechten om het bestand op te slaan." + STRING_OPEN_FAILED, "Bestand kon niet geopend worden." + STRING_OPEN_ACCESS_DENIED, "Onvoldoende rechten om het bestand te openen." END diff --git a/reactos/base/applications/wordpad/No.rc b/reactos/base/applications/wordpad/No.rc index 411e58aef94..5a3be26d136 100644 --- a/reactos/base/applications/wordpad/No.rc +++ b/reactos/base/applications/wordpad/No.rc @@ -234,4 +234,8 @@ BEGIN "sikker p at du vil fortsette?" STRING_INVALID_NUMBER, "Ugyldig tallformat" STRING_OLE_STORAGE_NOT_SUPPORTED, "OLE storage documents are not supported" + STRING_WRITE_FAILED, "Klarte ikke lagre filen." + STRING_WRITE_ACCESS_DENIED, "Du har ikke tilgang til lagre filen." + STRING_OPEN_FAILED, "Klarte ikke pne filen." + STRING_OPEN_ACCESS_DENIED, "Du har ikke tilgang til pne filen." END diff --git a/reactos/base/applications/wordpad/print.c b/reactos/base/applications/wordpad/print.c index c0cd182d17e..933c8b845d6 100644 --- a/reactos/base/applications/wordpad/print.c +++ b/reactos/base/applications/wordpad/print.c @@ -814,7 +814,7 @@ void update_preview(HWND hWnd) InvalidateRect(hWnd, &rc, TRUE); } -LRESULT preview_command(HWND hWnd, WPARAM wParam, LPARAM lParam) +LRESULT preview_command(HWND hWnd, WPARAM wParam) { switch(LOWORD(wParam)) { diff --git a/reactos/base/applications/wordpad/wordpad.c b/reactos/base/applications/wordpad/wordpad.c index 80638c81b09..d98758aa880 100644 --- a/reactos/base/applications/wordpad/wordpad.c +++ b/reactos/base/applications/wordpad/wordpad.c @@ -698,6 +698,22 @@ static void set_fileformat(WPARAM format) target_device(hMainWnd, wordWrap[reg_formatindex(fileFormat)]); } +static void ShowOpenError(DWORD Code) +{ + LPWSTR Message; + + switch(Code) + { + case ERROR_ACCESS_DENIED: + Message = MAKEINTRESOURCEW(STRING_OPEN_ACCESS_DENIED); + break; + + default: + Message = MAKEINTRESOURCEW(STRING_OPEN_FAILED); + } + MessageBoxW(hMainWnd, Message, wszAppTitle, MB_ICONEXCLAMATION | MB_OK); +} + static void DoOpenFile(LPCWSTR szOpenFileName) { HANDLE hFile; @@ -709,7 +725,10 @@ static void DoOpenFile(LPCWSTR szOpenFileName) hFile = CreateFileW(szOpenFileName, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hFile == INVALID_HANDLE_VALUE) + { + ShowOpenError(GetLastError()); return; + } ReadFile(hFile, fileStart, 5, &readOut, NULL); SetFilePointer(hFile, 0, NULL, FILE_BEGIN); @@ -753,6 +772,22 @@ static void DoOpenFile(LPCWSTR szOpenFileName) update_font_list(); } +static void ShowWriteError(DWORD Code) +{ + LPWSTR Message; + + switch(Code) + { + case ERROR_ACCESS_DENIED: + Message = MAKEINTRESOURCEW(STRING_WRITE_ACCESS_DENIED); + break; + + default: + Message = MAKEINTRESOURCEW(STRING_WRITE_FAILED); + } + MessageBoxW(hMainWnd, Message, wszAppTitle, MB_ICONEXCLAMATION | MB_OK); +} + static void DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) { HANDLE hFile; @@ -763,7 +798,10 @@ static void DoSaveFile(LPCWSTR wszSaveFileName, WPARAM format) FILE_ATTRIBUTE_NORMAL, NULL); if(hFile == INVALID_HANDLE_VALUE) + { + ShowWriteError(GetLastError()); return; + } if(format == (SF_TEXT | SF_UNICODE)) { @@ -2429,7 +2467,7 @@ static LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lPara case WM_COMMAND: if(preview_isactive()) { - return preview_command( hWnd, wParam, lParam ); + return preview_command( hWnd, wParam ); } return OnCommand( hWnd, wParam, lParam ); @@ -2532,7 +2570,6 @@ int CALLBACK WinMain(HINSTANCE hInstance, HINSTANCE hOldInstance, LPSTR szCmdPar set_caption(NULL); set_bar_states(); set_fileformat(SF_RTF); - SendMessageW(hEditorWnd, EM_EMPTYUNDOBUFFER, 0, 0); hPopupMenu = LoadMenuW(hInstance, MAKEINTRESOURCEW(IDM_POPUP)); get_default_printer_opts(); target_device(hMainWnd, wordWrap[reg_formatindex(fileFormat)]); diff --git a/reactos/base/applications/wordpad/wordpad.h b/reactos/base/applications/wordpad/wordpad.h index 53a6c1378a9..9f093b32a79 100644 --- a/reactos/base/applications/wordpad/wordpad.h +++ b/reactos/base/applications/wordpad/wordpad.h @@ -193,6 +193,10 @@ #define STRING_SAVE_LOSEFORMATTING 1704 #define STRING_INVALID_NUMBER 1705 #define STRING_OLE_STORAGE_NOT_SUPPORTED 1706 +#define STRING_WRITE_FAILED 1707 +#define STRING_WRITE_ACCESS_DENIED 1708 +#define STRING_OPEN_FAILED 1709 +#define STRING_OPEN_ACCESS_DENIED 1710 LPWSTR file_basename(LPWSTR); @@ -200,7 +204,7 @@ void dialog_printsetup(HWND); void dialog_print(HWND, LPWSTR); void target_device(HWND, DWORD); void print_quick(LPWSTR); -LRESULT preview_command(HWND, WPARAM, LPARAM); +LRESULT preview_command(HWND, WPARAM); void init_preview(HWND, LPWSTR); void close_preview(HWND); BOOL preview_isactive(void); From a958e379654eb77591505cd96ca9ae54aa580323 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Thu, 7 Aug 2008 15:51:36 +0000 Subject: [PATCH 181/304] - fix acpi.inf and convert to utf-16 - convert utf-16 files back to windows line endings (sorry, mistake of my merge tool) svn path=/trunk/; revision=35161 --- reactos/media/inf/acpi.inf | Bin 1069 -> 2220 bytes reactos/media/inf/cdrom.inf | Bin 2040 -> 2136 bytes reactos/media/inf/cpu.inf | Bin 3426 -> 3578 bytes reactos/media/inf/display.inf | Bin 5014 -> 5230 bytes reactos/media/inf/fdc.inf | Bin 4886 -> 5086 bytes reactos/media/inf/hdc.inf | Bin 6092 -> 6330 bytes reactos/media/inf/keyboard.inf | Bin 4776 -> 4976 bytes reactos/media/inf/machine.inf | Bin 29928 -> 30632 bytes reactos/media/inf/msmouse.inf | Bin 13788 -> 14282 bytes reactos/media/inf/netisa.inf | Bin 3736 -> 3894 bytes reactos/media/inf/ports.inf | Bin 7344 -> 7620 bytes reactos/media/inf/scsi.inf | Bin 5054 -> 5260 bytes reactos/media/inf/usb.inf | Bin 3174 -> 3312 bytes reactos/media/inf/usbport.inf | Bin 11200 -> 11600 bytes reactos/media/inf/usbstor.inf | Bin 3558 -> 3698 bytes 15 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/media/inf/acpi.inf b/reactos/media/inf/acpi.inf index 55b6496ceed6adf191cfb8814033569c315fd6df..57614590bd4e740fa5d1b8a80f2240fdc0653db4 100644 GIT binary patch literal 2220 zcmcJQT~8B16oy}KP5ciVViPs6wgnVJyrAVHBz%P;##BR^QfgyqNof%^{#Y-);4i4p znc3OhmSVKVY^I%=bIyCd&;0zcsz__9>Ok9yS$o>l1KoGaXxr-PQbRS=zR4pOwbj@|h(L3rmVHBN2t40!~%;YE7Mn$ttQhS~$Iua8&} zVcik8bBT4ompuflp(eQds-;pp+92F=f zc8mP3=&RFoK&1M_w?k|!#+gk8jr(12{Oj<9eE2Mwgjr_DPx&qJTXq_kHP0z#?|*F< zDx!|%E$6f4C98&Y& z){hZZ9HQ@-3OK~y*)fA<^|aSBKVsKaJ}OnJ>Vm2conbv^Rg!sso5Rab({LBB*JZiB zAlfl?V|_FYAxs~yBc|i5+Cz>)y{*v&rxP@9chE794@F(G@?V)sk6g`}9VZhAS%fmn z0^Z%c-nVf(kMQpT%d;*mId5y!dINukOtm~m=uO{u8*o^+52#a{yhC^DIyB$GX5YBR z3jSDs4#4%1DA3Jis`+i|Z$9ojAUBBNJ`#SSY&k6>?Dp~%IQr<0m`5YB6;YGdoUJpx zM2OPARln7^P1Yk<`Fr$!jq~i4Z<4{XI#?Dxi%mP7R^#*1dpkEVMI-F7*W^5Tdkk^f zYzfkjCa6(TQWfM6uJla|o-103QcsNb2^EXnQMasVD5Q9yQW2% zK{ZggOprBY1(SSrovkfk94%lT4dA_-&*sD@11DfRzG5J{G8atu?@ZgfEdk!aKDqYq z5iFwHaDh)UA%}y$Gg~Ie7u(9TUbT@A0JvNBYb-%@wdIbgRO>al0@;a~G<86mF4MFz zK-JK@m^_gE^13y0*AVJTLCLUw!(f{Bddq4H^8`XJiZzwGu?<2{D5a3TD6|xL!`a^& z!@J1}IF{>KUk@o?37XzW7>217y?besv}eAAd18Vm!E(|R`4+YV}{;nld93+6fTH!9P6DjCSN iAsuo-`pI9^zyExBt|P#ABX-7mq;SH1WCfi68}AoT|3Z@h diff --git a/reactos/media/inf/cdrom.inf b/reactos/media/inf/cdrom.inf index 715d7f4f073bf59768d75468fabad2aae2212475..16bbcf5a4ec72ad7e04588c50ac12b33df8e1c9d 100644 GIT binary patch delta 372 zcmeyte?wq`1S>BC7X$A^Nn>d+1IUSH2xCZPC}JpP$YjW8$YY2FN+((}@=ly-3M9@N z0*SxsjJ%VT88d-oH={m~+{x$(F=#R~lPZv}&ZG(D2Qp~_`IStzoN)6e_cCcR15KU$ zlqno2XU$v*BsViV0?E(JmQa1VEK`wO6wFWpbWtYIHR(Wif%INyF$SuC$Z9*;jg=3o zCzMqlDz<@DNEL1$1FCL41_K5YAT|e^^N=-=ph{=3%0RYIs6ETsVD>Pvi$KN1*&$-; WlVjL5pkl31G26)x*u_{t?g0Rr??$}< delta 242 zcmca1@PmJX1S8i(Sz}Qy1}=tZhA@Uyh9ZVyhD?ThhCGJYiP@ISTnyF|bLA(V5Sn<$ zU@{-0+GI1vjL8ca^(J3n^kC$gEX$-i*@a01$SP#goIHog2FSY0q(7ODIc#zobH(Hb z%np;4SS)~|@hnq;IBX_2u=0V$Bv}m@Oc`P)GjiBY{=g~(5u2>Q y#s*fE!X^S&JZ|;5d{4M6@+y5S{-V3ed=Di4DWk0-)}zN`xyDQYGGzTpuQEYFAPgYJ)fp>F;AtD zr1Dyk3|yD!h*c@0(j*wzkfNlYr8%L0qy*`xJS}uicKT&`jOu0Y_E8>k`w3iOIW*aT z<U>_gA;j)J%-~2L(N&TWZ?%cbwdRO5DD4)TMNMQy$Nv$K%7A79x6g z*Qe&)W$XQ2&Z~F!ghjfNn`%{%^Fd2p666g*Yz1QOjD_RD+1^~A^ncuo?`;2SI$G@hv_`8kH4Pl%Ro#B4Q!w>{P_k&G`ed z5i4t3{RgqIH|72w4;km}0JfCDnKUj5 zJW3YoQa@*5IfZdK&Dp+e;Yx1Dt(;B>60}WgRHh;wQ;FjV#{ySVcojW}DTA#(lV`n5 zdvrtv6qQrmtqPjJoSH>a-3kex5gdpX#^QL_n^_RJ6CuWHW#wSPe`o`V-XO6jGS7JK*C>}EG@1bMuVotf|ZW@h(G=FgpaH*>&-F>o5` zTKl-2G$`Bnn{FK5(wxTc5zWCKEl*g~e8P9yGT~1xOX%ri7PoM4O7Ek1RUaVS(8p!= zNW>RDhY?ORA+07o# zEyF9pU4jz4p=gLEc}}13#U|tXpRp$b(^w8}Nf#E%P;M~9@1rQNX7lq#=n>%$`+?+n z_I13hSAwN0Q~uK(SmStN1#uxfBc1lbNpju~^SjNvKK4d>RmDqT-HqYPNI%ssyg~dP zxudJ##bc@P zu@t?ns?=*MdS9qAcpiPI@o~Gzr|D++w0^9tqIwqbDwG9Ur`=%_xJJE Y?mq6u|DUJsx_BDT$(f!eCQSb7m%JOVBme*a delta 590 zcmZ8eOGq106umQ(nZ!5an9M|KNSc6-CVmJLtkq~q#Yz{7zY3*LQ><7&7!*{BJ6pQz zLevB93T>CALbDbTH(j`DT$ke7MVF-o7v7l;E?m6(4)>gMKkxm{9b|V?ilBkLmhC%y zk)Y@FlwQ#~ZO}5U(JGbqPKv(bG=r36!IfOhNgddcmhe}~BPaJu0*i7hcH|tRlW+l- zvS9R2Zik}`s=}*^w?+b!N?a=AgHpzoGKf-Wi&aOV41R_j+gH&vZPGlA(E=?}8OQ3V z>XJ(ZMibokSe^2#4d9br#H99&{fF9Jjy2iFg;rrS6)tit2pgZnaYjes-bO*Mx!y~z zJkML@Iaa6wJ(6VpP)p)*B#xQL2%j{*M?P|Pr7nxF!ofM8i#i8sJ&$`LiWhnxv+u-h zw&XE4vpvKw{R!);rp^0~8r?WIJMhJ5=3LE~Ky&@9&nA@~-m+%)VAk?xtr_h|n{CW@ z;g8jX_onBlni=*F2mEkD3UduJf&Y>3?}Qn3e4gJp+Q5v4H}?O2S^ThF$nhmv&^03@pBVrE diff --git a/reactos/media/inf/fdc.inf b/reactos/media/inf/fdc.inf index 2446e4e675442d2884020a47775144c6d0c2e743..a9a5b7909b46a3a1f0395bcbbf268c091a4be46f 100644 GIT binary patch delta 773 zcmbQHc29kR2rDlG7X$A^(L`x51IUSH2xCZPC}JpP$YjW8$YY2FN_Sg=)mcyMm7n-b zh>>^VcSASRV1(a8^(WuSWgGD`#1iL-bD$#|AXRR^ zs6o|CbJA01I6xwNoIBsTN6zBv)jV$vz>g3Jwg@{dVUQ44Dk#u3_-wf1cn_bcqf~4 zfI=gh!xXM-DpGg{Gn4?sI};ez=|I;2^-Q+rGzO~w$frDc0;dsFPa==*+y0U*obsQg6fU1Xu3{75~Z&Q)|Yf1y`F4SI0An*98-g})J&KdfgrdOeTUkJE F1^}uao7eyV delta 533 zcmYk2KTKLt6voee|9D<}1s-6EVhA*VHWqD*h;0=$UF@I@F~p!~s>F0KEKW{c8s?JE zlE$TRad0qkcV;eQhj!|2WNg@bhW2&Si=4BYR z7S$z5T60#Sf@N(Hhgu08?IV+-uYkH5wry`Z8!VX7fl5a=x&wT2#-?_J~ zAZI%3dyS5jfGJ<`UO{ei|EZ-h(LaEi%%};z-L{6*Nvhz|dWNz$?{ed4dFLM3B~}hK z)uUSd&t2*T5?1bk3Zdz)+E$Eb?z%)AU!QFC2*0n&s%=H|mo(jTI`?IJ+<@Pi(#>X~ w>HpAWaqBnS7mNh%lN|&elSMITI|jxu$><($T+U;@_(N7;EE#Y4i;>UUH||9 diff --git a/reactos/media/inf/hdc.inf b/reactos/media/inf/hdc.inf index c5332521ef8f59eb4460a602d2842859cd4ac136..03d7dc987ea12cfde5c7f5104a8617ef807d9904 100644 GIT binary patch delta 895 zcmZva&r2IY6vt;byUFe*lTG4oVpW=k7`EEhHI_6jR2B`rNCitliV{4iNGP>ZvD8bU zrwT%-JS_ePLZOGyTMzwl=&jdW+CxvC1f{>u_RZ{MSfPh~%y;H}zVE%+`Rc!~zH)R* zEJF9(<{)37SS0ggl{_Jvq(vT+b<)J+m$wwU_pyfIcU7TKR>~OfC@qX{6(8ewr4c$o zQLUhEs3Sr@Qb$nltG>`*)Dr3=^*+XWEWo%G+ZJc1u_9`!)lAt8WHmR2EkILS<5?A; zjt3{&m|y~95*G9aLcP;jXI*_N;&7^aIyw*wek9x?bKW4!I9!XY;GoaQ7>>G)AFm0U zaU2s4;}0Va$8nGM5F|W2Te4W(ztpm?@9g|e6mNS$GqhG;X~#;+u-ca%%WsVu%4Y0?4Rt4V0UttWzX#Gu!(==ZbYb= zzMGud@Q&K)et7P(u6y@%epV<2>>akS-;7oe%5Q T;h-=87Yj4O;h->~v6uD_vsJoo delta 710 zcmY+CO=}ZT6o&77W^yx`PLoU~N!5^OqLn6T>yUm}gGN`O)u2#pZlJ7&dm12PHi(K@P5{{ zIOFURTV&VRDqCYccAMQ|Zofa%-*F%c<8Xu`I>Jr76RP+rGzE?sv4kb@2z3v{QM?hW z)O{BVFr@RiDmCyzTBnn|oX1JoQG9=NWlM2sQVBnd3f{|g{FXbub{tofDLhs#hU5p? zhN)^;iss;`Wpe7O6+Bea`#JO2G9~P>6-v9#s+4zwDwq)5Q=#z`4)A?QN6ymSUZjGj zkuu&=eWNn9CcIb~ceO)%rhAHvui7HR277AAmeZq|+h)ad_JIE?_LtCcci>i523<(Mk@!cFo9QGpPn?ll72Ir>1>Y zw=&pD&H21;jRm|i!J47_egEv0^)GoVJ^NqstTM^|W-r^5q5nNQ@ZYtAEW36NTbYc= F*&hfVxIzE` diff --git a/reactos/media/inf/keyboard.inf b/reactos/media/inf/keyboard.inf index 7dd57686ae1c7867341397eece98add4a3c118e0..00826d8e10adb3df64dc4fde7ff34665adfaa49f 100644 GIT binary patch delta 783 zcmZuvO-ma=7=HIFo84r0cGnOL!ANbRMhUtWl@J=+hTx%ypQs=~1Y40pMWf!m*g`Ln z_n-)3rI+>>2)%^yOVV^#mmFIGtbw~?5FHicRiz7V1jkfIh*DS z8kS%lUcwgCU>!E#4OHp)Z9%dQ8p8yCe96LxQl4;9S|>c01_*yj#ikQJkh3&blZFD|>`Fm9lU}t%mxB+DY>dHQOQdFbmtT3KQ@O z)`EIeI*Sut4?fjKL`o5**cg7%W!K{4Bg)wKJRmC z-sF8Zg1f!XFOMJ0cJBG?j-M2Jf^|*BQfw;pJagN4r;oA6#BR6)sKz~7F*}E)c;GN? zSMWIQ34Tf+gyG;0iS6U1bHg67GMw$>FDHRVRH|)XE0=6Fc0^g_7=tS|GNKm#zk)r-?_K!;4f;p V!OJka2m8D(&Z}VEORB-Y@DDFHoO%EN delta 588 zcmYk1&rcIk5Xa~3cDKv+=e~m3qC$jrtx%eU6azFd1RE{{BOz%But$f;=yn*#CY>xAf7xy;&h9Rd6_r!X1@8%_x*N0r9X5Cv(`P`W|B#B zRH7GDrEOZJP1+!@RvWIJ=b;D}d67j$tl(Vaa3w~BiGq?wMagjWUU`7e${1Hd9mJ42 zj|24)eyVRU6BxqBzH-`Z^1jL21}e5xZ7v+W6?r5_-x$tZ*AL;Q_ppIqZfdjw2a-4cm~3aX67UE6OsdxirXsek=R27pZH; zp~x}xMD4~Li&32kS?ot|`GgcK+HWQC*Mq^@h z8N9~rLg%q?GsoB^9uMx3T zA+xqXpAm9dNNWN-K_M4~G$g{)o!A{+IhT~y8d@{k>8C^&$EHmgbg9_Eo?Y~5t66w} z1N>{I1KKG*?kN-BoZjl#89js4&TyV&a3`e>X;eA}XzB7+toX;)=Y-6kPfnnlVLN|Z z%PRZIwiQx&@|e)vbSc|OmrO-e*PE?*%5$8Y?4|OYIL#BTgQr1rBc=(?S5u}ot#%@{gzeW;QFqP``Hj%G z+7#A(w*AqS)bp&^`nA0jrtRbmYf27{r8zX;nY8?LtQeLaW?FCF!~1Dqa6{@&inF(9 z`TOnp?7QFUC1gxT*YDjy6J1R2(Z0Tup2ivRjtZ7@{W6U-8!6Oy{2c#h>__yo&aS?3WuP{<4i*P)f?JgI5nx-q(xi)z-x z=QV9v)uM=}(n@X;XUz3`D4b{8!e*zAOiwRlwV*PsZV3h3k;= zps;+bxhSdKMo;HvlWPyY2)6&lyQvuo@ik(=sTUxQZdRDJ_^hLZoRy$hQ{_`EuU0T&H;aDovNo1?Wb&#tAEJ5@u)o95&(QRa@0XPetGWFF|BUgo;t_%N08W-1s zMC-s>=xnV@^>kXNu9-|8ySCRXk50^pM<-^u?pdw^Dtf)B2P(35&*@vm>6L>_X>W1# z z(0QW?dzY(`ZK0%Q>;(wvqX17KP`TTT0V6AiSk4Z~wASLHFO*WY^y{zsUTy((7u^+f zVXuQeSBzw71sjwpg-*BPK>?Os`%Lp~NYr5zjudg_U)YCBg1}P9rDo~@6aChvveiT0 zy#+eFhp@DhuI%mO4{v4p_#;1SI!C+qx#(Q4jnu*_NwWoTFYX`I@+=4Dg|^Hx*uK1} z4aP09&XhRd;I|!iBgd!i-Lj#I@2Wich#19_jZ}-m4FJmOg{xc;(!}|P*$J4ipbmD-N?RR zH!g>c@`Y{(7589II=t|_Dm)7#9{RbbD2nN0oV9tnK0)?gybmg_{tZ@nPBuO5x6`h^ zgIfGt-!rUP4==J@KD_uBJX^GDy^d!Y*&e_oz4uL9pR6Aq!Hczds)Ede1K5>%)ot{_ z04V%-lXc^}rcT!enjAvifAyBlkGSY$1=^uP3c_hn&X1HvXQ}>L-T$5X#|io*SN%Vx zr*X?3NuQr?@{d{Q?x-{Rs9he#pCvqIH;;K)!(*mu%NZ4Pdcr(E&M)2=u+iVOw}qut zX<;umLhibrOmv-*)q)DZ947)_o)1}3+vVREw;hrbGc0%m`$ AK>z>% delta 2728 zcmai#Uu;uV9LI0FQA$@!*LHX1u5{h#Sl5kmSGUr2Ti11^jQwr5SthJw8-FrzY^4s2 z#^6kdS%@KBze-G0LWmDO5Q01z!vpf*i-sUkV~jDAXrhV2!h<2kpucnOU7ciVn%ndH zopaB*=l40^-|xKtK=aejnw&#pSgJZ$W)KX*0U;$E5wgPb!ZBe^m=)4XZ?_Z~gw~~Z zE0-QwVARM6Ydo0NOyjP`2dy@wF`!dhgK4dYtT(lFxTy_q;7g&Zxg5?S5rLvn7pJh z!cOLG=Ob4el#$(hBsavpqPSqdpPNo1YZ#-)j+GXBz9h)ag*cfOT-E9E-BWtJUSh&K zB@+~%##qkdOJ>>r>=-ke@X)v&3E7Ej#t7MGQN7uNOHWNx>&2yRDPQ8nOGm1?n{Z25 zHbuy0uX%B$hxu(qEd;4*b3JC;xxcAJ@Dm0)EOgpi@tZkCpH7xq>Hk=14enW+DwPu+ z5C(;VLQEKT)Wq~~gR1AemE@YojTvQT!nSjKkuiddmZLnF45-6__V z8ib5+h?M6e{k=#Jdt)c9>%eDXR29{)VinD4Ew5Sgh0vPSOG{gE$E?Fk_5`i^!L*g$ z{?Yz4?oNAgf4>el9Xceom}%z*F2gg;BJx|@SPsj$dLV|W4jJRp09N{CMACZx{x6ad zk%$amogV%Q5w`+uc&);M%XPtxQ^G0QX*GVW>wx62L3X6@aBy|51w+AZIJVm0-#Ucr z^-jSvN~>@i}Ivh;FY z5AN4Ztb;~|yS@QK_2d76CJwjHqvA2+4YL2nV@B~#521-6yHom4JbA*=12f@Juw)6z z`-Fn^N%^K8G8qkG&RqovRia%&8lO+sbLk|SEo+#xsXWa1qq$AxA#wXwAjPE-El8ss zZ|!nY`~lqGWiQAh5;T)MDE8n{ia&&r7Lj60;6{r>jW@6+Ru?XYSn4%4_NqrM!5d=7 zoGTpfx9#kBudBf<7NY3lQPkn1m>t)`mJQV`;ko?JhZ7XX0`31Cm%KCLqB9(z^OJEi z;-xq!9Xj#Ly09`z zs_%(%P2_q{D-3%ts0nl7CMR8gZ^P9 zD@MhQF`=LLeH>_nYruxD2h5zXG-!cuaEz0^G1x>@6Qm3o^9h;L{3=08Acb@%8O0gg zPIglPk&#Q9kQ$;4;Dsc@{ifkCr#4P&-WaB}hBE~fvA!!KEMtN&J>y-a_DuJ>#l*R< ziRjIvdqm<{V;Ws3D9!b(M1(FtX_Z1kc7ay3kT;$+v_y0tXj1d$$x{1w{rG+C$@(GV zVp^ga62s%PW1Tvplvt&XFul3{rOZqZ!-Q{+tyU2`CXTo9Y`lHkTex_%#~Bqr?ofOFIf+#m z+^C2+z2QP8gSGLOe4~C)`{|hfjp5%0}=5`AkQ#Stk(+;o|Ie%EC~7 z&J4@kD9I>@_vYGgZ|*FCiP4fqe3+?LixK;TuK-N>q#ajIvb!k?U6$P<%KfykuAIgx p0h>-TDY5&>gq3*{mleCCW=>Iw=XcZuqNlH^1#AZAUXZi~;V;7fkOKe! diff --git a/reactos/media/inf/msmouse.inf b/reactos/media/inf/msmouse.inf index 30d4abb21c5e4928a0f4c07be94e2816a3a36232..4e5ed0a88557228bc425f8cc0b0f4b758171a34e 100644 GIT binary patch delta 1997 zcmaJ>Urbw77(Z<(w57Ly7?ifRy)A|Ia_QPqZo94ND&wDn8E}mon?V#NZetr`4wtx~ zF_`#bf~@#eh*0v4i%dadicFF>$W^jL=E)+tOr|lsoMUL zqkLk@p*+|y&8u%WgwXz`fnxr~&XRMKHQpr(t5OP%H(KC^ z`4+>9!lGY6&v8WhwDB7EIYk+Lv0$30td7=Bkuh?HEbQXJa??r9r_!{KSC+!GlH$kU zuqA@1)0UIEUXCNHry2d(y;~8m(u#t$j=Sb9zhZn1g-h#$r04_M|C*E_mW0bOZph<8#ncBQL-SzaO=#Gz9B@+LwWN?xskCg1Ep7c0zRNgz(GUeyq|JUJDPws{y|W zF9ov}8OnjfJl@|yMT91BwL&E9cX5BhoZ>!@hXGIAST zRi!DENCzfTHq=%_vpjPzK2sW(^-LEyQkG}J3$K@dBqQIHRA&raTOyIiC z;u9_rg+#EGmB=~9iZ;q&twpGxHLL-C>a<{35cA;ZN^+RB@Cdx$rEgJ}vkr=-^oPsZ zbSN5Nw8o(vwQJO9(>D?_ye&I!#zr+}BFx3;&!Q5^!*{VB)T&Yzt|%VJ$oNM_J}UHf zJFKJl+ZtxfSLHW(^%Hqo>(Le21Mes{_`JJ?N9*sF2A7gVq*NkJkuXcrNco!5B*!}@ z!yn2qjh7FGd%75}9F%*887~zzFC^o1SqI|ucO-~8xEt@~RXg!TjZZmXftiF2?(C28 zs5_g6NBfUpRVwlNQw#<_$yLLt{`*MR?U(c&~|} zv-|9<_~1yo5%K7wTuRrcy(r0WKkZ>>A4Sau2m0vyRHXrCeb!gIeGVS>+0jo&B%^8_ p;JY;h->VtUYj?lSW+GaD)-(0#tiKbT$IadsVM29T+6}dV`WNnbw{HLd delta 1509 zcmZvcUrbwd6vu!4OS%33m$tX1<@WD|wzQ=!l@TZvks%Nk2`)f4P@D^HuuNQ{Mt$=| zqoZGaFi}H%Fvgfb_OOt}EOSq~EZNw@UR=!dVOjRzmQZZuNBt+$s(zWV@h=zS5z51QuV0>$m$rT)Jd}5SIhWb z-LDgvz~*pFw4RQRdThZ{?dQ_%Z99Q(6ivMAl`v&-1DvFfR{&j8QDmQ?;g$_35!~bl|3OfD~5K7jzDpow%Yt+e^Xw$eW`(^)Q-8{v#sgc@ctC|?<{+OH?~K zF^V%zuKw65BJ2JDaaUD&KXi@I`v!g4bMubB^aSbL@A8gkvbjGy9#O;V>Gru5m542~ ztL~L>xox!3>1*C}bEcB22PcgYRTe|mG|km@sAHR;$4%c9<>~OdQTFHI2qp2kpU?eq zM6Qb#*u*7B;VQO8FYbsVxE>zHi2z^g!D0vt#VY;^c*y&$DC2fV6&Hej)PqYD*(u4` zl7_L|?uR8Zj(b7g_HKKKAg9P80KN-3h%gFuxSc4oMCfZd%idv&DhWS_7fJPhlvyH- zVKyQ>q0AG3FV=3msOe=j*h4ZdMal}Lmk47x9}P77u;6~wK&1YbMfNsbFDD(rax6pY zTOBW8Ey_C>$EPu#e^Yu98}UX5pTtZ}#`6jzfrSL8K8}dEn~;dphb`HQ@uY)T1+q=p zNCt?N$KOd0%`T5VnGg3?M~)&ERFWqAB0GqeRs4;lfM}7pK=sw`bD zr4}D5U3!{m94lR8N-aLz?V`UAv5X&6R7)yFwdBc8Q5|Jtn)Pd6(vE7!wY=}=a6FxD z)^jyIpwyAc@W`f=!_{;O*D?)mCL_Ss&F_7;-KWd3sxpBh>fNO#^+9)7p;odPg;>dY zu$^@ry3?aLo|6>f+<{x%lxk0I(5K6@#vLY5>giXqC-6;=hq8~*TY$bG5uu{kYXui4 ww4P(Hvoows*_$H}ioA!$?pz>ie>+D@l0v;)@=$btLo2-!(I>H8a;XLOA6p!-<^TWy diff --git a/reactos/media/inf/netisa.inf b/reactos/media/inf/netisa.inf index 013fad59f10772fae0ebab6b7b68b84033ce535c..ad27cf7add6b6f4daa0854caab7244ad4b1ce384 100644 GIT binary patch delta 589 zcmY*WO-lk%6n*nOj`M6$S}Iu*A{LS#X~+;}5(JS5Q7uF$q#%;S&>!GGXt;}7v?-`f z`*tC&TiGsX-=dX^c0%159}im0nfuN==iK|=yPbcDT!$1&3_|Vj0V~>m2^o8^U_Z?X z)PBt&jM4&ysIY`s7S0i$g;m54!J3%BFUD|P5EC&s4HIi*kDQQ8(j{m3Z;%dFSL77G zI-$@La~`gQd(kgB>`-iQ)`FpCK}R}d9p0oB?C>M)A{ON=Vq3=1;889y#g`n%HB}0T z+ln)BSE=*78uaD3+vQi8<(UcCRA*4RuU;^&uO@N*tvctK(j3gXc%+rEzR{9A(E?j4 zKvmMg(5uWn@=m)wT6&f-0~&>~>4SHD5&a{bT{DclK{)oP$W0UhxbuWuMG=}b0EQ9a znL#Z@*4=xXXiexC%S`)eWd7;OTvzd~p{D0;@%;tXEoJ6i_Xa$e?EP_`u(HLyV>83@ Xn>5e;K`q1QsJr`VsQ7kd=OzCDB2j>@ delta 458 zcmX|7OD}^#6usZ8UpuOaM~M~QRrTVIzcC@NH-iA#{OI3yFx8m4wfUM8t-b zwS@>4^cUDzlGuuch@FjVG%~p}ch0%zoXK2O9#ap#B{a$#eL=aV~VJVBaSDNvmbSnZaY6zBEU-PFQp;^{#&;p-xl;LhoI;Pk? zgjdyzJGGou&#Iq|Lzs5eA*gjRGOHc&{;f5lULQh6kK#g);YCjx(iyjUm6F1+5y!3( z!L>2P(`Aluso=bMic&blWXBo7!OVH=tao#JQIF~ zQrI;q9e{M0?*(e%r@W#WF@xBbNKh9w_#5u^bRAM+mgnrKj*O;gcv%b9#Sm)m#34`9 z;j5_n=_&L`!&8S?cN0EGPBYKV%u7cwUX$ovKQP;7wixS&;b0Xx&YaO)-lo>=@#t&Y z)u!E@s0J*hdQht?HcaReY^7oxwimVXG}lLU!-jRe>d_2*iH>*Lp0qo64Y`-nhdB3r zy0gDoj45j&bDXgp_>n36$2#G$wi6||nN{}9xtc98UL7tPbYgno4MpJ*<-Re78FzAz t3FmY4Mbhov%enVnQ_G+fB-qKRjEMJ|Kgx+6ua#eBBnKWA4hQJJ_78PE^nm~X delta 776 zcmX|;O=uHA7=~we^E*kln@Kj!rU{iaKUP8;*FY2PPc%}+Q|KXTW27k+Y7a{5t(O)L z;z7aiq9+kgA}Crt^yI;VhzF72SuOM^9`w?i;5XCYVRznd=Y8h==Gzaac4`lj8t-K; z+njOMW-WG&ZLnMHI=jhkuuiX6>wT_3*UG491zgcq@ll(=fp$jYn9=iC(T|eq>En2( zPm}tqPh!Go;f_(qCu5Voob!xg)svGhPt4#fk2g*cea~5?Pe+TWdtIgPleT;=`rf#z zH6iN?kz4*b-1W6cMf_t%hskvcNuI{CpW3JWhxFbHj%gjt1sY1*cpONPdL6RS4@lQu zFz-FjF0u}s;MBk~8x+KB1>35YXRgtc#WP;@s)?Y@i{yxg@>mLIwd3fJdKq@H8#3`b zoWswMObLc3AwoIw4kU|2}@>l#R!^~2g134r2Q>z zrsBU@0ep>?)EQMF|3O!b;2>P)NQT3g7Aoyk T+Er1 zSxk}44`dMqo88FL4>eDabtaUxn$?gQXy)YoY?4SiayhlZI!#3Uyut# znsVt*KENgcWL0wM^9BF|qX=j_*jJnG5E9{|a1zGJU8?bUr;tqid zeB=`bJ0O!A6d{Iu`jby_YeD541r#T*;*$Z22u*h30a>t+H+AwM9x=FHX;xEEEQ9r_ z@yej+6PR4Ws|VIoh@{>esy-Y=ts7j0JlGYglTG-IkW_T=yTDaQvKum3!flljP=l+> z2HWO2`HKKd??*n#$qs^SU^De6tMT$pejv!ht^|#WiGuN99jSsvzyy*4Otrj>Fu6n_ eh)eV*uM-=fNzWq zD-O+4omS{R-Qanhn!K%3gHMee0&E!>w2U09UK&|05TNeNVAnXy$gKIimvhfPAZi%2 zvW!k!6IiqISd@8u;Q8G;jo-2unWt5DZBnQ^i8pb=u3MXw)4L_oXI&KMbu`#xN<&EQAtc>^WGOBT(k#Eib9>=YY zdm?#R)M=TOanYb5ZWfY_L`jifBw}5%S)!xt`qvr9pTvL51m8x?g3_@ivrZ{ifUn6( zRwh#orO)ced+JZA5rywZ+Nom6*;McMb=)d1=iI9tyQZK4R6Ooi#EzHOyS-MCN>sG<80+BV0@u$meAd zhx0*d_$IrthycYSS+bGD*RV)11HCZ$BMZo7qO2g&5=_RjIs(~qS#?qDwx7($76jFw z$R-L@QOafv_%|+C{EtTZ2?uM$799sjAjU9NM$HuC}zlH$Y;o7h@Gfw$;`!I zJyBnNVwcdwc?J_NC{6s5F*%M=Z*m`_6C>B;tBk6X|1fF*S(;4pK&7ga8QDcACo##e zg3SZ*7-J{TXUYbu;Afr+Bx6|=fg)#_9f53N7Tw8CEMj0$)5%juQmlj-BZt@2%P^c_q2dQuZt1zAXfLjK`9uc6Z98{$d V1H?s&lU;Z$kj&b~W5&eA0080obuRz_ diff --git a/reactos/media/inf/usbport.inf b/reactos/media/inf/usbport.inf index 6ef31ea17d8f100fc58195fc0d6c18f36fa9fe2b..b967fd17e89f30ace8c134428be75fb08e9ae13d 100644 GIT binary patch delta 1685 zcmZ`(OHWf#5I${hDYtLvgWk5crMIn6UILX!gG7)(Kxs5!lqje`gp#QEz!(#wb*H#c z77r=cbTeq*>5iiPp&L*u zfkz+5IHgbUcv7Fh_=P?t769PAK5oFWu&W=&T(_Yc?NdXFzxZqjGcOJ&1rPi&1Tkw9 z8hN%u2w)sB2H>_Z$i1DAANGV+7EPnwHBx4~#+&@jSXmX#nG&$$ZN{4dY?TeMlU06W z+w_KevM4idckBUJE?2ay%cCrlvq)ju%YBq+0&Rv&qEt;7J;WdD5@eC;lon@s)h{Ad zDQBhH=v>r>oz$jnNtib~(R*pjcerip0kdT&&)pKnEM@c7qF4$VlC$ukJW_(sY)L+2 z78#nYZi*;IVahtF>Fc>Qq1GwEuBVvUqCHPcbmWEVLRn!*FnambRJ{V92M>J719`(IlBT1&R zKVPG=k#==GzXosQ{581KkD0f$Fz7ZZ zd;uLkx;7MX#Ah!?eC>;|>S-92tjtqU52CEph3D(icnP!&f0grp0~IdtoH5mQTZG{9vqfkP(jrbdl8ab*U4+9np60teIn7FF~l*S`w@tKGi#IfLwEho+Yhr>;&0aC38#Sq*xG(qDXdAm=CA$F_cB1Wk&Mn!)NfOWrh^vt|#=q zZBcktqp_E8Cnfo|%H*dilMQ@TCn!47`Y*k(i@ffcqMYxZI59^o z-f>vGh$61jILcIcMO>t@3{Z5F9{wYSb$3AOC|=f?^Zu)oL)Q1VibL4+%~IaBKWTMk z($DkT_6Je*N7;Yqk6wjz%e&OJ{RgDdNITE|Vf)_y`gK0wX;gI-qb?_Q0;jEOHBGa- zO753wa@Rx=CxiQNKUg5r(Rc#cn2KLP9i`YfN*!TzMJLb~>Y#5JqdMIN+AD;{DZ3Wx zL0NkwPs>_2x_Vc6O($ErhHS)1)IO9Vo?YaPh$+e5sE3HN4JyZlP#)Q|6JE`1(APPdN@_#bC~s9%&j92c?@NX3YRT8SIfgbtd!V zX&BWc^ZDBW#q?X=3>hy|eBb2z##)>)naVb_>Tw5Yb>dstC95SxOm;WRzOHre?(3`W zwCwAn9`5S|sy(Wul>_h9d&~E0UVDr$Y1PtMtJl$>e(UA=aRr&a5lOt!&$FMvt^PoR U$a_qD+n=$BeEMfnw6-haH}jE8-~a#s diff --git a/reactos/media/inf/usbstor.inf b/reactos/media/inf/usbstor.inf index fff9087fcdc5c7362869a1e35e38f7c70b178004..011b6cc6ee358de82d74494a797595b95d3342b1 100644 GIT binary patch delta 579 zcmaDR{Yhqm3@a}K7X$A^*+^+H1IUSH2xCZPC}JpP$YjW8$YY2FN_Sg=)mcyMm7n-b zh>>^VcSA{oDIabW`p^mo^2{ps00IT zC<2B_9z#0Ne2}{}*^QxQ334e;u4C5%>dxm5oP3XiV-klPR7#!$rKF(AIB}l+cmgkUUH)24zOoP`3u9jo+9$pO=Pyhn}p$%@Y delta 358 zcmew)^Gtez3?tV>#YiAgFFJ9W#l#CHli3&zCR;EnO^#vAn0$;;Z}K-rCq}NxwoIy% zQtcgtWlQ%J$uyQeQF+@+k$Rx@bJ9#6M@FY%)$wACnKm`YxrvgcRR&Ag}CyO_j zEjxJ+iv*A_$SMiu+fOcF%>%L?v+7S4VN;oG1;hzJ+{Om7>>#t{$sU{vP#JTm%sNgzu#6d( z8dyetauZh!P$Xco0k;)cM3U8z!4j%^1GfcO&WgtZA~$&g4;xU20?=-O$tQSJptcB2 Zj^Gu7>NaA4*|mY!1}yK!r@_R<006$zUU2{b From 359151f57a190c6f25e2f0698959db3803ec5ec0 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Thu, 7 Aug 2008 15:59:52 +0000 Subject: [PATCH 182/304] install all fonts in SystemRoot/Fonts instead of SystemRoot/media/fonts svn path=/trunk/; revision=35162 --- reactos/boot/bootdata/packages/reactos.dff | 2 +- reactos/boot/bootdata/txtsetup.sif | 2 +- reactos/subsystems/win32/win32k/objects/text.c | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index 8881c8b5460..fa9e7d48d15 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -15,7 +15,7 @@ Signature = "$ReactOS$" [Directories] 1 = system32 2 = system32\drivers -3 = media\fonts +3 = Fonts 4 = 5 = system32\drivers\etc 6 = inf diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index f4c3c838e60..ee5883dcacb 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -8,7 +8,7 @@ Signature = "$ReactOS$" 3 = system32\config 4 = system32\drivers 5 = media -6 = media\fonts +6 = Fonts 7 = bin [SourceDisksFiles] diff --git a/reactos/subsystems/win32/win32k/objects/text.c b/reactos/subsystems/win32/win32k/objects/text.c index e4e5c2fa1fe..d469bed0e00 100644 --- a/reactos/subsystems/win32/win32k/objects/text.c +++ b/reactos/subsystems/win32/win32k/objects/text.c @@ -176,7 +176,7 @@ IntLoadSystemFonts(VOID) BOOLEAN bRestartScan = TRUE; NTSTATUS Status; - RtlInitUnicodeString(&Directory, L"\\SystemRoot\\media\\fonts\\"); + RtlInitUnicodeString(&Directory, L"\\SystemRoot\\Fonts\\"); /* FIXME: Add support for other font types */ RtlInitUnicodeString(&SearchPattern, L"*.ttf"); From 5a1ef6a0a83772062855fd06356bd2950bc24956 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Thu, 7 Aug 2008 16:08:00 +0000 Subject: [PATCH 183/304] On attempts to write to a read-only section view, return STATUS_ACCESS_VIOLATION, not STATUS_UNSUCCESSFUL. kernel32's UnhandledExceptionFilter depends on this for its automatic .rsrc deprotection. (Bug 3062) svn path=/trunk/; revision=35163 --- reactos/ntoskrnl/mm/section.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/mm/section.c b/reactos/ntoskrnl/mm/section.c index 08fa53002a0..53e9c9d80ec 100644 --- a/reactos/ntoskrnl/mm/section.c +++ b/reactos/ntoskrnl/mm/section.c @@ -1286,7 +1286,7 @@ MmAccessFaultSectionView(PMM_AVL_TABLE AddressSpace, Region->Protect == PAGE_EXECUTE_READWRITE))) { DPRINT("Address 0x%.8X\n", Address); - return(STATUS_UNSUCCESSFUL); + return(STATUS_ACCESS_VIOLATION); } if (IS_SWAP_FROM_SSE(Entry) || From 0d3d7a03f7f4e8afa3944658778dd0b1907a5fd2 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Thu, 7 Aug 2008 16:45:00 +0000 Subject: [PATCH 184/304] When reverting a window's system menu, delete the old one recursively. svn path=/trunk/; revision=35164 --- reactos/subsystems/win32/win32k/ntuser/window.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/subsystems/win32/win32k/ntuser/window.c b/reactos/subsystems/win32/win32k/ntuser/window.c index 6dfd8424a4d..d56010a17d7 100644 --- a/reactos/subsystems/win32/win32k/ntuser/window.c +++ b/reactos/subsystems/win32/win32k/ntuser/window.c @@ -787,7 +787,7 @@ IntGetSystemMenu(PWINDOW_OBJECT Window, BOOL bRevert, BOOL RetMenu) Menu = UserGetMenuObject(Window->SystemMenu); if(Menu) { - IntDestroyMenuObject(Menu, FALSE, TRUE); + IntDestroyMenuObject(Menu, TRUE, TRUE); Window->SystemMenu = (HMENU)0; } } From 73afc8f523969bb78f9e3a51eaa892ba98e17625 Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Thu, 7 Aug 2008 16:54:33 +0000 Subject: [PATCH 185/304] Mario Kacmar - Several translations for acpi.inf. svn path=/trunk/; revision=35165 --- reactos/media/inf/acpi.inf | Bin 2220 -> 3286 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/media/inf/acpi.inf b/reactos/media/inf/acpi.inf index 57614590bd4e740fa5d1b8a80f2240fdc0653db4..bc904a75a9471cc3b18269d7e33ba31647d3d558 100644 GIT binary patch delta 412 zcmZ1@cujJ{8ji_#*k#zw8DbfD8Mr1NWD=bmz%Hg(%#h5G!H~+Jz!1z($xzHt0%Yeh zqyxz!h9@B2)<20Ga?{6*80pbru6nD~6i(0%#gU zBps+G520>yBYP>QA%i8VnGT99PAmp2wk#$<(gDb}W$|V)Wl>;oWU*jz1oBN;Y~W(f zU=arvI~GeY%Lu4vavOUA&{!uFVt!<8luM223JQZ3 Date: Thu, 7 Aug 2008 17:46:08 +0000 Subject: [PATCH 186/304] - fixed russian translation - remove untranslated strings svn path=/trunk/; revision=35166 --- reactos/media/inf/acpi.inf | Bin 3286 -> 3056 bytes reactos/media/inf/display.inf | Bin 5230 -> 5278 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/media/inf/acpi.inf b/reactos/media/inf/acpi.inf index bc904a75a9471cc3b18269d7e33ba31647d3d558..c911558b172d4c27019956e8930b28d67f9bd826 100644 GIT binary patch delta 54 zcmca6`9XX`9LMBu+)|s5aab^d7?abuR){FGII=jgII!5USb|wbECwu-KX5B-w&V6< F1OVJ+{d0V`4s00pn$>VWn5m2P+2hmsO}N3 diff --git a/reactos/media/inf/display.inf b/reactos/media/inf/display.inf index 62e041bc485dc73d5834e4519a7cab93a4128eff..5a4f08aa890226f0a531dc9de1226cfa9c33c90a 100644 GIT binary patch delta 83 zcmaE-F;8=YouGy=ivx=Riwlbdi#v-cizAB_kY&oEz+k{)0u;AraRTxjSiDwe;& U&J&cF{76tp5JSo4iGp{T0EIdamH+?% delta 40 ncmbQI`A%bloglXiiyezCiv^1li{0czL0fJc1b_2E!MjWV#K#GL From 3aba92f351ddeebb60b2228ad30cd4ca9a668cdc Mon Sep 17 00:00:00 2001 From: Matthias Kupfer Date: Thu, 7 Aug 2008 18:18:53 +0000 Subject: [PATCH 187/304] fix several Russian translations svn path=/trunk/; revision=35168 --- reactos/media/inf/NET_NIC.inf | Bin 2244 -> 2250 bytes reactos/media/inf/machine.inf | Bin 30632 -> 30634 bytes reactos/media/inf/netisa.inf | Bin 3894 -> 3900 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/reactos/media/inf/NET_NIC.inf b/reactos/media/inf/NET_NIC.inf index 9cf03ddb28361cc3d90ea34b58a76e25852e700d..7721fc6c30496abf39c10ca5f453fa27aea6d7ca 100644 GIT binary patch delta 32 ocmX>icuH`?9d-c&784c&7JC*a7E=}n7H^ix4eWB0SvU>=0F4|6-~a#s delta 26 icmX>lctmi+9d<5z7Hbv*7AF>OmdOq5a+A3@4gdgZeg`%H diff --git a/reactos/media/inf/machine.inf b/reactos/media/inf/machine.inf index 09940487d17ef14ffddff35eeda518bf6bdded8c..c9692a04e11d33295b96180c5e3df5bd10ccab45 100644 GIT binary patch delta 44 zcmZ4So^jQC#tj>SChJ9rO%Cwo;4@SCi5khO`Z_Qx7jSXLrYw^;a4Kw0 Date: Thu, 7 Aug 2008 20:21:23 +0000 Subject: [PATCH 188/304] Replace .def file by a .spec file svn path=/trunk/; revision=35169 --- reactos/base/applications/regedit/clb/clb.def | 10 ---------- reactos/base/applications/regedit/clb/clb.rbuild | 3 ++- reactos/base/applications/regedit/clb/clb.spec | 5 +++++ 3 files changed, 7 insertions(+), 11 deletions(-) delete mode 100644 reactos/base/applications/regedit/clb/clb.def create mode 100644 reactos/base/applications/regedit/clb/clb.spec diff --git a/reactos/base/applications/regedit/clb/clb.def b/reactos/base/applications/regedit/clb/clb.def deleted file mode 100644 index 805736e65b7..00000000000 --- a/reactos/base/applications/regedit/clb/clb.def +++ /dev/null @@ -1,10 +0,0 @@ -LIBRARY clb.dll - -EXPORTS -ClbAddData @1 -ClbSetColumnWidths @2 -ClbStyleW @3 -ClbWndProc @4 -CustomControlInfoW @5 - -; EOF diff --git a/reactos/base/applications/regedit/clb/clb.rbuild b/reactos/base/applications/regedit/clb/clb.rbuild index b3a0cf5c23c..2e8d86aa7fb 100644 --- a/reactos/base/applications/regedit/clb/clb.rbuild +++ b/reactos/base/applications/regedit/clb/clb.rbuild @@ -1,7 +1,7 @@ - + . 0x0500 0x0600 @@ -13,5 +13,6 @@ comctl32 clb.c clb.rc + clb.spec precomp.h diff --git a/reactos/base/applications/regedit/clb/clb.spec b/reactos/base/applications/regedit/clb/clb.spec new file mode 100644 index 00000000000..a3ba3f2a321 --- /dev/null +++ b/reactos/base/applications/regedit/clb/clb.spec @@ -0,0 +1,5 @@ +1 stdcall ClbAddData(long long long) +2 stdcall ClbSetColumnWidths(long long long) +3 stdcall ClbStyleW(ptr ptr) +4 stdcall ClbWndProc(ptr long ptr ptr) +5 stdcall CustomControlInfoW(ptr) From 3fad64777eae07060f16234f40ad33b8b2616607 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Thu, 7 Aug 2008 20:28:13 +0000 Subject: [PATCH 189/304] Replace .def file by a .spec file svn path=/trunk/; revision=35170 --- reactos/dll/shellext/fontext/fontext.def | 6 ------ reactos/dll/shellext/fontext/fontext.rbuild | 3 ++- reactos/dll/shellext/fontext/fontext.spec | 4 ++++ 3 files changed, 6 insertions(+), 7 deletions(-) delete mode 100644 reactos/dll/shellext/fontext/fontext.def create mode 100644 reactos/dll/shellext/fontext/fontext.spec diff --git a/reactos/dll/shellext/fontext/fontext.def b/reactos/dll/shellext/fontext/fontext.def deleted file mode 100644 index 1509694f3b4..00000000000 --- a/reactos/dll/shellext/fontext/fontext.def +++ /dev/null @@ -1,6 +0,0 @@ -LIBRARY fontext.dll -EXPORTS -DllCanUnloadNow -DllGetClassObject -DllRegisterServer -DllUnregisterServer diff --git a/reactos/dll/shellext/fontext/fontext.rbuild b/reactos/dll/shellext/fontext/fontext.rbuild index a610f9f3772..7986fee6620 100644 --- a/reactos/dll/shellext/fontext/fontext.rbuild +++ b/reactos/dll/shellext/fontext/fontext.rbuild @@ -1,5 +1,5 @@ - + . 0x0500 0x0600 @@ -18,4 +18,5 @@ fontext.c regsvr.c fontext.rc + fontext.spec diff --git a/reactos/dll/shellext/fontext/fontext.spec b/reactos/dll/shellext/fontext/fontext.spec new file mode 100644 index 00000000000..f0c566e949d --- /dev/null +++ b/reactos/dll/shellext/fontext/fontext.spec @@ -0,0 +1,4 @@ +@ stdcall DllCanUnloadNow() +@ stdcall DllGetClassObject(long long ptr) +@ stdcall DllRegisterServer() +@ stdcall DllUnregisterServer() From 7190d810e8d2a476305363460b85a0f4a4c9d35b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Thu, 7 Aug 2008 20:34:19 +0000 Subject: [PATCH 190/304] Replace .def file by a .spec file svn path=/trunk/; revision=35171 --- reactos/dll/win32/serialui/serialui.def | 10 ---------- reactos/dll/win32/serialui/serialui.rbuild | 3 ++- reactos/dll/win32/serialui/serialui.spec | 6 ++++++ 3 files changed, 8 insertions(+), 11 deletions(-) delete mode 100644 reactos/dll/win32/serialui/serialui.def create mode 100644 reactos/dll/win32/serialui/serialui.spec diff --git a/reactos/dll/win32/serialui/serialui.def b/reactos/dll/win32/serialui/serialui.def deleted file mode 100644 index 79883898b7b..00000000000 --- a/reactos/dll/win32/serialui/serialui.def +++ /dev/null @@ -1,10 +0,0 @@ -LIBRARY serialui.dll - -EXPORTS -drvCommConfigDialogW -drvCommConfigDialogA -drvSetDefaultCommConfigW -drvSetDefaultCommConfigA -drvGetDefaultCommConfigW -drvGetDefaultCommConfigA - diff --git a/reactos/dll/win32/serialui/serialui.rbuild b/reactos/dll/win32/serialui/serialui.rbuild index 9099b0a2a6a..5d09b18436c 100644 --- a/reactos/dll/win32/serialui/serialui.rbuild +++ b/reactos/dll/win32/serialui/serialui.rbuild @@ -1,9 +1,10 @@ - + . kernel32 user32 shlwapi serialui.c serialui.rc + serialui.spec diff --git a/reactos/dll/win32/serialui/serialui.spec b/reactos/dll/win32/serialui/serialui.spec new file mode 100644 index 00000000000..9f806ac9713 --- /dev/null +++ b/reactos/dll/win32/serialui/serialui.spec @@ -0,0 +1,6 @@ +@ stdcall drvCommConfigDialogA(str ptr ptr) +@ stdcall drvCommConfigDialogW(wstr ptr ptr) +@ stdcall drvSetDefaultCommConfigA(str ptr long) +@ stdcall drvSetDefaultCommConfigW(wstr ptr long) +@ stdcall drvGetDefaultCommConfigA(str ptr ptr) +@ stdcall drvGetDefaultCommConfigW(wstr ptr ptr) From 2f93772b833cd0f46ca21a3d0f5167eea2b0594d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Thu, 7 Aug 2008 20:38:54 +0000 Subject: [PATCH 191/304] Replace .def file by a .spec file svn path=/trunk/; revision=35172 --- reactos/dll/win32/cards/cards.def | 8 -------- reactos/dll/win32/cards/cards.rbuild | 3 ++- reactos/dll/win32/cards/cards.spec | 6 ++++++ 3 files changed, 8 insertions(+), 9 deletions(-) delete mode 100644 reactos/dll/win32/cards/cards.def create mode 100644 reactos/dll/win32/cards/cards.spec diff --git a/reactos/dll/win32/cards/cards.def b/reactos/dll/win32/cards/cards.def deleted file mode 100644 index 0af62e9904a..00000000000 --- a/reactos/dll/win32/cards/cards.def +++ /dev/null @@ -1,8 +0,0 @@ -LIBRARY cards.dll -EXPORTS -WEP -cdtAnimate -cdtDraw -cdtDrawExt -cdtInit -cdtTerm diff --git a/reactos/dll/win32/cards/cards.rbuild b/reactos/dll/win32/cards/cards.rbuild index cab5fdb975d..ace4c0c4a7c 100644 --- a/reactos/dll/win32/cards/cards.rbuild +++ b/reactos/dll/win32/cards/cards.rbuild @@ -1,5 +1,5 @@ - + . @@ -10,4 +10,5 @@ user32 cards.c cards.rc + cards.spec diff --git a/reactos/dll/win32/cards/cards.spec b/reactos/dll/win32/cards/cards.spec new file mode 100644 index 00000000000..ea18c2a3ef7 --- /dev/null +++ b/reactos/dll/win32/cards/cards.spec @@ -0,0 +1,6 @@ +@ stdcall WEP(long) +@ stdcall cdtAnimate(ptr long long long long) +@ stdcall cdtDraw(ptr long long long long long) +@ stdcall cdtDrawExt(ptr long long long long long long long) +@ stdcall cdtInit(ptr ptr) +@ stdcall cdtTerm() From ee1c8b302f23eae1df42fc6b75e76f2f27b8b133 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Thu, 7 Aug 2008 20:43:05 +0000 Subject: [PATCH 192/304] Replace .def file by a .spec file svn path=/trunk/; revision=35173 --- reactos/dll/cpl/console/colors.c | 3 +-- reactos/dll/cpl/console/console.c | 3 +-- reactos/dll/cpl/console/console.def | 6 ------ reactos/dll/cpl/console/console.rbuild | 3 ++- reactos/dll/cpl/console/console.rc | 3 +-- reactos/dll/cpl/console/console.spec | 1 + reactos/dll/cpl/console/font.c | 3 +-- reactos/dll/cpl/console/layout.c | 3 +-- reactos/dll/cpl/console/options.c | 3 +-- 9 files changed, 9 insertions(+), 19 deletions(-) delete mode 100644 reactos/dll/cpl/console/console.def create mode 100644 reactos/dll/cpl/console/console.spec diff --git a/reactos/dll/cpl/console/colors.c b/reactos/dll/cpl/console/colors.c index 16eabd810a3..25fa28ac64d 100644 --- a/reactos/dll/cpl/console/colors.c +++ b/reactos/dll/cpl/console/colors.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/colors.c diff --git a/reactos/dll/cpl/console/console.c b/reactos/dll/cpl/console/console.c index cdbd817086f..801a0d35c3c 100644 --- a/reactos/dll/cpl/console/console.c +++ b/reactos/dll/cpl/console/console.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/console.c diff --git a/reactos/dll/cpl/console/console.def b/reactos/dll/cpl/console/console.def deleted file mode 100644 index c1622ec4db8..00000000000 --- a/reactos/dll/cpl/console/console.def +++ /dev/null @@ -1,6 +0,0 @@ -LIBRARY console.dll - -EXPORTS -CPlApplet - -; EOF diff --git a/reactos/dll/cpl/console/console.rbuild b/reactos/dll/cpl/console/console.rbuild index a905d98e3f1..7fce9201d08 100644 --- a/reactos/dll/cpl/console/console.rbuild +++ b/reactos/dll/cpl/console/console.rbuild @@ -1,5 +1,5 @@ - + . 0x600 0x501 @@ -13,5 +13,6 @@ layout.c colors.c console.rc + console.spec console.h diff --git a/reactos/dll/cpl/console/console.rc b/reactos/dll/cpl/console/console.rc index 1f40b0d7bc7..d4f5ad07b7f 100644 --- a/reactos/dll/cpl/console/console.rc +++ b/reactos/dll/cpl/console/console.rc @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/console.rc diff --git a/reactos/dll/cpl/console/console.spec b/reactos/dll/cpl/console/console.spec new file mode 100644 index 00000000000..9c55a90e177 --- /dev/null +++ b/reactos/dll/cpl/console/console.spec @@ -0,0 +1 @@ +@ stdcall CPlApplet(ptr long ptr ptr) \ No newline at end of file diff --git a/reactos/dll/cpl/console/font.c b/reactos/dll/cpl/console/font.c index 6efb089f475..8145a081421 100644 --- a/reactos/dll/cpl/console/font.c +++ b/reactos/dll/cpl/console/font.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/font.c diff --git a/reactos/dll/cpl/console/layout.c b/reactos/dll/cpl/console/layout.c index 9def3f75924..afa0a6771ef 100644 --- a/reactos/dll/cpl/console/layout.c +++ b/reactos/dll/cpl/console/layout.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/layout.c diff --git a/reactos/dll/cpl/console/options.c b/reactos/dll/cpl/console/options.c index ba1eac6e274..221125b6033 100644 --- a/reactos/dll/cpl/console/options.c +++ b/reactos/dll/cpl/console/options.c @@ -1,5 +1,4 @@ -/* $Id$ - * +/* * PROJECT: ReactOS Console Configuration DLL * LICENSE: GPL - See COPYING in the top level directory * FILE: dll/win32/console/options.c From c3821ec8a5ab263851a5444164afc0d700254d28 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Thu, 7 Aug 2008 20:47:54 +0000 Subject: [PATCH 193/304] Replace .def file by a .spec file svn path=/trunk/; revision=35174 --- reactos/dll/cpl/hdwwiz/hdwwiz.def | 7 ------- reactos/dll/cpl/hdwwiz/hdwwiz.rbuild | 3 ++- reactos/dll/cpl/hdwwiz/hdwwiz.spec | 2 ++ 3 files changed, 4 insertions(+), 8 deletions(-) delete mode 100644 reactos/dll/cpl/hdwwiz/hdwwiz.def create mode 100644 reactos/dll/cpl/hdwwiz/hdwwiz.spec diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.def b/reactos/dll/cpl/hdwwiz/hdwwiz.def deleted file mode 100644 index 63cd59d5a8e..00000000000 --- a/reactos/dll/cpl/hdwwiz/hdwwiz.def +++ /dev/null @@ -1,7 +0,0 @@ -LIBRARY hdwwiz.cpl - -EXPORTS -CPlApplet@16 -InstallNewDevice - -; EOF diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild b/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild index 4b8f2efefd0..628c1012c15 100644 --- a/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild +++ b/reactos/dll/cpl/hdwwiz/hdwwiz.rbuild @@ -1,7 +1,7 @@ - + . 0x600 0x501 @@ -9,4 +9,5 @@ kernel32 hdwwiz.c hdwwiz.rc + hdwwiz.spec diff --git a/reactos/dll/cpl/hdwwiz/hdwwiz.spec b/reactos/dll/cpl/hdwwiz/hdwwiz.spec new file mode 100644 index 00000000000..f0fe41e08ce --- /dev/null +++ b/reactos/dll/cpl/hdwwiz/hdwwiz.spec @@ -0,0 +1,2 @@ +@ stdcall CPlApplet(ptr long ptr ptr) +@ stdcall InstallNewDevice(ptr ptr ptr) From 121717a5934d9a5c35d55f2b279d5f71e2123b01 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Thu, 7 Aug 2008 22:41:36 +0000 Subject: [PATCH 194/304] Implement FLOATOBJ api in assembly. ~~ On x86 (and only there) we must not use the FPU in kernel mode code, because the fpu state is not safed on normal context switches. That's why there's the FLOATOBJ api. It provides the needed fp emulation for win32k and drivers. I wrote it in asm to be fast. It's not yet plugged in. svn path=/trunk/; revision=35175 --- .../win32/win32k/eng/i386/floatobj.S | 1155 +++++++++++++++++ 1 file changed, 1155 insertions(+) create mode 100644 reactos/subsystems/win32/win32k/eng/i386/floatobj.S diff --git a/reactos/subsystems/win32/win32k/eng/i386/floatobj.S b/reactos/subsystems/win32/win32k/eng/i386/floatobj.S new file mode 100644 index 00000000000..268db69023c --- /dev/null +++ b/reactos/subsystems/win32/win32k/eng/i386/floatobj.S @@ -0,0 +1,1155 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Win32 subsystem + * PURPOSE: FLOATOBJ floating point emulation functions for x86 + * FILE: subsystems/win32/win32k/objects/i386/floatobj.S + * PROGRAMMER: Timo Kreuzer + */ + + +/******************************************************************************* + * IEEE 754-1985 single precision floating point + * + * | 31 | 30...23 | 22...0 | + * |sign| exponent | fraction | + * + * mantissa = 1 + (fraction / 2^23) + * f = (-1)^sign * mantissa * 2 ^ (exponent - bias) + * bias = 127 + * + ******************************************************************************* + * win32k x86 floating point emulation + * + * struct _EFLOAT + = { + * LONG lMant; + * LONG lExp; + * }; + * + * f = (lMant / 0x40000000) * 2 ^ (lExp - 2) + * = lMant * 2 ^ (lExp - 32) + * + ******************************************************************************* + * Optimization notes: + * + * - shld is slow (4 cycles) and not pairable, mov + shl is faster + * - esp is used, beacuse it's available earlier + * - bsr is very slow on old cpus (up to 72 cycles on a p1) while being much + * faster on modern cpus (2-11 cycles). Workarounds using branch trees or + * table lookups are of no use nowadays. + ******************************************************************************* + * Compatibility notes: + * - There are issues with very large size values near integer overflow. + * Floating point values are behaving different there. This behavior isn't + * simulated yet. Difference is < 10^-5 % + * - The result of a multiplication can differ from Windows result in the + * least significant bit, that is a difference of 1 / 2^30 or ~10^-9 + ******************************************************************************* + * Implementation status: + * + * FLOATOBJ_SetFloat - implemented, tested + * FLOATOBJ_SetLong - implemented, tested + * FLOATOBJ_GetFloat - implemented, tested + * FLOATOBJ_GetLong - implemented, tested + * FLOATOBJ_Equal - implemented, tested + * FLOATOBJ_EqualLong - implemented + * FLOATOBJ_GreaterThan - implemented + * FLOATOBJ_GreaterThanLong - wrapper + * FLOATOBJ_LessThan - implemented + * FLOATOBJ_LessThanLong - wrapper + * FLOATOBJ_Neg - implemented + * FLOATOBJ_Mul - implemented, tested, optimized + * FLOATOBJ_MulFloat - wrapper + * FLOATOBJ_MulLong - wrapper, could really need optimization + * FLOATOBJ_Div - implemented + * FLOATOBJ_DivFloat - wrapper + * FLOATOBJ_DivLong - wrapper + * FLOATOBJ_Add - implemented, tested + * FLOATOBJ_AddFloat - wrapper + * FLOATOBJ_AddLong - wrapper + * FLOATOBJ_Sub - implemented, tested + * FLOATOBJ_SubFloat - wrapper + * FLOATOBJ_SubLong - wrapper + */ + +.intel_syntax noprefix +.text + +#define lMant 0 +#define lExp 4 + +#define PARAM1 8 +#define PARAM2 12 + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_SetFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + */ +_FLOATOBJ_SetFloat@8: +.global _FLOATOBJ_SetFloat@8 + push ebp + mov ebp, esp + + mov ecx, [esp + PARAM2] /* Load the float into ecx */ + mov eax, ecx /* Copy float to eax for later */ + + test ecx, 0x7f800000 /* Check for zero exponent - 0 or denormal */ + jz SetFloat0 /* If it's all zero, ... */ + + shl ecx, 7 /* Put the bits for the mantissa in place */ + + cdq /* Fill edx with the sign from the FLOATL in eax */ + and ecx, 0x7fffffff /* Mask out invalid field in the mantissa */ + + shr eax, 23 /* Shift the exponent in eax in place */ + or ecx, 0x40000000 /* Set bit for 1 in the mantissa */ + and eax, 0xff /* Mask out invalid fields in the exponent in eax */ + + xor ecx, edx /* Make use of the sign bit expanded to full edx */ + + sub eax, 125 /* Adjust exonent bias */ + + sub ecx, edx /* Substract -1 or add 1 if sign was set */ + + mov edx, [esp + PARAM1] /* Load pf into edx */ + mov [edx + lMant], ecx /* Save back mantissa */ + mov [edx + lExp], eax /* Save back exponent */ + + pop ebp /* Return */ + ret 8 + +SetFloat0: + mov edx, [esp + PARAM1] /* Load pf into edx */ + + mov dword ptr [edx + lMant], 0 /* Set mantissa and exponent to 0 */ + mov dword ptr [edx + lExp], 0 + + pop ebp /* Return */ + ret 8 + + +/******************************************************************************* + * LONG + * APIENTRY + * FLOATOBJ_GetFloat(IN PFLOATOBJ pf); + * + */ +_FLOATOBJ_GetFloat@4: +.global _FLOATOBJ_GetFloat@4 + push ebp + mov ebp, esp + + mov edx, [esp + PARAM1] /* Load pf into edx */ + mov eax, [edx + lMant] /* Load mantissa into eax */ + mov ecx, [edx + lExp] /* Load exponent into ecx */ + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + + add ecx, 125 + + sub eax, edx + jz GetFloatRet + + and ecx, 0xff /* Mask out invalid fields in the exponent */ + and eax, 0x3fffffff /* Mask out invalid fields in mantissa */ + + shl ecx, 23 /* Shift exponent in place */ + shr eax, 7 /* Shift mantissa in place */ + + and edx, 0x80000000 /* Reduce edx to sign bit only */ + + or eax, ecx /* Set exponent in result */ + or eax, edx /* Set sign bit in result */ + +GetFloatRet: + /* Return */ + pop ebp + ret 4 + + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_SetLong(OUT PFLOATOBJ pf, IN LONG l); + * + * Instead of using abs(l), which is 3 + 2 instructions, use a branch. + */ +_FLOATOBJ_SetLong@8: +.global _FLOATOBJ_SetLong@8 + push ebp + mov ebp, esp + + mov eax, [esp + PARAM2] /* Load l into eax */ + mov edx, [esp + PARAM1] /* Load pf into edx */ + + test eax, eax /* different handling for <0, =0 and >0 */ + js SetLongNeg + jz SetLong0 + + bsr ecx, eax /* Get number of most significant bit aka log2(l) */ + mov [edx + lExp], ecx /* Safe log2(l) into exponent */ + + neg ecx /* Calculate necessary shift */ + add ecx, 30 + + add dword ptr [edx + lExp], 2 /* Adjust exponent */ + + shl eax, cl /* Shift mantissa in place */ + mov [edx + lMant], eax /* Save mantissa */ + + pop ebp /* Return */ + ret 8 + +SetLongNeg: + neg eax /* Get absolute value of l */ + bsr ecx, eax /* Get number of most significant bit aka log2(l) */ + neg eax /* Back to negative */ + + mov [edx + lExp], ecx /* Safe log2(-l) into exponent */ + + neg ecx /* Calculate necessary shift */ + add ecx, 30 + + add dword ptr [edx + lExp], 2 /* Adjust exponent */ + + shl eax, cl /* Shift mantissa in place */ + mov [edx + lMant], eax /* Save mantissa */ + + pop ebp /* Return */ + ret 8 + +SetLong0: + mov dword ptr [edx + lMant], 0 /* Set mantissa and exponent to 0 */ + mov dword ptr [edx + lExp], 0 + + pop ebp /* Return */ + ret 8 + + +/******************************************************************************* + * LONG + * APIENTRY + * FLOATOBJ_GetLong(IN PFLOATOBJ pf); + * + */ +_FLOATOBJ_GetLong@4: +.global _FLOATOBJ_GetLong@4 + push ebp + mov ebp, esp + + mov edx, [ebp + PARAM1] /* Load pf into edx */ + mov ecx, 32 /* Load (32 - lExp) into ecx */ + sub ecx, [edx + lExp] + jle short GetLong2 /* Check for Overflow */ + + mov eax, [edx + lMant] /* Load mantissa into eax */ + sar eax, cl /* Signed shift mantissa according to exponent */ + + pop ebp /* Return */ + ret 4 + +GetLong2: + xor eax, eax /* Overflow, return 0 */ + pop ebp + ret 4 + + +/****************************************************************************** + * BOOL + * APIENTRY + * FLOATOBJ_Equal(IN PFLOATOBJ pf1, IN PFLOATOBJ pf2); + */ +_FLOATOBJ_Equal@8: +.global _FLOATOBJ_Equal@8 + push ebp + mov ebp, esp + + mov ecx, [esp + PARAM1] /* Load pf1 into ecx */ + mov eax, [esp + PARAM2] /* Load pf2 into ecx */ + + mov edx, [ecx + lExp] /* Get float1 in ecx, edx */ + mov ecx, [ecx + lMant] + + sub edx, [eax + lExp] /* Calculate diference to float2 */ + sub ecx, [eax + lMant] + + or edx, ecx /* Combine */ + + mov eax, 0 /* Set eax if combination is 0 */ + setz al + + pop ebp /* Return */ + ret 8 + + +/****************************************************************************** + * BOOL + * APIENTRY + * FLOATOBJ_EqualLong(IN PFLOATOBJ pf, IN LONG l); + */ +_FLOATOBJ_EqualLong@8: +.global _FLOATOBJ_EqualLong@8 + push ebp + mov ebp, esp + + mov eax, [esp + PARAM1] /* Load pf into eax */ + mov ecx, 32 /* Load (32 - lExp) into ecx */ + sub ecx, [eax + lExp] + mov edx, [eax + lMant] /* Load mantissa into edx */ + sar edx, cl /* Signed shift mantissa according to exponent */ + shl edx, cl /* Shift the mantissa back */ + cmp edx, [eax + lMant] /* Check whether bits were killed by shifting */ + jnz EqualLongFalse /* We have truncated the mantissa, return 0 */ + + sar edx, cl /* Shift the mantissa again */ + xor eax, eax /* Set return value ... */ + cmp edx, [esp + PARAM2] /* TRUE if shifted mantissa equals the LONG */ + setz al + + pop ebp /* Return */ + ret 8 + +EqualLongFalse: + xor eax, eax /* Return FALSE */ + pop ebp + ret 8 + + +/****************************************************************************** + * BOOL + * APIENTRY + * FLOATOBJ_GreaterThan(IN PFLOATOBJ pf, IN PFLOATOBJ pf1); + * + */ +_FLOATOBJ_GreaterThan@8: +.global _FLOATOBJ_GreaterThan@8 + push ebp + mov ebp, esp + + mov eax, [ebp + PARAM1] /* Load pointer to efloat1 in eax */ + mov edx, [ebp + PARAM2] /* Load pointer to efloat2 in edx */ + + mov ecx, [eax + lMant] /* Load mantissa1 in ecx */ + mov edx, [edx + lMant] /* Load mantissa2 in edx */ + + sar ecx, 31 /* Calculate sign(lMant1) in ecx */ + sar edx, 31 /* Calculate sign(lMant2) in edx */ + + cmp ecx, edx /* Branch if both have the same sign */ + je GreaterThan_2 + + /* Mantissae have different sign */ + mov eax, 0 /* Return (sign(lMant1) > sign(lMant2)) */ + setg al + pop ebp + ret 8 + +GreaterThan_2: + /* Mantissae have the same sign */ + + mov edx, [ebp + PARAM2] /* Reload pointer to float2 in edx */ + test ecx, ecx /* Branch if sign is negative */ + js GreaterThan_neg + + /* Both mantissae are positive or 0 */ + + or ecx, [edx + lMant] /* Branch if one mantissa is 0 */ + jz GreaterThan_pos2 + + /* Both mantissae are positive */ + + mov ecx, [eax + lExp] /* Branch if exponents are equal */ + cmp ecx, [edx + lExp] + je GreaterThan_pos2 + + mov eax, 0 /* Return (lExp1 > lExp2) */ + setg al + pop ebp + ret 8 + +GreaterThan_pos2: + /* Exponents are equal or one mantissa is 0 */ + + mov ecx, [eax + lMant] /* Return (lMant1 > lMant2) */ + cmp ecx, [edx + lMant] + mov eax, 0 + setg al + pop ebp + ret 8 + +GreaterThan_neg: + /* Both mantissae are negative */ + + mov ecx, [eax + lExp] /* Branch if exponents are equal */ + cmp ecx, [edx + lExp] + je GreaterThan_neg2 + + /* Both mantissae negative, exponents are different */ + + mov eax, 0 /* Return (lExp1 < lExp2) */ + setl al + pop ebp + ret 8 + +GreaterThan_neg2: + /* Both mantissae negative, exponents are equal */ + + mov ecx, [eax + lMant] /* Return (lMant1 < lMant2) */ + cmp ecx, [edx + lMant] + mov eax, 0 + setl al + pop ebp + ret 8 + + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_GreaterThanLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and + * LOATOBJ_GreaterThan + */ +_FLOATOBJ_GreaterThanLong@8: +.global _FLOATOBJ_GreaterThanLong@8 + push ebp + mov ebp, esp + + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + mov eax, [ebp + PARAM2] /* Load LONG into eax */ + + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + + push eax /* Push LONG on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_GreaterThan@8 /* Compare */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * BOOL + * APIENTRY + * FLOATOBJ_LessThan(IN PFLOATOBJ pf, IN PFLOATOBJ pf1); + * + */ +_FLOATOBJ_LessThan@8: +.global _FLOATOBJ_LessThan@8 + push ebp + mov ebp, esp + + mov eax, [ebp + PARAM1] /* Load pointer to floats in eax and edx */ + mov edx, [ebp + PARAM2] + + mov ecx, [eax + lMant] /* Load mantissae in ecx and edx */ + mov edx, [edx + lMant] + + sar ecx, 31 /* Calculate sign(lMant1) and sign(lMant2) */ + sar edx, 31 + + cmp ecx, edx /* Branch if both have the same sign */ + je LessThan_2 + + /* Mantissae have different sign */ + + mov eax, 0 /* Return (sign(lMant1) < sign(lMant2)) */ + setl al + pop ebp + ret 8 + +LessThan_2: + /* Mantissae have the same sign */ + + + mov edx, [ebp + PARAM2] /* Reload pointer to float2 in edx */ + + test ecx, ecx /* Branch if sign is negative */ + js LessThan_neg + + /* Both mantissae are positive or 0 */ + + or ecx, [edx + lMant] /* Branch if one mantissa is 0 */ + jz LessThan_pos2 + + /* Both mantissae are positive */ + + mov ecx, [eax + lExp] /* Branch if exponents are equal */ + cmp ecx, [edx + lExp] + je LessThan_pos2 + + mov eax, 0 /* Return (lExp1 < lExp2) */ + setl al + pop ebp + ret 8 + +LessThan_pos2: + /* Exponents are equal or one mantissa is 0 */ + + mov ecx, [eax + lMant] /* Return (lMant1 < lMant2) */ + cmp ecx, [edx + lMant] + mov eax, 0 + setl al + pop ebp + ret 8 + +LessThan_neg: + /* Both mantissae are negative */ + + mov ecx, [eax + lExp] /* Branch if exponents are equal */ + cmp ecx, [edx + lExp] + je LessThan_neg2 + + /* Both mantissae negative, exponents are different */ + + mov eax, 0 /* Return (lExp1 > lExp2) */ + setg al + pop ebp + ret 8 + +LessThan_neg2: + /* Both mantissae negative, exponents are equal */ + + mov ecx, [eax + lMant] /* Return (lMant1 > lMant2) */ + cmp ecx, [edx + lMant] + mov eax, 0 + setg al + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_LessThanLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_LessThan + */ +_FLOATOBJ_LessThanLong@8: +.global _FLOATOBJ_LessThanLong@8 + push ebp + mov ebp, esp + + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + mov eax, [ebp + PARAM2] /* Load LONG into eax */ + + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push LONG on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_LessThan@8 /* Compare */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_Mul(IN OUT PFLOATOBJ pf1, IN PFLOATOBJ pf2); + * + * (mant1 * 2^exp1) * (mant2 * 2^exp2) = (mant1 * mant2) * 2^(exp1 + exp2) + * or mant = mant1 * mant2 and exp = exp1 + exp2 + * No special handling for 0, where mantissa is 0 + */ +_FLOATOBJ_Mul@8: +.global _FLOATOBJ_Mul@8 +//jmp _FLOATOBJ_Mul2@8 + push ebp + mov ebp, esp + + mov edx, [esp + PARAM1] /* Load pf1 into edx */ + mov ecx, [esp + PARAM2] /* Load pf2 into ecx */ + mov eax, [ecx + lMant] /* Load mantissa2 into eax */ + mov ecx, [ecx + lExp] /* Load exponent2 into ecx */ + + imul dword ptr [edx + lMant] /* Multiply eax with mantissa 1 */ + + test edx, edx /* Special handling for result < 0 */ + js MulNeg + + shl edx, 2 /* Get new mantissa from bits 30 to 62 */ + shr eax, 30 /* of edx:eax into edx */ + or eax, edx + + mov edx, ecx /* Need ecx for the shift, safe exp2 to free edx */ + mov ecx, 0 /* Check for highest bit */ + sets cl + shr eax, cl /* Normalize mantissa in eax */ + + jz Mul0 /* All 0? */ + + lea edx, [edx + ecx -2] /* Normalize exponent in edx */ + + + mov ecx, [esp + PARAM1] /* Load pf1 into ecx */ + mov [ecx + lMant], eax /* Save back mantissa */ + add [ecx + lExp], edx /* Save back exponent */ + + pop ebp /* Return */ + ret 8 + +MulNeg: + + shl edx, 2 /* Get new mantissa from bits 30 to 62 */ + shr eax, 30 /* of edx:eax into edx */ + or eax, edx + + mov edx, ecx /* Need ecx for the shift, safe exp2 to free edx */ + + mov ecx, 0 /* Check for highest bit */ + setns cl + shr eax, cl /* Normalize mantissa in eax */ + + jz Mul0 /* All 0? */ + + + lea edx, [edx + ecx -2] /* Normalize exponent in edx */ + or eax, 0x80000000 /* Set sign bit */ + + mov ecx, [esp + PARAM1] /* Load pf1 into ecx */ + mov [ecx + lMant], eax /* Save back mantissa */ + add [ecx + lExp], edx /* Save back exponent */ + + pop ebp /* Return */ + ret 8 + +Mul0: + mov ecx, [esp + PARAM1] /* Load pf1 into ecx */ + mov [ecx + lMant], eax /* Store 0 in mantissa */ + mov [ecx + lExp], eax /* Store 0 in exponent */ + + pop ebp /* Return */ + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_MulFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + * + * Currently implemented as a wrapper around FLOATOBJ_SetFloat and FLOATOBJ_Mul + */ +_FLOATOBJ_MulFloat@8: +.global _FLOATOBJ_MulFloat@8 + push ebp + mov ebp, esp + + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + mov eax, [ebp + PARAM2] /* Load f into eax */ + lea ecx, [ebp -4] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push f on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetFloat@8 /* Set the FLOATOBJ */ + + lea ecx, [ebp -4] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Mul@8 /* Multiply */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_MulLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_Mul + */ +_FLOATOBJ_MulLong@8: +.global _FLOATOBJ_MulLong@8 + push ebp + mov ebp, esp + + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + mov eax, [ebp + PARAM2] /* Load l into eax */ + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push l on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Mul@8 /* Multiply */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/******************************************************************************* + * VOID + * APIENTRY + * FLOATOBJ_Div(IN OUT PFLOATOBJ pf1, IN PFLOATOBJ pf2); + * + */ +_FLOATOBJ_Div@8: +.global _FLOATOBJ_Div@8 + push ebp + mov ebp, esp + push ebx + + mov eax, [ebp + PARAM2] /* Load lMant2 into eax */ + mov eax, [eax + lMant] + + cdq /* Calculate abs(lMant2) */ + xor eax, edx + sub eax, edx + jz DivError /* Divide by zero error! */ + + mov ebx, edx /* Copy sign(lMant2) to ebx */ + mov ecx, eax /* Copy abs(lMant2) to ecx */ + + mov eax, [ebp + PARAM1] /* Load lMant1 into eax */ + mov eax, [eax + lMant] + + cdq /* Calculate abs(lMant1) */ + xor eax, edx + sub eax, edx + + jz Div0 /* Dividend is 0? */ + + xor ebx, edx /* combine both signs in ebx */ + + mov edx, eax /* Prepare edx:eax for integer divide */ + xor eax, eax + shr edx, 1 + div ecx /* Do an unsigned divide */ + + xor ecx, ecx /* Adjust result */ + test eax, 0x80000000 + setnz cl + shr eax, cl + + xor eax, ebx /* Correct the result's sign */ + sub eax, ebx + + mov edx, [ebp + PARAM1] /* Load pf1 into edx */ + mov [edx + lMant], eax /* Safe back the mantissa */ + mov ebx, [ebp + PARAM2] /* Load pf2 into ebx */ + sub ecx, [ebx + lExp] /* Calculate exponent offset */ + inc ecx + add [edx + lExp], ecx /* Safe back exponent */ + + pop ebx /* Return */ + pop ebp + ret 8 + +DivError: +Div0: + mov edx, [ebp + PARAM1] /* Load pf into edx */ + mov [edx + lMant], eax /* Store 0 in mantissa */ + mov [edx + lExp], eax /* Store 0 in exponent */ + + pop ebx /* Return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_DivFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + * + * Currently implemented as a wrapper around FLOATOBJ_SetFloat and FLOATOBJ_Div + */ +_FLOATOBJ_DivFloat@8: +.global _FLOATOBJ_DivFloat@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load f into eax */ + lea ecx, [ebp -4] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push f on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetFloat@8 /* Set the FLOATOBJ */ + + lea ecx, [ebp -4] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Div@8 /* Divide */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_DivLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_Div + */ +_FLOATOBJ_DivLong@8: +.global _FLOATOBJ_DivLong@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load l into eax */ + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push l on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Div@8 /* Divide */ + + pop ebp /* Cleanup and return */ + ret 8 + + +/******************************************************************************* + * VOID + * APIENTRY + * FLOATOBJ_Add(IN OUT PFLOATOBJ pf1, IN PFLOATOBJ pf2); + * + */ +_FLOATOBJ_Add@8: +.global _FLOATOBJ_Add@8 + push ebp + mov ebp, esp + push ebx + + mov eax, [ebp + PARAM1] /* Load pointer to pf1 in eax */ + mov ebx, [ebp + PARAM2] /* Load pointer to pf2 in ebx */ + + mov ecx, [eax + lExp] /* Load float1 in (eax,ecx) */ + mov edx, [ebx + lExp] + mov eax, [eax + lMant] /* Load float2 in (ebx,edx) */ + mov ebx, [ebx + lMant] + + cmp ecx, edx /* Check which one has the bigger lExp */ + jl Add2 + + sub ecx, edx /* Calculate lExp1 - lExp2 */ + sar eax, 1 /* Shift both mantissae 1 bit right */ + sar ebx, 1 + sar ebx, cl /* Shift lMant2 according to exponent difference */ + + add eax, ebx /* Add the manrissae */ + jz AddIs0 + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + sub eax, edx + + bsr ecx, eax /* Find most significant bit */ + neg ecx /* and calculate needed normalize shift */ + add ecx, 30 + shl eax, cl + dec ecx + + xor eax, edx /* Go back to original sign */ + sub eax, edx + + mov edx, [ebp + PARAM1] /* Reload pointer to float1 */ + + pop ebx + + mov dword ptr [edx + lMant], eax /* Safe mantissa */ + sub [edx + lExp], ecx /* Adjust exponent */ + + pop ebp /* Return */ + ret 8 + +Add2: + sub edx, ecx /* Calculate lExp2 - lExp1 and put it into ecx */ + mov ecx, edx + + sar ebx, 1 /* Shift both mantissae 1 bit right */ + sar eax, 1 + sar eax, cl /* Shift lMant2 according to exponent difference */ + + add eax, ebx /* Add the manrissae */ + jz AddIs0 + + mov ebx, [ebp + PARAM1] /* Reload pointer to float1 */ + add [ebx + lExp], ecx /* Adjust exponent part 1 */ + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + sub eax, edx + + bsr ecx, eax /* Find most significant bit */ + neg ecx /* and calculate needed normalize shift */ + add ecx, 30 + shl eax, cl + dec ecx + + xor eax, edx /* Go back to original sign */ + sub eax, edx + + mov dword ptr [ebx + lMant], eax /* Safe mantissa and adjust exponent */ + sub [ebx + lExp], ecx + + pop ebx /* Return */ + pop ebp + ret 8 + +AddIs0: + /* Mantissa is 0, so float to (0,0) */ + mov eax, [ebp + PARAM1] + pop ebx + mov dword ptr [eax + lMant], 0 + mov dword ptr [eax + lExp], 0 + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_AddFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + * + * Currently implemented as a wrapper around FLOATOBJ_SetFloat and FLOATOBJ_Add + */ +_FLOATOBJ_AddFloat@8: +.global _FLOATOBJ_AddFloat@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load f into eax */ + lea ecx, [ebp -4] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push f on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetFloat@8 /* Set the FLOATOBJ */ + + lea ecx, [ebp -4] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Add@8 /* Add */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_AddLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_Add + */ +_FLOATOBJ_AddLong@8: +.global _FLOATOBJ_AddLong@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load l into eax */ + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push l on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Add@8 /* Add */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/******************************************************************************* + * VOID + * APIENTRY + * FLOATOBJ_Sub(IN OUT PFLOATOBJ pf, IN PFLOATOBJ pf1); + * + */ +_FLOATOBJ_Sub@8: +.global _FLOATOBJ_Sub@8 + push ebp + mov ebp, esp + push ebx + + mov eax, [ebp + PARAM1] /* Load pointer to floats in eax and ebx */ + mov ebx, [ebp + PARAM2] + + mov ecx, [eax + lExp] /* Load float1 in (eax,ecx) and float2 in (ebx,edx) */ + mov edx, [ebx + lExp] + mov eax, [eax + lMant] + mov ebx, [ebx + lMant] + + cmp ecx, edx /* Check which one has the bigger lExp */ + jl Sub2 + + sub ecx, edx /* Calculate lExp1 - lExp2 */ + sar eax, 1 /* Shift both mantissae 1 bit right */ + sar ebx, 1 + sar ebx, cl /* Shift lMant2 according to exponent difference */ + + sub eax, ebx /* Substract the manrissae */ + jz SubIs0 + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + sub eax, edx + + bsr ecx, eax /* Find most significant bit */ + neg ecx /* and calculate needed normalize shift */ + add ecx, 30 + shl eax, cl + dec ecx + + xor eax, edx /* Go back to original sign */ + sub eax, edx + + mov edx, [ebp + PARAM1] /* Reload pointer to float1 */ + + pop ebx + + mov dword ptr [edx + lMant], eax /* Safe mantissa and adjust exponent */ + sub [edx + lExp], ecx + + pop ebp + ret 8 + +Sub2: + sub edx, ecx /* Calculate lExp2 - lExp1 and put it into ecx */ + mov ecx, edx + + sar ebx, 1 /* Shift both mantissae 1 bit right */ + sar eax, 1 + sar eax, cl /* Shift lMant2 according to exponent difference */ + + sub eax, ebx /* Substract the manrissae */ + jz AddIs0 + + mov ebx, [ebp + PARAM1] /* Reload pointer to float1 */ + add [ebx + lExp], ecx /* Adjust exponent part 1 */ + + cdq /* Calculate abs(mantissa) */ + xor eax, edx + sub eax, edx + + bsr ecx, eax /* Find most significant bit */ + neg ecx /* and calculate needed normalize shift */ + add ecx, 30 + shl eax, cl + dec ecx + + xor eax, edx /* Go back to original sign */ + sub eax, edx + + mov dword ptr [ebx + lMant], eax /* Safe mantissa */ + sub [ebx + lExp], ecx /* Adjust exponent */ + + pop ebx /* Return */ + pop ebp + ret 8 + +SubIs0: + /* Mantissa is 0, so float to (0,0) */ + mov eax, [ebp + PARAM1] + pop ebx + mov dword ptr [eax + lMant], 0 + mov dword ptr [eax + lExp], 0 + pop ebp + ret 8 + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_SubFloat(IN OUT PFLOATOBJ pf, IN FLOATL f); + * + * Currently implemented as a wrapper around FLOATOBJ_SetFloat and FLOATOBJ_Sub + */ +_FLOATOBJ_SubFloat@8: +.global _FLOATOBJ_SubFloat@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load f into eax */ + lea ecx, [ebp -4] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push f on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetFloat@8 /* Set the FLOATOBJ */ + + lea ecx, [ebp -4] /* Push pointer to local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Sub@8 /* Substract */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/****************************************************************************** + * VOID + * APIENTRY + * FLOATOBJ_SubLong(IN OUT PFLOATOBJ pf, IN LONG l); + * + * Currently implemented as a wrapper around FLOATOBJ_SetLong and FLOATOBJ_Sub + */ +_FLOATOBJ_SubLong@8: +.global _FLOATOBJ_SubLong@8 + push ebp + mov ebp, esp + sub esp, 8 /* Make room for a FLOATOBJ on the stack */ + + mov eax, [ebp + PARAM2] /* Load l into eax */ + lea ecx, [ebp -8] /* Load pointer to local FLOATOBJ into ecx */ + push eax /* Push l on the stack */ + push ecx /* Push pointer to local FLOATOBJ on the stack */ + call _FLOATOBJ_SetLong@8 /* Set the local FLOATOBJ */ + + lea ecx, [ebp -8] /* Push pointer to the local FLOATOBJ on the stack */ + push ecx + push [ebp + PARAM1] /* Push the FLOATOBJ param on the stack */ + call _FLOATOBJ_Sub@8 /* Substract */ + + mov esp, ebp /* Cleanup and return */ + pop ebp + ret 8 + + +/******************************************************************************* + * VOID + * APIENTRY + * FLOATOBJ_Neg(IN OUT PFLOATOBJ pf); + * + */ +_FLOATOBJ_Neg@4: +.global _FLOATOBJ_Neg@4 + push ebp + mov ebp, esp + + mov ecx, [esp + PARAM1] /* Load pf into ecx */ + neg dword ptr [ecx + lMant] /* Negate lMant1 */ + + pop ebp /* Return */ + ret 4 + + +/* EOF */ From bec4b5d170823ed67017d3cfe53b52ba7b1e4e77 Mon Sep 17 00:00:00 2001 From: Thomas Bluemel Date: Fri, 8 Aug 2008 01:38:18 +0000 Subject: [PATCH 195/304] Very basic (and incomplete) implementation of SHCreateDesktop and SHDesktopMessageLoop to implement the Progman window class for the shell. This patch has not been submitted to WINE. svn path=/trunk/; revision=35176 --- reactos/dll/win32/shell32/desktop.c | 782 +++++++++++++++++++++++ reactos/dll/win32/shell32/shell32.rbuild | 1 + reactos/dll/win32/shell32/shell32.spec | 4 +- reactos/dll/win32/shell32/undocshell.h | 31 + 4 files changed, 816 insertions(+), 2 deletions(-) create mode 100644 reactos/dll/win32/shell32/desktop.c diff --git a/reactos/dll/win32/shell32/desktop.c b/reactos/dll/win32/shell32/desktop.c new file mode 100644 index 00000000000..513327db164 --- /dev/null +++ b/reactos/dll/win32/shell32/desktop.c @@ -0,0 +1,782 @@ +/* + * Shell Desktop + * + * Copyright 2008 Thomas Bluemel + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include + +#include "windef.h" +#include "winbase.h" +#include "wingdi.h" +#include "winnls.h" +#include "winuser.h" +#include "shellapi.h" +#include "shlobj.h" +#include "undocshell.h" +#include "shell32_main.h" + +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(desktop); + +#define SHDESK_TAG 0x4b534544 + +static const WCHAR szProgmanClassName[] = {'P','r','o','g','m','a','n'}; +static const WCHAR szProgmanWindowName[] = { + 'P','r','o','g','r','a','m',' ','M','a','n','a','g','e','r' +}; + +static const IShellBrowserVtbl SHDESK_Vtbl; +static const ICommDlgBrowserVtbl SHDESK_ICommDlgBrowser_Vtbl; +static const IServiceProviderVtbl SHDESK_IServiceProvider_Vtbl; + +typedef struct _SHDESK +{ + DWORD Tag; + const IShellBrowserVtbl *lpVtbl; + const ICommDlgBrowserVtbl *lpVtblCommDlgBrowser; + const IServiceProviderVtbl *lpVtblServiceProvider; + LONG Ref; + HWND hWnd; + HWND hWndShellView; + HWND hWndDesktopListView; + IShellDesktop *ShellDesk; + IShellView *DesktopView; + IShellBrowser *DefaultShellBrowser; + LPITEMIDLIST pidlDesktopDirectory; + LPITEMIDLIST pidlDesktop; +} SHDESK, *PSHDESK; + +static IUnknown * +IUnknown_from_impl(SHDESK *This) +{ + return (IUnknown *)&This->lpVtbl; +} + +static IShellBrowser * +IShellBrowser_from_impl(SHDESK *This) +{ + return (IShellBrowser *)&This->lpVtbl; +} + +static IOleWindow * +IOleWindow_from_impl(SHDESK *This) +{ + return (IOleWindow *)&This->lpVtbl; +} + +static ICommDlgBrowser * +ICommDlgBrowser_from_impl(SHDESK *This) +{ + return (ICommDlgBrowser *)&This->lpVtblCommDlgBrowser; +} + +static IServiceProvider * +IServiceProvider_from_impl(SHDESK *This) +{ + return (IServiceProvider *)&This->lpVtblServiceProvider; +} + +static SHDESK * +impl_from_IShellBrowser(IShellBrowser *iface) +{ + return (SHDESK *)((ULONG_PTR)iface - FIELD_OFFSET(SHDESK, lpVtbl)); +} + +static SHDESK * +impl_from_ICommDlgBrowser(ICommDlgBrowser *iface) +{ + return (SHDESK *)((ULONG_PTR)iface - FIELD_OFFSET(SHDESK, lpVtblCommDlgBrowser)); +} + +static SHDESK * +impl_from_IServiceProvider(IServiceProvider *iface) +{ + return (SHDESK *)((ULONG_PTR)iface - FIELD_OFFSET(SHDESK, lpVtblServiceProvider)); +} + +static void +SHDESK_Free(SHDESK *This) +{ + if (This->ShellDesk != NULL) + IShellDesktop_Release(This->ShellDesk); + + if (This->DesktopView != NULL) + { + if (This->hWndShellView != NULL) + IShellView_DestroyViewWindow(This->DesktopView); + + IShellView_Release(This->DesktopView); + This->DesktopView = NULL; + This->hWndShellView = NULL; + This->hWndDesktopListView = NULL; + } + + if (This->pidlDesktopDirectory != NULL) + { + ILFree(This->pidlDesktopDirectory); + This->pidlDesktopDirectory = NULL; + } + + if (This->pidlDesktop != NULL) + { + ILFree(This->pidlDesktop); + This->pidlDesktop = NULL; + } + + ZeroMemory(This, sizeof(SHDESK)); + LocalFree((HLOCAL)This); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_Release(IShellBrowser *iface) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + ULONG Ret; + + Ret = InterlockedDecrement(&This->Ref); + if (Ret == 0) + SHDESK_Free(This); + + return Ret; +} + +static ULONG STDMETHODCALLTYPE +SHDESK_AddRef(IShellBrowser *iface) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + + return InterlockedIncrement(&This->Ref); +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_QueryInterface(IShellBrowser *iface, REFIID riid, LPVOID *ppvObj) +{ + SHDESK *This; + + if (ppvObj == NULL) + return E_POINTER; + + This = impl_from_IShellBrowser(iface); + + if (IsEqualIID(riid, &IID_IUnknown)) + { + *ppvObj = IUnknown_from_impl(This); + } + else if (This->DefaultShellBrowser != NULL) + { + return IShellBrowser_QueryInterface(This->DefaultShellBrowser, riid, ppvObj); + } + else if (IsEqualIID(riid, &IID_IOleWindow)) + { + *ppvObj = IOleWindow_from_impl(This); + } + else if (IsEqualIID(riid, &IID_IShellBrowser)) + { + *ppvObj = IShellBrowser_from_impl(This); + } + else if (IsEqualIID(riid, &IID_ICommDlgBrowser)) + { + *ppvObj = ICommDlgBrowser_from_impl(This); + } + else if (IsEqualIID(riid, &IID_IServiceProvider)) + { + *ppvObj = IServiceProvider_from_impl(This); + } + else + { + *ppvObj = NULL; + return E_NOINTERFACE; + } + + SHDESK_AddRef(iface); + return S_OK; +} + +static PSHDESK +SHDESK_Create(HWND hWnd, LPCREATESTRUCT lpCreateStruct) +{ + IShellFolder *psfDesktopFolder; + IShellDesktop *ShellDesk; + CSFV csfv; + SHDESK *This; + HRESULT hRet; + + ShellDesk = (IShellDesktop *)lpCreateStruct->lpCreateParams; + if (ShellDesk == NULL) + { + WARN("No IShellDesk interface provided!"); + return NULL; + } + + This = (PSHDESK)LocalAlloc(LMEM_FIXED, sizeof(SHDESK)); + if (This == NULL) + return NULL; + + ZeroMemory(This, sizeof(SHDESK)); + This->Tag = SHDESK_TAG; + This->lpVtbl = &SHDESK_Vtbl; + This->lpVtblCommDlgBrowser = &SHDESK_ICommDlgBrowser_Vtbl; + This->lpVtblServiceProvider = &SHDESK_IServiceProvider_Vtbl; + This->Ref = 1; + This->hWnd = hWnd; + This->ShellDesk = ShellDesk; + IShellDesktop_AddRef(ShellDesk); + + This->pidlDesktopDirectory = SHCloneSpecialIDList(This->hWnd, CSIDL_DESKTOPDIRECTORY, FALSE); + hRet = SHGetSpecialFolderLocation(This->hWnd, CSIDL_DESKTOP, &This->pidlDesktop); + if (!SUCCEEDED(hRet)) + goto Fail; + + hRet = SHGetDesktopFolder(&psfDesktopFolder); + if (!SUCCEEDED(hRet)) + goto Fail; + + ZeroMemory(&csfv, sizeof(csfv)); + csfv.cbSize = sizeof(csfv); + csfv.pshf = psfDesktopFolder; + csfv.psvOuter = NULL; + + hRet = SHCreateShellFolderViewEx(&csfv, &This->DesktopView); + IShellFolder_Release(psfDesktopFolder); + + if (!SUCCEEDED(hRet)) + { +Fail: + SHDESK_Release(IShellBrowser_from_impl(This)); + return NULL; + } + + return This; +} + +static BOOL +SHDESK_CreateDeskWnd(SHDESK *This) +{ + IShellBrowser *ShellBrowser; + FOLDERSETTINGS fs; + RECT rcClient; + HRESULT hRet; + + if (!GetClientRect(This->hWnd, + &rcClient)) + { + return FALSE; + } + + ShellBrowser = IShellBrowser_from_impl(This); + + fs.ViewMode = FVM_ICON; + fs.fFlags = FWF_DESKTOP | FWF_NOCLIENTEDGE | FWF_NOSCROLL | FWF_TRANSPARENT; + hRet = IShellView_CreateViewWindow(This->DesktopView, NULL, &fs, ShellBrowser, &rcClient, &This->hWndShellView); + if (!SUCCEEDED(hRet)) + return FALSE; + + return TRUE; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_GetWindow(IShellBrowser *iface, HWND *phwnd) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + + if (This->hWnd != NULL) + { + *phwnd = This->hWnd; + return S_OK; + } + + *phwnd = NULL; + return E_UNEXPECTED; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ContextSensitiveHelp(IShellBrowser *iface, BOOL fEnterMode) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_InsertMenusSB(IShellBrowser *iface, HMENU hmenuShared, LPOLEMENUGROUPWIDTHS lpMenuWidths) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_SetMenuSB(IShellBrowser *iface, HMENU hmenuShared, HOLEMENU holemenuRes, HWND hwndActiveObject) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_RemoveMenusSB(IShellBrowser *iface, HMENU hmenuShared) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_SetStatusTextSB(IShellBrowser *iface, LPCOLESTR lpszStatusText) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_EnableModelessSB(IShellBrowser *iface, BOOL fEnable) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_TranslateAcceleratorSB(IShellBrowser *iface, LPMSG lpmsg, WORD wID) +{ + return S_FALSE; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_BrowseObject(IShellBrowser *iface, LPCITEMIDLIST pidl, UINT wFlags) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_GetViewStateStream(IShellBrowser *iface, DWORD grfMode, IStream **ppStrm) +{ + return E_NOTIMPL; +} + +static HWND +DesktopGetWindowControl(IN SHDESK *This, + IN UINT id) +{ + switch (id) + { + case FCW_TOOLBAR: + case FCW_STATUS: + case FCW_TREE: + case FCW_PROGRESS: + return NULL; + + default: + return NULL; + } + +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_GetControlWindow(IShellBrowser *iface, UINT id, HWND *lphwnd) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + HWND hWnd; + + hWnd = DesktopGetWindowControl(This, + id); + if (hWnd != NULL) + { + *lphwnd = hWnd; + return S_OK; + } + + *lphwnd = NULL; + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_SendControlMsg(IShellBrowser *iface, UINT id, UINT uMsg, WPARAM wParam, LPARAM lParam, LRESULT *pret) +{ + SHDESK *This = impl_from_IShellBrowser(iface); + HWND hWnd; + + if (pret == NULL) + return E_POINTER; + + hWnd = DesktopGetWindowControl(This, + id); + if (hWnd != NULL) + { + *pret = SendMessage(hWnd, + uMsg, + wParam, + lParam); + return S_OK; + } + + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_QueryActiveShellView(IShellBrowser *iface, IShellView **ppshv) +{ + IShellView *ActiveView; + SHDESK *This = impl_from_IShellBrowser(iface); + + ActiveView = This->DesktopView; + SHDESK_AddRef(iface); + *ppshv = ActiveView; + + return S_OK; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_OnViewWindowActive(IShellBrowser *iface, IShellView *ppshv) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_SetToolbarItems(IShellBrowser *iface, LPTBBUTTON lpButtons, UINT nButtons, UINT uFlags) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_QueryInterface(ICommDlgBrowser *iface, REFIID riid, LPVOID *ppvObj) +{ + SHDESK *This = impl_from_ICommDlgBrowser(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_QueryInterface(ShellBrowser, riid, ppvObj); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_Release(ICommDlgBrowser *iface) +{ + SHDESK *This = impl_from_ICommDlgBrowser(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_Release(ShellBrowser); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_AddRef(ICommDlgBrowser *iface) +{ + SHDESK *This = impl_from_ICommDlgBrowser(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_AddRef(ShellBrowser); +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_OnDefaultCommand(ICommDlgBrowser *iface, IShellView *ppshv) +{ + return E_NOTIMPL; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_OnStateChange(ICommDlgBrowser *iface, IShellView *ppshv, ULONG uChange) +{ + return S_OK; +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_ICommDlgBrowser_IncludeObject(ICommDlgBrowser *iface, IShellView *ppshv, LPCITEMIDLIST pidl) +{ + return S_OK; +} + +static const ICommDlgBrowserVtbl SHDESK_ICommDlgBrowser_Vtbl = +{ + /* IUnknown */ + SHDESK_ICommDlgBrowser_QueryInterface, + SHDESK_ICommDlgBrowser_AddRef, + SHDESK_ICommDlgBrowser_Release, + /* ICommDlgBrowser */ + SHDESK_ICommDlgBrowser_OnDefaultCommand, + SHDESK_ICommDlgBrowser_OnStateChange, + SHDESK_ICommDlgBrowser_IncludeObject +}; + +static HRESULT STDMETHODCALLTYPE +SHDESK_IServiceProvider_QueryInterface(IServiceProvider *iface, REFIID riid, LPVOID *ppvObj) +{ + SHDESK *This = impl_from_IServiceProvider(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_QueryInterface(ShellBrowser, riid, ppvObj); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_IServiceProvider_Release(IServiceProvider *iface) +{ + SHDESK *This = impl_from_IServiceProvider(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_Release(ShellBrowser); +} + +static ULONG STDMETHODCALLTYPE +SHDESK_IServiceProvider_AddRef(IServiceProvider *iface) +{ + SHDESK *This = impl_from_IServiceProvider(iface); + IShellBrowser *ShellBrowser = IShellBrowser_from_impl(This); + + return SHDESK_AddRef(ShellBrowser); +} + +static HRESULT STDMETHODCALLTYPE +SHDESK_IServiceProvider_QueryService(IServiceProvider *iface, REFGUID guidService, REFIID riid, PVOID *ppv) +{ + /* FIXME - handle guidService */ + return SHDESK_IServiceProvider_QueryInterface(iface, riid, ppv); +} + +static const IServiceProviderVtbl SHDESK_IServiceProvider_Vtbl = +{ + /* IUnknown */ + SHDESK_IServiceProvider_QueryInterface, + SHDESK_IServiceProvider_AddRef, + SHDESK_IServiceProvider_Release, + /* IServiceProvider */ + SHDESK_IServiceProvider_QueryService +}; + +static BOOL +SHDESK_MessageLoop(SHDESK *This) +{ + MSG Msg; + BOOL bRet; + + while ((bRet = GetMessage(&Msg, NULL, 0, 0)) != 0) + { + if (bRet != -1) + { + TranslateMessage(&Msg); + DispatchMessage(&Msg); + } + } + + return TRUE; +} + +static LRESULT CALLBACK +ProgmanWindowProc(IN HWND hwnd, + IN UINT uMsg, + IN WPARAM wParam, + IN LPARAM lParam) +{ + SHDESK *This = NULL; + LRESULT Ret = FALSE; + + if (uMsg != WM_NCCREATE) + { + This = (SHDESK*)GetWindowLongPtrW(hwnd, + 0); + if (This == NULL) + goto DefMsgHandler; + } + + if (This != NULL || uMsg == WM_NCCREATE) + { + switch (uMsg) + { + case WM_ERASEBKGND: + PaintDesktop((HDC)wParam); + break; + + case WM_GETISHELLBROWSER: + Ret = (LRESULT)IShellBrowser_from_impl(This); + break; + + case WM_SIZE: + if (wParam == SIZE_MINIMIZED) + { + /* Hey, we're the desktop!!! */ + ShowWindow(hwnd, + SW_RESTORE); + } + else + { + RECT rcDesktop; + + rcDesktop.left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rcDesktop.top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rcDesktop.right = GetSystemMetrics(SM_CXVIRTUALSCREEN); + rcDesktop.bottom = GetSystemMetrics(SM_CYVIRTUALSCREEN); + + /* FIXME: Update work area */ + } + break; + + case WM_SYSCOLORCHANGE: + { + InvalidateRect(This->hWnd, + NULL, + TRUE); + + if (This->hWndShellView != NULL) + { + /* Forward the message */ + SendMessageW(This->hWndShellView, + WM_SYSCOLORCHANGE, + wParam, + lParam); + } + break; + } + + case WM_CREATE: + { + IShellDesktop_RegisterDesktopWindow(This->ShellDesk, + This->hWnd); + + if (!SHDESK_CreateDeskWnd(This)) + WARN("Could not create the desktop view control!\n"); + break; + } + + case WM_NCCREATE: + { + LPCREATESTRUCT CreateStruct = (LPCREATESTRUCT)lParam; + This = SHDESK_Create(hwnd, CreateStruct); + if (This == NULL) + { + WARN("Failed to create desktop structure\n"); + break; + } + + SetWindowLongPtrW(hwnd, + 0, + (LONG_PTR)This); + Ret = TRUE; + break; + } + + case WM_NCDESTROY: + { + SHDESK_Free(This); + break; + } + + default: +DefMsgHandler: + Ret = DefWindowProcW(hwnd, uMsg, wParam, lParam); + break; + } + } + + return Ret; +} + +static BOOL +RegisterProgmanWindowClass(VOID) +{ + WNDCLASSW wcProgman; + + wcProgman.style = CS_DBLCLKS; + wcProgman.lpfnWndProc = ProgmanWindowProc; + wcProgman.cbClsExtra = 0; + wcProgman.cbWndExtra = sizeof(PSHDESK); + wcProgman.hInstance = shell32_hInstance; + wcProgman.hIcon = NULL; + wcProgman.hCursor = LoadCursor(NULL, + IDC_ARROW); + wcProgman.hbrBackground = (HBRUSH)(COLOR_BACKGROUND + 1); + wcProgman.lpszMenuName = NULL; + wcProgman.lpszClassName = szProgmanClassName; + + return RegisterClassW(&wcProgman) != 0; +} + + +/************************************************************************* + * SHCreateDesktop [SHELL32.200] + * + */ +HANDLE WINAPI SHCreateDesktop(IShellDesktop *ShellDesk) +{ + HWND hWndDesk; + RECT rcDesk; + + if (ShellDesk == NULL) + { + SetLastError(ERROR_INVALID_PARAMETER); + return NULL; + } + + if (RegisterProgmanWindowClass() == 0) + { + WARN("Failed to register the Progman window class!\n"); + return NULL; + } + + rcDesk.left = GetSystemMetrics(SM_XVIRTUALSCREEN); + rcDesk.top = GetSystemMetrics(SM_YVIRTUALSCREEN); + rcDesk.right = rcDesk.left + GetSystemMetrics(SM_CXVIRTUALSCREEN); + rcDesk.bottom = rcDesk.top + GetSystemMetrics(SM_CYVIRTUALSCREEN); + + if (IsRectEmpty(&rcDesk)) + { + rcDesk.left = rcDesk.top = 0; + rcDesk.right = GetSystemMetrics(SM_CXSCREEN); + rcDesk.bottom = GetSystemMetrics(SM_CYSCREEN); + } + + hWndDesk = CreateWindowExW(0, szProgmanClassName, szProgmanWindowName, + WS_POPUP | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN, + rcDesk.left, rcDesk.top, rcDesk.right, rcDesk.bottom, + NULL, NULL, shell32_hInstance, (LPVOID)ShellDesk); + if (hWndDesk != NULL) + return (HANDLE)GetWindowLongPtr(hWndDesk, 0); + + return NULL; +} + +/************************************************************************* + * SHCreateDesktop [SHELL32.201] + * + */ +BOOL WINAPI SHDesktopMessageLoop(HANDLE hDesktop) +{ + PSHDESK Desk = (PSHDESK)hDesktop; + + if (Desk == NULL || Desk->Tag != SHDESK_TAG) + { + SetLastError(ERROR_INVALID_PARAMETER); + return FALSE; + } + + return SHDESK_MessageLoop(Desk); +} + +static const IShellBrowserVtbl SHDESK_Vtbl = +{ + /* IUnknown */ + SHDESK_QueryInterface, + SHDESK_AddRef, + SHDESK_Release, + /* IOleWindow */ + SHDESK_GetWindow, + SHDESK_ContextSensitiveHelp, + /* IShellBrowser */ + SHDESK_InsertMenusSB, + SHDESK_SetMenuSB, + SHDESK_RemoveMenusSB, + SHDESK_SetStatusTextSB, + SHDESK_EnableModelessSB, + SHDESK_TranslateAcceleratorSB, + SHDESK_BrowseObject, + SHDESK_GetViewStateStream, + SHDESK_GetControlWindow, + SHDESK_SendControlMsg, + SHDESK_QueryActiveShellView, + SHDESK_OnViewWindowActive, + SHDESK_SetToolbarItems +}; diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild index 94b80af6154..33687610aa8 100644 --- a/reactos/dll/win32/shell32/shell32.rbuild +++ b/reactos/dll/win32/shell32/shell32.rbuild @@ -35,6 +35,7 @@ dataobject.c dde.c debughlp.c + desktop.c dialogs.c dragdrophelper.c enumidlist.c diff --git a/reactos/dll/win32/shell32/shell32.spec b/reactos/dll/win32/shell32/shell32.spec index 553bc79f88c..da323432f82 100644 --- a/reactos/dll/win32/shell32/shell32.spec +++ b/reactos/dll/win32/shell32/shell32.spec @@ -189,8 +189,8 @@ 197 stub -noname SHGlobalDefect 198 stdcall -noname SHAbortInvokeCommand() 199 stub SHGetFileIcon - 200 stub SHLocalAlloc - 201 stub SHLocalFree + 200 stdcall SHCreateDesktop(ptr) + 201 stdcall SHDesktopMessageLoop(ptr) 202 stub SHLocalReAlloc 203 stub AddCommasW 204 stub ShortSizeFormatW diff --git a/reactos/dll/win32/shell32/undocshell.h b/reactos/dll/win32/shell32/undocshell.h index 4d7f6bdb5f4..d4ebf03c1cd 100644 --- a/reactos/dll/win32/shell32/undocshell.h +++ b/reactos/dll/win32/shell32/undocshell.h @@ -548,6 +548,37 @@ BOOL WINAPI SHInitRestricted(LPCVOID unused, LPCVOID inpRegKey); DEFINE_GUID(CLSID_OpenWith, 0x09799AFB, 0xAD67, 0x11d1, 0xAB,0xCD,0x00,0xC0,0x4F,0xC3,0x09,0x36); DEFINE_GUID(CLSID_StartMenu, 0x4622AD11, 0xFF23, 0x11D0, 0x8D,0x34,0x00,0xA0,0xC9,0x0F,0x27,0x19); +/* Shell Desktop functions */ + +#undef INTERFACE +#define INTERFACE IShellDesktop +DECLARE_INTERFACE_(IShellDesktop,IUnknown) +{ + /*** IUnknown ***/ + STDMETHOD(QueryInterface)(THIS_ REFIID,PVOID*) PURE; + STDMETHOD_(ULONG,AddRef)(THIS) PURE; + STDMETHOD_(ULONG,Release)(THIS) PURE; + /*** IShellDesktopTray ***/ + STDMETHOD_(ULONG,GetState)(THIS) PURE; + STDMETHOD(GetTrayWindow)(THIS_ HWND*) PURE; + STDMETHOD(RegisterDesktopWindow)(THIS_ HWND) PURE; + STDMETHOD(Unknown)(THIS_ DWORD,DWORD) PURE; +}; +#undef INTERFACE + +#define IShellDesktop_QueryInterface(T,a,b) (T)->lpVtbl->QueryInterface(T,a,b) +#define IShellDesktop_AddRef(T) (T)->lpVtbl->AddRef(T) +#define IShellDesktop_Release(T) (T)->lpVtbl->Release(T) +#define IShellDesktop_GetState(T) (T)->lpVtbl->GetState(T) +#define IShellDesktop_GetTrayWindow(T,a) (T)->lpVtbl->GetTrayWindow(T,a) +#define IShellDesktop_RegisterDesktopWindow(T,a) (T)->lpVtbl->RegisterDesktopWindow(T,a) +#define IShellDesktop_Unknown(T,a,b) (T)->lpVtbl->Unknown(T,a,b) + +#define WM_GETISHELLBROWSER (WM_USER+7) + +HANDLE WINAPI SHCreateDesktop(IShellDesktop*); +BOOL WINAPI SHDesktopMessageLoop(HANDLE); + #ifdef __cplusplus } /* extern "C" */ #endif /* defined(__cplusplus) */ From a52cb631ccc0419ea259cc6fd3c5d5cf74e85847 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 8 Aug 2008 08:37:20 +0000 Subject: [PATCH 196/304] - Revert NDEBUG in autochk. svn path=/trunk/; revision=35177 --- reactos/base/system/autochk/autochk.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/system/autochk/autochk.c b/reactos/base/system/autochk/autochk.c index b0de270e717..c4b62e6294a 100644 --- a/reactos/base/system/autochk/autochk.c +++ b/reactos/base/system/autochk/autochk.c @@ -16,7 +16,7 @@ #include #include -//#define NDEBUG +#define NDEBUG #include /* DEFINES ******************************************************************/ From ecc6480fe56e0675f6f2b956397f1b581034ef2a Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 8 Aug 2008 09:13:21 +0000 Subject: [PATCH 197/304] - Remove atari fs support. - Rename global variables to more meaningful names. - Add fs_isdirty function to determine is a filesystem is marked as dirty. svn path=/trunk/; revision=35178 --- reactos/lib/fslib/vfatlib/check/boot.c | 42 +++------------- reactos/lib/fslib/vfatlib/check/check.c | 14 ++---- reactos/lib/fslib/vfatlib/check/dosfsck.h | 11 ++--- reactos/lib/fslib/vfatlib/check/fat.c | 2 +- reactos/lib/fslib/vfatlib/check/io.c | 59 +++++++++++++++++++++++ reactos/lib/fslib/vfatlib/check/io.h | 4 ++ reactos/lib/fslib/vfatlib/check/lfn.c | 2 +- 7 files changed, 83 insertions(+), 51 deletions(-) diff --git a/reactos/lib/fslib/vfatlib/check/boot.c b/reactos/lib/fslib/vfatlib/check/boot.c index 4f60c182230..302fa050aad 100644 --- a/reactos/lib/fslib/vfatlib/check/boot.c +++ b/reactos/lib/fslib/vfatlib/check/boot.c @@ -57,20 +57,14 @@ static char *get_media_descr( unsigned char media ) static void dump_boot(DOS_FS *fs,struct boot_sector *b,unsigned lss) { unsigned short sectors; + char id[9]; VfatPrint("Boot sector contents:\n"); - if (!atari_format) { - char id[9]; + strncpy(id,(char*)b->system_id,8); id[8] = 0; VfatPrint("System ID \"%s\"\n",id); - } - else { - /* On Atari, a 24 bit serial number is stored at offset 8 of the boot - * sector */ - VfatPrint("Serial number 0x%x\n", - b->system_id[5] | (b->system_id[6]<<8) | (b->system_id[7]<<16)); - } + VfatPrint("Media byte 0x%02x (%s)\n",b->media,get_media_descr(b->media)); VfatPrint("%10d bytes per logical sector\n",GET_UNALIGNED_W(b->sector_size)); VfatPrint("%10d bytes per cluster\n",fs->cluster_size); @@ -99,12 +93,7 @@ static void dump_boot(DOS_FS *fs,struct boot_sector *b,unsigned lss) (__u64)fs->clusters*fs->cluster_size); VfatPrint("%u sectors/track, %u heads\n",CF_LE_W(b->secs_track), CF_LE_W(b->heads)); - VfatPrint("%10u hidden sectors\n", - atari_format ? - /* On Atari, the hidden field is only 16 bit wide and unused */ - (((unsigned char *)&b->hidden)[0] | - ((unsigned char *)&b->hidden)[1] << 8) : - CF_LE_L(b->hidden)); + VfatPrint("%10u hidden sectors\n", CF_LE_L(b->hidden)); sectors = GET_UNALIGNED_W( b->sectors ); VfatPrint("%10u sectors total\n", sectors ? sectors : CF_LE_L(b->total_sect)); } @@ -320,27 +309,12 @@ void read_boot(DOS_FS *fs) read_fsinfo(fs,&b,logical_sector_size); } - else if (!atari_format) { + else { /* On real MS-DOS, a 16 bit FAT is used whenever there would be too - * much clusers otherwise. */ + * much clusters otherwise. */ fs->fat_bits = (fs->clusters > MSDOS_FAT12) ? 16 : 12; } - else { - /* On Atari, things are more difficult: GEMDOS always uses 12bit FATs - * on floppies, and always 16 bit on harddisks. */ - fs->fat_bits = 16; /* assume 16 bit FAT for now */ - /* If more clusters than fat entries in 16-bit fat, we assume - * it's a real MSDOS FS with 12-bit fat. */ - if (fs->clusters+2 > fat_length*logical_sector_size*8/16 || - /* if it's a floppy disk --> 12bit fat */ - device_no == 2 || - /* if it's a ramdisk or loopback device and has one of the usual - * floppy sizes -> 12bit FAT */ - ((device_no == 1 || device_no == 7) && - (total_sectors == 720 || total_sectors == 1440 || - total_sectors == 2880))) - fs->fat_bits = 12; - } + /* On FAT32, the high 4 bits of a FAT entry are reserved */ fs->eff_fat_bits = (fs->fat_bits == 32) ? 28 : fs->fat_bits; fs->fat_size = fat_length*logical_sector_size; @@ -356,7 +330,7 @@ void read_boot(DOS_FS *fs) die("Logical sector size (%d bytes) is not a multiple of the physical " "sector size.",logical_sector_size); /* ++roman: On Atari, these two fields are often left uninitialized */ - if (!atari_format && (!b.secs_track || !b.heads)) + if ((!b.secs_track || !b.heads)) die("Invalid disk format in boot sector."); if (FsCheckFlags & FSCHECK_VERBOSE) dump_boot(fs,&b,logical_sector_size); } diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c index bc7ca7946ed..3153f706f20 100644 --- a/reactos/lib/fslib/vfatlib/check/check.c +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -153,7 +153,7 @@ loff_t alloc_rootdir_entry(DOS_FS *fs, DIR_ENT *de, const char *pattern) } vffree(root); } - ++n_files; + ++FsCheckTotalFiles; return offset; } @@ -221,7 +221,7 @@ static char *file_stat(DOS_FILE *file) static int bad_name(unsigned char *name) { int i, spc, suspicious = 0; - char *bad_chars = atari_format ? "*?\\/:" : "*?<>|\"\\/:"; + char *bad_chars = "*?<>|\"\\/:"; /* Do not complain about (and auto-correct) the extended attribute files * of OS/2. */ @@ -260,10 +260,6 @@ static int bad_name(unsigned char *name) return 1; } - /* Under GEMDOS, chars >= 128 are never allowed. */ - if (atari_format && suspicious) - return 1; - /* Only complain about too much suspicious chars in interactive mode, * never correct them automatically. The chars are all basically ok, so we * shouldn't auto-correct such names. */ @@ -281,7 +277,7 @@ static void drop_file(DOS_FS *fs,DOS_FILE *file) for (cluster = FSTART(file,fs); cluster > 0 && cluster < fs->clusters+2; cluster = next_cluster(fs,cluster)) set_owner(fs,cluster,NULL); - --n_files; + --FsCheckTotalFiles; } @@ -780,7 +776,7 @@ static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, lfn_add_slot(&de,offset); return; } - new = qalloc(&mem_queue,sizeof(DOS_FILE)); + new = qalloc(&FsCheckMemQueue,sizeof(DOS_FILE)); new->lfn = lfn_get(&de); new->offset = offset; memcpy(&new->dir_ent,&de,sizeof(de)); @@ -798,7 +794,7 @@ static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, if (offset && strncmp((char*)de.name,MSDOS_DOT,MSDOS_NAME) != 0 && strncmp((char*)de.name,MSDOS_DOTDOT,MSDOS_NAME) != 0) - ++n_files; + ++FsCheckTotalFiles; test_file(fs,new,FsCheckFlags & FSCHECK_TEST_READ); } diff --git a/reactos/lib/fslib/vfatlib/check/dosfsck.h b/reactos/lib/fslib/vfatlib/check/dosfsck.h index 0134996c75b..0ddbf2ba35e 100644 --- a/reactos/lib/fslib/vfatlib/check/dosfsck.h +++ b/reactos/lib/fslib/vfatlib/check/dosfsck.h @@ -165,18 +165,17 @@ typedef struct { #define FSCHECK_IMMEDIATE_WRITE 0x10 extern ULONG FsCheckFlags; -extern int atari_format; -extern unsigned n_files; -extern void *mem_queue; +extern ULONG FsCheckTotalFiles; +extern void *FsCheckMemQueue; /* value to use as end-of-file marker */ -#define FAT_EOF(fs) ((atari_format ? 0xfff : 0xff8) | FAT_EXTD(fs)) +#define FAT_EOF(fs) (0xff8 | FAT_EXTD(fs)) #define FAT_IS_EOF(fs,v) ((unsigned long)(v) >= (0xff8|FAT_EXTD(fs))) /* value to mark bad clusters */ #define FAT_BAD(fs) (0xff7 | FAT_EXTD(fs)) /* range of values used for bad clusters */ -#define FAT_MIN_BAD(fs) ((atari_format ? 0xff0 : 0xff7) | FAT_EXTD(fs)) -#define FAT_MAX_BAD(fs) ((atari_format ? 0xff7 : 0xff7) | FAT_EXTD(fs)) +#define FAT_MIN_BAD(fs) (0xff7 | FAT_EXTD(fs)) +#define FAT_MAX_BAD(fs) (0xff7 | FAT_EXTD(fs)) #define FAT_IS_BAD(fs,v) ((v) >= FAT_MIN_BAD(fs) && (v) <= FAT_MAX_BAD(fs)) /* return -16 as a number with fs->fat_bits bits */ diff --git a/reactos/lib/fslib/vfatlib/check/fat.c b/reactos/lib/fslib/vfatlib/check/fat.c index ba7ee9bd65b..7e2ad9c1d62 100644 --- a/reactos/lib/fslib/vfatlib/check/fat.c +++ b/reactos/lib/fslib/vfatlib/check/fat.c @@ -97,7 +97,7 @@ void read_fat(DOS_FS *fs) //exit(1); } } - fs->fat = qalloc(&mem_queue,sizeof(FAT_ENTRY)*(fs->clusters+2)); + fs->fat = qalloc(&FsCheckMemQueue,sizeof(FAT_ENTRY)*(fs->clusters+2)); for (i = 2; i < fs->clusters+2; i++) get_fat(&fs->fat[i],use,i,fs); for (i = 2; i < fs->clusters+2; i++) if (fs->fat[i].value >= fs->clusters+2 && diff --git a/reactos/lib/fslib/vfatlib/check/io.c b/reactos/lib/fslib/vfatlib/check/io.c index b266cad069d..cea6654d56e 100644 --- a/reactos/lib/fslib/vfatlib/check/io.c +++ b/reactos/lib/fslib/vfatlib/check/io.c @@ -17,6 +17,8 @@ #define NDEBUG #include +#define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 30, METHOD_BUFFERED, FILE_ANY_ACCESS) + typedef struct _change { void *data; loff_t pos; @@ -76,6 +78,63 @@ void fs_open(PUNICODE_STRING DriveRoot,int rw) did_change = 0; } +BOOLEAN fs_isdirty(PUNICODE_STRING DriveRoot) +{ + OBJECT_ATTRIBUTES ObjectAttributes; + ULONG DirtyMask = 0; + WCHAR TempRootBuf[128]; + UNICODE_STRING TempRoot; + HANDLE FileSystem; + IO_STATUS_BLOCK IoSb; + NTSTATUS Status; + + /* Add backslash to the end, so FS will be opened */ + TempRoot.Length = 0; + TempRoot.MaximumLength = sizeof(TempRootBuf); + TempRoot.Buffer = TempRootBuf; + RtlCopyUnicodeString(&TempRoot, DriveRoot); + if (TempRoot.Length == (TempRoot.MaximumLength-1)) return FALSE; + wcscat(TempRoot.Buffer, L"\\"); + TempRoot.Length += sizeof(WCHAR); + + InitializeObjectAttributes(&ObjectAttributes, + &TempRoot, + 0, + NULL, + NULL); + + Status = NtOpenFile(&FileSystem, + FILE_GENERIC_READ, + &ObjectAttributes, + &IoSb, + 0, + 0); + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtOpenFile() failed with status 0x%.08x\n", Status); + return FALSE; + } + + /* Check if volume is dirty */ + Status = NtFsControlFile(FileSystem, + NULL, NULL, NULL, &IoSb, + FSCTL_IS_VOLUME_DIRTY, + NULL, 0, &DirtyMask, sizeof(DirtyMask)); + + if (!NT_SUCCESS(Status)) + { + DPRINT1("NtFsControlFile() failed with Status 0x%08x\n", Status); + /* Close FS handle */ + NtClose(FileSystem); + return FALSE; + } + + /* Close FS handle */ + NtClose(FileSystem); + + return (DirtyMask & 1); +} + void fs_read(loff_t pos,int size,void *data) { diff --git a/reactos/lib/fslib/vfatlib/check/io.h b/reactos/lib/fslib/vfatlib/check/io.h index a53e8749004..6c6675f0f9b 100644 --- a/reactos/lib/fslib/vfatlib/check/io.h +++ b/reactos/lib/fslib/vfatlib/check/io.h @@ -21,6 +21,10 @@ void fs_open(PUNICODE_STRING DriveRoot,int rw); /* Opens the file system PATH. If RW is zero, the file system is opened read-only, otherwise, it is opened read-write. */ +BOOLEAN fs_isdirty(PUNICODE_STRING DriveRoot); + +/* Checks if filesystem is dirty */ + void fs_read(loff_t pos,int size,void *data); /* Reads SIZE bytes starting at POS into DATA. Performs all applicable diff --git a/reactos/lib/fslib/vfatlib/check/lfn.c b/reactos/lib/fslib/vfatlib/check/lfn.c index 0aad9ae3055..d57901bd7fd 100644 --- a/reactos/lib/fslib/vfatlib/check/lfn.c +++ b/reactos/lib/fslib/vfatlib/check/lfn.c @@ -81,7 +81,7 @@ static char *cnv_unicode( const unsigned char *uni, int maxlen, int use_q ) else len += 4; } - cp = out = use_q ? qalloc( &mem_queue, len+1 ) : vfalloc( len+1 ); + cp = out = use_q ? qalloc( &FsCheckMemQueue, len+1 ) : vfalloc( len+1 ); for( up = uni; (up-uni)/2 < maxlen && (up[0] || up[1]); up += 2 ) { if (UNICODE_CONVERTABLE(up[0],up[1])) From 7f639dac8f47ef222a05801ab3f2763d0c1ecbce Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 8 Aug 2008 09:34:23 +0000 Subject: [PATCH 198/304] - Fix tamlin's early dosfsck porting attempt (create a temporary buffer for reading 512 bytes, call reading function which creates another buffer for reading 512 bytes, reads data, copies 512 bytes to 512 byte buffer, then the caller copies sizeof(DIR_ENT) out of the last 512 bytes buffer - looks a bit redundant). svn path=/trunk/; revision=35179 --- reactos/lib/fslib/vfatlib/check/check.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/reactos/lib/fslib/vfatlib/check/check.c b/reactos/lib/fslib/vfatlib/check/check.c index 3153f706f20..e4b76be7204 100644 --- a/reactos/lib/fslib/vfatlib/check/check.c +++ b/reactos/lib/fslib/vfatlib/check/check.c @@ -749,12 +749,8 @@ static void add_file(DOS_FS *fs,DOS_FILE ***chain,DOS_FILE *parent, DIR_ENT de; FD_TYPE type; - char tmpBuffer[512]; // TMN: - if (offset) { -// fs_read(offset,sizeof(DIR_ENT),&de); - fs_read(offset,sizeof(tmpBuffer),&tmpBuffer); // TMN: - memcpy(&de, tmpBuffer, sizeof(DIR_ENT)); // TMN: + fs_read(offset,sizeof(DIR_ENT),&de); } else { memcpy(de.name," ",MSDOS_NAME); de.attr = ATTR_DIR; From 18dcfea9ac30a02914af2e86f3ce69e48a40ed10 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 8 Aug 2008 09:53:13 +0000 Subject: [PATCH 199/304] - Plugin the filesystem checker into vfatlib, however leave its invocation #if0-ed out until all problems are solved. svn path=/trunk/; revision=35180 --- reactos/lib/fslib/vfatlib/vfatlib.c | 96 +++++++++++++++++++++++- reactos/lib/fslib/vfatlib/vfatlib.h | 12 +++ reactos/lib/fslib/vfatlib/vfatlib.rbuild | 10 +++ 3 files changed, 115 insertions(+), 3 deletions(-) diff --git a/reactos/lib/fslib/vfatlib/vfatlib.c b/reactos/lib/fslib/vfatlib/vfatlib.c index 8f21dd07750..bbe72705429 100755 --- a/reactos/lib/fslib/vfatlib/vfatlib.c +++ b/reactos/lib/fslib/vfatlib/vfatlib.c @@ -12,6 +12,11 @@ #define NDEBUG #include +PFMIFSCALLBACK ChkdskCallback = NULL; +PVOID FsCheckMemQueue; +ULONG FsCheckFlags; +ULONG FsCheckTotalFiles; + NTSTATUS NTAPI VfatFormat (PUNICODE_STRING DriveRoot, FMIFS_MEDIA_FLAG MediaFlag, @@ -50,7 +55,7 @@ VfatFormat (PUNICODE_STRING DriveRoot, FILE_SYNCHRONOUS_IO_ALERT); if (!NT_SUCCESS(Status)) { - DPRINT("NtOpenFile() failed with status 0x%.08x\n", Status); + DPRINT1("NtOpenFile() failed with status 0x%.08x\n", Status); return Status; } @@ -203,6 +208,25 @@ UpdateProgress (PFORMAT_CONTEXT Context, } } +VOID +VfatPrint(PCHAR Format, ...) +{ + TEXTOUTPUT TextOut; + CHAR TextBuf[512]; + va_list valist; + + va_start(valist, Format); + _vsnprintf(TextBuf, sizeof(TextBuf), Format, valist); + va_end(valist); + + /* Prepare parameters */ + TextOut.Lines = 1; + TextOut.Output = TextBuf; + + /* Do the callback */ + if (ChkdskCallback) ChkdskCallback(OUTPUT, 0, &TextOut); +} + NTSTATUS WINAPI VfatChkdsk( IN PUNICODE_STRING DriveRoot, @@ -212,8 +236,74 @@ VfatChkdsk( IN BOOLEAN ScanDrive, IN PFMIFSCALLBACK Callback) { - UNIMPLEMENTED; - return STATUS_SUCCESS; + BOOLEAN verify, salvage_files; + //ULONG free_clusters; + //DOS_FS fs; + + /* Store callback pointer */ + ChkdskCallback = Callback; + FsCheckMemQueue = NULL; + + /* Set parameters */ + FsCheckFlags = 0; + if (Verbose) FsCheckFlags |= FSCHECK_VERBOSE; + + FsCheckTotalFiles = 0; + + verify = TRUE; + salvage_files = TRUE; +#if 0 + /* Open filesystem */ + fs_open(DriveRoot,FixErrors); + + if (CheckOnlyIfDirty && !fs_isdirty(DriveRoot)) + { + /* No need to check FS */ + return fs_close(FALSE); + } + + read_boot(&fs); + if (verify) VfatPrint("Starting check/repair pass.\n"); + while (read_fat(&fs), scan_root(&fs)) qfree(&FsCheckMemQueue); + if (ScanDrive) fix_bad(&fs); + if (salvage_files) + reclaim_file(&fs); + else + reclaim_free(&fs); + free_clusters = update_free(&fs); + file_unused(); + qfree(&FsCheckMemQueue); + if (verify) + { + VfatPrint("Starting verification pass.\n"); + read_fat(&fs); + scan_root(&fs); + reclaim_free(&fs); + qfree(&FsCheckMemQueue); + } + + if (fs_changed()) + { + if (FixErrors) + { + if (FsCheckFlags & FSCHECK_INTERACTIVE) + FixErrors = get_key("yn","Perform changes ? (y/n)") == 'y'; + else + VfatPrint("Performing changes.\n"); + } + else + { + VfatPrint("Leaving file system unchanged.\n"); + } + } + + VfatPrint("%wZ: %u files, %lu/%lu clusters\n", DriveRoot, + FsCheckTotalFiles, fs.clusters - free_clusters, fs.clusters ); + + return fs_close(FixErrors) ? STATUS_SUCCESS : STATUS_UNSUCCESSFUL; +#else + return STATUS_SUCCESS; +#endif } /* EOF */ diff --git a/reactos/lib/fslib/vfatlib/vfatlib.h b/reactos/lib/fslib/vfatlib/vfatlib.h index e8eca1efbaf..7430a51558b 100755 --- a/reactos/lib/fslib/vfatlib/vfatlib.h +++ b/reactos/lib/fslib/vfatlib/vfatlib.h @@ -10,6 +10,15 @@ #include #include +#include "check/dosfsck.h" +#include "check/common.h" +#include "check/io.h" +#include "check/lfn.h" +#include "check/boot.h" +#include "check/fat.h" +#include "check/file.h" +#include "check/check.h" + #define SECTORSIZE 512 #include @@ -130,4 +139,7 @@ VOID UpdateProgress (PFORMAT_CONTEXT Context, ULONG Increment); +VOID +VfatPrint(PCHAR Format, ...); + /* EOF */ diff --git a/reactos/lib/fslib/vfatlib/vfatlib.rbuild b/reactos/lib/fslib/vfatlib/vfatlib.rbuild index 7569d6eac98..f84c671e5e1 100644 --- a/reactos/lib/fslib/vfatlib/vfatlib.rbuild +++ b/reactos/lib/fslib/vfatlib/vfatlib.rbuild @@ -7,4 +7,14 @@ fat16.c fat32.c vfatlib.c + + + boot.c + check.c + common.c + fat.c + file.c + io.c + lfn.c + From 1ec77521824811cdbd1a0ba87fda828f7ce8214b Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 13:33:50 +0000 Subject: [PATCH 200/304] - fix typo svn path=/trunk/; revision=35181 --- reactos/base/applications/regedit/lang/de-DE.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/applications/regedit/lang/de-DE.rc b/reactos/base/applications/regedit/lang/de-DE.rc index 850ae76f057..e0df2c0754a 100644 --- a/reactos/base/applications/regedit/lang/de-DE.rc +++ b/reactos/base/applications/regedit/lang/de-DE.rc @@ -363,7 +363,7 @@ END STRINGTABLE DISCARDABLE BEGIN IDS_EXPAND "&Expandieren" - IDS_COLLAPSE "&Schlissen" + IDS_COLLAPSE "&Schlieen" IDS_GOTO_SUGGESTED_KEY "&Gehe zu '%s'" IDS_FINISHEDFIND "Durchsuchen der Registry beendet." END From f300e6b60978b69ac4e4688cf1839946c236a8ce Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 14:06:28 +0000 Subject: [PATCH 201/304] - add a key to list installed sys fonts svn path=/trunk/; revision=35182 --- reactos/boot/bootdata/hivesft_i386.inf | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/boot/bootdata/hivesft_i386.inf b/reactos/boot/bootdata/hivesft_i386.inf index fea8b84e020..d8b253f8092 100644 --- a/reactos/boot/bootdata/hivesft_i386.inf +++ b/reactos/boot/bootdata/hivesft_i386.inf @@ -72,6 +72,7 @@ HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList",,0x00000012 ; Font substitutes ; SysFontSubstitutes are also returned by EnumFontFamilies, FontSubstitutes aren't +HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts",,0x00000012 HKLM,"SOFTWARE\Microsoft\Windows NT\CurrentVersion\SysFontSubstitutes",,0x00000012 ; Time zone settings From acbdcaaf879d799b2f11026dc83ebf541238afb5 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Fri, 8 Aug 2008 14:32:35 +0000 Subject: [PATCH 202/304] - Add sxs.dll from Wine svn path=/trunk/; revision=35183 --- reactos/baseaddress.rbuild | 1 + reactos/boot/bootdata/packages/reactos.dff | 1 + reactos/dll/win32/sxs/sxs.c | 45 ++++++++++++++++++++++ reactos/dll/win32/sxs/sxs.rbuild | 17 ++++++++ reactos/dll/win32/sxs/sxs.spec | 2 + reactos/dll/win32/win32.rbuild | 3 ++ reactos/media/doc/README.WINE | 1 + 7 files changed, 70 insertions(+) create mode 100644 reactos/dll/win32/sxs/sxs.c create mode 100644 reactos/dll/win32/sxs/sxs.rbuild create mode 100644 reactos/dll/win32/sxs/sxs.spec diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild index 4e67dbcfe9b..f130d3c6295 100644 --- a/reactos/baseaddress.rbuild +++ b/reactos/baseaddress.rbuild @@ -184,6 +184,7 @@ + diff --git a/reactos/boot/bootdata/packages/reactos.dff b/reactos/boot/bootdata/packages/reactos.dff index fa9e7d48d15..f312f8aedee 100644 --- a/reactos/boot/bootdata/packages/reactos.dff +++ b/reactos/boot/bootdata/packages/reactos.dff @@ -325,6 +325,7 @@ dll\win32\shlwapi\shlwapi.dll 1 dll\win32\smdll\smdll.dll 1 dll\win32\snmpapi\snmpapi.dll 1 dll\win32\stdole2.tlb\stdole2.tlb 1 +dll\win32\sxs\sxs.dll 1 dll\win32\syssetup\syssetup.dll 1 dll\win32\tapi32\tapi32.dll 1 dll\win32\tapiui\tapiui.dll 1 diff --git a/reactos/dll/win32/sxs/sxs.c b/reactos/dll/win32/sxs/sxs.c new file mode 100644 index 00000000000..cd64de562f6 --- /dev/null +++ b/reactos/dll/win32/sxs/sxs.c @@ -0,0 +1,45 @@ +/* + * sxs main + * + * Copyright 2007 EA Durbin + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include + +#include "windef.h" +#include "winbase.h" +#include "wine/debug.h" + +WINE_DEFAULT_DEBUG_CHANNEL(sxs); + + +/*********************************************************************** + * DllMain (SXS.@) + * + */ +BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved) +{ + switch(fdwReason) + { + case DLL_WINE_PREATTACH: + return FALSE; /* prefer native version */ + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls( hinstDLL ); + break; + } + return TRUE; +} diff --git a/reactos/dll/win32/sxs/sxs.rbuild b/reactos/dll/win32/sxs/sxs.rbuild new file mode 100644 index 00000000000..7559626a809 --- /dev/null +++ b/reactos/dll/win32/sxs/sxs.rbuild @@ -0,0 +1,17 @@ + + + + + + . + include/reactos/wine + + 0x600 + 0x600 + sxs.c + sxs.spec + wine + kernel32 + ntdll + + \ No newline at end of file diff --git a/reactos/dll/win32/sxs/sxs.spec b/reactos/dll/win32/sxs/sxs.spec new file mode 100644 index 00000000000..012d06b9c38 --- /dev/null +++ b/reactos/dll/win32/sxs/sxs.spec @@ -0,0 +1,2 @@ +@ stub CreateAssemblyCache +@ stub CreateAssemblyNameObject diff --git a/reactos/dll/win32/win32.rbuild b/reactos/dll/win32/win32.rbuild index 23cf5d72992..ef58b5e7b08 100644 --- a/reactos/dll/win32/win32.rbuild +++ b/reactos/dll/win32/win32.rbuild @@ -313,6 +313,9 @@ + + + diff --git a/reactos/media/doc/README.WINE b/reactos/media/doc/README.WINE index d98a15e7782..97774a15fb6 100644 --- a/reactos/media/doc/README.WINE +++ b/reactos/media/doc/README.WINE @@ -94,6 +94,7 @@ reactos/dll/win32/shdocvw # Synced to Wine-0_9_5 reactos/dll/win32/shfolder # Autosync reactos/dll/win32/shlwapi # Autosync reactos/dll/win32/stdole2.tlb # Autosync +reactos/dll/win32/sxs # Autosync reactos/dll/win32/tapi32 # Autosync reactos/dll/win32/twain_32 # Out of sync reactos/dll/win32/urlmon # Autosync From fbb7095a6739010dbe006e22f718244b08080894 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 14:43:43 +0000 Subject: [PATCH 203/304] - store all loaded global fonts under HKLM\Software\Microsoft\Windows NT\CurrentVersion\Fonts svn path=/trunk/; revision=35184 --- reactos/subsystems/win32/win32k/objects/text.c | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/reactos/subsystems/win32/win32k/objects/text.c b/reactos/subsystems/win32/win32k/objects/text.c index d469bed0e00..bd875856787 100644 --- a/reactos/subsystems/win32/win32k/objects/text.c +++ b/reactos/subsystems/win32/win32k/objects/text.c @@ -268,7 +268,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics) { FONTGDI *FontGDI; NTSTATUS Status; - HANDLE FileHandle; + HANDLE FileHandle, KeyHandle; OBJECT_ATTRIBUTES ObjectAttributes; PVOID Buffer = NULL; IO_STATUS_BLOCK Iosb; @@ -279,6 +279,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics) PSECTION_OBJECT SectionObject; ULONG ViewSize = 0; FT_Fixed XScale, YScale; + UNICODE_STRING FontRegPath = RTL_CONSTANT_STRING(L"\\REGISTRY\\Machine\\Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts"); /* Open the font file */ @@ -384,7 +385,7 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics) - DPRINT("Font loaded: %s (%s)\n", Face->family_name, Face->style_name); + DPRINT1("Font loaded: %s (%s)\n", Face->family_name, Face->style_name); DPRINT("Num glyphs: %u\n", Face->num_glyphs); /* Add this font resource to the font table */ @@ -405,9 +406,20 @@ IntGdiAddFontResource(PUNICODE_STRING FileName, DWORD Characteristics) { IntLockGlobalFonts; InsertTailList(&FontListHead, &Entry->ListEntry); + InitializeObjectAttributes(&ObjectAttributes, &FontRegPath, OBJ_CASE_INSENSITIVE, NULL, NULL); + Status = ZwOpenKey(&KeyHandle, KEY_WRITE, &ObjectAttributes); + if (NT_SUCCESS(Status)) + { + LPWSTR pName = wcsrchr(FileName->Buffer, L'\\'); + if (pName) + { + pName++; + ZwSetValueKey(KeyHandle, &Entry->FaceName, 0, REG_SZ, pName, (wcslen(pName) + 1) * sizeof(WCHAR)); + } + ZwClose(KeyHandle); + } IntUnLockGlobalFonts; } - return 1; } From b75ff606badaf41d2f50cf8f887a919dabac7024 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Fri, 8 Aug 2008 16:48:21 +0000 Subject: [PATCH 204/304] - Fix cmd's SearchForExecutable: it was inside out, giving extension priority over directory. - Remove code that checked if the file's extension was in PATHEXT. Windows does not check, and it's very handy to be able to "run" non-executable files. - Allow explicit paths with no backslash (like "A:file") - Batch: use GetFullPathName to get the batch file's absolute path; this way %~dp0 will always give the right directory even in the weird case of running the .bat via a relative path in PATH. Remove code in SearchForExecutable which tried to make sure it returned an absolute path (but it didn't in that case). svn path=/trunk/; revision=35187 --- reactos/base/shell/cmd/batch.c | 6 +- reactos/base/shell/cmd/where.c | 155 +++++++++++---------------------- 2 files changed, 54 insertions(+), 107 deletions(-) diff --git a/reactos/base/shell/cmd/batch.c b/reactos/base/shell/cmd/batch.c index 5184b32dbaa..bbf1ff5a63f 100644 --- a/reactos/base/shell/cmd/batch.c +++ b/reactos/base/shell/cmd/batch.c @@ -263,10 +263,10 @@ BOOL Batch (LPTSTR fullname, LPTSTR firstword, LPTSTR param) cmd_free (bc->raw_params); } - ZeroMemory(bc->BatchFilePath, sizeof(bc->BatchFilePath)); + GetFullPathName(fullname, sizeof(bc->BatchFilePath), bc->BatchFilePath, &tmp); + *tmp = '\0'; + bc->hBatchFile = hFile; - tmp = _tcsrchr(fullname, '\\'); - _tcsncpy(bc->BatchFilePath, fullname, ((_tcslen(fullname) - _tcslen(tmp)) + 1)); SetFilePointer (bc->hBatchFile, 0, NULL, FILE_BEGIN); bc->bEcho = bEcho; /* Preserve echo across batch calls */ bc->shiftlevel = 0; diff --git a/reactos/base/shell/cmd/where.c b/reactos/base/shell/cmd/where.c index 9c0fa73877b..32c2f3dd0c3 100644 --- a/reactos/base/shell/cmd/where.c +++ b/reactos/base/shell/cmd/where.c @@ -83,56 +83,25 @@ /* searches for file using path info. */ BOOL -SearchForExecutableSingle (LPCTSTR pFileName, LPTSTR pFullName, LPTSTR pExtension) +SearchForExecutableSingle (LPCTSTR pFileName, LPTSTR pFullName, LPTSTR pPathExt, LPTSTR pDirectory) { - TCHAR szPathBuffer[CMDLINE_LENGTH]; - LPTSTR pszBuffer = NULL; - DWORD dwBuffer, len; + TCHAR szPathBuffer[CMDLINE_LENGTH], *pszPathEnd; LPTSTR s,f; /* initialize full name buffer */ *pFullName = _T('\0'); - TRACE ("SearchForExecutableSingle: \'%s\' with ext: \'%s\'\n", - debugstr_aw(pFileName), debugstr_aw(pExtension)); + TRACE ("SearchForExecutableSingle: \'%s\' in dir: \'%s\'\n", + debugstr_aw(pFileName), debugstr_aw(pDirectory)); - /* Check if valid directly on specified path */ - if (_tcschr (pFileName, _T('\\')) != NULL) + pszPathEnd = szPathBuffer; + if (pDirectory != NULL) { - LPTSTR pFilePart; - TRACE ("Absolute or relative path is given.\n"); - - if (GetFullPathName (pFileName, - CMDLINE_LENGTH, - szPathBuffer, - &pFilePart) ==0) - return FALSE; - - if(pFilePart == 0) - return FALSE; - /* Add extension and test file: */ - if (pExtension) - _tcscat(szPathBuffer, pExtension); - - if (IsExistingFile (szPathBuffer)) - { - TRACE ("Found: \'%s\'\n", debugstr_aw(szPathBuffer)); - _tcscpy (pFullName, szPathBuffer); - return TRUE; - } - return FALSE; + _tcscpy(szPathBuffer, pDirectory); + pszPathEnd += _tcslen(pszPathEnd); + *pszPathEnd++ = _T('\\'); } - - /* search in current directory */ - len = GetCurrentDirectory (CMDLINE_LENGTH, szPathBuffer); - if (szPathBuffer[len - 1] != _T('\\')) - { - szPathBuffer[len] = _T('\\'); - szPathBuffer[len + 1] = _T('\0'); - } - _tcscat (szPathBuffer, pFileName); - - if (pExtension) - _tcscat (szPathBuffer, pExtension); + _tcscpy(pszPathEnd, pFileName); + pszPathEnd += _tcslen(pszPathEnd); if (IsExistingFile (szPathBuffer)) { @@ -141,56 +110,30 @@ SearchForExecutableSingle (LPCTSTR pFileName, LPTSTR pFullName, LPTSTR pExtensio return TRUE; } - - - /* load environment varable PATH into buffer */ - pszBuffer = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); - dwBuffer = GetEnvironmentVariable (_T("PATH"), pszBuffer, ENV_BUFFER_SIZE); - if (dwBuffer > ENV_BUFFER_SIZE) - { - pszBuffer = (LPTSTR)cmd_realloc (pszBuffer, dwBuffer * sizeof (TCHAR)); - GetEnvironmentVariable (_T("PATH"), pszBuffer, dwBuffer); - } - - - /* search in PATH */ - s = pszBuffer; + s = pPathExt; while (s && *s) { f = _tcschr (s, _T(';')); if (f) { - _tcsncpy (szPathBuffer, s, (size_t)(f-s)); - szPathBuffer[f-s] = _T('\0'); + _tcsncpy (pszPathEnd, s, (size_t)(f-s)); + pszPathEnd[f-s] = _T('\0'); s = f + 1; } else { - _tcscpy (szPathBuffer, s); + _tcscpy (pszPathEnd, s); s = NULL; } - len = _tcslen(szPathBuffer); - if (szPathBuffer[len - 1] != _T('\\')) - { - szPathBuffer[len] = _T('\\'); - szPathBuffer[len + 1] = _T('\0'); - } - _tcscat (szPathBuffer, pFileName); - - if (pExtension) - _tcscat (szPathBuffer, pExtension); - if (IsExistingFile (szPathBuffer)) { TRACE ("Found: \'%s\'\n", debugstr_aw(szPathBuffer)); - cmd_free (pszBuffer); _tcscpy (pFullName, szPathBuffer); return TRUE; } } - cmd_free (pszBuffer); return FALSE; } @@ -199,60 +142,64 @@ BOOL SearchForExecutable (LPCTSTR pFileName, LPTSTR pFullName) { static TCHAR pszDefaultPathExt[] = _T(".COM;.EXE;.BAT;.CMD"); - LPTSTR pszBuffer = NULL; + LPTSTR pszPathExt, pszPath; LPTSTR pCh; - LPTSTR pExt; DWORD dwBuffer; TRACE ("SearchForExecutable: \'%s\'\n", debugstr_aw(pFileName)); + /* load environment varable PATHEXT */ - pszBuffer = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); - dwBuffer = GetEnvironmentVariable (_T("PATHEXT"), pszBuffer, ENV_BUFFER_SIZE); + pszPathExt = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); + dwBuffer = GetEnvironmentVariable (_T("PATHEXT"), pszPathExt, ENV_BUFFER_SIZE); if (dwBuffer > ENV_BUFFER_SIZE) { - pszBuffer = (LPTSTR)cmd_realloc (pszBuffer, dwBuffer * sizeof (TCHAR)); - GetEnvironmentVariable (_T("PATHEXT"), pszBuffer, dwBuffer); + pszPathExt = (LPTSTR)cmd_realloc (pszPathExt, dwBuffer * sizeof (TCHAR)); + GetEnvironmentVariable (_T("PATHEXT"), pszPathExt, dwBuffer); } else if (0 == dwBuffer) { - _tcscpy(pszBuffer, pszDefaultPathExt); + _tcscpy(pszPathExt, pszDefaultPathExt); } - TRACE ("SearchForExecutable(): Loaded PATHEXT: %s\n", debugstr_aw(pszBuffer)); - - pExt = _tcsrchr(pFileName, _T('.')); - if (pExt != NULL) + /* Check if valid directly on specified path */ + if (SearchForExecutableSingle(pFileName, pFullName, pszPathExt, NULL)) { - LPTSTR pszBuffer2; - pszBuffer2 = cmd_dup(pszBuffer); - if (pszBuffer2) - { - pCh = _tcstok(pszBuffer2, _T(";")); - while (pCh) - { - if (0 == _tcsicmp(pCh, pExt)) - { - cmd_free(pszBuffer); - cmd_free(pszBuffer2); - return SearchForExecutableSingle(pFileName, pFullName, NULL); - } - pCh = _tcstok(NULL, _T(";")); - } - cmd_free(pszBuffer2); - } + cmd_free(pszPathExt); + return TRUE; } - pCh = _tcstok(pszBuffer, _T(";")); + /* If an explicit directory was given, stop here - no need to search PATH. */ + if (pFileName[1] == _T(':') || _tcschr(pFileName, _T('\\'))) + { + cmd_free(pszPathExt); + return FALSE; + } + + /* load environment varable PATH into buffer */ + pszPath = (LPTSTR)cmd_alloc (ENV_BUFFER_SIZE * sizeof(TCHAR)); + dwBuffer = GetEnvironmentVariable (_T("PATH"), pszPath, ENV_BUFFER_SIZE); + if (dwBuffer > ENV_BUFFER_SIZE) + { + pszPath = (LPTSTR)cmd_realloc (pszPath, dwBuffer * sizeof (TCHAR)); + GetEnvironmentVariable (_T("PATH"), pszPath, dwBuffer); + } + + TRACE ("SearchForExecutable(): Loaded PATH: %s\n", debugstr_aw(pszPath)); + + /* search in PATH */ + pCh = _tcstok(pszPath, _T(";")); while (pCh) { - if (SearchForExecutableSingle(pFileName, pFullName, pCh)) + if (SearchForExecutableSingle(pFileName, pFullName, pszPathExt, pCh)) { - cmd_free(pszBuffer); + cmd_free(pszPath); + cmd_free(pszPathExt); return TRUE; } pCh = _tcstok(NULL, _T(";")); } - cmd_free(pszBuffer); + cmd_free(pszPath); + cmd_free(pszPathExt); return FALSE; } From 11c23fa25f8e560526162827e1142e04c492957a Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 18:34:51 +0000 Subject: [PATCH 205/304] - implement enumerating of font items svn path=/trunk/; revision=35191 --- reactos/dll/win32/shell32/shfldr_fonts.c | 168 ++++++++++++++++++++++- 1 file changed, 166 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/shell32/shfldr_fonts.c b/reactos/dll/win32/shell32/shfldr_fonts.c index 8539a508a47..f0b215ef075 100644 --- a/reactos/dll/win32/shell32/shfldr_fonts.c +++ b/reactos/dll/win32/shell32/shfldr_fonts.c @@ -205,6 +205,102 @@ static HRESULT WINAPI ISF_Fonts_fnParseDisplayName (IShellFolder2 * iface, return hr; } +static LPITEMIDLIST _ILCreateFontItem(LPWSTR pszFont, LPWSTR pszFile) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLFontStruct * p; + int size0 = (char*)&tmp.u.cfont.szName-(char*)&tmp.u.cfont; + int size = size0; + + tmp.type = 0x00; + tmp.u.cfont.dummy = 0xFF; + tmp.u.cfont.offsFile = wcslen(pszFont) + 1; + + size = (tmp.u.cfont.offsFile + wcslen(pszFile) + 1) * sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.cfont; + wcscpy(p->szName, pszFont); + wcscpy(p->szName + tmp.u.cfont.offsFile, pszFile); + + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +static PIDLFontStruct * _ILGetFontStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLFontStruct*)&(pdata->u.cfont); + + return NULL; +} + + + +/************************************************************************** + * CreateFontsEnumListss() + */ +static BOOL CreateFontsEnumList(IEnumIDList *list, DWORD dwFlags) +{ + WCHAR szPath[MAX_PATH]; + WCHAR szName[LF_FACESIZE+20]; + WCHAR szFile[MAX_PATH]; + LPWSTR pszPath; + UINT Length; + LONG ret; + DWORD dwType, dwName, dwFile, dwIndex; + LPITEMIDLIST pidl; + HKEY hKey; + + if (dwFlags & SHCONTF_NONFOLDERS) + { + if (!SHGetSpecialFolderPathW(NULL, szPath, CSIDL_FONTS, FALSE)) + return FALSE; + + pszPath = PathAddBackslashW(szPath); + if (!pszPath) + return FALSE; + if (RegOpenKeyExW(HKEY_LOCAL_MACHINE, L"Software\\Microsoft\\Windows NT\\CurrentVersion\\Fonts", 0, KEY_READ, &hKey)!= ERROR_SUCCESS) + return FALSE; + + Length = pszPath - szPath; + dwIndex = 0; + do + { + dwName = sizeof(szName)/sizeof(WCHAR); + dwFile = sizeof(szFile)/sizeof(WCHAR); + ret = RegEnumValueW(hKey, dwIndex++, szName, &dwName, NULL, &dwType, (LPVOID)szFile, &dwFile); + if (ret == ERROR_SUCCESS) + { + szFile[(sizeof(szFile)/sizeof(WCHAR))-1] = L'\0'; + if (dwType == REG_SZ && wcslen(szFile) + Length + 1< (sizeof(szPath)/sizeof(WCHAR))) + { + wcscpy(&szPath[Length], szFile); + pidl = _ILCreateFontItem(szName, szPath); + TRACE("pidl %p name %s path %s\n", pidl, debugstr_w(szName), debugstr_w(szPath)); + if (pidl) + { + if (!AddToEnumList(list, pidl)) + SHFree(pidl); + } + } + } + }while(ret != ERROR_NO_MORE_ITEMS); + RegCloseKey(hKey); + + } + return TRUE; +} + /************************************************************************** * ISF_Fonts_fnEnumObjects */ @@ -217,6 +313,8 @@ static HRESULT WINAPI ISF_Fonts_fnEnumObjects (IShellFolder2 * iface, hwndOwner, dwFlags, ppEnumIDList); *ppEnumIDList = IEnumIDList_Constructor(); + if(*ppEnumIDList) + CreateFontsEnumList(*ppEnumIDList, dwFlags); TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList); @@ -436,14 +534,26 @@ static HRESULT WINAPI ISF_Fonts_fnGetDisplayNameOf (IShellFolder2 * iface, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) { IGenericSFImpl *This = (IGenericSFImpl *)iface; + PIDLFontStruct * pfont; - FIXME ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet); + TRACE("ISF_Fonts_fnGetDisplayNameOf (%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet); pdump (pidl); if (!strRet) return E_INVALIDARG; - return E_NOTIMPL; + pfont = _ILGetFontStruct(pidl); + if (!pfont) + return E_INVALIDARG; + + strRet->u.pOleStr = CoTaskMemAlloc((wcslen(pfont->szName)+1) * sizeof(WCHAR)); + if (!strRet->u.pOleStr) + return E_OUTOFMEMORY; + + wcscpy(strRet->u.pOleStr, pfont->szName); + strRet->uType = STRRET_WSTR; + + return S_OK; } /************************************************************************** @@ -526,6 +636,9 @@ static HRESULT WINAPI ISF_Fonts_fnGetDetailsOf (IShellFolder2 * iface, IGenericSFImpl *This = (IGenericSFImpl *)iface; WCHAR buffer[MAX_PATH] = {0}; HRESULT hr = E_FAIL; + PIDLFontStruct * pfont; + HANDLE hFile; + LARGE_INTEGER FileSize; TRACE("(%p, %p, %d, %p)\n", This, pidl, iColumn, psd); @@ -544,7 +657,58 @@ static HRESULT WINAPI ISF_Fonts_fnGetDetailsOf (IShellFolder2 * iface, } if (iColumn == COLUMN_NAME) + { + psd->str.uType = STRRET_WSTR; return IShellFolder2_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &psd->str); + } + + psd->str.uType = STRRET_CSTR; + psd->str.u.cStr[0] = '\0'; + + switch(iColumn) + { + case COLUMN_TYPE: + break; + case COLUMN_SIZE: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + hFile = CreateFileW(pfont->szName + pfont->offsFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); + if (hFile) + { + if (GetFileSizeEx(hFile, &FileSize)) + { + if (StrFormatByteSizeW(FileSize.QuadPart, buffer, sizeof(buffer)/sizeof(WCHAR))) + { + psd->str.u.pOleStr = CoTaskMemAlloc(wcslen(buffer) + 1); + if (!psd->str.u.pOleStr) + return E_OUTOFMEMORY; + wcscpy(psd->str.u.pOleStr, buffer); + psd->str.uType = STRRET_WSTR; + CloseHandle(hFile); + return S_OK; + } + } + CloseHandle(hFile); + } + } + break; + case COLUMN_FILENAME: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + psd->str.u.pOleStr = CoTaskMemAlloc((wcslen(pfont->szName + pfont->offsFile) + 1) * sizeof(WCHAR)); + if (psd->str.u.pOleStr) + { + psd->str.uType = STRRET_WSTR; + wcscpy(psd->str.u.pOleStr, pfont->szName + pfont->offsFile); + return S_OK; + } + else + return E_OUTOFMEMORY; + } + break; + } FIXME ("(%p)->(%p %i %p)\n", This, pidl, iColumn, psd); From c04d88d4061f4b56a325c9d1e7d126fe62b39b55 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Fri, 8 Aug 2008 18:38:16 +0000 Subject: [PATCH 206/304] Merge aicom-network-fixes up to 35189 svn path=/trunk/; revision=35192 --- reactos/drivers/network/afd/afd/tdi.c | 63 ++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 5 deletions(-) diff --git a/reactos/drivers/network/afd/afd/tdi.c b/reactos/drivers/network/afd/afd/tdi.c index 4b1a5e7fd99..93701ab5cd8 100644 --- a/reactos/drivers/network/afd/afd/tdi.c +++ b/reactos/drivers/network/afd/afd/tdi.c @@ -291,7 +291,11 @@ NTSTATUS TdiConnect( AFD_DbgPrint(MAX_TRACE, ("Called\n")); - assert(ConnectionObject); + if (!ConnectionObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); if (!DeviceObject) { @@ -345,7 +349,10 @@ NTSTATUS TdiAssociateAddressFile( AFD_DbgPrint(MAX_TRACE, ("Called. AddressHandle (0x%X) ConnectionObject (0x%X)\n", AddressHandle, ConnectionObject)); - assert(ConnectionObject); + if (!ConnectionObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n")); + return STATUS_INVALID_PARAMETER; + } DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); if (!DeviceObject) { @@ -399,6 +406,12 @@ NTSTATUS TdiListen AFD_DbgPrint(MAX_TRACE, ("Called\n")); + if (!ConnectionObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad connection object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(ConnectionObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); @@ -463,7 +476,10 @@ NTSTATUS TdiSetEventHandler( AFD_DbgPrint(MAX_TRACE, ("Called\n")); - assert(FileObject); + if (!FileObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad file object.\n")); + return STATUS_INVALID_PARAMETER; + } DeviceObject = IoGetRelatedDeviceObject(FileObject); if (!DeviceObject) { @@ -525,6 +541,11 @@ NTSTATUS TdiQueryDeviceControl( KEVENT Event; PIRP Irp; + if (!FileObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad file object.\n")); + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(FileObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); @@ -574,6 +595,11 @@ NTSTATUS TdiQueryInformation( KEVENT Event; PIRP Irp; + if (!FileObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad file object.\n")); + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(FileObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); @@ -797,6 +823,12 @@ NTSTATUS TdiSend NTSTATUS Status = STATUS_SUCCESS; PMDL Mdl; + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad transport object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); @@ -877,6 +909,12 @@ NTSTATUS TdiReceive( PDEVICE_OBJECT DeviceObject; PMDL Mdl; + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad transport object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); @@ -976,6 +1014,12 @@ NTSTATUS TdiReceiveDatagram( NTSTATUS Status; PMDL Mdl; + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad tranport object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + DeviceObject = IoGetRelatedDeviceObject(TransportObject); if (!DeviceObject) { AFD_DbgPrint(MIN_TRACE, ("Bad device object.\n")); @@ -1065,6 +1109,12 @@ NTSTATUS TdiSendDatagram( NTSTATUS Status; PMDL Mdl; + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad transport object.\n")); + *Irp = NULL; + return STATUS_INVALID_PARAMETER; + } + AFD_DbgPrint(MID_TRACE,("Called(TransportObject %x)\n", TransportObject)); DeviceObject = IoGetRelatedDeviceObject(TransportObject); @@ -1143,10 +1193,13 @@ NTSTATUS TdiDisconnect( KEVENT Event; PIRP Irp; - DeviceObject = IoGetRelatedDeviceObject(TransportObject); - KeInitializeEvent(&Event, NotificationEvent, FALSE); + if (!TransportObject) { + AFD_DbgPrint(MIN_TRACE, ("Bad transport object.\n")); + return STATUS_INVALID_PARAMETER; + } + AFD_DbgPrint(MID_TRACE,("Called(TransportObject %x)\n", TransportObject)); DeviceObject = IoGetRelatedDeviceObject(TransportObject); From 0ceea1dacba837e7aee3983e79f3b7916e1277bb Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Fri, 8 Aug 2008 19:08:27 +0000 Subject: [PATCH 207/304] - Fix a typo svn path=/trunk/; revision=35193 --- reactos/ntoskrnl/config/cmvalche.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/config/cmvalche.c b/reactos/ntoskrnl/config/cmvalche.c index 038c70a1339..52297a3c582 100644 --- a/reactos/ntoskrnl/config/cmvalche.c +++ b/reactos/ntoskrnl/config/cmvalche.c @@ -55,7 +55,7 @@ CmpGetValueListFromCache(IN PCM_KEY_CONTROL_BLOCK Kcb, *ValueListToRelease = HCELL_NIL; *IndexIsCached = FALSE; - /* Get the hive and value ceche */ + /* Get the hive and value cache */ Hive = Kcb->KeyHive; ChildList = &Kcb->ValueCache; KeyNode = (PCM_KEY_NODE)HvGetCell(Hive, Kcb->KeyCell); From eb7b80a94974b67f2baf997aa4f9323a15e6d810 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 19:15:27 +0000 Subject: [PATCH 208/304] * fully implement enumeration of details for virtual font shell folder svn path=/trunk/; revision=35194 --- reactos/dll/win32/shell32/shfldr_fonts.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/reactos/dll/win32/shell32/shfldr_fonts.c b/reactos/dll/win32/shell32/shfldr_fonts.c index f0b215ef075..4d69f0d89a2 100644 --- a/reactos/dll/win32/shell32/shfldr_fonts.c +++ b/reactos/dll/win32/shell32/shfldr_fonts.c @@ -217,7 +217,7 @@ static LPITEMIDLIST _ILCreateFontItem(LPWSTR pszFont, LPWSTR pszFile) tmp.u.cfont.dummy = 0xFF; tmp.u.cfont.offsFile = wcslen(pszFont) + 1; - size = (tmp.u.cfont.offsFile + wcslen(pszFile) + 1) * sizeof(WCHAR); + size += (tmp.u.cfont.offsFile + wcslen(pszFile) + 1) * sizeof(WCHAR); pidl = (LPITEMIDLIST)SHAlloc(size + 4); if (!pidl) @@ -639,6 +639,7 @@ static HRESULT WINAPI ISF_Fonts_fnGetDetailsOf (IShellFolder2 * iface, PIDLFontStruct * pfont; HANDLE hFile; LARGE_INTEGER FileSize; + SHFILEINFOW fi; TRACE("(%p, %p, %d, %p)\n", This, pidl, iColumn, psd); @@ -668,13 +669,26 @@ static HRESULT WINAPI ISF_Fonts_fnGetDetailsOf (IShellFolder2 * iface, switch(iColumn) { case COLUMN_TYPE: + pfont = _ILGetFontStruct(pidl); + if (pfont) + { + if (SHGetFileInfoW(pfont->szName + pfont->offsFile, 0, &fi, sizeof(fi), SHGFI_TYPENAME)) + { + psd->str.u.pOleStr = CoTaskMemAlloc((wcslen(fi.szTypeName)+1) * sizeof(WCHAR)); + if (!psd->str.u.pOleStr) + return E_OUTOFMEMORY; + wcscpy(psd->str.u.pOleStr, fi.szTypeName); + psd->str.uType = STRRET_WSTR; + return S_OK; + } + } break; case COLUMN_SIZE: pfont = _ILGetFontStruct(pidl); if (pfont) { - hFile = CreateFileW(pfont->szName + pfont->offsFile, GENERIC_READ, 0, NULL, OPEN_EXISTING, 0, NULL); - if (hFile) + hFile = CreateFileW(pfont->szName + pfont->offsFile, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) { if (GetFileSizeEx(hFile, &FileSize)) { From 04f79ee653e430fb8b0b0a4a7fb26e776b5909e6 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 8 Aug 2008 19:20:26 +0000 Subject: [PATCH 209/304] - Fix a typo. - Stubplement one missing function. - SVN maintenance. svn path=/trunk/; revision=35195 --- reactos/subsystems/csr/csrsrv/session.c | 4 ++-- reactos/subsystems/csr/csrsrv/srv.h | 4 ++++ reactos/subsystems/csr/csrsrv/status.h | 4 ++-- reactos/subsystems/csr/main.c | 2 +- 4 files changed, 9 insertions(+), 5 deletions(-) diff --git a/reactos/subsystems/csr/csrsrv/session.c b/reactos/subsystems/csr/csrsrv/session.c index 5f06e6136c2..bbbe3a09c5c 100644 --- a/reactos/subsystems/csr/csrsrv/session.c +++ b/reactos/subsystems/csr/csrsrv/session.c @@ -21,7 +21,7 @@ HANDLE CsrSmApiPort; PSB_API_ROUTINE CsrServerSbApiDispatch[5] = { CsrSbCreateSession, - CsrSbForeignSessionComplete, + CsrSbTerminateSession, CsrSbForeignSessionComplete, CsrSbCreateProcess, NULL @@ -30,7 +30,7 @@ PSB_API_ROUTINE CsrServerSbApiDispatch[5] = PCHAR CsrServerSbApiName[5] = { "SbCreateSession", - "SbTerminateSEssion", + "SbTerminateSession", "SbForeignSessionComplete", "SbCreateProcess", "Unknown Csr Sb Api Number" diff --git a/reactos/subsystems/csr/csrsrv/srv.h b/reactos/subsystems/csr/csrsrv/srv.h index 895348815cc..3abf76aba9e 100644 --- a/reactos/subsystems/csr/csrsrv/srv.h +++ b/reactos/subsystems/csr/csrsrv/srv.h @@ -122,6 +122,10 @@ BOOLEAN NTAPI CsrSbCreateSession(IN PSB_API_MESSAGE ApiMessage); +BOOLEAN +NTAPI +CsrSbTerminateSession(IN PSB_API_MESSAGE ApiMessage); + BOOLEAN NTAPI CsrSbForeignSessionComplete(IN PSB_API_MESSAGE ApiMessage); diff --git a/reactos/subsystems/csr/csrsrv/status.h b/reactos/subsystems/csr/csrsrv/status.h index e0675003adf..c9ff9aa3aca 100644 --- a/reactos/subsystems/csr/csrsrv/status.h +++ b/reactos/subsystems/csr/csrsrv/status.h @@ -59,7 +59,7 @@ * CsrMoveSatisfiedWait 753E7909 20 - wait.c - IMPLEMENTED * CsrNotifyWait 753E782F 21 - wait.c - IMPLEMENTED * CsrPopulateDosDevices 753E37A5 22 - init.c - IMPLEMENTED - * CsrQueryApiPort 753E4E42 23 - api.c - IMPLEMENTED + * CsrQueryApiPort 753E4E42 23 - api.c - UNIMPLEMENTED * CsrReferenceThread 753E61E5 24 - thread.c - IMPLEMENTED * CsrRevertToSelf 753E615A 25 - thread.c - IMPLEMENTED * CsrServerInitialization 753E3D75 26 - server.c - IMPLEMENTED @@ -84,7 +84,7 @@ /* Public SB API Interface Status (session.c) * CsrSbCreateSession - IMPLEMENTED * CsrSbForeignSessionComplete - IMPLEMENTED - * CsrSbTerminateSession - IMPLEMENTED + * CsrSbTerminateSession - UNIMPLEMENTED * CsrSbCreateProcess - UNIMPLEMENTED */ diff --git a/reactos/subsystems/csr/main.c b/reactos/subsystems/csr/main.c index 7295c547c64..6e8c05db13b 100644 --- a/reactos/subsystems/csr/main.c +++ b/reactos/subsystems/csr/main.c @@ -80,7 +80,7 @@ _main(int argc, ProcessUserModeIOPL, NULL, 0); - if (NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { /* Raise a hard error */ DPRINT1("CSRSS: Could not raise IOPL: %x\n", Status); From b339d8f7b8140d3126020d48b3ce38e71e9c9ecc Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Fri, 8 Aug 2008 19:23:07 +0000 Subject: [PATCH 210/304] - Leftover from the winesync. svn path=/trunk/; revision=35196 --- reactos/dll/win32/mpr/pwcache.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/dll/win32/mpr/pwcache.c b/reactos/dll/win32/mpr/pwcache.c index a760dd26d25..8e3c1911f1f 100644 --- a/reactos/dll/win32/mpr/pwcache.c +++ b/reactos/dll/win32/mpr/pwcache.c @@ -74,7 +74,7 @@ static LPSTR MPR_GetValueName( LPCSTR pbResource, WORD cbResource, BYTE nType ) * WNetCachePassword [MPR.@] Saves password in cache * * NOTES - * only the parameter count is verifyed + * Only the parameter count is verified * * ---- everything below this line might be wrong (js) ----- * RETURNS @@ -221,7 +221,7 @@ DWORD WINAPI WNetGetCachedPassword( * WNetEnumCachedPasswords [MPR.@] * * NOTES - * the parameter count is verifyed + * The parameter count is verified * * This function is a huge security risk, as virii and such can use * it to grab all the passwords in the cache. It's bad enough to From e107b6f77dea9ee2299e937e801aded0b7e83e4a Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 19:48:38 +0000 Subject: [PATCH 211/304] - add 3 resource strings svn path=/trunk/; revision=35197 --- reactos/dll/win32/shell32/lang/ca-ES.rc | 4 ++++ reactos/dll/win32/shell32/lang/cs-CZ.rc | 3 +++ reactos/dll/win32/shell32/lang/da-DK.rc | 3 +++ reactos/dll/win32/shell32/lang/de-DE.rc | 3 +++ reactos/dll/win32/shell32/lang/el-GR.rc | 3 +++ reactos/dll/win32/shell32/lang/en-GB.rc | 3 +++ reactos/dll/win32/shell32/lang/en-US.rc | 3 +++ reactos/dll/win32/shell32/lang/es-ES.rc | 3 +++ reactos/dll/win32/shell32/lang/fi-FI.rc | 3 +++ reactos/dll/win32/shell32/lang/fr-FR.rc | 3 +++ reactos/dll/win32/shell32/lang/hu-HU.rc | 3 +++ reactos/dll/win32/shell32/lang/it-IT.rc | 3 +++ reactos/dll/win32/shell32/lang/ja-JP.rc | 3 +++ reactos/dll/win32/shell32/lang/ko-KR.rc | 3 +++ reactos/dll/win32/shell32/lang/nl-NL.rc | 3 +++ reactos/dll/win32/shell32/lang/no-NO.rc | 3 +++ reactos/dll/win32/shell32/lang/pl-PL.rc | 3 +++ reactos/dll/win32/shell32/lang/pt-BR.rc | 3 +++ reactos/dll/win32/shell32/lang/pt-PT.rc | 3 +++ reactos/dll/win32/shell32/lang/ru-RU.rc | 3 +++ reactos/dll/win32/shell32/lang/sk-SK.rc | 3 +++ reactos/dll/win32/shell32/lang/sl-SI.rc | 3 +++ reactos/dll/win32/shell32/lang/sv-SE.rc | 3 +++ reactos/dll/win32/shell32/lang/tr-TR.rc | 3 +++ reactos/dll/win32/shell32/lang/uk-UA.rc | 3 +++ reactos/dll/win32/shell32/lang/zh-CN.rc | 3 +++ reactos/dll/win32/shell32/lang/zh-TW.rc | 3 +++ reactos/dll/win32/shell32/shresdef.h | 3 +++ 28 files changed, 85 insertions(+) diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index ac6db9bd05e..dbf5ed8564b 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -614,6 +614,10 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" IDS_DELETEITEM_CAPTION "Confirm file deletion" diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 3b96a8ab7ae..634f72084bb 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -616,6 +616,9 @@ BEGIN IDS_SELECT "Vybrat" IDS_OPEN "Otevt" IDS_CREATELINK "Vytvoit zstupc&e" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Nelze vytvoit novou sloku, protoe pstup byl odepen." IDS_CREATEFOLDER_CAPTION "Chyba pi pokusu vytvoit nov adres" diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index afbf725be69..1896b6e5d12 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index 91d1bf4176d..a7a1ca8cae7 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -616,6 +616,9 @@ BEGIN IDS_SELECT "Auswhlen" IDS_OPEN "ffnen" IDS_CREATELINK "&Verknpfung erstellen" + IDS_COPY "Kopieren" + IDS_DELETE "Lschen" + IDS_PROPERTIES "Eigenschaften" IDS_CREATEFOLDER_DENIED "Es konnte kein neues Verzeichnis erstellt werden: Zugriff verweigert." IDS_CREATEFOLDER_CAPTION "Es trat ein Fehler beim Erstellen eines neuen Verzeichnisses auf." diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index c11fe4d38ed..7fadc83b331 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "" IDS_OPEN "" IDS_CREATELINK " &" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED " : ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 0e749495f9f..9aca4adea9c 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index bd64228f3ee..fb0b957cf77 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -615,6 +615,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index c6bfe8a6a4d..8e0018f7b49 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -616,6 +616,9 @@ BEGIN IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" IDS_CREATELINK "C&rear acceso directo" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "No se puede crear nueva carpeta: Permiso denegado." IDS_CREATEFOLDER_CAPTION "Error durante la creacin de una nueva carpeta" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index d0a7c4cd740..61101118932 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "Valitse" IDS_OPEN "Avaa" IDS_CREATELINK "Lu&o Linkki" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Uutta kansiota ei voitu luoda: Oikeudet eivt riit." IDS_CREATEFOLDER_CAPTION "Virhe luotaessa uutta kansiota" diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index df41379101d..4f915aab1f2 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -618,6 +618,9 @@ BEGIN IDS_SELECT "Slectionner" IDS_OPEN "Ouvrir" IDS_CREATELINK "Crer un &lien" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Impossible de crer le nouveau dossier : permission refuse." IDS_CREATEFOLDER_CAPTION "Erreur lors de la cration du nouveau dossier" diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 370c4fd3d63..9e40cc265f5 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -617,6 +617,9 @@ BEGIN IDS_SELECT "Kivlaszt" IDS_OPEN "Megnyit" IDS_CREATELINK "Parancsikon ltrehozsa" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Nem hozhat ltre j mappa: Nincs hozz engedlyed." IDS_CREATEFOLDER_CAPTION "Hiba a mappa ltrehozsakor" diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 1530d2a2076..16a155f3388 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -615,6 +615,9 @@ BEGIN IDS_SELECT "Selezione" IDS_OPEN "Apri" IDS_CREATELINK "&Crea Collegamento" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Impossibile creare la cartella: Accesso negato." IDS_CREATEFOLDER_CAPTION "Errore durante la creazione della cartella" diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index a0767b56845..76b40f5a470 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "I" IDS_OPEN "J" IDS_CREATELINK "V[gJbg̍쐬(&L)" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "VtH_쐬ł܂ł: ANZX܂B" IDS_CREATEFOLDER_CAPTION "VtH_̍쐬ɃG[܂" diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index 7ec532ed1c9..351f2181f99 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 358e9135f9f..16df8cc7367 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index e90433a219e..6b522d3667c 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -593,6 +593,9 @@ BEGIN IDS_SELECT "Velg" IDS_OPEN "pne" IDS_CREATELINK "&Opprett snarvei" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet." IDS_CREATEFOLDER_CAPTION "Klarte ikke opprette ny mappe" diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index a0bc75683d8..55098f14000 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -620,6 +620,9 @@ BEGIN IDS_SELECT "Zaznacz" IDS_OPEN "Otwrz" IDS_CREATELINK "Utwrz &Skrt" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Nie mog utworzy nowego katalogu: Brak dostpu." IDS_CREATEFOLDER_CAPTION "Bd przy tworzeniu nowego katalogu." diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index e96b707ee3f..3232668c728 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -616,6 +616,9 @@ BEGIN IDS_SELECT "Selecionar" IDS_OPEN "Abrir" IDS_CREATELINK "Criar a&talho" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "No pode criar nova pasta: Permisso negada." IDS_CREATEFOLDER_CAPTION "Erro durante a criao da nova pasta" diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 4c3094c5432..7a0277c823a 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -616,6 +616,9 @@ BEGIN IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "No possvel criar nova pasta: Permisso negada." IDS_CREATEFOLDER_CAPTION "Erro durante a criao da nova pasta" diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 72f1bb754b7..a433944589d 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -613,6 +613,9 @@ BEGIN IDS_SELECT "&" IDS_OPEN "&" IDS_CREATELINK " &" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED " - ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 802ac355577..e9702a88616 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -620,6 +620,9 @@ BEGIN IDS_SELECT "Vybra" IDS_OPEN "Otvori" IDS_CREATELINK "Vytvori o&dkaz" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Nie je mon vytvori nov prieinok: Prstup zamietnut." IDS_CREATEFOLDER_CAPTION "Chyba poas vytvrania novho prieinka" diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index 63b80b1c380..5726684ccf2 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index c9da3be1074..31dbc659b6e 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index 21454bb057b..2558ac9551b 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -614,6 +614,9 @@ BEGIN IDS_SELECT "Se" IDS_OPEN "A" IDS_CREATELINK "Ksayol O&lutur" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Yeni dizin oluturulamyor: Eriim engellendi." IDS_CREATEFOLDER_CAPTION "Dizin oluturma srasnda hata" diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 0139ea37be4..b1c7aea30ec 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -615,6 +615,9 @@ BEGIN IDS_SELECT "&" IDS_OPEN "³&" IDS_CREATELINK " &" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED " : ³ ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 23869ddc10e..f00412cb1e8 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -603,6 +603,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "ݷʽ(&L)" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index cdc6ad2e378..3ef2bf9ba1e 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -615,6 +615,9 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index 7adea1d815e..3567a6d2ef3 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -150,6 +150,9 @@ #define IDS_SHV_COLUMN13 312 #define IDS_SHV_COLUMN_WORKGROUP 313 #define IDS_SHV_NETWORKLOCATION 314 +#define IDS_COPY 315 +#define IDS_DELETE 316 +#define IDS_PROPERTIES 317 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 From 316da61ad21aaf1282fd71ab5af99639b0fb37fc Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 19:51:29 +0000 Subject: [PATCH 212/304] sorry, fix build svn path=/trunk/; revision=35198 --- reactos/dll/win32/shell32/pidl.h | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/reactos/dll/win32/shell32/pidl.h b/reactos/dll/win32/shell32/pidl.h index 476fb05c7c6..bceaa66d646 100644 --- a/reactos/dll/win32/shell32/pidl.h +++ b/reactos/dll/win32/shell32/pidl.h @@ -107,6 +107,7 @@ #define PT_IESPECIAL2 0xb1 #define PT_SHARE 0xc3 + #include "pshpack1.h" typedef BYTE PIDLTYPE; @@ -119,6 +120,14 @@ typedef struct tagPIDLCPanelStruct CHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */ } PIDLCPanelStruct; +typedef struct tagPIDLFontStruct +{ + BYTE dummy; + WORD offsFile; + WCHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */ +} PIDLFontStruct; + + typedef struct tagGUIDStruct { BYTE dummy; /* offset 01 is unknown */ @@ -180,6 +189,7 @@ typedef struct tagPIDLDATA } htmlhelp; struct tagPIDLCPanelStruct cpanel; struct tagValueW valueW; + struct tagPIDLFontStruct cfont; }u; } PIDLDATA, *LPPIDLDATA; #include "poppack.h" From 6ee6160ac0afee0184065ed84d98a5927b13d59d Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Fri, 8 Aug 2008 19:59:41 +0000 Subject: [PATCH 213/304] - Update Russian translation svn path=/trunk/; revision=35199 --- reactos/dll/win32/shell32/lang/ru-RU.rc | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index a433944589d..1046983789d 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -591,13 +591,13 @@ BEGIN IDS_SHV_COLUMN9 "" IDS_SHV_COLUMN10 "" IDS_SHV_COLUMN11 "" - IDS_SHV_COLUMN12 "Filename" - IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN12 " " + IDS_SHV_COLUMN13 "" IDS_SHV_COLUMN_DELFROM " " IDS_SHV_COLUMN_DELDATE " " - IDS_SHV_COLUMN_FONTTYPE "Fonttype" - IDS_SHV_COLUMN_WORKGROUP "Workgroup" - IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_FONTTYPE " " + IDS_SHV_COLUMN_WORKGROUP " " + IDS_SHV_NETWORKLOCATION " " /* special folders */ IDS_DESKTOP " " @@ -613,9 +613,9 @@ BEGIN IDS_SELECT "&" IDS_OPEN "&" IDS_CREATELINK " &" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" + IDS_COPY "" + IDS_DELETE "" + IDS_PROPERTIES "" IDS_CREATEFOLDER_DENIED " - ." IDS_CREATEFOLDER_CAPTION " " @@ -717,7 +717,7 @@ BEGIN IDS_PREVIEW_VERB "" IDS_FILE_FOLDER "%u , %u " - IDS_PRINTERS "Printers" - IDS_FONTS "Fonts" - IDS_INSTALLNEWFONT "Install New Font..." + IDS_PRINTERS "" + IDS_FONTS "" + IDS_INSTALLNEWFONT " ..." END From a6c16c0cd17a829e9c1da1a8abe046c97a0c6c87 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 20:26:52 +0000 Subject: [PATCH 214/304] * add missing return * implement context menu handling of font items for font shell folder svn path=/trunk/; revision=35200 --- reactos/dll/win32/shell32/shfldr_fonts.c | 263 ++++++++++++++++++++--- reactos/dll/win32/shell32/shv_item_new.c | 5 +- 2 files changed, 241 insertions(+), 27 deletions(-) diff --git a/reactos/dll/win32/shell32/shfldr_fonts.c b/reactos/dll/win32/shell32/shfldr_fonts.c index 4d69f0d89a2..6b06a3efb03 100644 --- a/reactos/dll/win32/shell32/shfldr_fonts.c +++ b/reactos/dll/win32/shell32/shfldr_fonts.c @@ -45,6 +45,7 @@ #include "shfldr.h" #include "shlwapi.h" + WINE_DEFAULT_DEBUG_CHANNEL (shell); /*********************************************************************** @@ -54,18 +55,22 @@ WINE_DEFAULT_DEBUG_CHANNEL (shell); typedef struct { const IShellFolder2Vtbl *lpVtbl; LONG ref; + const IContextMenu2Vtbl *lpVtblContextMenuFontItem; const IPersistFolder2Vtbl *lpVtblPersistFolder2; /* both paths are parsible from the desktop */ LPITEMIDLIST pidlRoot; /* absolute pidl */ + LPCITEMIDLIST apidl; /* currently focused font item */ } IGenericSFImpl; static const IShellFolder2Vtbl vt_ShellFolder2; static const IPersistFolder2Vtbl vt_NP_PersistFolder2; - +static const IContextMenu2Vtbl vt_ContextMenu2FontItem; #define _IPersistFolder2_Offset ((int)(&(((IGenericSFImpl*)0)->lpVtblPersistFolder2))) #define _ICOM_THIS_From_IPersistFolder2(class, name) class* This = (class*)(((char*)name)-_IPersistFolder2_Offset); +#define _IContextMenuFontItem_Offset ((int)(&(((IGenericSFImpl*)0)->lpVtblContextMenuFontItem))) +#define _ICOM_THIS_From_IContextMenu2FontItem(class, name) class* This = (class*)(((char*)name)-_IContextMenuFontItem_Offset); #define _IUnknown_(This) (IUnknown*)&(This->lpVtbl) #define _IShellFolder_(This) (IShellFolder*)&(This->lpVtbl) @@ -107,6 +112,7 @@ HRESULT WINAPI ISF_Fonts_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID sf->ref = 0; sf->lpVtbl = &vt_ShellFolder2; sf->lpVtblPersistFolder2 = &vt_NP_PersistFolder2; + sf->lpVtblContextMenuFontItem = &vt_ContextMenu2FontItem; sf->pidlRoot = _ILCreateFont(); /* my qualified pidl */ if (!SUCCEEDED (IUnknown_QueryInterface (_IUnknown_ (sf), riid, ppv))) @@ -485,43 +491,45 @@ static HRESULT WINAPI ISF_Fonts_fnGetUIObjectOf (IShellFolder2 * iface, if (!ppvOut) return hr; - *ppvOut = NULL; + *ppvOut = NULL; - if (IsEqualIID (riid, &IID_IContextMenu) && (cidl >= 1)) + if (IsEqualIID (riid, &IID_IContextMenu) && (cidl >= 1)) { - pObj = (LPUNKNOWN) ISvItemCm_Constructor ((IShellFolder *) iface, This->pidlRoot, apidl, cidl); - hr = S_OK; - } + pObj = (IUnknown*)(&This->lpVtblContextMenuFontItem); + This->apidl = apidl[0]; + IUnknown_AddRef(pObj); + hr = S_OK; + } else if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1)) { - pObj = (LPUNKNOWN) IDataObject_Constructor (hwndOwner, This->pidlRoot, apidl, cidl); - hr = S_OK; - } + pObj = (LPUNKNOWN) IDataObject_Constructor (hwndOwner, This->pidlRoot, apidl, cidl); + hr = S_OK; + } else if (IsEqualIID (riid, &IID_IExtractIconA) && (cidl == 1)) { - pidl = ILCombine (This->pidlRoot, apidl[0]); - pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); - SHFree (pidl); - hr = S_OK; - } + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } else if (IsEqualIID (riid, &IID_IExtractIconW) && (cidl == 1)) { - pidl = ILCombine (This->pidlRoot, apidl[0]); - pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); - SHFree (pidl); - hr = S_OK; - } + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) { - hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); - } + hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); + } else - hr = E_NOINTERFACE; + hr = E_NOINTERFACE; - if (SUCCEEDED(hr) && !pObj) - hr = E_OUTOFMEMORY; + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; - *ppvOut = pObj; + *ppvOut = pObj; TRACE ("(%p)->hr=0x%08x\n", This, hr); return hr; } @@ -860,3 +868,208 @@ static const IPersistFolder2Vtbl vt_NP_PersistFolder2 = INPFldr_PersistFolder2_Initialize, INPFldr_PersistFolder2_GetCurFolder }; + +/************************************************************************** +* IContextMenu2 Implementation +*/ + +/************************************************************************ + * ISF_Fonts_IContextMenu_QueryInterface + */ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_QueryInterface(IContextMenu2 * iface, REFIID iid, LPVOID * ppvObject) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)\n", This); + + return IUnknown_QueryInterface(_IUnknown_(This), iid, ppvObject); +} + +/************************************************************************ + * ISF_Fonts_IContextMenu_AddRef + */ +static ULONG WINAPI ISF_Fonts_IContextMenu2_AddRef(IContextMenu2 * iface) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_AddRef(_IUnknown_(This)); +} + +/************************************************************************ + * ISF_Fonts_IContextMenu_Release + */ +static ULONG WINAPI ISF_Fonts_IContextMenu2_Release(IContextMenu2 * iface) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)->(count=%u)\n", This, This->ref); + + return IUnknown_Release(_IUnknown_(This)); +} + +/************************************************************************** +* ISF_Fonts_IContextMenu_QueryContextMenu() +*/ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_QueryContextMenu( + IContextMenu2 *iface, + HMENU hMenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + char szBuffer[30] = {0}; + ULONG Count = 1; + + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringA(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + Count++; + } + + if (LoadStringA(shell32_hInstance, IDS_PRINT_VERB, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_COPY, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + } + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + + +/************************************************************************** +* ISF_Fonts_IContextMenu_InvokeCommand() +*/ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_InvokeCommand( + IContextMenu2 *iface, + LPCMINVOKECOMMANDINFO lpcmi) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + SHELLEXECUTEINFOW sei; + PIDLFontStruct * pfont; + SHFILEOPSTRUCTW op; + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1) || lpcmi->lpVerb == MAKEINTRESOURCE(2) || lpcmi->lpVerb == MAKEINTRESOURCE(7)) + { + ZeroMemory(&sei, sizeof(sei)); + sei.cbSize = sizeof(sei); + sei.hwnd = lpcmi->hwnd; + sei.nShow = SW_SHOWNORMAL; + if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) + sei.lpVerb = L"open"; + else if (lpcmi->lpVerb == MAKEINTRESOURCE(2)) + sei.lpVerb = L"print"; + else if (lpcmi->lpVerb == MAKEINTRESOURCE(7)) + sei.lpVerb = L"properties"; + + pfont = _ILGetFontStruct(This->apidl); + sei.lpFile = pfont->szName + pfont->offsFile; + + ShellExecuteExW(&sei); + if (sei.hInstApp <= (HINSTANCE)32) + return E_FAIL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(4)) + { + FIXME("implement font copying\n"); + return E_NOTIMPL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(6)) + { + ZeroMemory(&op, sizeof(op)); + op.hwnd = lpcmi->hwnd; + op.wFunc = FO_DELETE; + op.fFlags = FOF_ALLOWUNDO; + pfont = _ILGetFontStruct(This->apidl); + op.pFrom = pfont->szName + pfont->offsFile; + SHFileOperationW(&op); + } + + return S_OK; +} + +/************************************************************************** + * ISF_Fonts_IContextMenu_GetCommandString() + * + */ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_GetCommandString( + IContextMenu2 *iface, + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + + return E_FAIL; +} + + + +/************************************************************************** +* ISF_Fonts_IContextMenu_HandleMenuMsg() +*/ +static HRESULT WINAPI ISF_Fonts_IContextMenu2_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + _ICOM_THIS_From_IContextMenu2FontItem(IGenericSFImpl, iface); + + TRACE("ISF_Fonts_IContextMenu_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static const IContextMenu2Vtbl vt_ContextMenu2FontItem = +{ + ISF_Fonts_IContextMenu2_QueryInterface, + ISF_Fonts_IContextMenu2_AddRef, + ISF_Fonts_IContextMenu2_Release, + ISF_Fonts_IContextMenu2_QueryContextMenu, + ISF_Fonts_IContextMenu2_InvokeCommand, + ISF_Fonts_IContextMenu2_GetCommandString, + ISF_Fonts_IContextMenu2_HandleMenuMsg +}; + + + + + + diff --git a/reactos/dll/win32/shell32/shv_item_new.c b/reactos/dll/win32/shell32/shv_item_new.c index c49c8ac4468..f8f52c057f3 100644 --- a/reactos/dll/win32/shell32/shv_item_new.c +++ b/reactos/dll/win32/shell32/shv_item_new.c @@ -84,7 +84,7 @@ GetKeyDescription(LPWSTR szKeyName, LPWSTR szResult) dwError = RegGetValueW(hKey,NULL,NULL, RRF_RT_REG_SZ,NULL,szDesc,&dwDesc); if(dwError == ERROR_SUCCESS) { - if (wcsncmp(szDesc, szKeyName, dwDesc / sizeof(WCHAR))) + if (wcsncmp(szKeyName, szDesc, dwDesc / sizeof(WCHAR))) { /* recurse for to a linked key */ if (!GetKeyDescription(szDesc, szResult)) @@ -576,7 +576,7 @@ static inline INewMenuImpl *impl_from_IShellExtInit( IShellExtInit *iface ) } #endif -static inline INewMenuImpl *impl_from_IContextMenu( IContextMenu2 *iface ) +static __inline INewMenuImpl * impl_from_IContextMenu( IContextMenu2 *iface ) { return (INewMenuImpl *)((char*)iface - FIELD_OFFSET(INewMenuImpl, lpVtblContextMenu)); } @@ -717,6 +717,7 @@ INewItem_IContextMenu_fnInvokeCommand( IContextMenu2* iface, if (LOWORD(lpici->lpVerb) == 0) { DoNewFolder(This, lpSV); + return S_OK; } hr = DoShellNewCmd(This, lpici); From 66105f44ec64fca63b387b65ff928564b87cba29 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 21:50:24 +0000 Subject: [PATCH 215/304] * register printer shell folder * move printer column descriptors to resource files * fix enumeration of printers svn path=/trunk/; revision=35201 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 8 + reactos/dll/win32/shell32/lang/ca-ES.rc | 5 + reactos/dll/win32/shell32/lang/cs-CZ.rc | 5 + reactos/dll/win32/shell32/lang/da-DK.rc | 5 + reactos/dll/win32/shell32/lang/de-DE.rc | 6 + reactos/dll/win32/shell32/lang/el-GR.rc | 5 + reactos/dll/win32/shell32/lang/en-GB.rc | 5 + reactos/dll/win32/shell32/lang/en-US.rc | 6 + reactos/dll/win32/shell32/lang/es-ES.rc | 5 + reactos/dll/win32/shell32/lang/fi-FI.rc | 5 + reactos/dll/win32/shell32/lang/fr-FR.rc | 5 + reactos/dll/win32/shell32/lang/hu-HU.rc | 5 + reactos/dll/win32/shell32/lang/it-IT.rc | 5 + reactos/dll/win32/shell32/lang/ja-JP.rc | 5 + reactos/dll/win32/shell32/lang/ko-KR.rc | 5 + reactos/dll/win32/shell32/lang/nl-NL.rc | 5 + reactos/dll/win32/shell32/lang/no-NO.rc | 5 + reactos/dll/win32/shell32/lang/pl-PL.rc | 5 + reactos/dll/win32/shell32/lang/pt-BR.rc | 5 + reactos/dll/win32/shell32/lang/pt-PT.rc | 5 + reactos/dll/win32/shell32/lang/ru-RU.rc | 5 + reactos/dll/win32/shell32/lang/sk-SK.rc | 5 + reactos/dll/win32/shell32/lang/sl-SI.rc | 5 + reactos/dll/win32/shell32/lang/sv-SE.rc | 5 + reactos/dll/win32/shell32/lang/tr-TR.rc | 5 + reactos/dll/win32/shell32/lang/uk-UA.rc | 5 + reactos/dll/win32/shell32/lang/zh-CN.rc | 5 + reactos/dll/win32/shell32/lang/zh-TW.rc | 5 + reactos/dll/win32/shell32/pidl.c | 16 +- reactos/dll/win32/shell32/pidl.h | 14 +- reactos/dll/win32/shell32/regsvr.c | 2 - reactos/dll/win32/shell32/shfldr_fonts.c | 4 +- reactos/dll/win32/shell32/shfldr_printers.c | 198 +++++++++++++++++--- reactos/dll/win32/shell32/shresdef.h | 5 + 34 files changed, 330 insertions(+), 54 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index b45b50caad8..ff8648bdc2e 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -602,6 +602,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" // special folders IDS_DESKTOP " " @@ -617,6 +622,9 @@ BEGIN IDS_SELECT "" IDS_OPEN "" IDS_CREATELINK " &" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" IDS_CREATEFOLDER_DENIED " : ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index dbf5ed8564b..20fadfe2b54 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 634f72084bb..a58aa9fa1c6 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -601,6 +601,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Plocha" diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index 1896b6e5d12..f928320043e 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index a7a1ca8cae7..584444efbcc 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -601,6 +601,12 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Schriftartentyp" IDS_SHV_COLUMN_WORKGROUP "Arbeitsgruppe" IDS_SHV_NETWORKLOCATION "Netzwerkstandort" + IDS_SHV_COLUMN_DOCUMENTS "Dokumente" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Kommentare" + IDS_SHV_COLUMN_LOCATION "Ort" + IDS_SHV_COLUMN_MODEL "Model" + /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 7fadc83b331..087f6376ed6 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP " " diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 9aca4adea9c..e773b9216cc 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index fb0b957cf77..3b245f21c0e 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -600,6 +600,12 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" + /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index 8e0018f7b49..be3c0638a2d 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -601,6 +601,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Escritorio" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 61101118932..08a391bb4eb 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Typyt" diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 4f915aab1f2..6668f83689a 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -603,6 +603,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Bureau" diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 9e40cc265f5..e4d1f7ae492 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -602,6 +602,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Asztal" diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 16a155f3388..11fb3f2d7f3 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -600,6 +600,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index 76b40f5a470..7a861205247 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "fXNgbv" diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index 351f2181f99..d7ead0b6ed0 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 16df8cc7367..b22885588f6 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index 6b522d3667c..e8fb5e5993c 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -578,6 +578,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Skrivebord" diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index 55098f14000..557df2f845c 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -605,6 +605,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Pulpit" diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index 3232668c728..b2be2dd5ea8 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -601,6 +601,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "rea de trabalho" diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 7a0277c823a..7e1f7f55df4 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -601,6 +601,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Ambiente de trabalho" diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 1046983789d..8b56b76054e 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -598,6 +598,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE " " IDS_SHV_COLUMN_WORKGROUP " " IDS_SHV_NETWORKLOCATION " " + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP " " diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index e9702a88616..11e2177fe91 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -605,6 +605,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Pracovn plocha" diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index 5726684ccf2..9593efb0a2b 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 31dbc659b6e..33b766295c8 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index 2558ac9551b..94e6308ace7 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -599,6 +599,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Masast" diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index b1c7aea30ec..e366538f0bb 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -600,6 +600,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP " " diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index f00412cb1e8..68567c3d0a4 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -588,6 +588,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "" diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index 3ef2bf9ba1e..580f74d301e 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -600,6 +600,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE "Fonttype" IDS_SHV_COLUMN_WORKGROUP "Workgroup" IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_MODEL "Model" /* special folders */ IDS_DESKTOP "Desktop" diff --git a/reactos/dll/win32/shell32/pidl.c b/reactos/dll/win32/shell32/pidl.c index ff9cfd144ae..1b44e614db9 100644 --- a/reactos/dll/win32/shell32/pidl.c +++ b/reactos/dll/win32/shell32/pidl.c @@ -1387,21 +1387,7 @@ LPITEMIDLIST _ILCreateControlPanel(void) LPITEMIDLIST _ILCreatePrinters(void) { - LPITEMIDLIST parent = _ILCreateGuid(PT_GUID, &CLSID_MyComputer), ret = NULL; - - TRACE("()\n"); - if (parent) - { - LPITEMIDLIST printers = _ILCreateGuid(PT_YAGUID, &CLSID_Printers); - - if (printers) - { - ret = ILCombine(parent, printers); - SHFree(printers); - } - SHFree(parent); - } - return ret; + return _ILCreateGuid(PT_YAGUID, &CLSID_Printers); } LPITEMIDLIST _ILCreateNetwork(void) diff --git a/reactos/dll/win32/shell32/pidl.h b/reactos/dll/win32/shell32/pidl.h index bceaa66d646..fda45c961e8 100644 --- a/reactos/dll/win32/shell32/pidl.h +++ b/reactos/dll/win32/shell32/pidl.h @@ -122,11 +122,18 @@ typedef struct tagPIDLCPanelStruct typedef struct tagPIDLFontStruct { - BYTE dummy; - WORD offsFile; - WCHAR szName[1]; /*10*/ /* terminated by 0x00, followed by display name and comment string */ + BYTE dummy; + WORD offsFile; + WCHAR szName[1]; } PIDLFontStruct; +typedef struct tagPIDLPrinterStruct +{ + BYTE dummy; + DWORD Attributes; + WORD offsServer; + WCHAR szName[1]; +}PIDLPrinterStruct; typedef struct tagGUIDStruct { @@ -190,6 +197,7 @@ typedef struct tagPIDLDATA struct tagPIDLCPanelStruct cpanel; struct tagValueW valueW; struct tagPIDLFontStruct cfont; + struct tagPIDLPrinterStruct cprinter; }u; } PIDLDATA, *LPPIDLDATA; #include "poppack.h" diff --git a/reactos/dll/win32/shell32/regsvr.c b/reactos/dll/win32/shell32/regsvr.c index 59c95d13a51..c0e98656849 100644 --- a/reactos/dll/win32/shell32/regsvr.c +++ b/reactos/dll/win32/shell32/regsvr.c @@ -799,13 +799,11 @@ static struct regsvr_namespace const namespace_extensions_list[] = { wszControlPanel, wszFonts }, -#if 0 { &CLSID_Printers, wszControlPanel, wszPrinters }, -#endif { NULL } }; diff --git a/reactos/dll/win32/shell32/shfldr_fonts.c b/reactos/dll/win32/shell32/shfldr_fonts.c index 6b06a3efb03..10b0595e107 100644 --- a/reactos/dll/win32/shell32/shfldr_fonts.c +++ b/reactos/dll/win32/shell32/shfldr_fonts.c @@ -732,9 +732,7 @@ static HRESULT WINAPI ISF_Fonts_fnGetDetailsOf (IShellFolder2 * iface, break; } - FIXME ("(%p)->(%p %i %p)\n", This, pidl, iColumn, psd); - - return E_NOTIMPL; + return E_FAIL; } static HRESULT WINAPI ISF_Fonts_fnMapColumnToSCID (IShellFolder2 * iface, diff --git a/reactos/dll/win32/shell32/shfldr_printers.c b/reactos/dll/win32/shell32/shfldr_printers.c index 98867c0f90d..9e31aa2abee 100644 --- a/reactos/dll/win32/shell32/shfldr_printers.c +++ b/reactos/dll/win32/shell32/shfldr_printers.c @@ -71,6 +71,26 @@ typedef struct #define _IExtractIconA_Offset ((int)(&(((IExtractIconWImpl*)0)->lpvtblExtractIconA))) #define _ICOM_THIS_From_IExtractIconA(class, name) class* This = (class*)(((char*)name)-_IExtractIconA_Offset); +static shvheader PrinterSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_DOCUMENTS , SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_STATUS, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_LOCATION, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN_MODEL, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15} +}; + +#define COLUMN_NAME 0 +#define COLUMN_DOCUMENTS 1 +#define COLUMN_STATUS 2 +#define COLUMN_COMMENTS 3 +#define COLUMN_LOCATION 4 +#define COLUMN_MODEL 5 + + +#define PrinterSHELLVIEWCOLUMNS (6) + + /************************************************************************** * IExtractIconW_QueryInterface */ @@ -416,6 +436,61 @@ static HRESULT WINAPI ISF_Printers_fnParseDisplayName (IShellFolder2 * iface, return E_NOTIMPL; } +static LPITEMIDLIST _ILCreatePrinterItem(PRINTER_INFO_4W *pi) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLPrinterStruct * p; + int size0 = (char*)&tmp.u.cprinter.szName-(char*)&tmp.u.cprinter; + int size = size0; + + tmp.type = 0x00; + tmp.u.cprinter.dummy = 0xFF; + if (pi->pPrinterName) + tmp.u.cprinter.offsServer = wcslen(pi->pPrinterName) + 1; + else + tmp.u.cprinter.offsServer = 1; + + size += tmp.u.cprinter.offsServer * sizeof(WCHAR); + if (pi->pServerName) + size += ( + wcslen(pi->pServerName) + 1) * sizeof(WCHAR); + else + size += sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.cprinter; + + p->Attributes = pi->Attributes; + if (pi->pPrinterName) + wcscpy(p->szName, pi->pPrinterName); + else + p->szName[0] = L'\0'; + + if (pi->pServerName) + wcscpy(p->szName + p->offsServer, pi->pServerName); + else + p->szName[p->offsServer] = L'\0'; + + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +static PIDLPrinterStruct * _ILGetPrinterStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLPrinterStruct*)&(pdata->u.cfont); + + return NULL; +} + /************************************************************************** * CreatePrintersEnumList() */ @@ -428,10 +503,13 @@ static BOOL CreatePrintersEnumList(IEnumIDList *list, DWORD dwFlags) /* enumerate the folders */ if (dwFlags & SHCONTF_NONFOLDERS) { - DWORD needed, num, i; + DWORD needed = 0, num = 0, i; PRINTER_INFO_4W *pi; EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, NULL, 0, &needed, &num); + if (!needed) + return ret; + pi = HeapAlloc(GetProcessHeap(), 0, needed); if(!EnumPrintersW(PRINTER_ENUM_LOCAL, NULL, 4, (LPBYTE)pi, needed, &needed, &num)) { HeapFree(GetProcessHeap(), 0, pi); @@ -439,13 +517,13 @@ static BOOL CreatePrintersEnumList(IEnumIDList *list, DWORD dwFlags) } for(i = 0; i < num; i++) { - DWORD len = strlenW(pi[i].pPrinterName); - LPITEMIDLIST pidl = _ILAlloc(PT_VALUEW, (len + 1) * sizeof(WCHAR)); - LPPIDLDATA data = _ILGetDataPointer(pidl); - memcpy(data->u.valueW.name, pi[i].pPrinterName, (len + 1) * sizeof(WCHAR)); - AddToEnumList(list, pidl); + LPITEMIDLIST pidl = _ILCreatePrinterItem(&pi[i]); + if (pidl) + { + if (!AddToEnumList(list, pidl)) + SHFree(pidl); + } } - HeapFree(GetProcessHeap(), 0, pi); } return ret; @@ -480,10 +558,10 @@ static HRESULT WINAPI ISF_Printers_fnBindToObject (IShellFolder2 * iface, { IGenericSFImpl *This = (IGenericSFImpl *)iface; - FIXME ("(%p)->(pidl=%p,%p,%s,%p)\n", - This, pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This, + pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); - return E_NOTIMPL; + return SHELL32_BindToChild (This->pidlRoot, NULL, pidl, riid, ppvOut); } /************************************************************************** @@ -508,9 +586,12 @@ static HRESULT WINAPI ISF_Printers_fnCompareIDs (IShellFolder2 * iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) { IGenericSFImpl *This = (IGenericSFImpl *)iface; + int nReturn; - FIXME ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p): stub\n", This, lParam, pidl1, pidl2); - return E_NOTIMPL; + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", This, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (_IShellFolder_ (This), lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; } /************************************************************************** @@ -519,12 +600,40 @@ static HRESULT WINAPI ISF_Printers_fnCompareIDs (IShellFolder2 * iface, static HRESULT WINAPI ISF_Printers_fnCreateViewObject (IShellFolder2 * iface, HWND hwndOwner, REFIID riid, LPVOID * ppvOut) { + + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; IGenericSFImpl *This = (IGenericSFImpl *)iface; - FIXME ("(%p)->(hwnd=%p,%s,%p): stub\n", - This, hwndOwner, shdebugstr_guid (riid), ppvOut); + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", This, + hwndOwner, shdebugstr_guid (riid), ppvOut); - return E_NOTIMPL; + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IContextMenu)) + { + WARN ("IContextMenu not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppvOut); + IShellView_Release (pShellView); + } + } + TRACE ("-- (%p)->(interface=%p)\n", This, ppvOut); + return hr; } /************************************************************************** @@ -594,8 +703,7 @@ static HRESULT WINAPI ISF_Printers_fnGetDisplayNameOf (IShellFolder2 * iface, LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) { IGenericSFImpl *This = (IGenericSFImpl *)iface; - WCHAR *name; - DWORD len; + PIDLPrinterStruct * p; TRACE ("(%p)->(pidl=%p,0x%08lx,%p)\n", This, pidl, dwFlags, strRet); pdump (pidl); @@ -603,13 +711,15 @@ static HRESULT WINAPI ISF_Printers_fnGetDisplayNameOf (IShellFolder2 * iface, if (!strRet) return E_INVALIDARG; - name = _ILGetDataPointer(pidl)->u.valueW.name; - len = strlenW(name); + p = _ILGetPrinterStruct(pidl); + if (!p) + return E_INVALIDARG; - strRet->uType = STRRET_WSTR; - strRet->u.pOleStr = SHAlloc((len + 1) * sizeof(WCHAR)); - memcpy(strRet->u.pOleStr, name, (len + 1) * sizeof(WCHAR)); + strRet->u.pOleStr = SHAlloc(p->offsServer * sizeof(WCHAR)); + if (!strRet->u.pOleStr) + return E_OUTOFMEMORY; + memcpy((LPVOID)strRet->u.pOleStr, (LPVOID)p->szName, p->offsServer * sizeof(WCHAR)); TRACE("ret %s\n", debugstr_w(strRet->u.pOleStr)); return S_OK; @@ -659,20 +769,21 @@ static HRESULT WINAPI ISF_Printers_fnEnumSearches (IShellFolder2 *iface, static HRESULT WINAPI ISF_Printers_fnGetDefaultColumn (IShellFolder2 * iface, DWORD dwRes, ULONG * pSort, ULONG * pDisplay) { - IGenericSFImpl *This = (IGenericSFImpl *)iface; + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; - FIXME ("(%p): stub\n", This); - - return E_NOTIMPL; + return S_OK; } static HRESULT WINAPI ISF_Printers_fnGetDefaultColumnState ( IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags) { - IGenericSFImpl *This = (IGenericSFImpl *)iface; + if (!pcsFlags || iColumn >= PrinterSHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = PrinterSFHeader[iColumn].pcsFlags; + return S_OK; - FIXME ("(%p): stub\n", This); - - return E_NOTIMPL; } static HRESULT WINAPI ISF_Printers_fnGetDetailsEx (IShellFolder2 * iface, @@ -688,8 +799,33 @@ static HRESULT WINAPI ISF_Printers_fnGetDetailsOf (IShellFolder2 * iface, LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) { IGenericSFImpl *This = (IGenericSFImpl *)iface; + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; - FIXME ("(%p)->(%p %i %p): stub\n", This, pidl, iColumn, psd); + TRACE("(%p)->(%p %i %p): stub\n", This, pidl, iColumn, psd); + + if (iColumn >= PrinterSHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = PrinterSFHeader[iColumn].fmt; + psd->cxChar = PrinterSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, PrinterSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.u.pOleStr); + + return hr; + } + + if (iColumn == COLUMN_NAME) + { + psd->str.uType = STRRET_WSTR; + return IShellFolder2_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &psd->str); + } + + psd->str.uType = STRRET_CSTR; + psd->str.u.cStr[0] = '\0'; return E_NOTIMPL; } diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index 3567a6d2ef3..0c10e4bb8c1 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -153,6 +153,11 @@ #define IDS_COPY 315 #define IDS_DELETE 316 #define IDS_PROPERTIES 317 +#define IDS_SHV_COLUMN_DOCUMENTS 318 +#define IDS_SHV_COLUMN_STATUS 319 +#define IDS_SHV_COLUMN_COMMENTS 320 +#define IDS_SHV_COLUMN_LOCATION 321 +#define IDS_SHV_COLUMN_MODEL 322 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 From c817f603ac29f67011c68fc6036e32caec5c854d Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 22:28:16 +0000 Subject: [PATCH 216/304] - add a baseaddress for SXS (based on Vista SP1) svn path=/trunk/; revision=35202 --- reactos/baseaddress.rbuild | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/baseaddress.rbuild b/reactos/baseaddress.rbuild index f130d3c6295..45bb2d5addd 100644 --- a/reactos/baseaddress.rbuild +++ b/reactos/baseaddress.rbuild @@ -73,6 +73,7 @@ + From bab735cf0580b0e44972c39904c713017193231c Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Fri, 8 Aug 2008 22:31:15 +0000 Subject: [PATCH 217/304] * add registry key for bitbucket shell folder svn path=/trunk/; revision=35203 --- reactos/boot/bootdata/hivesft_arm.inf | 2 ++ reactos/boot/bootdata/hivesft_i386.inf | 2 ++ 2 files changed, 4 insertions(+) diff --git a/reactos/boot/bootdata/hivesft_arm.inf b/reactos/boot/bootdata/hivesft_arm.inf index fea8b84e020..94fc6e4cef1 100644 --- a/reactos/boot/bootdata/hivesft_arm.inf +++ b/reactos/boot/bootdata/hivesft_arm.inf @@ -32,6 +32,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket\Volume",,0x00000012 ; CMD Settings HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" diff --git a/reactos/boot/bootdata/hivesft_i386.inf b/reactos/boot/bootdata/hivesft_i386.inf index d8b253f8092..550eec22d37 100644 --- a/reactos/boot/bootdata/hivesft_i386.inf +++ b/reactos/boot/bootdata/hivesft_i386.inf @@ -32,6 +32,8 @@ HKLM,"SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu",,0x00000012 HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\HideDesktopIcons\ClassicStartMenu","{208D2C60-3AEA-1069-A2D7-08002B30309D}",0x00010001,0x00000000 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket",,0x00000012 +HKCU,"SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Bitbucket\Volume",,0x00000012 ; CMD Settings HKLM,"SOFTWARE\Microsoft\Command Processor","AutoRun",0x00020000,"" From 782a7d5ea74eaabcbc343e401d5971f8f58a7177 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Sat, 9 Aug 2008 01:48:18 +0000 Subject: [PATCH 218/304] - add 2 resource strings - rewrite recyclebin item handling - partly implement recycle bin item context menu - rewrite Trash_CanTrashFile to support volume serial numbers - recycle bin shows now correct deleted file details for files svn path=/trunk/; revision=35204 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 2 + reactos/dll/win32/shell32/lang/ca-ES.rc | 2 + reactos/dll/win32/shell32/lang/cs-CZ.rc | 2 + reactos/dll/win32/shell32/lang/da-DK.rc | 2 + reactos/dll/win32/shell32/lang/de-DE.rc | 2 + reactos/dll/win32/shell32/lang/el-GR.rc | 2 + reactos/dll/win32/shell32/lang/en-GB.rc | 2 + reactos/dll/win32/shell32/lang/en-US.rc | 3 +- reactos/dll/win32/shell32/lang/es-ES.rc | 2 + reactos/dll/win32/shell32/lang/fi-FI.rc | 2 + reactos/dll/win32/shell32/lang/fr-FR.rc | 2 + reactos/dll/win32/shell32/lang/hu-HU.rc | 2 + reactos/dll/win32/shell32/lang/it-IT.rc | 2 + reactos/dll/win32/shell32/lang/ja-JP.rc | 2 + reactos/dll/win32/shell32/lang/ko-KR.rc | 2 + reactos/dll/win32/shell32/lang/nl-NL.rc | 2 + reactos/dll/win32/shell32/lang/no-NO.rc | 2 + reactos/dll/win32/shell32/lang/pl-PL.rc | 2 + reactos/dll/win32/shell32/lang/pt-BR.rc | 2 + reactos/dll/win32/shell32/lang/pt-PT.rc | 2 + reactos/dll/win32/shell32/lang/ru-RU.rc | 2 + reactos/dll/win32/shell32/lang/sk-SK.rc | 2 + reactos/dll/win32/shell32/lang/sl-SI.rc | 2 + reactos/dll/win32/shell32/lang/sv-SE.rc | 2 + reactos/dll/win32/shell32/lang/tr-TR.rc | 2 + reactos/dll/win32/shell32/lang/uk-UA.rc | 2 + reactos/dll/win32/shell32/lang/zh-CN.rc | 2 + reactos/dll/win32/shell32/lang/zh-TW.rc | 2 + reactos/dll/win32/shell32/pidl.h | 13 +- reactos/dll/win32/shell32/recyclebin.c | 632 ++++++++++++++++++------ reactos/dll/win32/shell32/shresdef.h | 2 + 31 files changed, 546 insertions(+), 158 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index ff8648bdc2e..04559a3bcce 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -625,6 +625,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 20fadfe2b54..00ad51d1f3b 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index a58aa9fa1c6..3025f566797 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -624,6 +624,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nelze vytvoit novou sloku, protoe pstup byl odepen." IDS_CREATEFOLDER_CAPTION "Chyba pi pokusu vytvoit nov adres" diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index f928320043e..f5bbbbf8466 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index 584444efbcc..e17b7e6cdf7 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -625,6 +625,8 @@ BEGIN IDS_COPY "Kopieren" IDS_DELETE "Lschen" IDS_PROPERTIES "Eigenschaften" + IDS_CUT "Ausschneiden" + IDS_RESTORE "Wiederherstellen" IDS_CREATEFOLDER_DENIED "Es konnte kein neues Verzeichnis erstellt werden: Zugriff verweigert." IDS_CREATEFOLDER_CAPTION "Es trat ein Fehler beim Erstellen eines neuen Verzeichnisses auf." diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 087f6376ed6..02de93e08f5 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index e773b9216cc..43fbdd065d0 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index 3b245f21c0e..4f8da838aea 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -606,7 +606,6 @@ BEGIN IDS_SHV_COLUMN_LOCATION "Location" IDS_SHV_COLUMN_MODEL "Model" - /* special folders */ IDS_DESKTOP "Desktop" IDS_MYCOMPUTER "My Computer" @@ -624,6 +623,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index be3c0638a2d..b189d7368b8 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -624,6 +624,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "No se puede crear nueva carpeta: Permiso denegado." IDS_CREATEFOLDER_CAPTION "Error durante la creacin de una nueva carpeta" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 08a391bb4eb..79d4b67ad55 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Uutta kansiota ei voitu luoda: Oikeudet eivt riit." IDS_CREATEFOLDER_CAPTION "Virhe luotaessa uutta kansiota" diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 6668f83689a..c1669c644a5 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -626,6 +626,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossible de crer le nouveau dossier : permission refuse." IDS_CREATEFOLDER_CAPTION "Erreur lors de la cration du nouveau dossier" diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index e4d1f7ae492..98c7b0478ae 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -625,6 +625,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nem hozhat ltre j mappa: Nincs hozz engedlyed." IDS_CREATEFOLDER_CAPTION "Hiba a mappa ltrehozsakor" diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 11fb3f2d7f3..7ce075013de 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -623,6 +623,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossibile creare la cartella: Accesso negato." IDS_CREATEFOLDER_CAPTION "Errore durante la creazione della cartella" diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index 7a861205247..cea66e1b418 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "VtH_쐬ł܂ł: ANZX܂B" IDS_CREATEFOLDER_CAPTION "VtH_̍쐬ɃG[܂" diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index d7ead0b6ed0..f5f4e083911 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index b22885588f6..cf8906d1b7e 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index e8fb5e5993c..4957a925a9a 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -601,6 +601,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet." IDS_CREATEFOLDER_CAPTION "Klarte ikke opprette ny mappe" diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index 557df2f845c..de7515ee26c 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -628,6 +628,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nie mog utworzy nowego katalogu: Brak dostpu." IDS_CREATEFOLDER_CAPTION "Bd przy tworzeniu nowego katalogu." diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index b2be2dd5ea8..5d5d90f56cd 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -624,6 +624,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "No pode criar nova pasta: Permisso negada." IDS_CREATEFOLDER_CAPTION "Erro durante a criao da nova pasta" diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 7e1f7f55df4..c9136ef224b 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -624,6 +624,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "No possvel criar nova pasta: Permisso negada." IDS_CREATEFOLDER_CAPTION "Erro durante a criao da nova pasta" diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 8b56b76054e..af377a29e6b 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -621,6 +621,8 @@ BEGIN IDS_COPY "" IDS_DELETE "" IDS_PROPERTIES "" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " - ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 11e2177fe91..952b6560f20 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -628,6 +628,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nie je mon vytvori nov prieinok: Prstup zamietnut." IDS_CREATEFOLDER_CAPTION "Chyba poas vytvrania novho prieinka" diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index 9593efb0a2b..c03e3bec75b 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 33b766295c8..9ef056ee401 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index 94e6308ace7..ffdb21deb57 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -622,6 +622,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Yeni dizin oluturulamyor: Eriim engellendi." IDS_CREATEFOLDER_CAPTION "Dizin oluturma srasnda hata" diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index e366538f0bb..16b73392063 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -623,6 +623,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ³ ." IDS_CREATEFOLDER_CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 68567c3d0a4..1b8efdf8cb9 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -611,6 +611,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index 580f74d301e..766c9d99d3d 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -623,6 +623,8 @@ BEGIN IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." IDS_CREATEFOLDER_CAPTION "Error during creation of a new folder" diff --git a/reactos/dll/win32/shell32/pidl.h b/reactos/dll/win32/shell32/pidl.h index fda45c961e8..858432e143c 100644 --- a/reactos/dll/win32/shell32/pidl.h +++ b/reactos/dll/win32/shell32/pidl.h @@ -135,6 +135,16 @@ typedef struct tagPIDLPrinterStruct WCHAR szName[1]; }PIDLPrinterStruct; +typedef struct tagPIDLRecycleStruct +{ + FILETIME LastModification; + FILETIME DeletionTime; + ULARGE_INTEGER FileSize; + ULARGE_INTEGER PhysicalFileSize; + DWORD Attributes; + WCHAR szName[1]; +}PIDLRecycleStruct; + typedef struct tagGUIDStruct { BYTE dummy; /* offset 01 is unknown */ @@ -195,9 +205,10 @@ typedef struct tagPIDLDATA CHAR szName[1]; /*06*/ /* terminated by 0x00 0x00 */ } htmlhelp; struct tagPIDLCPanelStruct cpanel; - struct tagValueW valueW; + struct tagValueW valueW; struct tagPIDLFontStruct cfont; struct tagPIDLPrinterStruct cprinter; + struct tagPIDLRecycleStruct crecycle; }u; } PIDLDATA, *LPPIDLDATA; #include "poppack.h" diff --git a/reactos/dll/win32/shell32/recyclebin.c b/reactos/dll/win32/shell32/recyclebin.c index bc19b0e856d..8e1d4c4c6cc 100644 --- a/reactos/dll/win32/shell32/recyclebin.c +++ b/reactos/dll/win32/shell32/recyclebin.c @@ -77,13 +77,13 @@ static const columninfo RecycleBinColumns[] = #define COLUMNS_COUNT 6 -static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME ft) +static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft) { FILETIME lft; SYSTEMTIME time; int ret; - FileTimeToLocalFileTime(&ft, &lft); + FileTimeToLocalFileTime(ft, &lft); FileTimeToSystemTime(&lft, &time); ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); @@ -105,8 +105,8 @@ typedef struct tagRecycleBin { const IShellFolder2Vtbl *lpVtbl; const IPersistFolder2Vtbl *lpPersistFolderVtbl; - const IContextMenuVtbl *lpCmt; - const IShellExtInitVtbl *lpSEI; + const IContextMenu2Vtbl *lpContextMenu2; + const IShellExtInitVtbl *lpSEI; LONG refCount; INT iIdOpen; @@ -114,16 +114,18 @@ typedef struct tagRecycleBin INT iIdProperties; LPITEMIDLIST pidl; + LPCITEMIDLIST apidl; } RecycleBin; -static const IContextMenuVtbl recycleBincmVtbl; +static const IContextMenu2Vtbl recycleBincmVtblFolder; +static const IContextMenu2Vtbl recycleBincmVtblBitbucketItem; static const IShellFolder2Vtbl recycleBinVtbl; static const IPersistFolder2Vtbl recycleBinPersistVtbl; static const IShellExtInitVtbl eivt; -static RecycleBin *impl_from_IContextMenu(IContextMenu *iface) +static RecycleBin *impl_from_IContextMenu2(IContextMenu2 *iface) { - return (RecycleBin *)((char *)iface - FIELD_OFFSET(RecycleBin, lpCmt)); + return (RecycleBin *)((char *)iface - FIELD_OFFSET(RecycleBin, lpContextMenu2)); } static RecycleBin *impl_from_IPersistFolder(IPersistFolder2 *iface) @@ -150,9 +152,9 @@ HRESULT WINAPI RecycleBin_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID * return E_OUTOFMEMORY; ZeroMemory(obj, sizeof(RecycleBin)); obj->lpVtbl = &recycleBinVtbl; - obj->lpSEI = &eivt; + obj->lpSEI = &eivt; obj->lpPersistFolderVtbl = &recycleBinPersistVtbl; - obj->lpCmt = &recycleBincmVtbl; + obj->lpContextMenu2 = NULL; if (FAILED(ret = IUnknown_QueryInterface((IUnknown *)obj, riid, ppOutput))) { RecycleBin_Destructor(obj); @@ -183,9 +185,11 @@ static HRESULT WINAPI RecycleBin_QueryInterface(IShellFolder2 *iface, REFIID rii || IsEqualGUID(riid, &IID_IPersistFolder2)) *ppvObject = &This->lpPersistFolderVtbl; - if (IsEqualIID(riid, &IID_IContextMenu)) - *ppvObject = &This->lpCmt; - + if (IsEqualIID(riid, &IID_IContextMenu) || IsEqualGUID(riid, &IID_IContextMenu2)) + { + This->lpContextMenu2 = &recycleBincmVtblFolder; + *ppvObject = &This->lpContextMenu2; + } if(IsEqualIID(riid, &IID_IShellExtInit)) { *ppvObject = &(This->lpSEI); @@ -237,12 +241,48 @@ UnpackDetailsFromPidl(LPCITEMIDLIST pidl) return (PDELETED_FILE_DETAILS_W)&pidl->mkid.abID; } +static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLRecycleStruct * p; + int size0 = (char*)&tmp.u.crecycle.szName-(char*)&tmp.u.crecycle; + int size = size0; + + tmp.type = 0x00; + size += (wcslen(pFileDetails->FileName) + 1) * sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.crecycle; + RtlCopyMemory(p, pFileDetails, sizeof(DELETED_FILE_DETAILS_W)); + wcscpy(p->szName, pFileDetails->FileName); + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLRecycleStruct*)&(pdata->u.crecycle); + + return NULL; +} + + BOOL WINAPI CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) { PDELETED_FILE_DETAILS_W pFileDetails; - DWORD dwSize, dwTotalSize; + DWORD dwSize; LPITEMIDLIST pidl = NULL; BOOL ret; @@ -256,29 +296,36 @@ CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) ERR("GetDeletedFileDetailsW failed\n"); return FALSE; } - dwTotalSize = FIELD_OFFSET(ITEMIDLIST, mkid.abID) + dwSize; - pidl = SHAlloc(dwTotalSize); - if (!pidl) + pFileDetails = SHAlloc(dwSize); + if (!pFileDetails) { ERR("No memory\n"); return FALSE; } - pidl->mkid.cb = dwTotalSize; - pFileDetails = UnpackDetailsFromPidl(pidl); - if (!GetDeletedFileDetailsW(hDeletedFile, dwSize, pFileDetails, NULL)) { ERR("GetDeletedFileDetailsW failed\n"); - SHFree(pidl); + SHFree(pFileDetails); + return FALSE; + } + + pidl = _ILCreateRecycleItem(pFileDetails); + if (!pidl) + { + SHFree(pFileDetails); return FALSE; } ret = AddToEnumList((IEnumIDList*)Context, pidl); + + if (!ret) + SHFree(pidl); + SHFree(pFileDetails); TRACE("Returning %d\n", ret); CloseRecycleBinHandle(hDeletedFile); return ret; @@ -345,27 +392,42 @@ static HRESULT WINAPI RecycleBin_CompareIDs(IShellFolder2 *iface, LPARAM lParam, static HRESULT WINAPI RecycleBin_CreateViewObject(IShellFolder2 *iface, HWND hwndOwner, REFIID riid, void **ppv) { RecycleBin *This = (RecycleBin *)iface; - HRESULT ret; + LPSHELLVIEW pShellView; + HRESULT hr = E_NOINTERFACE; + TRACE("(%p, %p, %s, %p)\n", This, hwndOwner, debugstr_guid(riid), ppv); + if (!ppv) + return hr; + *ppv = NULL; - if (IsEqualGUID(riid, &IID_IShellView)) + + if (IsEqualIID (riid, &IID_IDropTarget)) { - IShellView *tmp; - CSFV sfv; - - ZeroMemory(&sfv, sizeof(sfv)); - sfv.cbSize = sizeof(sfv); - sfv.pshf = (IShellFolder *)This; - - TRACE("Calling SHCreateShellFolderViewEx\n"); - ret = SHCreateShellFolderViewEx(&sfv, &tmp); - TRACE("Result: %08x, output: %p\n", (unsigned int)ret, tmp); - *ppv = tmp; - return ret; + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; } + else if (IsEqualIID (riid, &IID_IContextMenu) || IsEqualIID (riid, &IID_IContextMenu2)) + { + This->lpContextMenu2 = &recycleBincmVtblFolder; + *ppv = &This->lpContextMenu2; + This->refCount++; + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppv); + IShellView_Release (pShellView); + } + } + else + return hr; + TRACE ("-- (%p)->(interface=%p)\n", This, ppv); + return hr; - return E_NOINTERFACE; } static HRESULT WINAPI RecycleBin_GetAttributesOf(IShellFolder2 *This, UINT cidl, LPCITEMIDLIST *apidl, @@ -376,17 +438,49 @@ static HRESULT WINAPI RecycleBin_GetAttributesOf(IShellFolder2 *This, UINT cidl, return S_OK; } -static HRESULT WINAPI RecycleBin_GetUIObjectOf(IShellFolder2 *This, HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, - REFIID riid, UINT *rgfReserved, void **ppv) +static HRESULT WINAPI RecycleBin_GetUIObjectOf(IShellFolder2 *iface, HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, + REFIID riid, UINT *prgfInOut, void **ppv) { - FIXME("(%p, %p, %d, {%p, ...}, %s, %p, %p): stub!\n", This, hwndOwner, cidl, apidl[0], debugstr_guid(riid), rgfReserved, ppv); + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + RecycleBin * This = (RecycleBin*)iface; + + TRACE ("(%p)->(%p,%u,apidl=%p, %p %p)\n", This, + hwndOwner, cidl, apidl, prgfInOut, ppv); + + if (!ppv) + return hr; + *ppv = NULL; - return E_NOTIMPL; + + if ((IsEqualIID (riid, &IID_IContextMenu) || IsEqualIID(riid, &IID_IContextMenu2)) && (cidl >= 1)) + { + This->lpContextMenu2 = &recycleBincmVtblBitbucketItem; + pObj = (IUnknown*)(&This->lpContextMenu2); + This->apidl = apidl[0]; + IUnknown_AddRef(pObj); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) + { + hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppv = pObj; + TRACE ("(%p)->hr=0x%08x\n", This, hr); + return hr; } static HRESULT WINAPI RecycleBin_GetDisplayNameOf(IShellFolder2 *This, LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *pName) { - PDELETED_FILE_DETAILS_W pFileDetails; + PIDLRecycleStruct *pFileDetails; + LPWSTR pFileName; + TRACE("(%p, %p, %x, %p)\n", This, pidl, (unsigned int)uFlags, pName); @@ -400,12 +494,27 @@ static HRESULT WINAPI RecycleBin_GetDisplayNameOf(IShellFolder2 *This, LPCITEMID return S_OK; } - pFileDetails = UnpackDetailsFromPidl(pidl); - pName->uType = STRRET_WSTR; - pName->u.pOleStr = StrDupW(&pFileDetails->FileName[0]); + pFileDetails = _ILGetRecycleStruct(pidl); + if (!pFileDetails) + { + pName->u.cStr[0] = 0; + pName->uType = STRRET_CSTR; + return E_INVALIDARG; + } + + pFileName = wcsrchr(pFileDetails->szName, L'\\'); + if (!pFileName) + { + pName->u.cStr[0] = 0; + pName->uType = STRRET_CSTR; + return E_UNEXPECTED; + } + + pName->u.pOleStr = StrDupW(pFileName + 1); if (pName->u.pOleStr == NULL) return E_OUTOFMEMORY; + pName->uType = STRRET_WSTR; return S_OK; } @@ -416,34 +525,6 @@ static HRESULT WINAPI RecycleBin_SetNameOf(IShellFolder2 *This, HWND hwnd, LPCIT return E_FAIL; /* not supported */ } -static HRESULT WINAPI RecycleBin_GetClassID(IPersistFolder2 *This, CLSID *pClassID) -{ - TRACE("(%p, %p)\n", This, pClassID); - if (This == NULL || pClassID == NULL) - return E_INVALIDARG; - memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID)); - return S_OK; -} - -static HRESULT WINAPI RecycleBin_Initialize(IPersistFolder2 *iface, LPCITEMIDLIST pidl) -{ - RecycleBin *This = impl_from_IPersistFolder(iface); - TRACE("(%p, %p)\n", This, pidl); - - This->pidl = ILClone(pidl); - if (This->pidl == NULL) - return E_OUTOFMEMORY; - return S_OK; -} - -static HRESULT WINAPI RecycleBin_GetCurFolder(IPersistFolder2 *iface, LPITEMIDLIST *ppidl) -{ - RecycleBin *This = impl_from_IPersistFolder(iface); - TRACE("\n"); - *ppidl = ILClone(This->pidl); - return S_OK; -} - static HRESULT WINAPI RecycleBin_GetDefaultSearchGUID(IShellFolder2 *iface, GUID *pguid) { FIXME("stub\n"); @@ -485,8 +566,11 @@ static HRESULT WINAPI RecycleBin_GetDetailsEx(IShellFolder2 *iface, LPCITEMIDLIS static HRESULT WINAPI RecycleBin_GetDetailsOf(IShellFolder2 *iface, LPCITEMIDLIST pidl, UINT iColumn, LPSHELLDETAILS pDetails) { RecycleBin *This = (RecycleBin *)iface; - PDELETED_FILE_DETAILS_W pFileDetails; + PIDLRecycleStruct * pFileDetails; WCHAR buffer[MAX_PATH]; + WCHAR szTypeName[100]; + LPWSTR pszBackslash; + UINT Length; TRACE("(%p, %p, %d, %p)\n", This, pidl, iColumn, pDetails); if (iColumn >= COLUMNS_COUNT) @@ -503,25 +587,38 @@ static HRESULT WINAPI RecycleBin_GetDetailsOf(IShellFolder2 *iface, LPCITEMIDLIS if (iColumn == COLUMN_NAME) return RecycleBin_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &pDetails->str); - pFileDetails = UnpackDetailsFromPidl(pidl); + pFileDetails = _ILGetRecycleStruct(pidl); switch (iColumn) { case COLUMN_DATEDEL: - FormatDateTime(buffer, MAX_PATH, pFileDetails->DeletionTime); + FormatDateTime(buffer, MAX_PATH, &pFileDetails->DeletionTime); break; case COLUMN_DELFROM: - lstrcpyW(buffer, &pFileDetails->FileName[0]); - PathRemoveFileSpecW(buffer); + pszBackslash = wcsrchr(pFileDetails->szName, L'\\'); + Length = (pszBackslash - pFileDetails->szName); + memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR)); + buffer[Length] = L'\0'; break; case COLUMN_SIZE: StrFormatKBSizeW(pFileDetails->FileSize.QuadPart, buffer, MAX_PATH); break; case COLUMN_MTIME: - FormatDateTime(buffer, MAX_PATH, pFileDetails->LastModification); + FormatDateTime(buffer, MAX_PATH, &pFileDetails->LastModification); break; case COLUMN_TYPE: - /* TODO */ - buffer[0] = 0; + szTypeName[0] = L'\0'; + lstrcpyW(buffer,PathFindExtensionW(pFileDetails->szName)); + if (!( HCR_MapTypeToValueW(buffer, buffer, sizeof(buffer)/sizeof(WCHAR), TRUE) && + HCR_MapTypeToValueW(buffer, szTypeName, sizeof(szTypeName)/sizeof(WCHAR), FALSE ))) + { + lstrcpyW (szTypeName, PathFindExtensionW(pFileDetails->szName)); + strcatW(szTypeName, L"-"); + Length = wcslen(szTypeName); + if (LoadStringW(shell32_hInstance, IDS_SHV_COLUMN1, &szTypeName[Length], (sizeof(szTypeName)/sizeof(WCHAR))- Length)) + szTypeName[(sizeof(szTypeName)/sizeof(WCHAR))-1] = L'\0'; + } + pDetails->str.uType = STRRET_WSTR; + return SHStrDupW(szTypeName, &pDetails->str.u.pOleStr); break; default: return E_FAIL; @@ -571,6 +668,34 @@ static const IShellFolder2Vtbl recycleBinVtbl = RecycleBin_MapColumnToSCID }; +static HRESULT WINAPI RecycleBin_IPersistFolder2_GetClassID(IPersistFolder2 *This, CLSID *pClassID) +{ + TRACE("(%p, %p)\n", This, pClassID); + if (This == NULL || pClassID == NULL) + return E_INVALIDARG; + memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID)); + return S_OK; +} + +static HRESULT WINAPI RecycleBin_IPersistFolder2_Initialize(IPersistFolder2 *iface, LPCITEMIDLIST pidl) +{ + RecycleBin *This = impl_from_IPersistFolder(iface); + TRACE("(%p, %p)\n", This, pidl); + + This->pidl = ILClone(pidl); + if (This->pidl == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +static HRESULT WINAPI RecycleBin_IPersistFolder2_GetCurFolder(IPersistFolder2 *iface, LPITEMIDLIST *ppidl) +{ + RecycleBin *This = impl_from_IPersistFolder(iface); + TRACE("\n"); + *ppidl = ILClone(This->pidl); + return S_OK; +} + static HRESULT WINAPI RecycleBin_IPersistFolder2_QueryInterface(IPersistFolder2 *This, REFIID riid, void **ppvObject) { return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IPersistFolder(This), riid, ppvObject); @@ -594,23 +719,13 @@ static const IPersistFolder2Vtbl recycleBinPersistVtbl = RecycleBin_IPersistFolder2_Release, /* IPersist */ - RecycleBin_GetClassID, + RecycleBin_IPersistFolder2_GetClassID, /* IPersistFolder */ - RecycleBin_Initialize, + RecycleBin_IPersistFolder2_Initialize, /* IPersistFolder2 */ - RecycleBin_GetCurFolder + RecycleBin_IPersistFolder2_GetCurFolder }; -/************************************************************************* - * SHUpdateRecycleBinIcon [SHELL32.@] - * - * Undocumented - */ -HRESULT WINAPI SHUpdateRecycleBinIcon(void) -{ - FIXME("stub\n"); - return S_OK; -} /************************************************************************* * BitBucket IShellExtInit interface */ @@ -659,31 +774,31 @@ static const IShellExtInitVtbl eivt = */ static HRESULT WINAPI -RecycleBin_IContextMenu_QueryInterface( IContextMenu* iface, REFIID riid, void** ppvObject ) +RecycleBin_IContextMenu2Folder_QueryInterface( IContextMenu2* iface, REFIID riid, void** ppvObject ) { - return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IContextMenu(iface), riid, ppvObject); + return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IContextMenu2(iface), riid, ppvObject); } static ULONG WINAPI -RecycleBin_IContextMenu_AddRef( IContextMenu* iface ) +RecycleBin_IContextMenu2Folder_AddRef( IContextMenu2* iface ) { - return RecycleBin_AddRef((IShellFolder2 *)impl_from_IContextMenu(iface)); + return RecycleBin_AddRef((IShellFolder2 *)impl_from_IContextMenu2(iface)); } static ULONG WINAPI -RecycleBin_IContextMenu_Release( IContextMenu* iface ) +RecycleBin_IContextMenu2Folder_Release( IContextMenu2* iface ) { - return RecycleBin_Release((IShellFolder2 *)impl_from_IContextMenu(iface)); + return RecycleBin_Release((IShellFolder2 *)impl_from_IContextMenu2(iface)); } static HRESULT WINAPI -RecycleBin_IContextMenu_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT indexMenu, +RecycleBin_IContextMenu2Folder_QueryContextMenu( IContextMenu2* iface, HMENU hmenu, UINT indexMenu, UINT idCmdFirst, UINT idCmdLast, UINT uFlags ) { WCHAR szBuffer[100]; MENUITEMINFOW mii; int id = 1; - RecycleBin * This = impl_from_IContextMenu(iface); + RecycleBin * This = impl_from_IContextMenu2(iface); TRACE("%p %p %u %u %u %u\n", This, hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); @@ -715,7 +830,7 @@ RecycleBin_IContextMenu_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT mii.wID = idCmdFirst + id++; if (!InsertMenuItemW( hmenu, idCmdLast, TRUE, &mii )) { - TRACE("RecycleBin_IContextMenu_QueryContextMenu failed to insert item properties"); + TRACE("RecycleBin_IContextMenu2Folder_QueryContextMenu failed to insert item properties"); return E_FAIL; } This->iIdEmpty = 2; @@ -723,13 +838,13 @@ RecycleBin_IContextMenu_QueryContextMenu( IContextMenu* iface, HMENU hmenu, UINT } static HRESULT WINAPI -RecycleBin_IContextMenu_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINFO lpici ) +RecycleBin_IContextMenu2Folder_InvokeCommand( IContextMenu2* iface, LPCMINVOKECOMMANDINFO lpici ) { HRESULT hr; LPSHELLBROWSER lpSB; LPSHELLVIEW lpSV = NULL; - RecycleBin * This = impl_from_IContextMenu(iface); + RecycleBin * This = impl_from_IContextMenu2(iface); TRACE("%p %p verb %p\n", This, lpici, lpici->lpVerb); @@ -765,10 +880,10 @@ RecycleBin_IContextMenu_InvokeCommand( IContextMenu* iface, LPCMINVOKECOMMANDINF } static HRESULT WINAPI -RecycleBin_IContextMenu_GetCommandString( IContextMenu* iface, UINT_PTR idCmd, UINT uType, +RecycleBin_IContextMenu2Folder_GetCommandString( IContextMenu2* iface, UINT_PTR idCmd, UINT uType, UINT* pwReserved, LPSTR pszName, UINT cchMax ) { - RecycleBin * This = impl_from_IContextMenu(iface); + RecycleBin * This = impl_from_IContextMenu2(iface); FIXME("%p %lu %u %p %p %u\n", This, idCmd, uType, pwReserved, pszName, cchMax ); @@ -776,16 +891,190 @@ RecycleBin_IContextMenu_GetCommandString( IContextMenu* iface, UINT_PTR idCmd, U return E_NOTIMPL; } -static const IContextMenuVtbl recycleBincmVtbl = +/************************************************************************** +* RecycleBin_IContextMenu2Item_HandleMenuMsg() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Folder_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) { - RecycleBin_IContextMenu_QueryInterface, - RecycleBin_IContextMenu_AddRef, - RecycleBin_IContextMenu_Release, - RecycleBin_IContextMenu_QueryContextMenu, - RecycleBin_IContextMenu_InvokeCommand, - RecycleBin_IContextMenu_GetCommandString + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("RecycleBin_IContextMenu2Item_IContextMenu2Folder_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + + +static const IContextMenu2Vtbl recycleBincmVtblFolder = +{ + RecycleBin_IContextMenu2Folder_QueryInterface, + RecycleBin_IContextMenu2Folder_AddRef, + RecycleBin_IContextMenu2Folder_Release, + RecycleBin_IContextMenu2Folder_QueryContextMenu, + RecycleBin_IContextMenu2Folder_InvokeCommand, + RecycleBin_IContextMenu2Folder_GetCommandString, + RecycleBin_IContextMenu2Folder_HandleMenuMsg }; + +/************************************************************************** +* IContextMenu2 Bitbucket Item Implementation +*/ + +/************************************************************************ + * RecycleBin_IContextMenu2Item_QueryInterface + */ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_QueryInterface(IContextMenu2 * iface, REFIID iid, LPVOID * ppvObject) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)\n", This); + + return RecycleBin_QueryInterface((IShellFolder2*)This, iid, ppvObject); +} + +/************************************************************************ + * RecycleBin_IContextMenu2Item_AddRef + */ +static ULONG WINAPI RecycleBin_IContextMenu2Item_AddRef(IContextMenu2 * iface) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(count=%u)\n", This, This->refCount); + + return RecycleBin_AddRef((IShellFolder2*)This); +} + +/************************************************************************ + * RecycleBin_IContextMenu2Item_Release + */ +static ULONG WINAPI RecycleBin_IContextMenu2Item_Release(IContextMenu2 * iface) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(count=%u)\n", This, This->refCount); + + return RecycleBin_Release((IShellFolder2*)This); +} + +/************************************************************************** +* RecycleBin_IContextMenu2Item_QueryContextMenu() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_QueryContextMenu( + IContextMenu2 *iface, + HMENU hMenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + char szBuffer[30] = {0}; + ULONG Count = 1; + + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringA(shell32_hInstance, IDS_RESTORE, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + Count++; + } + + if (LoadStringA(shell32_hInstance, IDS_CUT, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + } + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + + +/************************************************************************** +* RecycleBin_IContextMenu2Item_InvokeCommand() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_InvokeCommand( + IContextMenu2 *iface, + LPCMINVOKECOMMANDINFO lpcmi) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + return S_OK; +} + +/************************************************************************** + * RecycleBin_IContextMenu2Item_GetCommandString() + * + */ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_GetCommandString( + IContextMenu2 *iface, + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + + return E_FAIL; +} + + + +/************************************************************************** +* RecycleBin_IContextMenu2Item_HandleMenuMsg() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("RecycleBin_IContextMenu2Item_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static const IContextMenu2Vtbl recycleBincmVtblBitbucketItem = +{ + RecycleBin_IContextMenu2Item_QueryInterface, + RecycleBin_IContextMenu2Item_AddRef, + RecycleBin_IContextMenu2Item_Release, + RecycleBin_IContextMenu2Item_QueryContextMenu, + RecycleBin_IContextMenu2Item_InvokeCommand, + RecycleBin_IContextMenu2Item_GetCommandString, + RecycleBin_IContextMenu2Item_HandleMenuMsg +}; + + void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable) { if (bEnable) @@ -989,58 +1278,78 @@ BOOL SH_ShowRecycleBinProperties(WCHAR sDrive) BOOL TRASH_CanTrashFile(LPCWSTR wszPath) { - LONG res; + LONG ret; + DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength; + DWORD FileSystemFlags, dwSize, dwDisposition; HKEY hKey; - DWORD RegSerial, dwNukeOnDelete, dwType; - DWORD dwLength; + WCHAR szBuffer[10]; + WCHAR szKey[150] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\"; - - static WCHAR szKey[] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\c"; if (wszPath[1] != L':') { - /* path is UNC */ - return FALSE; - } - - szKey[62] = wszPath[0]; - res = RegOpenKeyExW(HKEY_LOCAL_MACHINE, szKey, 0, KEY_QUERY_VALUE, &hKey); - if (res != ERROR_SUCCESS) - { - FIXME("Failed to open registry path\n"); - return FALSE; - } - dwLength = sizeof(RegSerial); - res = RegQueryValueExW(hKey, L"VolumeSerialNumber", NULL, &dwType, (LPBYTE)&RegSerial, &dwLength); - if (res == ERROR_SUCCESS) - { - DWORD FileSystemFlags, MaxComponentLength, VolSerialNumber; - - GetVolumeInformationW(wszPath, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0); - if (VolSerialNumber != RegSerial) - { - /* FIXME - * the current volume was mounted on a different path - */ - FIXME("mismatched serial volume number\n"); - RegCloseKey(hKey); - return FALSE; - } - } - - dwLength = sizeof(dwNukeOnDelete); - res = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwLength); - if (res == ERROR_SUCCESS && dwNukeOnDelete == 0x0) - { - RegCloseKey(hKey); + /* path is UNC */ return FALSE; } - /* FIXME - * check if trash is already full - */ + if (GetDriveTypeW(wszPath) != DRIVE_FIXED) + { + /* no bitbucket on removable media */ + return FALSE; + } - RegCloseKey(hKey); - return TRUE; + if (!GetVolumeInformationW(wszPath, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0)) + { + ERR("GetVolumeInformationW failed with %u\n", GetLastError()); + return FALSE; + } + + sprintfW(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber)); + wcscat(szKey, szBuffer); + + if (RegCreateKeyExW(HKEY_CURRENT_USER, szBuffer, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) + { + ERR("RegCreateKeyExW failed\n"); + return FALSE; + } + + if (dwDisposition & REG_CREATED_NEW_KEY) + { + /* per default move to bitbucket */ + dwNukeOnDelete = 0; + RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); + /* per default unlimited size */ + dwSize = -1; + RegSetValueExW(hKey, L"MaxSize", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); + RegCloseKey(hKey); + return TRUE; + } + else + { + dwSize = sizeof(dwNukeOnDelete); + ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize); + if (ret != ERROR_SUCCESS) + { + sprintfW(szBuffer, L"ret %u\n", ret); + MessageBoxW(NULL, szBuffer, NULL, MB_OK); + RegCloseKey(hKey); + if (ret == ERROR_FILE_NOT_FOUND) + { + /* restore key and enable bitbucket */ + dwNukeOnDelete = 0; + RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); + } + return TRUE; + } + else if (dwNukeOnDelete) + { + /* do not delete to bitbucket */ + return FALSE; + } + /* FIXME + * check if bitbucket is full + */ + return TRUE; + } } BOOL @@ -1049,3 +1358,14 @@ TRASH_TrashFile(LPCWSTR wszPath) TRACE("(%s)\n", debugstr_w(wszPath)); return DeleteFileToRecycleBinW(wszPath); } + +/************************************************************************* + * SHUpdateRecycleBinIcon [SHELL32.@] + * + * Undocumented + */ +HRESULT WINAPI SHUpdateRecycleBinIcon(void) +{ + FIXME("stub\n"); + return S_OK; +} diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index 0c10e4bb8c1..25f4a3a4eba 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -158,6 +158,8 @@ #define IDS_SHV_COLUMN_COMMENTS 320 #define IDS_SHV_COLUMN_LOCATION 321 #define IDS_SHV_COLUMN_MODEL 322 +#define IDS_CUT 323 +#define IDS_RESTORE 324 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 From 4a9c4de4f42ca382a2b857608c64fb676aac9273 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 07:01:23 +0000 Subject: [PATCH 219/304] Replace .def file by a .spec file svn path=/trunk/; revision=35205 --- reactos/drivers/video/videoprt/videoprt.def | 118 ------------------ .../drivers/video/videoprt/videoprt.rbuild | 3 +- reactos/drivers/video/videoprt/videoprt.spec | 114 +++++++++++++++++ 3 files changed, 116 insertions(+), 119 deletions(-) delete mode 100644 reactos/drivers/video/videoprt/videoprt.def create mode 100644 reactos/drivers/video/videoprt/videoprt.spec diff --git a/reactos/drivers/video/videoprt/videoprt.def b/reactos/drivers/video/videoprt/videoprt.def deleted file mode 100644 index b0515ffd799..00000000000 --- a/reactos/drivers/video/videoprt/videoprt.def +++ /dev/null @@ -1,118 +0,0 @@ -; -; videoprt.def - export definition file for ReactOS -; -EXPORTS -VideoPortAcquireDeviceLock@4 -VideoPortAcquireSpinLock@12 -VideoPortAcquireSpinLockAtDpcLevel@8 -VideoPortAllocateBuffer@12 -VideoPortAllocateCommonBuffer@24 -VideoPortAllocateContiguousMemory -VideoPortAllocatePool@16 -;VideoPortAssociateEventsWithDmaHandle -VideoPortCheckForDeviceExistence@28 -VideoPortClearEvent@8 -VideoPortCompareMemory@12=NTOSKRNL.RtlCompareMemory -;VideoPortCompleteDma -VideoPortCreateEvent@16 -VideoPortCreateSecondaryDisplay@12 -VideoPortCreateSpinLock@8 -VideoPortDDCMonitorHelper@16 -VideoPortDebugPrint -VideoPortDeleteEvent@8 -VideoPortDeleteSpinLock@8 -VideoPortDisableInterrupt@4 -;VideoPortDoDma -VideoPortEnableInterrupt@4 -VideoPortEnumerateChildren@8 -;VideoPortFlushRegistry -VideoPortFreeCommonBuffer -VideoPortFreeDeviceBase@8 -VideoPortFreePool@8 -VideoPortGetAccessRanges@32 -VideoPortGetAgpServices@8 -VideoPortGetAssociatedDeviceExtension@4 -;VideoPortGetAssociatedDeviceID -VideoPortGetBusData@24 -;VideoPortGetBytesUsed -;VideoPortGetCommonBuffer -VideoPortGetCurrentIrql@0 -VideoPortGetDeviceBase@20 -VideoPortGetDeviceData@16 -VideoPortGetDmaAdapter@8 -;VideoPortGetDmaContext -;VideoPortGetMdl -VideoPortGetRegistryParameters@20 -VideoPortGetRomImage@16 -VideoPortGetVersion@8 -VideoPortGetVgaStatus@8 -VideoPortInitialize@16 -VideoPortInt10@8 -VideoPortInterlockedDecrement@4=NTOSKRNL.InterlockedDecrement -VideoPortInterlockedExchange@8=NTOSKRNL.InterlockedExchange -VideoPortInterlockedIncrement@4=NTOSKRNL.InterlockedIncrement -VideoPortLockBuffer@16 -;VideoPortLockPages -VideoPortLogError@16 -VideoPortMapBankedMemory@40 -;VideoPortMapDmaMemory -VideoPortMapMemory@24 -VideoPortMoveMemory@12=NTOSKRNL.RtlMoveMemory -VideoPortPutDmaAdapter@8 -VideoPortQueryPerformanceCounter@8 -VideoPortQueryServices@12 -VideoPortQuerySystemTime@4=NTOSKRNL.KeQuerySystemTime -VideoPortQueueDpc@12 -VideoPortReadPortUchar@4=HAL.READ_PORT_UCHAR -VideoPortReadPortUshort@4=HAL.READ_PORT_USHORT -VideoPortReadPortUlong@4=HAL.READ_PORT_ULONG -VideoPortReadPortBufferUchar@12=HAL.READ_PORT_BUFFER_UCHAR -VideoPortReadPortBufferUshort@12=HAL.READ_PORT_BUFFER_USHORT -VideoPortReadPortBufferUlong@12=HAL.READ_PORT_BUFFER_ULONG -VideoPortReadRegisterUchar@4=NTOSKRNL.READ_REGISTER_UCHAR -VideoPortReadRegisterUshort@4=NTOSKRNL.READ_REGISTER_USHORT -VideoPortReadRegisterUlong@4=NTOSKRNL.READ_REGISTER_ULONG -VideoPortReadRegisterBufferUchar@12=NTOSKRNL.READ_REGISTER_BUFFER_UCHAR -VideoPortReadRegisterBufferUshort@12=NTOSKRNL.READ_REGISTER_BUFFER_USHORT -VideoPortReadRegisterBufferUlong@12=NTOSKRNL.READ_REGISTER_BUFFER_ULONG -;VideoPortReadStateEvent -VideoPortRegisterBugcheckCallback@16 -VideoPortReleaseBuffer@8 -VideoPortReleaseCommonBuffer@28 -VideoPortReleaseDeviceLock@4 -VideoPortReleaseSpinLock@12 -VideoPortReleaseSpinLockFromDpcLevel@8 -VideoPortScanRom@16 -VideoPortSetBusData@24 -;VideoPortSetBytesUsed -;VideoPortSetDmaContext -VideoPortSetEvent@8 -VideoPortSetRegistryParameters@16 -VideoPortSetTrappedEmulatorPorts@12 -;VideoPortSignalDmaComplete -VideoPortStallExecution@4=HAL.KeStallExecutionProcessor -;VideoPortStartDma -VideoPortStartTimer@4 -VideoPortStopTimer@4 -VideoPortSynchronizeExecution@16 -VideoPortUnlockBuffer@8 -;VideoPortUnlockPages -;VideoPortUnmapDmaMemory -VideoPortUnmapMemory@12 -VideoPortVerifyAccessRanges@12 -VideoPortWaitForSingleObject@12 -VideoPortWritePortUchar@8=HAL.WRITE_PORT_UCHAR -VideoPortWritePortUshort@8=HAL.WRITE_PORT_USHORT -VideoPortWritePortUlong@8=HAL.WRITE_PORT_ULONG -VideoPortWritePortBufferUchar@12=HAL.WRITE_PORT_BUFFER_UCHAR -VideoPortWritePortBufferUshort@12=HAL.WRITE_PORT_BUFFER_USHORT -VideoPortWritePortBufferUlong@12=HAL.WRITE_PORT_BUFFER_ULONG -VideoPortWriteRegisterUchar@8=NTOSKRNL.WRITE_REGISTER_UCHAR -VideoPortWriteRegisterUshort@8=NTOSKRNL.WRITE_REGISTER_USHORT -VideoPortWriteRegisterUlong@8=NTOSKRNL.WRITE_REGISTER_ULONG -VideoPortWriteRegisterBufferUchar@12=NTOSKRNL.WRITE_REGISTER_BUFFER_UCHAR -VideoPortWriteRegisterBufferUshort@12=NTOSKRNL.WRITE_REGISTER_BUFFER_USHORT -VideoPortWriteRegisterBufferUlong@12=NTOSKRNL.WRITE_REGISTER_BUFFER_ULONG -VideoPortZeroMemory@8=NTOSKRNL.RtlZeroMemory -VideoPortZeroDeviceMemory@8=NTOSKRNL.RtlZeroMemory -VpNotifyEaData@8 diff --git a/reactos/drivers/video/videoprt/videoprt.rbuild b/reactos/drivers/video/videoprt/videoprt.rbuild index 0df55a135fd..4555223509e 100644 --- a/reactos/drivers/video/videoprt/videoprt.rbuild +++ b/reactos/drivers/video/videoprt/videoprt.rbuild @@ -1,7 +1,7 @@ - + . include @@ -22,4 +22,5 @@ timer.c videoprt.c videoprt.rc + videoprt.spec diff --git a/reactos/drivers/video/videoprt/videoprt.spec b/reactos/drivers/video/videoprt/videoprt.spec new file mode 100644 index 00000000000..61a147cb665 --- /dev/null +++ b/reactos/drivers/video/videoprt/videoprt.spec @@ -0,0 +1,114 @@ +@ stdcall VideoPortAcquireDeviceLock(ptr) +@ stdcall VideoPortAcquireSpinLock(ptr ptr ptr) +@ stdcall VideoPortAcquireSpinLockAtDpcLevel(ptr ptr) +@ stdcall VideoPortAllocateBuffer(ptr long ptr) +@ stdcall VideoPortAllocateCommonBuffer(ptr ptr long ptr long ptr) +@ stdcall VideoPortAllocateContiguousMemory(ptr long long long) +@ stdcall VideoPortAllocatePool(ptr long long long) +;VideoPortAssociateEventsWithDmaHandle +@ stdcall VideoPortCheckForDeviceExistence(ptr long long long long long long) +@ stdcall VideoPortClearEvent(ptr ptr) +@ stdcall VideoPortCompareMemory(ptr ptr long) NTOSKRNL.RtlCompareMemory +;VideoPortCompleteDma +@ stdcall VideoPortCreateEvent(ptr long ptr ptr) +@ stdcall VideoPortCreateSecondaryDisplay(ptr ptr long) +@ stdcall VideoPortCreateSpinLock(ptr ptr) +@ stdcall VideoPortDDCMonitorHelper(ptr ptr ptr long) +@ cdecl VideoPortDebugPrint(long ptr) +@ stdcall VideoPortDeleteEvent(ptr ptr) +@ stdcall VideoPortDeleteSpinLock(ptr ptr) +@ stdcall VideoPortDisableInterrupt(ptr) +;VideoPortDoDma +@ stdcall VideoPortEnableInterrupt(ptr) +@ stdcall VideoPortEnumerateChildren(ptr ptr) +;VideoPortFlushRegistry +@ stdcall VideoPortFreeCommonBuffer(ptr long ptr long long long) +@ stdcall VideoPortFreeDeviceBase(ptr ptr) +@ stdcall VideoPortFreePool(ptr ptr) +@ stdcall VideoPortGetAccessRanges(ptr long ptr long ptr ptr ptr ptr) +@ stdcall VideoPortGetAgpServices(ptr ptr) +@ stdcall VideoPortGetAssociatedDeviceExtension(ptr) +;VideoPortGetAssociatedDeviceID +@ stdcall VideoPortGetBusData(ptr long long ptr long long) +;VideoPortGetBytesUsed +;VideoPortGetCommonBuffer +@ stdcall VideoPortGetCurrentIrql() +@ stdcall VideoPortGetDeviceBase(ptr long long long long) +@ stdcall VideoPortGetDeviceData(ptr long ptr ptr) +@ stdcall VideoPortGetDmaAdapter(ptr ptr) +;VideoPortGetDmaContext +;VideoPortGetMdl +@ stdcall VideoPortGetRegistryParameters(ptr wstr long ptr ptr) +@ stdcall VideoPortGetRomImage(ptr ptr long long) +@ stdcall VideoPortGetVersion(ptr ptr) +@ stdcall VideoPortGetVgaStatus(ptr ptr) +@ stdcall VideoPortInitialize(ptr ptr ptr ptr) +@ stdcall VideoPortInt10(ptr ptr) +@ fastcall VideoPortInterlockedDecrement(ptr) NTOSKRNL.InterlockedDecrement +@ fastcall VideoPortInterlockedExchange(ptr long) NTOSKRNL.InterlockedExchange +@ fastcall VideoPortInterlockedIncrement(ptr) NTOSKRNL.InterlockedIncrement +@ stdcall VideoPortLockBuffer(ptr ptr long long) +;VideoPortLockPages +@ stdcall VideoPortLogError(ptr ptr long long) +@ stdcall VideoPortMapBankedMemory(ptr long long ptr ptr ptr long long ptr ptr) +;VideoPortMapDmaMemory +@ stdcall VideoPortMapMemory(ptr long long ptr ptr ptr) +@ stdcall VideoPortMoveMemory(ptr ptr long) NTOSKRNL.RtlMoveMemory +@ stdcall VideoPortPutDmaAdapter(ptr ptr) +@ stdcall VideoPortQueryPerformanceCounter(ptr ptr) +@ stdcall VideoPortQueryServices(ptr long ptr) +@ stdcall VideoPortQuerySystemTime(ptr) NTOSKRNL.KeQuerySystemTime +@ stdcall VideoPortQueueDpc(ptr ptr ptr) +@ stdcall VideoPortReadPortUchar(ptr) HAL.READ_PORT_UCHAR +@ stdcall VideoPortReadPortUshort(ptr) HAL.READ_PORT_USHORT +@ stdcall VideoPortReadPortUlong(ptr) HAL.READ_PORT_ULONG +@ stdcall VideoPortReadPortBufferUchar(ptr ptr long) HAL.READ_PORT_BUFFER_UCHAR +@ stdcall VideoPortReadPortBufferUshort(ptr ptr long) HAL.READ_PORT_BUFFER_USHORT +@ stdcall VideoPortReadPortBufferUlong(ptr ptr long) HAL.READ_PORT_BUFFER_ULONG +@ stdcall VideoPortReadRegisterUchar(ptr) NTOSKRNL.READ_REGISTER_UCHAR +@ stdcall VideoPortReadRegisterUshort(ptr) NTOSKRNL.READ_REGISTER_USHORT +@ stdcall VideoPortReadRegisterUlong(ptr) NTOSKRNL.READ_REGISTER_ULONG +@ stdcall VideoPortReadRegisterBufferUchar(ptr ptr long) NTOSKRNL.READ_REGISTER_BUFFER_UCHAR +@ stdcall VideoPortReadRegisterBufferUshort(ptr ptr long) NTOSKRNL.READ_REGISTER_BUFFER_USHORT +@ stdcall VideoPortReadRegisterBufferUlong(ptr ptr long) NTOSKRNL.READ_REGISTER_BUFFER_ULONG +;VideoPortReadStateEvent +@ stdcall VideoPortRegisterBugcheckCallback(ptr long ptr long) +@ stdcall VideoPortReleaseBuffer(ptr ptr) +@ stdcall VideoPortReleaseCommonBuffer(ptr ptr long long long ptr long) +@ stdcall VideoPortReleaseDeviceLock(ptr) +@ stdcall VideoPortReleaseSpinLock(ptr ptr long) +@ stdcall VideoPortReleaseSpinLockFromDpcLevel(ptr ptr) +@ stdcall VideoPortScanRom(ptr ptr long ptr) +@ stdcall VideoPortSetBusData(ptr long long ptr long long) +;VideoPortSetBytesUsed +;VideoPortSetDmaContext +@ stdcall VideoPortSetEvent(ptr ptr) +@ stdcall VideoPortSetRegistryParameters(ptr wstr ptr long) +@ stdcall VideoPortSetTrappedEmulatorPorts(ptr long ptr) +;VideoPortSignalDmaComplete +@ stdcall VideoPortStallExecution(ptr) HAL.KeStallExecutionProcessor +;VideoPortStartDma +@ stdcall VideoPortStartTimer(ptr) +@ stdcall VideoPortStopTimer(ptr) +@ stdcall VideoPortSynchronizeExecution(ptr long ptr ptr) +@ stdcall VideoPortUnlockBuffer(ptr ptr) +;VideoPortUnlockPages +;VideoPortUnmapDmaMemory +@ stdcall VideoPortUnmapMemory(ptr ptr ptr) +@ stdcall VideoPortVerifyAccessRanges(ptr long ptr) +@ stdcall VideoPortWaitForSingleObject(ptr ptr ptr) +@ stdcall VideoPortWritePortUchar(ptr long) HAL.WRITE_PORT_UCHAR +@ stdcall VideoPortWritePortUshort(ptr long) HAL.WRITE_PORT_USHORT +@ stdcall VideoPortWritePortUlong(ptr long) HAL.WRITE_PORT_ULONG +@ stdcall VideoPortWritePortBufferUchar(ptr ptr long) HAL.WRITE_PORT_BUFFER_UCHAR +@ stdcall VideoPortWritePortBufferUshort(ptr ptr long) HAL.WRITE_PORT_BUFFER_USHORT +@ stdcall VideoPortWritePortBufferUlong(ptr ptr long) HAL.WRITE_PORT_BUFFER_ULONG +@ stdcall VideoPortWriteRegisterUchar(ptr long) NTOSKRNL.WRITE_REGISTER_UCHAR +@ stdcall VideoPortWriteRegisterUshort(ptr long) NTOSKRNL.WRITE_REGISTER_USHORT +@ stdcall VideoPortWriteRegisterUlong(ptr long) NTOSKRNL.WRITE_REGISTER_ULONG +@ stdcall VideoPortWriteRegisterBufferUchar(ptr ptr long) NTOSKRNL.WRITE_REGISTER_BUFFER_UCHAR +@ stdcall VideoPortWriteRegisterBufferUshort(ptr ptr long) NTOSKRNL.WRITE_REGISTER_BUFFER_USHORT +@ stdcall VideoPortWriteRegisterBufferUlong(ptr ptr long) NTOSKRNL.WRITE_REGISTER_BUFFER_ULONG +@ stdcall VideoPortZeroMemory(ptr long) NTOSKRNL.RtlZeroMemory +@ stdcall VideoPortZeroDeviceMemory(ptr long) NTOSKRNL.RtlZeroMemory +@ stdcall VpNotifyEaData(ptr ptr) From e784b26eb06c3e664e40d52e8f46e4b02a3bcecc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 07:55:45 +0000 Subject: [PATCH 220/304] Replace .def file by a .spec file svn path=/trunk/; revision=35206 --- reactos/dll/win32/lpk/lpk.def | 20 -------------------- reactos/dll/win32/lpk/lpk.rbuild | 3 ++- reactos/dll/win32/lpk/lpk.spec | 11 +++++++++++ 3 files changed, 13 insertions(+), 21 deletions(-) delete mode 100644 reactos/dll/win32/lpk/lpk.def create mode 100644 reactos/dll/win32/lpk/lpk.spec diff --git a/reactos/dll/win32/lpk/lpk.def b/reactos/dll/win32/lpk/lpk.def deleted file mode 100644 index c0a90e93ac2..00000000000 --- a/reactos/dll/win32/lpk/lpk.def +++ /dev/null @@ -1,20 +0,0 @@ -; $Id: gdi32.def 33598 2008-05-19 10:20:39Z greatlrd $ -; -; lpk.def -; -; ReactOS Operating System -; -LIBRARY lpk.dll -EXPORTS -LpkInitialize@4 -LpkTabbedTextOut@48 -LpkDllInitialize@12 -LpkDrawTextEx@40 -LpkEditControl@0 -LpkExtTextOut@36 -LpkGetCharacterPlacement@28 -LpkGetTextExtentExPoint@36 -LpkPSMTextOut@24 -LpkUseGDIWidthCache@20 -ftsWordBreak@20 - diff --git a/reactos/dll/win32/lpk/lpk.rbuild b/reactos/dll/win32/lpk/lpk.rbuild index fe83c7ec489..eacdef6f384 100644 --- a/reactos/dll/win32/lpk/lpk.rbuild +++ b/reactos/dll/win32/lpk/lpk.rbuild @@ -1,5 +1,5 @@ - + include 0x0600 @@ -14,4 +14,5 @@ stub.c lpk.rc + lpk.spec diff --git a/reactos/dll/win32/lpk/lpk.spec b/reactos/dll/win32/lpk/lpk.spec new file mode 100644 index 00000000000..01ed057bf63 --- /dev/null +++ b/reactos/dll/win32/lpk/lpk.spec @@ -0,0 +1,11 @@ +@ stdcall LpkInitialize(long) +@ stdcall LpkTabbedTextOut(long long long long long long long long long long long long) +@ stdcall LpkDllInitialize(ptr long ptr) +@ stdcall LpkDrawTextEx(long long long long long long long long long long) +@ extern LpkEditControl +@ stdcall LpkExtTextOut(long long long long long long long long long) +@ stdcall LpkGetCharacterPlacement(long long long long long long long) +@ stdcall LpkGetTextExtentExPoint(long long long long long long long long long) +@ stdcall LpkPSMTextOut(long long long long long long) +@ stdcall LpkUseGDIWidthCache(long long long long long) +@ stdcall ftsWordBreak(long long long long long) From 765c4f1ae61e26ca655a13b7e21b9909283c4576 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 07:56:27 +0000 Subject: [PATCH 221/304] Replace .def file by a .spec file svn path=/trunk/; revision=35207 --- reactos/dll/cpl/mmsys/mmsys.c | 14 +++++++------- reactos/dll/cpl/mmsys/mmsys.def | 20 -------------------- reactos/dll/cpl/mmsys/mmsys.rbuild | 3 ++- reactos/dll/cpl/mmsys/mmsys.spec | 15 +++++++++++++++ 4 files changed, 24 insertions(+), 28 deletions(-) delete mode 100644 reactos/dll/cpl/mmsys/mmsys.def create mode 100644 reactos/dll/cpl/mmsys/mmsys.spec diff --git a/reactos/dll/cpl/mmsys/mmsys.c b/reactos/dll/cpl/mmsys/mmsys.c index 39bb685ba3e..61c10d460ca 100644 --- a/reactos/dll/cpl/mmsys/mmsys.c +++ b/reactos/dll/cpl/mmsys/mmsys.c @@ -76,7 +76,7 @@ ShowDriverSettingsAfterForkW(HWND hwnd, VOID WINAPI ShowDriverSettingsAfterForkA(HWND hwnd, HINSTANCE hInstance, - LPTSTR lpszCmd, + LPSTR lpszCmd, int nCmdShow) { DPRINT1("ShowDriverSettingsAfterForkA() stubs\n"); @@ -85,7 +85,7 @@ ShowDriverSettingsAfterForkA(HWND hwnd, VOID WINAPI ShowDriverSettingsAfterFork(HWND hwnd, HINSTANCE hInstance, - LPTSTR lpszCmd, + LPSTR lpszCmd, int nCmdShow) { DPRINT1("ShowDriverSettingsAfterFork() stubs\n"); @@ -93,9 +93,9 @@ ShowDriverSettingsAfterFork(HWND hwnd, BOOL WINAPI ShowMMCPLPropertySheet(HWND hwnd, - LPCTSTR pszPropSheet, - LPTSTR pszName, - LPTSTR pszCaption) + LPCSTR pszPropSheet, + LPSTR pszName, + LPSTR pszCaption) { DPRINT1("ShowMMCPLPropertySheet() stubs\n"); return TRUE; @@ -122,7 +122,7 @@ mmseRunOnceW(HWND hwnd, VOID WINAPI mmseRunOnceA(HWND hwnd, HINSTANCE hInstance, - LPTSTR lpszCmd, + LPSTR lpszCmd, int nCmdShow) { DPRINT1("mmseRunOnceA() stubs\n"); @@ -149,7 +149,7 @@ MediaPropPageProvider(LPVOID Info, VOID WINAPI ShowFullControlPanel(HWND hwnd, HINSTANCE hInstance, - LPTSTR lpszCmd, + LPSTR lpszCmd, int nCmdShow) { DPRINT1("ShowFullControlPanel() stubs\n"); diff --git a/reactos/dll/cpl/mmsys/mmsys.def b/reactos/dll/cpl/mmsys/mmsys.def deleted file mode 100644 index 697ce75f71b..00000000000 --- a/reactos/dll/cpl/mmsys/mmsys.def +++ /dev/null @@ -1,20 +0,0 @@ -LIBRARY mmsys.cpl - -EXPORTS -CPlApplet@16 -mmseRunOnce -mmseRunOnceW -mmseRunOnceA -ShowMMCPLPropertySheet -ShowAudioPropertySheet -DllCanUnloadNow -DllGetClassObject -ShowDriverSettingsAfterFork -ShowDriverSettingsAfterForkW -ShowDriverSettingsAfterForkA -MediaClassInstaller@12 -MediaPropPageProvider -;Multichannel -ShowFullControlPanel - -; EOF diff --git a/reactos/dll/cpl/mmsys/mmsys.rbuild b/reactos/dll/cpl/mmsys/mmsys.rbuild index 647c5bb230e..80d234d1332 100644 --- a/reactos/dll/cpl/mmsys/mmsys.rbuild +++ b/reactos/dll/cpl/mmsys/mmsys.rbuild @@ -1,7 +1,7 @@ - + . 0x600 0x501 @@ -21,4 +21,5 @@ audio.c voice.c mmsys.rc + mmsys.spec diff --git a/reactos/dll/cpl/mmsys/mmsys.spec b/reactos/dll/cpl/mmsys/mmsys.spec new file mode 100644 index 00000000000..bcdbd159e2a --- /dev/null +++ b/reactos/dll/cpl/mmsys/mmsys.spec @@ -0,0 +1,15 @@ +@ stdcall CPlApplet(ptr long ptr ptr) +@ stdcall mmseRunOnce(ptr ptr str long) +@ stdcall mmseRunOnceW(ptr ptr wstr long) +@ stdcall mmseRunOnceA(ptr ptr str long) +@ stdcall ShowMMCPLPropertySheet(ptr str str str) +@ stdcall ShowAudioPropertySheet(ptr ptr str long) +@ stdcall DllCanUnloadNow() +@ stdcall DllGetClassObject(ptr ptr ptr) +@ stdcall ShowDriverSettingsAfterFork(ptr ptr str long) +@ stdcall ShowDriverSettingsAfterForkW(ptr ptr wstr long) +@ stdcall ShowDriverSettingsAfterForkA(ptr ptr str long) +@ stdcall MediaClassInstaller(long ptr ptr) +@ stdcall MediaPropPageProvider(ptr ptr ptr) +;Multichannel +@ stdcall ShowFullControlPanel(ptr ptr str long) From ce5c619db0d46f9ac22933e8235b95baf0ec14e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 07:57:02 +0000 Subject: [PATCH 222/304] Fix exports svn path=/trunk/; revision=35208 --- reactos/dll/keyboard/kbdbga/kbdbga.def | 2 +- reactos/dll/keyboard/kbdbgm/kbdbgm.def | 2 +- reactos/dll/keyboard/kbdbgt/kbdbgt.def | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/reactos/dll/keyboard/kbdbga/kbdbga.def b/reactos/dll/keyboard/kbdbga/kbdbga.def index a22dace20aa..4858a5fb570 100644 --- a/reactos/dll/keyboard/kbdbga/kbdbga.def +++ b/reactos/dll/keyboard/kbdbga/kbdbga.def @@ -4,5 +4,5 @@ LIBRARY kbdbga.dll EXPORTS -KbdLayerDescriptor +KbdLayerDescriptor@0 ;EOF diff --git a/reactos/dll/keyboard/kbdbgm/kbdbgm.def b/reactos/dll/keyboard/kbdbgm/kbdbgm.def index b4633b9c142..79314113131 100644 --- a/reactos/dll/keyboard/kbdbgm/kbdbgm.def +++ b/reactos/dll/keyboard/kbdbgm/kbdbgm.def @@ -4,5 +4,5 @@ LIBRARY kbdbgm.dll EXPORTS -KbdLayerDescriptor +KbdLayerDescriptor@0 ;EOF diff --git a/reactos/dll/keyboard/kbdbgt/kbdbgt.def b/reactos/dll/keyboard/kbdbgt/kbdbgt.def index 2255c5c36ff..4519422ee14 100644 --- a/reactos/dll/keyboard/kbdbgt/kbdbgt.def +++ b/reactos/dll/keyboard/kbdbgt/kbdbgt.def @@ -4,5 +4,5 @@ LIBRARY kbdbgt.dll EXPORTS -KbdLayerDescriptor +KbdLayerDescriptor@0 ;EOF From 389c99370d4cfc6d7a911e613e064732ab165073 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 08:09:40 +0000 Subject: [PATCH 223/304] Replace .def file by a .spec file svn path=/trunk/; revision=35209 --- reactos/dll/win32/mmdrv/common.c | 516 +++++++++++++-------------- reactos/dll/win32/mmdrv/entry.c | 2 +- reactos/dll/win32/mmdrv/kernel.c | 412 ++++++++++----------- reactos/dll/win32/mmdrv/mmdrv.def | 14 - reactos/dll/win32/mmdrv/mmdrv.rbuild | 3 +- reactos/dll/win32/mmdrv/mmdrv.spec | 6 + reactos/dll/win32/mmdrv/mme.c | 286 +++++++-------- reactos/dll/win32/mmdrv/mmioctl.h | 294 +++++++-------- reactos/dll/win32/mmdrv/session.c | 490 ++++++++++++------------- reactos/dll/win32/mmdrv/wave_io.c | 80 ++--- 10 files changed, 1048 insertions(+), 1055 deletions(-) delete mode 100644 reactos/dll/win32/mmdrv/mmdrv.def create mode 100644 reactos/dll/win32/mmdrv/mmdrv.spec diff --git a/reactos/dll/win32/mmdrv/common.c b/reactos/dll/win32/mmdrv/common.c index 0bc5ca2586d..8d64b2ff496 100644 --- a/reactos/dll/win32/mmdrv/common.c +++ b/reactos/dll/win32/mmdrv/common.c @@ -1,258 +1,258 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/common.c - * PURPOSE: Multimedia User Mode Driver (Common functions) - * PROGRAMMER: Andrew Greenwood - * UPDATE HISTORY: - * Jan 14, 2007: Created - */ - -#include - -/* - Translates errors to MMRESULT codes. -*/ - -MMRESULT -ErrorToMmResult(UINT error_code) -{ - switch ( error_code ) - { - case NO_ERROR : - case ERROR_IO_PENDING : - return MMSYSERR_NOERROR; - - case ERROR_BUSY : - return MMSYSERR_ALLOCATED; - - case ERROR_NOT_SUPPORTED : - case ERROR_INVALID_FUNCTION : - return MMSYSERR_NOTSUPPORTED; - - case ERROR_NOT_ENOUGH_MEMORY : - return MMSYSERR_NOMEM; - - case ERROR_ACCESS_DENIED : - return MMSYSERR_BADDEVICEID; - - case ERROR_INSUFFICIENT_BUFFER : - return MMSYSERR_INVALPARAM; - }; - - /* If all else fails, it's just a plain old error */ - - return MMSYSERR_ERROR; -} - - -/* - Obtains a device count for a specific kind of device. -*/ - -DWORD -GetDeviceCount(DeviceType device_type) -{ - UINT index = 0; - HANDLE handle; - - /* Cycle through devices until an error occurs */ - - while ( OpenKernelDevice(device_type, index, GENERIC_READ, &handle) == MMSYSERR_NOERROR ) - { - CloseHandle(handle); - index ++; - } - - DPRINT("Found %d devices of type %d\n", index, device_type); - - return index; -} - - -/* - Obtains device capabilities. This could either be done as individual - functions for wave, MIDI and aux, or like this. I chose this method as - it centralizes everything. -*/ - -DWORD -GetDeviceCapabilities( - DeviceType device_type, - DWORD device_id, - PVOID capabilities, - DWORD capabilities_size) -{ - MMRESULT result; - DWORD ioctl; - HANDLE handle; - DWORD bytes_returned; - BOOL device_io_result; - - ASSERT(capabilities); - - /* Choose the right IOCTL for the job */ - - if ( IsWaveDevice(device_type) ) - ioctl = IOCTL_WAVE_GET_CAPABILITIES; - else if ( IsMidiDevice(device_type) ) - ioctl = IOCTL_MIDI_GET_CAPABILITIES; - else if ( IsAuxDevice(device_type) ) - return MMSYSERR_NOTSUPPORTED; /* TODO */ - else - return MMSYSERR_NOTSUPPORTED; - - result = OpenKernelDevice(device_type, - device_id, - GENERIC_READ, - &handle); - - if ( result != MMSYSERR_NOERROR ) - { - DPRINT("Failed to open kernel device\n"); - return result; - } - - device_io_result = DeviceIoControl(handle, - ioctl, - NULL, - 0, - (LPVOID) capabilities, - capabilities_size, - &bytes_returned, - NULL); - - /* Translate result */ - - if ( device_io_result ) - result = MMSYSERR_NOERROR; - else - result = ErrorToMmResult(GetLastError()); - - /* Clean up and return */ - - CloseKernelDevice(handle); - - return result; -} - - -/* - A wrapper around OpenKernelDevice that creates a session, - opens the kernel device, initializes session data and notifies - the client (application) that the device has been opened. Again, - this supports any device type and the only real difference is - the open descriptor. -*/ - -DWORD -OpenDevice( - DeviceType device_type, - DWORD device_id, - PVOID open_descriptor, - DWORD flags, - DWORD private_handle) -{ - SessionInfo* session_info; - MMRESULT result; - DWORD message; - - /* This will automatically check for duplicate sessions */ - result = CreateSession(device_type, device_id, &session_info); - - if ( result != MMSYSERR_NOERROR ) - { - DPRINT("Couldn't allocate session info\n"); - return result; - } - - result = OpenKernelDevice(device_type, - device_id, - GENERIC_READ, - &session_info->kernel_device_handle); - - if ( result != MMSYSERR_NOERROR ) - { - DPRINT("Failed to open kernel device\n"); - DestroySession(session_info); - return result; - } - - /* Set common session data */ - - session_info->flags = flags; - - /* Set wave/MIDI specific data */ - - if ( IsWaveDevice(device_type) ) - { - LPWAVEOPENDESC wave_open_desc = (LPWAVEOPENDESC) open_descriptor; - session_info->callback = wave_open_desc->dwCallback; - session_info->mme_wave_handle = wave_open_desc->hWave; - session_info->app_user_data = wave_open_desc->dwInstance; - } - else - { - DPRINT("Only wave devices are supported at present!\n"); - DestroySession(session_info); - return MMSYSERR_NOTSUPPORTED; - } - - /* Start the processing thread */ - - result = StartSessionThread(session_info); - - if ( result != MMSYSERR_NOERROR ) - { - DestroySession(session_info); - return result; - } - - /* Store the session info */ - - *((SessionInfo**)private_handle) = session_info; - - /* Send the right message */ - - message = (device_type == WaveOutDevice) ? WOM_OPEN : - (device_type == WaveInDevice) ? WIM_OPEN : - (device_type == MidiOutDevice) ? MOM_OPEN : - (device_type == MidiInDevice) ? MIM_OPEN : 0xFFFFFFFF; - - NotifyClient(session_info, message, 0, 0); - - return MMSYSERR_NOERROR; -} - - -/* - Attempts to close a device. This can fail if playback/recording has - not been stopped. We need to make sure it's safe to destroy the - session as well (mainly by killing the session thread.) -*/ - -DWORD -CloseDevice( - DWORD private_handle) -{ - MMRESULT result; - SessionInfo* session_info = (SessionInfo*) private_handle; - /* TODO: Maybe this is best off inside the playback thread? */ - - ASSERT(session_info); - - result = CallSessionThread(session_info, WODM_CLOSE, 0); - - if ( result == MMSYSERR_NOERROR ) - { - /* TODO: Wait for it to be safe to terminate */ - - CloseKernelDevice(session_info->kernel_device_handle); - - DestroySession(session_info); - } - - return result; -} - +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/common.c + * PURPOSE: Multimedia User Mode Driver (Common functions) + * PROGRAMMER: Andrew Greenwood + * UPDATE HISTORY: + * Jan 14, 2007: Created + */ + +#include + +/* + Translates errors to MMRESULT codes. +*/ + +MMRESULT +ErrorToMmResult(UINT error_code) +{ + switch ( error_code ) + { + case NO_ERROR : + case ERROR_IO_PENDING : + return MMSYSERR_NOERROR; + + case ERROR_BUSY : + return MMSYSERR_ALLOCATED; + + case ERROR_NOT_SUPPORTED : + case ERROR_INVALID_FUNCTION : + return MMSYSERR_NOTSUPPORTED; + + case ERROR_NOT_ENOUGH_MEMORY : + return MMSYSERR_NOMEM; + + case ERROR_ACCESS_DENIED : + return MMSYSERR_BADDEVICEID; + + case ERROR_INSUFFICIENT_BUFFER : + return MMSYSERR_INVALPARAM; + }; + + /* If all else fails, it's just a plain old error */ + + return MMSYSERR_ERROR; +} + + +/* + Obtains a device count for a specific kind of device. +*/ + +DWORD +GetDeviceCount(DeviceType device_type) +{ + UINT index = 0; + HANDLE handle; + + /* Cycle through devices until an error occurs */ + + while ( OpenKernelDevice(device_type, index, GENERIC_READ, &handle) == MMSYSERR_NOERROR ) + { + CloseHandle(handle); + index ++; + } + + DPRINT("Found %d devices of type %d\n", index, device_type); + + return index; +} + + +/* + Obtains device capabilities. This could either be done as individual + functions for wave, MIDI and aux, or like this. I chose this method as + it centralizes everything. +*/ + +DWORD +GetDeviceCapabilities( + DeviceType device_type, + DWORD device_id, + PVOID capabilities, + DWORD capabilities_size) +{ + MMRESULT result; + DWORD ioctl; + HANDLE handle; + DWORD bytes_returned; + BOOL device_io_result; + + ASSERT(capabilities); + + /* Choose the right IOCTL for the job */ + + if ( IsWaveDevice(device_type) ) + ioctl = IOCTL_WAVE_GET_CAPABILITIES; + else if ( IsMidiDevice(device_type) ) + ioctl = IOCTL_MIDI_GET_CAPABILITIES; + else if ( IsAuxDevice(device_type) ) + return MMSYSERR_NOTSUPPORTED; /* TODO */ + else + return MMSYSERR_NOTSUPPORTED; + + result = OpenKernelDevice(device_type, + device_id, + GENERIC_READ, + &handle); + + if ( result != MMSYSERR_NOERROR ) + { + DPRINT("Failed to open kernel device\n"); + return result; + } + + device_io_result = DeviceIoControl(handle, + ioctl, + NULL, + 0, + (LPVOID) capabilities, + capabilities_size, + &bytes_returned, + NULL); + + /* Translate result */ + + if ( device_io_result ) + result = MMSYSERR_NOERROR; + else + result = ErrorToMmResult(GetLastError()); + + /* Clean up and return */ + + CloseKernelDevice(handle); + + return result; +} + + +/* + A wrapper around OpenKernelDevice that creates a session, + opens the kernel device, initializes session data and notifies + the client (application) that the device has been opened. Again, + this supports any device type and the only real difference is + the open descriptor. +*/ + +DWORD +OpenDevice( + DeviceType device_type, + DWORD device_id, + PVOID open_descriptor, + DWORD flags, + DWORD private_handle) +{ + SessionInfo* session_info; + MMRESULT result; + DWORD message; + + /* This will automatically check for duplicate sessions */ + result = CreateSession(device_type, device_id, &session_info); + + if ( result != MMSYSERR_NOERROR ) + { + DPRINT("Couldn't allocate session info\n"); + return result; + } + + result = OpenKernelDevice(device_type, + device_id, + GENERIC_READ, + &session_info->kernel_device_handle); + + if ( result != MMSYSERR_NOERROR ) + { + DPRINT("Failed to open kernel device\n"); + DestroySession(session_info); + return result; + } + + /* Set common session data */ + + session_info->flags = flags; + + /* Set wave/MIDI specific data */ + + if ( IsWaveDevice(device_type) ) + { + LPWAVEOPENDESC wave_open_desc = (LPWAVEOPENDESC) open_descriptor; + session_info->callback = wave_open_desc->dwCallback; + session_info->mme_wave_handle = wave_open_desc->hWave; + session_info->app_user_data = wave_open_desc->dwInstance; + } + else + { + DPRINT("Only wave devices are supported at present!\n"); + DestroySession(session_info); + return MMSYSERR_NOTSUPPORTED; + } + + /* Start the processing thread */ + + result = StartSessionThread(session_info); + + if ( result != MMSYSERR_NOERROR ) + { + DestroySession(session_info); + return result; + } + + /* Store the session info */ + + *((SessionInfo**)private_handle) = session_info; + + /* Send the right message */ + + message = (device_type == WaveOutDevice) ? WOM_OPEN : + (device_type == WaveInDevice) ? WIM_OPEN : + (device_type == MidiOutDevice) ? MOM_OPEN : + (device_type == MidiInDevice) ? MIM_OPEN : 0xFFFFFFFF; + + NotifyClient(session_info, message, 0, 0); + + return MMSYSERR_NOERROR; +} + + +/* + Attempts to close a device. This can fail if playback/recording has + not been stopped. We need to make sure it's safe to destroy the + session as well (mainly by killing the session thread.) +*/ + +DWORD +CloseDevice( + DWORD private_handle) +{ + MMRESULT result; + SessionInfo* session_info = (SessionInfo*) private_handle; + /* TODO: Maybe this is best off inside the playback thread? */ + + ASSERT(session_info); + + result = CallSessionThread(session_info, WODM_CLOSE, 0); + + if ( result == MMSYSERR_NOERROR ) + { + /* TODO: Wait for it to be safe to terminate */ + + CloseKernelDevice(session_info->kernel_device_handle); + + DestroySession(session_info); + } + + return result; +} + diff --git a/reactos/dll/win32/mmdrv/entry.c b/reactos/dll/win32/mmdrv/entry.c index a5131a70125..6edb1a270f8 100644 --- a/reactos/dll/win32/mmdrv/entry.c +++ b/reactos/dll/win32/mmdrv/entry.c @@ -22,7 +22,7 @@ In summary, we just implement to satisfy the MME API (winmm) requirements. */ -LONG +LONG WINAPI DriverProc( DWORD driver_id, HANDLE driver_handle, diff --git a/reactos/dll/win32/mmdrv/kernel.c b/reactos/dll/win32/mmdrv/kernel.c index 19a45522c3d..efba1fce75a 100644 --- a/reactos/dll/win32/mmdrv/kernel.c +++ b/reactos/dll/win32/mmdrv/kernel.c @@ -1,206 +1,206 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/kernel.c - * PURPOSE: Multimedia User Mode Driver (kernel interface) - * PROGRAMMER: Andrew Greenwood - * UPDATE HISTORY: - * Jan 14, 2007: Created - */ - -#include - -/* - Devices that we provide access to follow a standard naming convention. - The first wave output, for example, appears as \Device\WaveOut0 - - I'm not entirely certain how drivers find a free name to use, or why - we need to strip the leading \Device from it when opening, but hey... -*/ - -MMRESULT -CobbleDeviceName( - DeviceType device_type, - DWORD device_id, - PWCHAR out_device_name) -{ - WCHAR base_device_name[MAX_DEVICE_NAME_LENGTH]; - - /* Work out the base name from the device type */ - - switch ( device_type ) - { - case WaveOutDevice : - wsprintf(base_device_name, L"%ls", WAVE_OUT_DEVICE_NAME); - break; - - case WaveInDevice : - wsprintf(base_device_name, L"%ls", WAVE_IN_DEVICE_NAME); - break; - - case MidiOutDevice : - wsprintf(base_device_name, L"%ls", MIDI_OUT_DEVICE_NAME); - break; - - case MidiInDevice : - wsprintf(base_device_name, L"%ls", MIDI_IN_DEVICE_NAME); - break; - - case AuxDevice : - wsprintf(base_device_name, L"%ls", AUX_DEVICE_NAME); - break; - - default : - return MMSYSERR_BADDEVICEID; - }; - - /* Now append the device number, removing the leading \Device */ - - wsprintf(out_device_name, - L"\\\\.%ls%d", - base_device_name + strlen("\\Device"), - device_id); - - return MMSYSERR_NOERROR; -} - - -/* - Takes a device type (eg: WaveOutDevice), a device ID, desired access and - a pointer to a location that will store the handle of the opened "file" if - the function succeeds. - - The device type and ID are converted into a device name using the above - function. -*/ - -MMRESULT -OpenKernelDevice( - DeviceType device_type, - DWORD device_id, - DWORD access, - HANDLE* handle) -{ - MMRESULT result; - WCHAR device_name[MAX_DEVICE_NAME_LENGTH]; - DWORD open_flags = 0; - - ASSERT(handle); - - /* Glue the base device name and the ID together */ - - result = CobbleDeviceName(device_type, device_id, device_name); - - DPRINT("Opening kernel device %ls\n", device_name); - - if ( result != MMSYSERR_NOERROR ) - return result; - - /* We want overlapped I/O when writing */ - - if ( access != GENERIC_READ ) - open_flags = FILE_FLAG_OVERLAPPED; - - /* Now try opening... */ - - *handle = CreateFile(device_name, - access, - FILE_SHARE_WRITE, - NULL, - OPEN_EXISTING, - open_flags, - NULL); - - if ( *handle == INVALID_HANDLE_VALUE ) - return ErrorToMmResult(GetLastError()); - - return MMSYSERR_NOERROR; -} - - -/* - Just an alias for the benefit of having a pair of functions ;) -*/ - -void -CloseKernelDevice(HANDLE device_handle) -{ - CloseHandle(device_handle); -} - - -MMRESULT -SetDeviceData( - HANDLE device_handle, - DWORD ioctl, - PBYTE input_buffer, - DWORD buffer_size) -{ - DPRINT("SetDeviceData\n"); - /* TODO */ - return 0; -} - - -MMRESULT -GetDeviceData( - HANDLE device_handle, - DWORD ioctl, - PBYTE output_buffer, - DWORD buffer_size) -{ - OVERLAPPED overlap; - DWORD bytes_returned; - BOOL success; - DWORD transfer; - - DPRINT("GetDeviceData\n"); - - memset(&overlap, 0, sizeof(overlap)); - - overlap.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); - - if ( ! overlap.hEvent ) - return MMSYSERR_NOMEM; - - success = DeviceIoControl(device_handle, - ioctl, - NULL, - 0, - output_buffer, - buffer_size, - &bytes_returned, - &overlap); - - if ( ! success ) - { - if ( GetLastError() == ERROR_IO_PENDING ) - { - if ( ! GetOverlappedResult(device_handle, &overlap, &transfer, TRUE) ) - { - CloseHandle(overlap.hEvent); - return ErrorToMmResult(GetLastError()); - } - } - else - { - CloseHandle(overlap.hEvent); - return ErrorToMmResult(GetLastError()); - } - } - - while ( TRUE ) - { - SetEvent(overlap.hEvent); - - if ( WaitForSingleObjectEx(overlap.hEvent, 0, TRUE) != WAIT_IO_COMPLETION ) - { - break; - } - } - - CloseHandle(overlap.hEvent); - - return MMSYSERR_NOERROR; -} +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/kernel.c + * PURPOSE: Multimedia User Mode Driver (kernel interface) + * PROGRAMMER: Andrew Greenwood + * UPDATE HISTORY: + * Jan 14, 2007: Created + */ + +#include + +/* + Devices that we provide access to follow a standard naming convention. + The first wave output, for example, appears as \Device\WaveOut0 + + I'm not entirely certain how drivers find a free name to use, or why + we need to strip the leading \Device from it when opening, but hey... +*/ + +MMRESULT +CobbleDeviceName( + DeviceType device_type, + DWORD device_id, + PWCHAR out_device_name) +{ + WCHAR base_device_name[MAX_DEVICE_NAME_LENGTH]; + + /* Work out the base name from the device type */ + + switch ( device_type ) + { + case WaveOutDevice : + wsprintf(base_device_name, L"%ls", WAVE_OUT_DEVICE_NAME); + break; + + case WaveInDevice : + wsprintf(base_device_name, L"%ls", WAVE_IN_DEVICE_NAME); + break; + + case MidiOutDevice : + wsprintf(base_device_name, L"%ls", MIDI_OUT_DEVICE_NAME); + break; + + case MidiInDevice : + wsprintf(base_device_name, L"%ls", MIDI_IN_DEVICE_NAME); + break; + + case AuxDevice : + wsprintf(base_device_name, L"%ls", AUX_DEVICE_NAME); + break; + + default : + return MMSYSERR_BADDEVICEID; + }; + + /* Now append the device number, removing the leading \Device */ + + wsprintf(out_device_name, + L"\\\\.%ls%d", + base_device_name + strlen("\\Device"), + device_id); + + return MMSYSERR_NOERROR; +} + + +/* + Takes a device type (eg: WaveOutDevice), a device ID, desired access and + a pointer to a location that will store the handle of the opened "file" if + the function succeeds. + + The device type and ID are converted into a device name using the above + function. +*/ + +MMRESULT +OpenKernelDevice( + DeviceType device_type, + DWORD device_id, + DWORD access, + HANDLE* handle) +{ + MMRESULT result; + WCHAR device_name[MAX_DEVICE_NAME_LENGTH]; + DWORD open_flags = 0; + + ASSERT(handle); + + /* Glue the base device name and the ID together */ + + result = CobbleDeviceName(device_type, device_id, device_name); + + DPRINT("Opening kernel device %ls\n", device_name); + + if ( result != MMSYSERR_NOERROR ) + return result; + + /* We want overlapped I/O when writing */ + + if ( access != GENERIC_READ ) + open_flags = FILE_FLAG_OVERLAPPED; + + /* Now try opening... */ + + *handle = CreateFile(device_name, + access, + FILE_SHARE_WRITE, + NULL, + OPEN_EXISTING, + open_flags, + NULL); + + if ( *handle == INVALID_HANDLE_VALUE ) + return ErrorToMmResult(GetLastError()); + + return MMSYSERR_NOERROR; +} + + +/* + Just an alias for the benefit of having a pair of functions ;) +*/ + +void +CloseKernelDevice(HANDLE device_handle) +{ + CloseHandle(device_handle); +} + + +MMRESULT +SetDeviceData( + HANDLE device_handle, + DWORD ioctl, + PBYTE input_buffer, + DWORD buffer_size) +{ + DPRINT("SetDeviceData\n"); + /* TODO */ + return 0; +} + + +MMRESULT +GetDeviceData( + HANDLE device_handle, + DWORD ioctl, + PBYTE output_buffer, + DWORD buffer_size) +{ + OVERLAPPED overlap; + DWORD bytes_returned; + BOOL success; + DWORD transfer; + + DPRINT("GetDeviceData\n"); + + memset(&overlap, 0, sizeof(overlap)); + + overlap.hEvent = CreateEvent(NULL, FALSE, FALSE, NULL); + + if ( ! overlap.hEvent ) + return MMSYSERR_NOMEM; + + success = DeviceIoControl(device_handle, + ioctl, + NULL, + 0, + output_buffer, + buffer_size, + &bytes_returned, + &overlap); + + if ( ! success ) + { + if ( GetLastError() == ERROR_IO_PENDING ) + { + if ( ! GetOverlappedResult(device_handle, &overlap, &transfer, TRUE) ) + { + CloseHandle(overlap.hEvent); + return ErrorToMmResult(GetLastError()); + } + } + else + { + CloseHandle(overlap.hEvent); + return ErrorToMmResult(GetLastError()); + } + } + + while ( TRUE ) + { + SetEvent(overlap.hEvent); + + if ( WaitForSingleObjectEx(overlap.hEvent, 0, TRUE) != WAIT_IO_COMPLETION ) + { + break; + } + } + + CloseHandle(overlap.hEvent); + + return MMSYSERR_NOERROR; +} diff --git a/reactos/dll/win32/mmdrv/mmdrv.def b/reactos/dll/win32/mmdrv/mmdrv.def deleted file mode 100644 index d0900515a44..00000000000 --- a/reactos/dll/win32/mmdrv/mmdrv.def +++ /dev/null @@ -1,14 +0,0 @@ -; $Id$ -; -; mmdrv.def -; -; ReactOS Operating System -; -LIBRARY mmdrv.dll -EXPORTS -DriverProc@20 -;widMessage@20 -wodMessage@20 -;midMessage@20 -;modMessage@20 -;auxMessage@20 diff --git a/reactos/dll/win32/mmdrv/mmdrv.rbuild b/reactos/dll/win32/mmdrv/mmdrv.rbuild index 4cf783ba64b..77f8e598915 100644 --- a/reactos/dll/win32/mmdrv/mmdrv.rbuild +++ b/reactos/dll/win32/mmdrv/mmdrv.rbuild @@ -1,5 +1,5 @@ - + . ntdll @@ -13,4 +13,5 @@ common.c wave.c wave_io.c + mmdrv.spec diff --git a/reactos/dll/win32/mmdrv/mmdrv.spec b/reactos/dll/win32/mmdrv/mmdrv.spec new file mode 100644 index 00000000000..e5f942959bb --- /dev/null +++ b/reactos/dll/win32/mmdrv/mmdrv.spec @@ -0,0 +1,6 @@ +@ stdcall DriverProc(long ptr long long long) +;@ stdcall widMessage(long long long long long) +@ stdcall wodMessage(long long long long long) +;@ stdcall midMessage(long long long long long) +;@ stdcall modMessage(long long long long long) +;@ stdcall auxMessage(long long long long long) diff --git a/reactos/dll/win32/mmdrv/mme.c b/reactos/dll/win32/mmdrv/mme.c index 490668e12a7..82ca3e2755c 100644 --- a/reactos/dll/win32/mmdrv/mme.c +++ b/reactos/dll/win32/mmdrv/mme.c @@ -1,143 +1,143 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/mme.c - * PURPOSE: Multimedia User Mode Driver (MME Interface) - * PROGRAMMER: Andrew Greenwood - * Aleksey Bragin - * UPDATE HISTORY: - * Jan 14, 2007: Rewritten and tidied up - */ - -#include - -/* - Sends a message to the client (application), such as WOM_DONE. This - is just a wrapper around DriverCallback which translates the - parameters appropriately. -*/ - -BOOL -NotifyClient( - SessionInfo* session_info, - DWORD message, - DWORD parameter1, - DWORD parameter2) -{ - return DriverCallback(session_info->callback, - HIWORD(session_info->flags), - session_info->mme_handle, - message, - session_info->app_user_data, - parameter1, - parameter2); -} - - - -/* - MME Driver Entrypoint - Wave Output -*/ - -APIENTRY DWORD -wodMessage( - DWORD device_id, - DWORD message, - DWORD private_handle, - DWORD parameter1, - DWORD parameter2) -{ - switch ( message ) - { - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p80.htm */ - case WODM_GETNUMDEVS : - DPRINT("WODM_GETNUMDEVS\n"); - return GetDeviceCount(WaveOutDevice); - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6h.htm */ - case WODM_GETDEVCAPS : - DPRINT("WODM_GETDEVCAPS\n"); - return GetDeviceCapabilities(WaveOutDevice, - device_id, - (PVOID) parameter1, - parameter2); - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p85.htm */ - case WODM_OPEN : - { - WAVEOPENDESC* open_desc = (WAVEOPENDESC*) parameter1; - DPRINT("WODM_OPEN\n"); - - if ( parameter2 && WAVE_FORMAT_QUERY ) - return QueryWaveFormat(WaveOutDevice, open_desc->lpFormat); - else - return OpenDevice(WaveOutDevice, - device_id, - open_desc, - parameter2, - private_handle); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6g.htm */ - case WODM_CLOSE : - { - DPRINT("WODM_CLOSE\n"); - return CloseDevice(private_handle); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p9w.htm */ - case WODM_WRITE : - { - DPRINT("WODM_WRITE\n"); - return WriteWaveBuffer(private_handle, - (PWAVEHDR) parameter1, - parameter2); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p86.htm */ - case WODM_PAUSE : - { - DPRINT("WODM_PAUSE\n"); - return HandleBySessionThread(private_handle, message, 0); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p89.htm */ - case WODM_RESTART : - { - DPRINT("WODM_RESTART\n"); - return HandleBySessionThread(private_handle, message, 0); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p88.htm */ - case WODM_RESET : - { - DPRINT("WODM_RESET\n"); - return HandleBySessionThread(private_handle, message, 0); - } - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p83.htm */ -#if 0 - case WODM_GETPOS : - { - DPRINT("WODM_GETPOS\n"); - return GetPosition(private_handle, - (PMMTIME) parameter1, - parameter2); - } -#endif - - /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6f.htm */ - case WODM_BREAKLOOP : - { - DPRINT("WODM_BREAKLOOP\n"); - return HandleBySessionThread(private_handle, message, 0); - } - - /* TODO: Others */ - } - - DPRINT("Unsupported message\n"); - return MMSYSERR_NOTSUPPORTED; -} +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/mme.c + * PURPOSE: Multimedia User Mode Driver (MME Interface) + * PROGRAMMER: Andrew Greenwood + * Aleksey Bragin + * UPDATE HISTORY: + * Jan 14, 2007: Rewritten and tidied up + */ + +#include + +/* + Sends a message to the client (application), such as WOM_DONE. This + is just a wrapper around DriverCallback which translates the + parameters appropriately. +*/ + +BOOL +NotifyClient( + SessionInfo* session_info, + DWORD message, + DWORD parameter1, + DWORD parameter2) +{ + return DriverCallback(session_info->callback, + HIWORD(session_info->flags), + session_info->mme_handle, + message, + session_info->app_user_data, + parameter1, + parameter2); +} + + + +/* + MME Driver Entrypoint + Wave Output +*/ + +APIENTRY DWORD +wodMessage( + DWORD device_id, + DWORD message, + DWORD private_handle, + DWORD parameter1, + DWORD parameter2) +{ + switch ( message ) + { + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p80.htm */ + case WODM_GETNUMDEVS : + DPRINT("WODM_GETNUMDEVS\n"); + return GetDeviceCount(WaveOutDevice); + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6h.htm */ + case WODM_GETDEVCAPS : + DPRINT("WODM_GETDEVCAPS\n"); + return GetDeviceCapabilities(WaveOutDevice, + device_id, + (PVOID) parameter1, + parameter2); + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p85.htm */ + case WODM_OPEN : + { + WAVEOPENDESC* open_desc = (WAVEOPENDESC*) parameter1; + DPRINT("WODM_OPEN\n"); + + if ( parameter2 && WAVE_FORMAT_QUERY ) + return QueryWaveFormat(WaveOutDevice, open_desc->lpFormat); + else + return OpenDevice(WaveOutDevice, + device_id, + open_desc, + parameter2, + private_handle); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6g.htm */ + case WODM_CLOSE : + { + DPRINT("WODM_CLOSE\n"); + return CloseDevice(private_handle); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p9w.htm */ + case WODM_WRITE : + { + DPRINT("WODM_WRITE\n"); + return WriteWaveBuffer(private_handle, + (PWAVEHDR) parameter1, + parameter2); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p86.htm */ + case WODM_PAUSE : + { + DPRINT("WODM_PAUSE\n"); + return HandleBySessionThread(private_handle, message, 0); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p89.htm */ + case WODM_RESTART : + { + DPRINT("WODM_RESTART\n"); + return HandleBySessionThread(private_handle, message, 0); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p88.htm */ + case WODM_RESET : + { + DPRINT("WODM_RESET\n"); + return HandleBySessionThread(private_handle, message, 0); + } + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p83.htm */ +#if 0 + case WODM_GETPOS : + { + DPRINT("WODM_GETPOS\n"); + return GetPosition(private_handle, + (PMMTIME) parameter1, + parameter2); + } +#endif + + /* http://www.osronline.com/ddkx/w98ddk/mmedia_4p6f.htm */ + case WODM_BREAKLOOP : + { + DPRINT("WODM_BREAKLOOP\n"); + return HandleBySessionThread(private_handle, message, 0); + } + + /* TODO: Others */ + } + + DPRINT("Unsupported message\n"); + return MMSYSERR_NOTSUPPORTED; +} diff --git a/reactos/dll/win32/mmdrv/mmioctl.h b/reactos/dll/win32/mmdrv/mmioctl.h index 5cdc5812b77..977b91540e4 100644 --- a/reactos/dll/win32/mmdrv/mmioctl.h +++ b/reactos/dll/win32/mmdrv/mmioctl.h @@ -1,147 +1,147 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/mmioctl.h - * PURPOSE: Multimedia system NT4 compatibility - * PROGRAMMER: Andrew Greenwood - * UPDATE HISTORY: - * Jan 13, 2007: Split from mmdrv.h - */ - -#ifndef MMDRV_IOCTLS -#define MMDRV_IOCTLS - - -#include -#include -#include -#include - - -/* - Base names of the supported devices, as provided by drivers running in - kernel mode. - - \Device\WaveIn0 etc. -*/ - -#define WAVE_OUT_DEVICE_NAME L"\\Device\\WaveOut" -#define WAVE_IN_DEVICE_NAME L"\\Device\\WaveIn" -#define MIDI_OUT_DEVICE_NAME L"\\Device\\MidiOut" -#define MIDI_IN_DEVICE_NAME L"\\Device\\MidiIn" -#define AUX_DEVICE_NAME L"\\Device\\MMAux" - - -/* - Base IOCTL codes -*/ - -#define IOCTL_SOUND_BASE FILE_DEVICE_SOUND -#define IOCTL_WAVE_BASE 0x0000 -#define IOCTL_MIDI_BASE 0x0080 -#define IOCTL_AUX_BASE 0x0100 - - -/* - Wave IOCTLs -*/ - -#define IOCTL_WAVE_QUERY_FORMAT \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_WAVE_SET_FORMAT \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_CAPABILITIES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_WAVE_SET_STATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_STATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_POSITION \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_SET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_WAVE_GET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_WAVE_SET_PITCH \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_PITCH \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_SET_PLAYBACK_RATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_GET_PLAYBACK_RATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_PLAY \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_RECORD \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_BREAK_LOOP \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_WAVE_SET_LOW_PRIORITY \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS) - - -/* - MIDI IOCTLs -*/ - -#define IOCTL_MIDI_GET_CAPABILITIES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_MIDI_SET_STATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_GET_STATE \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_SET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_MIDI_GET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_MIDI_PLAY \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_RECORD \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_CACHE_PATCHES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS) - -#define IOCTL_MIDI_CACHE_DRUM_PATCHES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) - - -/* - Aux IOCTLs -*/ - -#define IOCTL_AUX_GET_CAPABILITIES \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_AUX_SET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_AUX_GET_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) - -#define IOCTL_SOUND_GET_CHANGED_VOLUME \ - CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) - -#endif +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/mmioctl.h + * PURPOSE: Multimedia system NT4 compatibility + * PROGRAMMER: Andrew Greenwood + * UPDATE HISTORY: + * Jan 13, 2007: Split from mmdrv.h + */ + +#ifndef MMDRV_IOCTLS +#define MMDRV_IOCTLS + + +#include +#include +#include +#include + + +/* + Base names of the supported devices, as provided by drivers running in + kernel mode. + + \Device\WaveIn0 etc. +*/ + +#define WAVE_OUT_DEVICE_NAME L"\\Device\\WaveOut" +#define WAVE_IN_DEVICE_NAME L"\\Device\\WaveIn" +#define MIDI_OUT_DEVICE_NAME L"\\Device\\MidiOut" +#define MIDI_IN_DEVICE_NAME L"\\Device\\MidiIn" +#define AUX_DEVICE_NAME L"\\Device\\MMAux" + + +/* + Base IOCTL codes +*/ + +#define IOCTL_SOUND_BASE FILE_DEVICE_SOUND +#define IOCTL_WAVE_BASE 0x0000 +#define IOCTL_MIDI_BASE 0x0080 +#define IOCTL_AUX_BASE 0x0100 + + +/* + Wave IOCTLs +*/ + +#define IOCTL_WAVE_QUERY_FORMAT \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_WAVE_SET_FORMAT \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_CAPABILITIES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_WAVE_SET_STATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0004, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_STATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0005, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_POSITION \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_SET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0007, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_WAVE_GET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0008, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_WAVE_SET_PITCH \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_PITCH \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000A, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_SET_PLAYBACK_RATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000B, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_GET_PLAYBACK_RATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000C, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_PLAY \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000D, METHOD_IN_DIRECT, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_RECORD \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000E, METHOD_OUT_DIRECT, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_BREAK_LOOP \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x000F, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_WAVE_SET_LOW_PRIORITY \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_WAVE_BASE + 0x0010, METHOD_BUFFERED, FILE_WRITE_ACCESS) + + +/* + MIDI IOCTLs +*/ + +#define IOCTL_MIDI_GET_CAPABILITIES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_MIDI_SET_STATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0002, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_GET_STATE \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0003, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_SET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_MIDI_GET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0005, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_MIDI_PLAY \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0006, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_RECORD \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0007, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_CACHE_PATCHES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0008, METHOD_BUFFERED, FILE_WRITE_ACCESS) + +#define IOCTL_MIDI_CACHE_DRUM_PATCHES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_MIDI_BASE + 0x0009, METHOD_BUFFERED, FILE_WRITE_ACCESS) + + +/* + Aux IOCTLs +*/ + +#define IOCTL_AUX_GET_CAPABILITIES \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0001, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_AUX_SET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0002, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_AUX_GET_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0003, METHOD_BUFFERED, FILE_READ_ACCESS) + +#define IOCTL_SOUND_GET_CHANGED_VOLUME \ + CTL_CODE(IOCTL_SOUND_BASE, IOCTL_AUX_BASE + 0x0004, METHOD_BUFFERED, FILE_READ_ACCESS) + +#endif diff --git a/reactos/dll/win32/mmdrv/session.c b/reactos/dll/win32/mmdrv/session.c index 87b71deba25..b9d63e7d9b5 100644 --- a/reactos/dll/win32/mmdrv/session.c +++ b/reactos/dll/win32/mmdrv/session.c @@ -1,245 +1,245 @@ -/* - * - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS Multimedia - * FILE: dll/win32/mmdrv/session.c - * PURPOSE: Multimedia User Mode Driver (session management) - * PROGRAMMER: Andrew Greenwood - * UPDATE HISTORY: - * Jan 14, 2007: Created - */ - -#include - -/* Each session is tracked, but the list must be locked when in use */ - -SessionInfo* session_list = NULL; -CRITICAL_SECTION session_lock; - - -/* - Obtains a pointer to the session associated with a device type and ID. - If no session exists, returns NULL. This is mainly used to see if a - session already exists prior to creating a new one. -*/ - -SessionInfo* -GetSession( - DeviceType device_type, - DWORD device_id) -{ - SessionInfo* session_info; - - EnterCriticalSection(&session_lock); - session_info = session_list; - - while ( session_info ) - { - if ( ( session_info->device_type == device_type ) && - ( session_info->device_id == device_id ) ) - { - LeaveCriticalSection(&session_lock); - return session_info; - } - - session_info = session_info->next; - } - - LeaveCriticalSection(&session_lock); - return NULL; -} - - -/* - Creates a new session, associated with the specified device type and ID. - Whilst the session list is locked, this also checks to see if an existing - session is associated with the device. -*/ - -MMRESULT -CreateSession( - DeviceType device_type, - DWORD device_id, - SessionInfo** session_info) -{ - HANDLE heap = GetProcessHeap(); - - ASSERT(session_info); - - EnterCriticalSection(&session_lock); - - /* Ensure we're not creating a duplicate session */ - - if ( GetSession(device_type, device_id) ) - { - DPRINT("Already allocated session\n"); - LeaveCriticalSection(&session_lock); - return MMSYSERR_ALLOCATED; - } - - *session_info = HeapAlloc(heap, HEAP_ZERO_MEMORY, sizeof(SessionInfo)); - - if ( ! *session_info ) - { - DPRINT("Failed to allocate mem for session info\n"); - LeaveCriticalSection(&session_lock); - return MMSYSERR_NOMEM; - } - - (*session_info)->device_type = device_type; - (*session_info)->device_id = device_id; - - /* Add to the list */ - - (*session_info)->next = session_list; - session_list = *session_info; - - LeaveCriticalSection(&session_lock); - - return MMSYSERR_NOERROR; -} - - -/* - Removes a session from the list and destroys it. This function does NOT - perform any additional cleanup. Think of it as a slightly more advanced - free() -*/ - -VOID -DestroySession(SessionInfo* session) -{ - HANDLE heap = GetProcessHeap(); - SessionInfo* session_node; - SessionInfo* session_prev; - - /* TODO: More cleanup stuff */ - - /* Remove from the list */ - - EnterCriticalSection(&session_lock); - - session_node = session_list; - session_prev = NULL; - - while ( session_node ) - { - if ( session_node == session ) - { - /* Bridge the gap for when we go */ - session_prev->next = session->next; - break; - } - - /* Save the previous node, fetch the next */ - session_prev = session_node; - session_node = session_node->next; - } - - LeaveCriticalSection(&session_lock); - - HeapFree(heap, 0, session); -} - - -/* - Allocates events and other resources for the session thread, starts it, - and waits for it to announce that it is ready to work for us. -*/ - -MMRESULT -StartSessionThread(SessionInfo* session_info) -{ - LPTASKCALLBACK task; - MMRESULT result; - - ASSERT(session_info); - - /* This is our "ready" event, sent when the thread is idle */ - - session_info->thread.ready_event = CreateEvent(NULL, FALSE, FALSE, NULL); - - if ( ! session_info->thread.ready_event ) - { - DPRINT("Couldn't create thread_ready event\n"); - return MMSYSERR_NOMEM; - } - - /* This is our "go" event, sent when we want the thread to do something */ - - session_info->thread.go_event = CreateEvent(NULL, FALSE, FALSE, NULL); - - if ( ! session_info->thread.go_event ) - { - DPRINT("Couldn't create thread_go event\n"); - CloseHandle(session_info->thread.ready_event); - return MMSYSERR_NOMEM; - } - - /* TODO - other kinds of devices need attention, too */ - task = ( session_info->device_type == WaveOutDevice ) - ? (LPTASKCALLBACK) WaveThread : NULL; - - ASSERT(task); - - /* Effectively, this is a beefed-up CreateThread */ - - result = mmTaskCreate(task, - &session_info->thread.handle, - (DWORD) session_info); - - if ( result != MMSYSERR_NOERROR ) - { - DPRINT("Task creation failed\n"); - CloseHandle(session_info->thread.ready_event); - CloseHandle(session_info->thread.go_event); - return result; - } - - /* Wait for the thread to be ready before completing */ - - WaitForSingleObject(session_info->thread.ready_event, INFINITE); - - return MMSYSERR_NOERROR; -} - - -/* - The session thread is pretty simple. Upon creation, it announces that it - is ready to do stuff for us. When we want it to perform an action, we use - CallSessionThread with an appropriate function and parameter, then tell - the thread we want it to do something. When it's finished, it announces - that it is ready once again. -*/ - -MMRESULT -CallSessionThread( - SessionInfo* session_info, - ThreadFunction function, - PVOID thread_parameter) -{ - ASSERT(session_info); - - session_info->thread.function = function; - session_info->thread.parameter = thread_parameter; - - DPRINT("Calling session thread\n"); - SetEvent(session_info->thread.go_event); - - DPRINT("Waiting for thread response\n"); - WaitForSingleObject(session_info->thread.ready_event, INFINITE); - - return session_info->thread.result; -} - - -DWORD -HandleBySessionThread( - DWORD private_handle, - DWORD message, - DWORD parameter) -{ - return CallSessionThread((SessionInfo*) private_handle, - message, - (PVOID) parameter); -} +/* + * + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS Multimedia + * FILE: dll/win32/mmdrv/session.c + * PURPOSE: Multimedia User Mode Driver (session management) + * PROGRAMMER: Andrew Greenwood + * UPDATE HISTORY: + * Jan 14, 2007: Created + */ + +#include + +/* Each session is tracked, but the list must be locked when in use */ + +SessionInfo* session_list = NULL; +CRITICAL_SECTION session_lock; + + +/* + Obtains a pointer to the session associated with a device type and ID. + If no session exists, returns NULL. This is mainly used to see if a + session already exists prior to creating a new one. +*/ + +SessionInfo* +GetSession( + DeviceType device_type, + DWORD device_id) +{ + SessionInfo* session_info; + + EnterCriticalSection(&session_lock); + session_info = session_list; + + while ( session_info ) + { + if ( ( session_info->device_type == device_type ) && + ( session_info->device_id == device_id ) ) + { + LeaveCriticalSection(&session_lock); + return session_info; + } + + session_info = session_info->next; + } + + LeaveCriticalSection(&session_lock); + return NULL; +} + + +/* + Creates a new session, associated with the specified device type and ID. + Whilst the session list is locked, this also checks to see if an existing + session is associated with the device. +*/ + +MMRESULT +CreateSession( + DeviceType device_type, + DWORD device_id, + SessionInfo** session_info) +{ + HANDLE heap = GetProcessHeap(); + + ASSERT(session_info); + + EnterCriticalSection(&session_lock); + + /* Ensure we're not creating a duplicate session */ + + if ( GetSession(device_type, device_id) ) + { + DPRINT("Already allocated session\n"); + LeaveCriticalSection(&session_lock); + return MMSYSERR_ALLOCATED; + } + + *session_info = HeapAlloc(heap, HEAP_ZERO_MEMORY, sizeof(SessionInfo)); + + if ( ! *session_info ) + { + DPRINT("Failed to allocate mem for session info\n"); + LeaveCriticalSection(&session_lock); + return MMSYSERR_NOMEM; + } + + (*session_info)->device_type = device_type; + (*session_info)->device_id = device_id; + + /* Add to the list */ + + (*session_info)->next = session_list; + session_list = *session_info; + + LeaveCriticalSection(&session_lock); + + return MMSYSERR_NOERROR; +} + + +/* + Removes a session from the list and destroys it. This function does NOT + perform any additional cleanup. Think of it as a slightly more advanced + free() +*/ + +VOID +DestroySession(SessionInfo* session) +{ + HANDLE heap = GetProcessHeap(); + SessionInfo* session_node; + SessionInfo* session_prev; + + /* TODO: More cleanup stuff */ + + /* Remove from the list */ + + EnterCriticalSection(&session_lock); + + session_node = session_list; + session_prev = NULL; + + while ( session_node ) + { + if ( session_node == session ) + { + /* Bridge the gap for when we go */ + session_prev->next = session->next; + break; + } + + /* Save the previous node, fetch the next */ + session_prev = session_node; + session_node = session_node->next; + } + + LeaveCriticalSection(&session_lock); + + HeapFree(heap, 0, session); +} + + +/* + Allocates events and other resources for the session thread, starts it, + and waits for it to announce that it is ready to work for us. +*/ + +MMRESULT +StartSessionThread(SessionInfo* session_info) +{ + LPTASKCALLBACK task; + MMRESULT result; + + ASSERT(session_info); + + /* This is our "ready" event, sent when the thread is idle */ + + session_info->thread.ready_event = CreateEvent(NULL, FALSE, FALSE, NULL); + + if ( ! session_info->thread.ready_event ) + { + DPRINT("Couldn't create thread_ready event\n"); + return MMSYSERR_NOMEM; + } + + /* This is our "go" event, sent when we want the thread to do something */ + + session_info->thread.go_event = CreateEvent(NULL, FALSE, FALSE, NULL); + + if ( ! session_info->thread.go_event ) + { + DPRINT("Couldn't create thread_go event\n"); + CloseHandle(session_info->thread.ready_event); + return MMSYSERR_NOMEM; + } + + /* TODO - other kinds of devices need attention, too */ + task = ( session_info->device_type == WaveOutDevice ) + ? (LPTASKCALLBACK) WaveThread : NULL; + + ASSERT(task); + + /* Effectively, this is a beefed-up CreateThread */ + + result = mmTaskCreate(task, + &session_info->thread.handle, + (DWORD) session_info); + + if ( result != MMSYSERR_NOERROR ) + { + DPRINT("Task creation failed\n"); + CloseHandle(session_info->thread.ready_event); + CloseHandle(session_info->thread.go_event); + return result; + } + + /* Wait for the thread to be ready before completing */ + + WaitForSingleObject(session_info->thread.ready_event, INFINITE); + + return MMSYSERR_NOERROR; +} + + +/* + The session thread is pretty simple. Upon creation, it announces that it + is ready to do stuff for us. When we want it to perform an action, we use + CallSessionThread with an appropriate function and parameter, then tell + the thread we want it to do something. When it's finished, it announces + that it is ready once again. +*/ + +MMRESULT +CallSessionThread( + SessionInfo* session_info, + ThreadFunction function, + PVOID thread_parameter) +{ + ASSERT(session_info); + + session_info->thread.function = function; + session_info->thread.parameter = thread_parameter; + + DPRINT("Calling session thread\n"); + SetEvent(session_info->thread.go_event); + + DPRINT("Waiting for thread response\n"); + WaitForSingleObject(session_info->thread.ready_event, INFINITE); + + return session_info->thread.result; +} + + +DWORD +HandleBySessionThread( + DWORD private_handle, + DWORD message, + DWORD parameter) +{ + return CallSessionThread((SessionInfo*) private_handle, + message, + (PVOID) parameter); +} diff --git a/reactos/dll/win32/mmdrv/wave_io.c b/reactos/dll/win32/mmdrv/wave_io.c index 3c34e0211d2..a7923cb29dd 100644 --- a/reactos/dll/win32/mmdrv/wave_io.c +++ b/reactos/dll/win32/mmdrv/wave_io.c @@ -1,40 +1,40 @@ -/* - Don't use this. -*/ - -#include - -/* - Complete a partial wave buffer transaction -*/ - -void -CompleteWaveOverlap( - DWORD error_code, - DWORD bytes_transferred, - LPOVERLAPPED overlapped) -{ - DPRINT("Complete partial wave overlap\n"); -} - -/* - Helper function to set up loops -*/ - -VOID -UpdateWaveLoop(SessionInfo* session_info) -{ -} - - -/* - The hub of all wave I/O. This ensures a constant stream of buffers are - passed between the land of usermode and kernelmode. -*/ - -VOID -PerformWaveIO( - SessionInfo* session_info) -{ - -} +/* + Don't use this. +*/ + +#include + +/* + Complete a partial wave buffer transaction +*/ + +void +CompleteWaveOverlap( + DWORD error_code, + DWORD bytes_transferred, + LPOVERLAPPED overlapped) +{ + DPRINT("Complete partial wave overlap\n"); +} + +/* + Helper function to set up loops +*/ + +VOID +UpdateWaveLoop(SessionInfo* session_info) +{ +} + + +/* + The hub of all wave I/O. This ensures a constant stream of buffers are + passed between the land of usermode and kernelmode. +*/ + +VOID +PerformWaveIO( + SessionInfo* session_info) +{ + +} From b978aa53999582fa72dee1dd1bfc9510c9e8f4a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 08:18:55 +0000 Subject: [PATCH 224/304] Replace .def file by a .spec file svn path=/trunk/; revision=35210 --- reactos/dll/win32/samsrv/samsrv.rbuild | 3 ++- reactos/dll/win32/samsrv/{samsrv.def => samsrv.spec} | 6 ++---- 2 files changed, 4 insertions(+), 5 deletions(-) rename reactos/dll/win32/samsrv/{samsrv.def => samsrv.spec} (96%) diff --git a/reactos/dll/win32/samsrv/samsrv.rbuild b/reactos/dll/win32/samsrv/samsrv.rbuild index a2ebe7f0476..44f8c06f6d9 100644 --- a/reactos/dll/win32/samsrv/samsrv.rbuild +++ b/reactos/dll/win32/samsrv/samsrv.rbuild @@ -1,10 +1,11 @@ - + . ntdll kernel32 samsrv.c samsrv.rc + samsrv.spec diff --git a/reactos/dll/win32/samsrv/samsrv.def b/reactos/dll/win32/samsrv/samsrv.spec similarity index 96% rename from reactos/dll/win32/samsrv/samsrv.def rename to reactos/dll/win32/samsrv/samsrv.spec index 9f0b45a555a..31b31ac2e77 100644 --- a/reactos/dll/win32/samsrv/samsrv.def +++ b/reactos/dll/win32/samsrv/samsrv.spec @@ -1,5 +1,3 @@ -LIBRARY samsrv -EXPORTS ;SamIAccountRestrictions ;SamIConnect ;SamICreateAccountByRid @@ -18,12 +16,12 @@ EXPORTS ;SamIFree_SAMPR_USER_INFO_BUFFER ;SamIGetPrivateData ;SamIGetSerialNumberDomain -SamIInitialize +@ stdcall SamIInitialize() ;SamINotifyDelta ;SamISetAuditingInformation ;SamISetPrivateData ;SamISetSerialNumberDomain -SampInitializeRegistry +@ stdcall SampInitializeRegistry() ;SampRtlConvertUlongToUnicodeString ;SamrAddMemberToAlias ;SamrAddMemberToGroup From 0f760a46fdfade69b290e66cc73393992f502948 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 08:20:58 +0000 Subject: [PATCH 225/304] Define exported functions as WINAPI svn path=/trunk/; revision=35211 --- reactos/dll/win32/shimgvw/shimgvw.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/reactos/dll/win32/shimgvw/shimgvw.c b/reactos/dll/win32/shimgvw/shimgvw.c index 914e0673fc8..7b97f0f56ed 100644 --- a/reactos/dll/win32/shimgvw/shimgvw.c +++ b/reactos/dll/win32/shimgvw/shimgvw.c @@ -403,7 +403,7 @@ ImageView_WndProc(HWND hwnd, UINT Message, WPARAM wParam, LPARAM lParam) return DefWindowProc(hwnd, Message, wParam, lParam); } -LONG +LONG WINAPI ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName) { struct GdiplusStartupInput gdiplusStartupInput; @@ -464,19 +464,19 @@ ImageView_CreateWindow(HWND hwnd, LPWSTR szFileName) return -1; } -VOID +VOID WINAPI ImageView_FullscreenW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { ImageView_CreateWindow(hwnd, (LPWSTR)path); } -VOID +VOID WINAPI ImageView_Fullscreen(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { ImageView_CreateWindow(hwnd, (LPWSTR)path); } -VOID +VOID WINAPI ImageView_FullscreenA(HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow) { WCHAR szFile[MAX_PATH]; @@ -487,25 +487,25 @@ ImageView_FullscreenA(HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow) } } -VOID +VOID WINAPI ImageView_PrintTo(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { DPRINT("ImageView_PrintTo() not implemented\n"); } -VOID +VOID WINAPI ImageView_PrintToA(HWND hwnd, HINSTANCE hInst, LPCSTR path, int nShow) { DPRINT("ImageView_PrintToA() not implemented\n"); } -VOID +VOID WINAPI ImageView_PrintToW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { DPRINT("ImageView_PrintToW() not implemented\n"); } -VOID +VOID WINAPI imageview_fullscreenW(HWND hwnd, HINSTANCE hInst, LPCWSTR path, int nShow) { DPRINT("ImageView_fullscreenW() not implemented\n"); From 506a86fe517eb14fb3cd8982b5b38635f6c6baf3 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 9 Aug 2008 08:23:45 +0000 Subject: [PATCH 226/304] - Update Russian translation svn path=/trunk/; revision=35212 --- reactos/dll/win32/shell32/lang/ru-RU.rc | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index af377a29e6b..3c70d2b1f7b 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -598,11 +598,11 @@ BEGIN IDS_SHV_COLUMN_FONTTYPE " " IDS_SHV_COLUMN_WORKGROUP " " IDS_SHV_NETWORKLOCATION " " - IDS_SHV_COLUMN_DOCUMENTS "Documents" - IDS_SHV_COLUMN_STATUS "Status" - IDS_SHV_COLUMN_COMMENTS "Comments" - IDS_SHV_COLUMN_LOCATION "Location" - IDS_SHV_COLUMN_MODEL "Model" + IDS_SHV_COLUMN_DOCUMENTS "" + IDS_SHV_COLUMN_STATUS "" + IDS_SHV_COLUMN_COMMENTS "" + IDS_SHV_COLUMN_LOCATION "" + IDS_SHV_COLUMN_MODEL "" /* special folders */ IDS_DESKTOP " " @@ -621,8 +621,8 @@ BEGIN IDS_COPY "" IDS_DELETE "" IDS_PROPERTIES "" - IDS_CUT "Cut" - IDS_RESTORE "Restore" + IDS_CUT "" + IDS_RESTORE "" IDS_CREATEFOLDER_DENIED " - ." IDS_CREATEFOLDER_CAPTION " " From 55953529e38df679022a06575fb8bf5189bb9aa6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 08:26:56 +0000 Subject: [PATCH 227/304] Replace .def file by a .spec file svn path=/trunk/; revision=35213 --- reactos/dll/win32/snmpapi/snmpapi.def | 43 ------------------------ reactos/dll/win32/snmpapi/snmpapi.rbuild | 3 +- reactos/dll/win32/snmpapi/snmpapi.rc | 2 +- reactos/dll/win32/snmpapi/snmpapi.spec | 37 ++++++++++++++++++++ 4 files changed, 40 insertions(+), 45 deletions(-) delete mode 100644 reactos/dll/win32/snmpapi/snmpapi.def create mode 100644 reactos/dll/win32/snmpapi/snmpapi.spec diff --git a/reactos/dll/win32/snmpapi/snmpapi.def b/reactos/dll/win32/snmpapi/snmpapi.def deleted file mode 100644 index 44e08bad3c2..00000000000 --- a/reactos/dll/win32/snmpapi/snmpapi.def +++ /dev/null @@ -1,43 +0,0 @@ -; SNMPAPI.DLL - ReactOS Sockets 2 Simple Network Management Protocol API DLL - -LIBRARY snmpapi.dll - -EXPORTS -SnmpSvcAddrIsIpx -SnmpSvcAddrToSocket -SnmpSvcGetEnterpriseOID -SnmpSvcGetUptime -SnmpSvcInitUptime -SnmpSvcSetLogLevel -SnmpSvcSetLogType -SnmpTfxClose -SnmpTfxOpen -SnmpTfxQuery -SnmpUtilAnsiToUnicode -SnmpUtilAsnAnyCpy@8 -SnmpUtilAsnAnyFree -SnmpUtilDbgPrint -SnmpUtilIdsToA -SnmpUtilMemAlloc -SnmpUtilMemFree -SnmpUtilMemReAlloc -SnmpUtilOctetsCmp -SnmpUtilOctetsCpy -SnmpUtilOctetsFree -SnmpUtilOctetsNCmp -SnmpUtilOidAppend@8 -SnmpUtilOidCmp -SnmpUtilOidCpy@8 -SnmpUtilOidFree@4 -SnmpUtilOidNCmp@12 -SnmpUtilOidToA@4 -SnmpUtilPrintAsnAny -SnmpUtilPrintOid -SnmpUtilUTF8ToUnicode -SnmpUtilUnicodeToAnsi -SnmpUtilUnicodeToUTF8 -SnmpUtilVarBindCpy -SnmpUtilVarBindFree -SnmpUtilVarBindListCpy -SnmpUtilVarBindListFree -; EOF diff --git a/reactos/dll/win32/snmpapi/snmpapi.rbuild b/reactos/dll/win32/snmpapi/snmpapi.rbuild index 93e2a1bd839..e6ee0f88dc8 100644 --- a/reactos/dll/win32/snmpapi/snmpapi.rbuild +++ b/reactos/dll/win32/snmpapi/snmpapi.rbuild @@ -1,9 +1,10 @@ - + . ntdll kernel32 snmpapi.c snmpapi.rc + snmpapi.spec diff --git a/reactos/dll/win32/snmpapi/snmpapi.rc b/reactos/dll/win32/snmpapi/snmpapi.rc index 8b8ac565744..8abcfc8650d 100644 --- a/reactos/dll/win32/snmpapi/snmpapi.rc +++ b/reactos/dll/win32/snmpapi/snmpapi.rc @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: snmpapi.rc 22410 2006-06-19 12:34:31Z gedmurphy $ */ #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "ReactOS Sockets 2 SNMP Helper API\0" diff --git a/reactos/dll/win32/snmpapi/snmpapi.spec b/reactos/dll/win32/snmpapi/snmpapi.spec new file mode 100644 index 00000000000..fb8f792aeeb --- /dev/null +++ b/reactos/dll/win32/snmpapi/snmpapi.spec @@ -0,0 +1,37 @@ +@ stdcall SnmpSvcAddrIsIpx(ptr ptr) +@ stdcall SnmpSvcAddrToSocket(ptr ptr) +@ stdcall SnmpSvcGetEnterpriseOID(ptr ptr) +@ stdcall SnmpSvcGetUptime() +@ stdcall SnmpSvcInitUptime() +@ stdcall SnmpSvcSetLogLevel(long) +@ stdcall SnmpSvcSetLogType(long) +@ stdcall SnmpTfxClose(ptr ptr) +@ stdcall SnmpTfxOpen(ptr ptr) +@ stdcall SnmpTfxQuery(ptr ptr) +@ stdcall SnmpUtilAnsiToUnicode(ptr ptr) +@ stdcall SnmpUtilAsnAnyCpy(ptr ptr) +@ stdcall SnmpUtilAsnAnyFree(ptr) +@ cdecl SnmpUtilDbgPrint(long str) +@ stdcall SnmpUtilIdsToA(ptr long) +@ stdcall SnmpUtilMemAlloc(long) +@ stdcall SnmpUtilMemFree(ptr) +@ stdcall SnmpUtilMemReAlloc(ptr long) +@ stdcall SnmpUtilOctetsCmp(ptr ptr) +@ stdcall SnmpUtilOctetsCpy(ptr ptr) +@ stdcall SnmpUtilOctetsFree(ptr) +@ stdcall SnmpUtilOctetsNCmp(ptr ptr long) +@ stdcall SnmpUtilOidAppend(ptr ptr) +@ stdcall SnmpUtilOidCmp(ptr ptr) +@ stdcall SnmpUtilOidCpy(ptr ptr) +@ stdcall SnmpUtilOidFree(ptr) +@ stdcall SnmpUtilOidNCmp(ptr ptr long) +@ stdcall SnmpUtilOidToA(ptr) +@ stdcall SnmpUtilPrintAsnAny(ptr) +@ stdcall SnmpUtilPrintOid(ptr) +@ stdcall SnmpUtilUTF8ToUnicode(ptr ptr) +@ stdcall SnmpUtilUnicodeToAnsi(ptr ptr) +@ stdcall SnmpUtilUnicodeToUTF8(ptr ptr) +@ stdcall SnmpUtilVarBindCpy(ptr ptr) +@ stdcall SnmpUtilVarBindFree(ptr) +@ stdcall SnmpUtilVarBindListCpy(ptr ptr) +@ stdcall SnmpUtilVarBindListFree(ptr) From 2a95f43a4ef1f86e7446bc6b381b890275e5be35 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 08:29:31 +0000 Subject: [PATCH 228/304] Fix User32InitializeImmEntryTable export svn path=/trunk/; revision=35214 --- reactos/dll/win32/user32/user32.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/user32/user32.def b/reactos/dll/win32/user32/user32.def index 6560179b1dd..ab4a7004921 100644 --- a/reactos/dll/win32/user32/user32.def +++ b/reactos/dll/win32/user32/user32.def @@ -707,7 +707,7 @@ UnregisterUserApiHook@0 UpdateLayeredWindow@36 UpdatePerUserSystemParameters@8 UpdateWindow@4 -User32InitializeImmEntryTable +User32InitializeImmEntryTable@4 UserClientDllInitialize=DllMain@12 UserHandleGrantAccess@12 ;UserLpkPSMTextOut From e8502792bb546e421d3cd6c9e67f5a3f599dd8e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 08:35:36 +0000 Subject: [PATCH 229/304] Replace .def file by a .spec file svn path=/trunk/; revision=35215 --- reactos/dll/win32/vdmdbg/vdmdbg.def | 56 -------------------------- reactos/dll/win32/vdmdbg/vdmdbg.rbuild | 3 +- reactos/dll/win32/vdmdbg/vdmdbg.spec | 28 +++++++++++++ 3 files changed, 30 insertions(+), 57 deletions(-) delete mode 100644 reactos/dll/win32/vdmdbg/vdmdbg.def create mode 100644 reactos/dll/win32/vdmdbg/vdmdbg.spec diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.def b/reactos/dll/win32/vdmdbg/vdmdbg.def deleted file mode 100644 index ee6cdd0ad00..00000000000 --- a/reactos/dll/win32/vdmdbg/vdmdbg.def +++ /dev/null @@ -1,56 +0,0 @@ -; -; vdmdbg.def -; -; Exports for VDMDBG DLL -; -; Copyright (C) 1998 Free Software Foundation, Inc. -; Created by J.J. van der Heijden -; -; This file is part of the Windows32 API Library. -; Based on the November 1997 Platform SDK -; -; This library is free software; you can redistribute it and/or -; modify it under the terms of the GNU Library General Public -; License as published by the Free Software Foundation; either -; version 2 of the License, or (at your option) any later version. -; -; This library is distributed in the hope that it will be useful, -; but WITHOUT ANY WARRANTY; without even the implied warranty of -; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -; Library General Public License for more details. -; -; You should have received a copy of the GNU Library General Public -; License along with this library; see the file COPYING.LIB. -; If not, write to the Free Software Foundation, -; 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -; -LIBRARY VDMDBG -EXPORTS -VDMBreakThread -VDMDetectWOW -VDMEnumProcessWOW -VDMEnumTaskWOW -VDMEnumTaskWOWEx -;VDMGetAddrExpression -VDMGetContext -VDMGetDbgFlags -VDMGetModuleSelector -VDMGetPointer -VDMGetSegmentInfo -;VDMGetSegtablePointer -VDMGetSelectorModule -;VDMGetSymbol -;VDMGetThreadContext -;VDMGetThreadSelectorEntry -VDMGlobalFirst -VDMGlobalNext -VDMIsModuleLoaded -VDMKillWOW -VDMModuleFirst -VDMModuleNext -VDMProcessException -VDMSetContext -VDMSetDbgFlags -;VDMSetThreadContext -VDMStartTaskInWOW -VDMTerminateTaskWOW diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.rbuild b/reactos/dll/win32/vdmdbg/vdmdbg.rbuild index 7edd52d038a..80e2434d146 100644 --- a/reactos/dll/win32/vdmdbg/vdmdbg.rbuild +++ b/reactos/dll/win32/vdmdbg/vdmdbg.rbuild @@ -1,8 +1,9 @@ - + . ntdll kernel32 vdmdbg.c + vdmdbg.spec vdmdbg.h diff --git a/reactos/dll/win32/vdmdbg/vdmdbg.spec b/reactos/dll/win32/vdmdbg/vdmdbg.spec new file mode 100644 index 00000000000..c469866ca77 --- /dev/null +++ b/reactos/dll/win32/vdmdbg/vdmdbg.spec @@ -0,0 +1,28 @@ +@ stdcall VDMBreakThread(ptr ptr) +@ stdcall VDMDetectWOW() +@ stdcall VDMEnumProcessWOW(ptr ptr) +@ stdcall VDMEnumTaskWOW(long ptr ptr) +@ stdcall VDMEnumTaskWOWEx(long ptr ptr) +;VDMGetAddrExpression +@ stdcall VDMGetContext(ptr ptr ptr) +@ stdcall VDMGetDbgFlags(ptr) +@ stdcall VDMGetModuleSelector(ptr ptr long str ptr) +@ stdcall VDMGetPointer(ptr ptr long long long) +@ stdcall VDMGetSegmentInfo(long long long ptr) +;VDMGetSegtablePointer +@ stdcall VDMGetSelectorModule(ptr ptr long ptr str long str long) +;VDMGetSymbol +;VDMGetThreadContext +;VDMGetThreadSelectorEntry +@ stdcall VDMGlobalFirst(ptr ptr ptr long ptr ptr) +@ stdcall VDMGlobalNext(ptr ptr ptr long ptr ptr) +@ stdcall VDMIsModuleLoaded(str) +@ stdcall VDMKillWOW() +@ stdcall VDMModuleFirst(ptr ptr ptr ptr ptr) +@ stdcall VDMModuleNext(ptr ptr ptr ptr ptr) +@ stdcall VDMProcessException(ptr) +@ stdcall VDMSetContext(ptr ptr ptr) +@ stdcall VDMSetDbgFlags(ptr long) +;VDMSetThreadContext +@ stdcall VDMStartTaskInWOW(long str long) +@ stdcall VDMTerminateTaskWOW(long long) From eaab13c551a8a68f0593e17e2187ac60c916a67b Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 9 Aug 2008 08:36:34 +0000 Subject: [PATCH 230/304] - Update & fix Russian translation svn path=/trunk/; revision=35216 --- reactos/base/applications/msconfig/lang/ru-RU.rc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/base/applications/msconfig/lang/ru-RU.rc b/reactos/base/applications/msconfig/lang/ru-RU.rc index 159e4168855..901e11b3552 100644 --- a/reactos/base/applications/msconfig/lang/ru-RU.rc +++ b/reactos/base/applications/msconfig/lang/ru-RU.rc @@ -145,11 +145,11 @@ BEGIN IDS_TOOLS_COLUMN_NAME "" IDS_TOOLS_COLUMN_DESCR "" - IDS_TOOLS_CMD_NAME " " + IDS_TOOLS_CMD_NAME " " IDS_TOOLS_CMD_DESCR "" IDS_TOOLS_CMD_CMD "cmd.exe" - IDS_TOOLS_INFO_NAME "Version" + IDS_TOOLS_INFO_NAME " " IDS_TOOLS_INFO_DESCR " ." IDS_TOOLS_INFO_CMD "winver.exe" From a19e4087384774441fc2d3d733418628fdd2bd78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 09:06:04 +0000 Subject: [PATCH 231/304] Replace .def file by a .spec file svn path=/trunk/; revision=35217 --- reactos/drivers/directx/dxapi/dxapi.def | 15 --------------- reactos/drivers/directx/dxapi/dxapi.rbuild | 3 ++- reactos/drivers/directx/dxapi/dxapi.spec | 8 ++++++++ reactos/drivers/directx/dxapi/main.c | 9 +++++---- 4 files changed, 15 insertions(+), 20 deletions(-) delete mode 100644 reactos/drivers/directx/dxapi/dxapi.def create mode 100644 reactos/drivers/directx/dxapi/dxapi.spec diff --git a/reactos/drivers/directx/dxapi/dxapi.def b/reactos/drivers/directx/dxapi/dxapi.def deleted file mode 100644 index bcb4d177d78..00000000000 --- a/reactos/drivers/directx/dxapi/dxapi.def +++ /dev/null @@ -1,15 +0,0 @@ -; $Id: videoprt.def 27062 2007-06-07 21:13:06Z greatlrd $ -; -; dxapi.def - export definition file for ReactOS -; -EXPORTS -DxApi@20 -DxApiGetVersion@0 -;DxApiInitialize@32 -;DxAutoflipUpdate@20 -;DxEnableIRQ@8 -;DxLoseObject@8 -;DxUpdateCapture@12 -GsDriverEntry@8 - - diff --git a/reactos/drivers/directx/dxapi/dxapi.rbuild b/reactos/drivers/directx/dxapi/dxapi.rbuild index 5a356f9ad84..55dbdf266e9 100644 --- a/reactos/drivers/directx/dxapi/dxapi.rbuild +++ b/reactos/drivers/directx/dxapi/dxapi.rbuild @@ -2,7 +2,7 @@ - + . @@ -11,4 +11,5 @@ installbase="system32/drivers" installname="dxapi.sys"> videoprt main.c dxapi.rc + dxapi.spec diff --git a/reactos/drivers/directx/dxapi/dxapi.spec b/reactos/drivers/directx/dxapi/dxapi.spec new file mode 100644 index 00000000000..c40b5cd16e2 --- /dev/null +++ b/reactos/drivers/directx/dxapi/dxapi.spec @@ -0,0 +1,8 @@ +@ stdcall DxApi(long ptr long ptr long) +@ stdcall DxApiGetVersion() +;DxApiInitialize +;DxAutoflipUpdate +;DxEnableIRQ +;DxLoseObject +;DxUpdateCapture +@ stdcall GsDriverEntry(ptr ptr) diff --git a/reactos/drivers/directx/dxapi/main.c b/reactos/drivers/directx/dxapi/main.c index 870d8a7d6b4..c26ee5978b1 100644 --- a/reactos/drivers/directx/dxapi/main.c +++ b/reactos/drivers/directx/dxapi/main.c @@ -12,7 +12,7 @@ #include "dxapi_driver.h" -NTSTATUS +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2) { @@ -23,7 +23,7 @@ DriverEntry(IN PVOID Context1, return STATUS_SUCCESS; } -NTSTATUS +NTSTATUS NTAPI GsDriverEntry(IN PVOID Context1, IN PVOID Context2) { @@ -45,7 +45,8 @@ GsDriverEntry(IN PVOID Context1, * none * *--*/ -ULONG +DXAPI +ULONG PASCAL DxApiGetVersion() { /* MSDN say this always return Direct Sound version 4.02 */ @@ -98,7 +99,7 @@ DxApiGetVersion() *--*/ DXAPI -DWORD +DWORD PASCAL DxApi(IN DWORD dwFunctionNum, IN LPVOID lpvInBuffer, IN DWORD cbInBuffer, From a5f5b8583f02bd8e48a58d5b6408ac19de12b7b6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 09:25:21 +0000 Subject: [PATCH 232/304] Replace .def file by a .spec file svn path=/trunk/; revision=35218 --- reactos/drivers/directx/dxg/dxg.def | 9 --------- reactos/drivers/directx/dxg/dxg.rbuild | 3 ++- reactos/drivers/directx/dxg/dxg.spec | 3 +++ reactos/drivers/directx/dxg/dxg_int.h | 6 +++--- reactos/drivers/directx/dxg/main.c | 3 ++- 5 files changed, 10 insertions(+), 14 deletions(-) delete mode 100644 reactos/drivers/directx/dxg/dxg.def create mode 100644 reactos/drivers/directx/dxg/dxg.spec diff --git a/reactos/drivers/directx/dxg/dxg.def b/reactos/drivers/directx/dxg/dxg.def deleted file mode 100644 index 6500bd5809a..00000000000 --- a/reactos/drivers/directx/dxg/dxg.def +++ /dev/null @@ -1,9 +0,0 @@ -; $Id: videoprt.def 27062 2007-06-07 21:13:06Z greatlrd $ -; -; dxg.def - export definition file for ReactOS -; -EXPORTS -DriverEntry@8 -DxDdCleanupDxGraphics@0 -DxDdStartupDxGraphics@24 - diff --git a/reactos/drivers/directx/dxg/dxg.rbuild b/reactos/drivers/directx/dxg/dxg.rbuild index 1e2a5d24b82..920183fa3b9 100644 --- a/reactos/drivers/directx/dxg/dxg.rbuild +++ b/reactos/drivers/directx/dxg/dxg.rbuild @@ -1,7 +1,7 @@ - + . include subsystems/win32/win32k/include @@ -14,4 +14,5 @@ eng.c historic.c dxg.rc + dxg.spec diff --git a/reactos/drivers/directx/dxg/dxg.spec b/reactos/drivers/directx/dxg/dxg.spec new file mode 100644 index 00000000000..d9114368705 --- /dev/null +++ b/reactos/drivers/directx/dxg/dxg.spec @@ -0,0 +1,3 @@ +@ stdcall DriverEntry(ptr ptr) +@ stdcall DxDdCleanupDxGraphics() +@ stdcall DxDdStartupDxGraphics(long ptr long ptr ptr ptr) diff --git a/reactos/drivers/directx/dxg/dxg_int.h b/reactos/drivers/directx/dxg/dxg_int.h index 081b6513967..52354783bbf 100644 --- a/reactos/drivers/directx/dxg/dxg_int.h +++ b/reactos/drivers/directx/dxg/dxg_int.h @@ -72,9 +72,9 @@ typedef struct _EDD_SURFACE_LOCAL } EDD_SURFACE_LOCAL, *PEDD_SURFACE_LOCAL; /* exported functions */ -NTSTATUS DriverEntry(IN PVOID Context1, IN PVOID Context2); -NTSTATUS GsDriverEntry(IN PVOID Context1, IN PVOID Context2); -NTSTATUS DxDdCleanupDxGraphics(); +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2); +NTSTATUS NTAPI GsDriverEntry(IN PVOID Context1, IN PVOID Context2); +NTSTATUS APIENTRY DxDdCleanupDxGraphics(); /* Global pointers */ extern ULONG gcSizeDdHmgr; diff --git a/reactos/drivers/directx/dxg/main.c b/reactos/drivers/directx/dxg/main.c index ba82eeb78fa..91104c23b6c 100644 --- a/reactos/drivers/directx/dxg/main.c +++ b/reactos/drivers/directx/dxg/main.c @@ -25,7 +25,7 @@ const ULONG gcDxgFuncs = DXG_INDEX_DxDdIoctl + 1; -NTSTATUS +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2) { @@ -117,6 +117,7 @@ DxDdStartupDxGraphics (ULONG SizeEngDrv, NTSTATUS +APIENTRY DxDdCleanupDxGraphics() { DdHmgDestroy(); From 3744b879798e0d71dd95493a34c6875e7bcdfcf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 09:26:00 +0000 Subject: [PATCH 233/304] Fix build svn path=/trunk/; revision=35219 --- reactos/include/ddk/ddkmapi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/include/ddk/ddkmapi.h b/reactos/include/ddk/ddkmapi.h index 86a13994711..4500cc6f58f 100644 --- a/reactos/include/ddk/ddkmapi.h +++ b/reactos/include/ddk/ddkmapi.h @@ -330,7 +330,7 @@ typedef struct _DDSETSKIPFIELD DXAPI -DWORD +DWORD PASCAL DxApi(IN DWORD dwFunctionNum, IN LPVOID lpvInBuffer, IN DWORD cbInBuffer, From 1a3e978ddd0c366710e41e5a1a915742d1cb55f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 09:42:43 +0000 Subject: [PATCH 234/304] Replace .def file by a .spec file svn path=/trunk/; revision=35220 --- reactos/drivers/directx/dxgthk/dxgthk.def | 26 -------------------- reactos/drivers/directx/dxgthk/dxgthk.rbuild | 3 ++- reactos/drivers/directx/dxgthk/dxgthk.spec | 20 +++++++++++++++ reactos/drivers/directx/dxgthk/main.c | 2 +- 4 files changed, 23 insertions(+), 28 deletions(-) delete mode 100644 reactos/drivers/directx/dxgthk/dxgthk.def create mode 100644 reactos/drivers/directx/dxgthk/dxgthk.spec diff --git a/reactos/drivers/directx/dxgthk/dxgthk.def b/reactos/drivers/directx/dxgthk/dxgthk.def deleted file mode 100644 index ce0bc1b844f..00000000000 --- a/reactos/drivers/directx/dxgthk/dxgthk.def +++ /dev/null @@ -1,26 +0,0 @@ -; $Id: videoprt.def 27062 2007-06-07 21:13:06Z greatlrd $ -; -; dxg.def - export definition file for ReactOS -; -EXPORTS -DriverEntry@8 -EngAcquireSemaphore@4=win32k.EngAcquireSemaphore@4 -EngAllocMem@12=win32k.EngAllocMem@12 -EngAllocUserMem@8=win32k.EngAllocUserMem@8 -EngCopyBits@24=win32k.EngCopyBits@24 -EngCreateBitmap@24=win32k.EngCreateBitmap@24 -EngCreatePalette@24=win32k.EngCreatePalette@24 -EngCreateSemaphore@0=win32k.EngCreateSemaphore@0 -EngDeletePalette@4=win32k.EngDeletePalette@4 -EngDeleteSemaphore@4=win32k.EngDeleteSemaphore@4 -EngDeleteSurface@4=win32k.EngDeleteSurface@4 -EngFindImageProcAddress@8=win32k.EngFindImageProcAddress@8 -EngFreeMem@4=win32k.EngFreeMem@4 -EngFreeUserMem@4=win32k.EngFreeUserMem@4 -EngLoadImage@4=win32k.EngLoadImage@4 -EngLockSurface@4=win32k.EngLockSurface@4 -EngReleaseSemaphore@4=win32k.EngReleaseSemaphore@4 -EngSetLastError@4=win32k.EngSetLastError@4 -EngUnloadImage@4=win32k.EngUnloadImage@4 -EngUnlockSurface@4=win32k.EngUnlockSurface@4 - diff --git a/reactos/drivers/directx/dxgthk/dxgthk.rbuild b/reactos/drivers/directx/dxgthk/dxgthk.rbuild index d6e2448d1db..c69bce2e9c4 100644 --- a/reactos/drivers/directx/dxgthk/dxgthk.rbuild +++ b/reactos/drivers/directx/dxgthk/dxgthk.rbuild @@ -2,10 +2,11 @@ - + . win32k main.c dxgthk.rc + dxgthk.spec diff --git a/reactos/drivers/directx/dxgthk/dxgthk.spec b/reactos/drivers/directx/dxgthk/dxgthk.spec new file mode 100644 index 00000000000..dbe265ef2e0 --- /dev/null +++ b/reactos/drivers/directx/dxgthk/dxgthk.spec @@ -0,0 +1,20 @@ +@ stdcall DriverEntry(ptr ptr) +@ stdcall EngAcquireSemaphore(ptr) win32k.EngAcquireSemaphore +@ stdcall EngAllocMem(long long long) win32k.EngAllocMem +@ stdcall EngAllocUserMem(long long) win32k.EngAllocUserMem +@ stdcall EngCopyBits(ptr ptr ptr ptr ptr ptr) win32k.EngCopyBits +@ stdcall EngCreateBitmap(long long long long ptr) win32k.EngCreateBitmap +@ stdcall EngCreatePalette(long long long long long long) win32k.EngCreatePalette +@ stdcall EngCreateSemaphore() win32k.EngCreateSemaphore +@ stdcall EngDeletePalette(ptr) win32k.EngDeletePalette +@ stdcall EngDeleteSemaphore(ptr) win32k.EngDeleteSemaphore +@ stdcall EngDeleteSurface(ptr) win32k.EngDeleteSurface +@ stdcall EngFindImageProcAddress(ptr str) win32k.EngFindImageProcAddress +@ stdcall EngFreeMem(ptr) win32k.EngFreeMem +@ stdcall EngFreeUserMem(ptr) win32k.EngFreeUserMem +@ stdcall EngLoadImage(wstr) win32k.EngLoadImage +@ stdcall EngLockSurface(ptr) win32k.EngLockSurface +@ stdcall EngReleaseSemaphore(ptr) win32k.EngReleaseSemaphore +@ stdcall EngSetLastError(long) win32k.EngSetLastError +@ stdcall EngUnloadImage(ptr) win32k.EngUnloadImage +@ stdcall EngUnlockSurface(ptr) win32k.EngUnlockSurface diff --git a/reactos/drivers/directx/dxgthk/main.c b/reactos/drivers/directx/dxgthk/main.c index 11add7a18e0..87ec3e0fc76 100644 --- a/reactos/drivers/directx/dxgthk/main.c +++ b/reactos/drivers/directx/dxgthk/main.c @@ -12,7 +12,7 @@ /* DDK/NDK/SDK Headers */ #include -NTSTATUS +NTSTATUS NTAPI DriverEntry(IN PVOID Context1, IN PVOID Context2) { From 4f84f4dabfa763a386b914eb42697352765e9554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 11:12:15 +0000 Subject: [PATCH 235/304] Replace .def file by a .spec file svn path=/trunk/; revision=35221 --- reactos/dll/win32/wdmaud.drv/wdmaud.c | 2 +- reactos/dll/win32/wdmaud.drv/wdmaud.def | 9 --------- reactos/dll/win32/wdmaud.drv/wdmaud.rbuild | 3 ++- reactos/dll/win32/wdmaud.drv/wdmaud.spec | 6 ++++++ 4 files changed, 9 insertions(+), 11 deletions(-) delete mode 100644 reactos/dll/win32/wdmaud.drv/wdmaud.def create mode 100644 reactos/dll/win32/wdmaud.drv/wdmaud.spec diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.c b/reactos/dll/win32/wdmaud.drv/wdmaud.c index c8f80fe34e3..2a3d61d426b 100644 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.c +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.c @@ -216,7 +216,7 @@ modMessage(UINT uDevice, return MMSYSERR_NOTSUPPORTED; } -LRESULT +LRESULT APIENTRY DriverProc(DWORD dwDriverID, HDRVR hDriver, UINT uiMessage, diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.def b/reactos/dll/win32/wdmaud.drv/wdmaud.def deleted file mode 100644 index daefb1b5ed7..00000000000 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.def +++ /dev/null @@ -1,9 +0,0 @@ -LIBRARY wdmaud.drv - -EXPORTS -DriverProc -mxdMessage -auxMessage -wodMessage -widMessage -modMessage diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild index d3ff91e5edb..c9db2a8999c 100644 --- a/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.rbuild @@ -1,5 +1,5 @@ - + . advapi32 @@ -9,4 +9,5 @@ winmm wdmaud.c wdmaud.rc + wdmaud.spec diff --git a/reactos/dll/win32/wdmaud.drv/wdmaud.spec b/reactos/dll/win32/wdmaud.drv/wdmaud.spec new file mode 100644 index 00000000000..d6195cce4a3 --- /dev/null +++ b/reactos/dll/win32/wdmaud.drv/wdmaud.spec @@ -0,0 +1,6 @@ +@ stdcall DriverProc(ptr long long ptr ptr) +@ stdcall mxdMessage(long long long long long) +@ stdcall auxMessage(long long long long long) +@ stdcall wodMessage(long long long long long) +@ stdcall widMessage(long long long long long) +@ stdcall modMessage(long long long long long) From a4ca6c17043768ca440d4c778063ec50087dcd3b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 13:07:18 +0000 Subject: [PATCH 236/304] Replace .def file by a .spec file svn path=/trunk/; revision=35225 --- reactos/dll/directx/ksproxy/ksproxy.def | 12 ------------ reactos/dll/directx/ksproxy/ksproxy.rbuild | 3 ++- reactos/dll/directx/ksproxy/ksproxy.spec | 10 ++++++++++ 3 files changed, 12 insertions(+), 13 deletions(-) delete mode 100644 reactos/dll/directx/ksproxy/ksproxy.def create mode 100644 reactos/dll/directx/ksproxy/ksproxy.spec diff --git a/reactos/dll/directx/ksproxy/ksproxy.def b/reactos/dll/directx/ksproxy/ksproxy.def deleted file mode 100644 index 3e31ddf2af6..00000000000 --- a/reactos/dll/directx/ksproxy/ksproxy.def +++ /dev/null @@ -1,12 +0,0 @@ -LIBRARY ksproxy.ax -EXPORTS -DllCanUnloadNow -DllGetClassObject -DllRegisterServer -DllUnregisterServer -KsGetMediaType -KsGetMediaTypeCount -KsGetMultiplePinFactoryItems -KsOpenDefaultDevice -KsResolveRequiredAttributes -KsSynchronousDeviceControl diff --git a/reactos/dll/directx/ksproxy/ksproxy.rbuild b/reactos/dll/directx/ksproxy/ksproxy.rbuild index ca2795c8a95..9f427ba5609 100644 --- a/reactos/dll/directx/ksproxy/ksproxy.rbuild +++ b/reactos/dll/directx/ksproxy/ksproxy.rbuild @@ -2,7 +2,7 @@ - + . 0x600 0x600 @@ -11,5 +11,6 @@ ntdll ksproxy.c ksproxy.rc + ksproxy.spec \ No newline at end of file diff --git a/reactos/dll/directx/ksproxy/ksproxy.spec b/reactos/dll/directx/ksproxy/ksproxy.spec new file mode 100644 index 00000000000..c4caec6845e --- /dev/null +++ b/reactos/dll/directx/ksproxy/ksproxy.spec @@ -0,0 +1,10 @@ +@ stdcall DllCanUnloadNow() +@ stdcall DllGetClassObject(ptr ptr ptr) +@ stdcall DllRegisterServer() +@ stdcall DllUnregisterServer() +@ stdcall KsGetMediaType(long ptr ptr long) +@ stdcall KsGetMediaTypeCount(ptr long ptr) +@ stdcall KsGetMultiplePinFactoryItems(ptr long long ptr) +@ stdcall KsOpenDefaultDevice(ptr long ptr) +@ stdcall KsResolveRequiredAttributes(ptr ptr) +@ stdcall KsSynchronousDeviceControl(ptr long ptr long ptr long ptr) From 9b782f79ece2e47d561983b66fa74193603827e9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 13:10:39 +0000 Subject: [PATCH 237/304] Replace .def file by a .spec file svn path=/trunk/; revision=35227 --- reactos/dll/win32/acledit/acledit.c | 2 +- reactos/dll/win32/acledit/acledit.def | 12 ------------ reactos/dll/win32/acledit/acledit.rbuild | 3 ++- reactos/dll/win32/acledit/acledit.spec | 7 +++++++ reactos/dll/win32/acledit/stubs.c | 2 +- 5 files changed, 11 insertions(+), 15 deletions(-) delete mode 100644 reactos/dll/win32/acledit/acledit.def create mode 100644 reactos/dll/win32/acledit/acledit.spec diff --git a/reactos/dll/win32/acledit/acledit.c b/reactos/dll/win32/acledit/acledit.c index 94119f0f36f..56cd4ab298d 100644 --- a/reactos/dll/win32/acledit/acledit.c +++ b/reactos/dll/win32/acledit/acledit.c @@ -16,7 +16,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id$ +/* $Id: acledit.c 35011 2008-08-01 16:29:40Z sginsberg $ * * PROJECT: ReactOS Access Control List Editor * FILE: lib/acledit/acledit.c diff --git a/reactos/dll/win32/acledit/acledit.def b/reactos/dll/win32/acledit/acledit.def deleted file mode 100644 index 9c6984aa62f..00000000000 --- a/reactos/dll/win32/acledit/acledit.def +++ /dev/null @@ -1,12 +0,0 @@ -LIBRARY acledit.dll - -EXPORTS -EditAuditInfo -EditOwnerInfo -EditPermissionInfo -FMExtensionProcW -SedDiscretionaryAclEditor -SedSystemAclEditor -SedTakeOwnership - -; EOF diff --git a/reactos/dll/win32/acledit/acledit.rbuild b/reactos/dll/win32/acledit/acledit.rbuild index e71a8ee9ccc..cad5f42e0aa 100644 --- a/reactos/dll/win32/acledit/acledit.rbuild +++ b/reactos/dll/win32/acledit/acledit.rbuild @@ -1,5 +1,5 @@ - + . @@ -11,4 +11,5 @@ acledit.c stubs.c acledit.rc + acledit.spec diff --git a/reactos/dll/win32/acledit/acledit.spec b/reactos/dll/win32/acledit/acledit.spec new file mode 100644 index 00000000000..0d2d559f9fe --- /dev/null +++ b/reactos/dll/win32/acledit/acledit.spec @@ -0,0 +1,7 @@ +@ stdcall EditAuditInfo(long) +@ stdcall EditOwnerInfo(long) +@ stdcall EditPermissionInfo(long) +@ stdcall FMExtensionProcW(ptr long long) +@ stdcall SedDiscretionaryAclEditor(ptr ptr wstr ptr ptr wstr ptr ptr ptr long long ptr long) +@ stdcall SedSystemAclEditor(ptr ptr wstr ptr ptr wstr ptr ptr ptr long ptr long) +@ stdcall SedTakeOwnership(ptr ptr wstr wstr wstr long ptr ptr ptr long long ptr ptr long) diff --git a/reactos/dll/win32/acledit/stubs.c b/reactos/dll/win32/acledit/stubs.c index b679c6036aa..0948892b9d9 100644 --- a/reactos/dll/win32/acledit/stubs.c +++ b/reactos/dll/win32/acledit/stubs.c @@ -1,4 +1,4 @@ -/* $Id$ +/* $Id: stubs.c 35011 2008-08-01 16:29:40Z sginsberg $ * * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS Access Control List Editor From 9a953b4c781cb12851fbebb8a9235653bbc82297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 13:56:45 +0000 Subject: [PATCH 238/304] Fix vDbgPrintExWithPrefix export svn path=/trunk/; revision=35230 --- reactos/dll/ntdll/def/ntdll_i386.def | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/ntdll/def/ntdll_i386.def b/reactos/dll/ntdll/def/ntdll_i386.def index 7508c08a3bc..ad9b6cdfe2c 100644 --- a/reactos/dll/ntdll/def/ntdll_i386.def +++ b/reactos/dll/ntdll/def/ntdll_i386.def @@ -1076,7 +1076,7 @@ toupper towlower towupper vsprintf -vDbgPrintExWithPrefix +vDbgPrintExWithPrefix@20 wcscat wcschr wcscmp From 1b69810a3b8a572ca0278127a49cf729faaafea5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 14:10:04 +0000 Subject: [PATCH 239/304] Replace .def file by a .spec file svn path=/trunk/; revision=35232 --- reactos/dll/win32/wshtcpip/wshtcpip.def | 23 ---------------------- reactos/dll/win32/wshtcpip/wshtcpip.rbuild | 3 ++- reactos/dll/win32/wshtcpip/wshtcpip.rc | 2 +- reactos/dll/win32/wshtcpip/wshtcpip.spec | 16 +++++++++++++++ 4 files changed, 19 insertions(+), 25 deletions(-) delete mode 100644 reactos/dll/win32/wshtcpip/wshtcpip.def create mode 100644 reactos/dll/win32/wshtcpip/wshtcpip.spec diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.def b/reactos/dll/win32/wshtcpip/wshtcpip.def deleted file mode 100644 index 642f35ea21b..00000000000 --- a/reactos/dll/win32/wshtcpip/wshtcpip.def +++ /dev/null @@ -1,23 +0,0 @@ -; WSHTCPIP.DLL - Windows Sockets Helper DLL for TCP/IP - -LIBRARY wshtcpip.dll - -EXPORTS -WSHAddressToString -WSHEnumProtocols -WSHGetBroadcastSockaddr -WSHGetProviderGuid -WSHGetSockaddrType -WSHGetSocketInformation -WSHGetWildcardSockaddr -WSHGetWinsockMapping -WSHGetWSAProtocolInfo -WSHIoctl -WSHJoinLeaf -WSHNotify -WSHOpenSocket -WSHOpenSocket2 -WSHSetSocketInformation -WSHStringToAddress - -; EOF diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild index 0fd9a7d9eb6..6bf2724e9e7 100644 --- a/reactos/dll/win32/wshtcpip/wshtcpip.rbuild +++ b/reactos/dll/win32/wshtcpip/wshtcpip.rbuild @@ -1,11 +1,12 @@ - + . ntdll kernel32 ws2_32 wshtcpip.c wshtcpip.rc + wshtcpip.spec diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.rc b/reactos/dll/win32/wshtcpip/wshtcpip.rc index ae23c666e26..c8ccea72952 100644 --- a/reactos/dll/win32/wshtcpip/wshtcpip.rc +++ b/reactos/dll/win32/wshtcpip/wshtcpip.rc @@ -1,4 +1,4 @@ -/* $Id$ */ +/* $Id: wshtcpip.rc 21805 2006-05-05 15:40:59Z fireball $ */ #define REACTOS_VERSION_DLL #define REACTOS_STR_FILE_DESCRIPTION "Windows Sockets 2 API\0" diff --git a/reactos/dll/win32/wshtcpip/wshtcpip.spec b/reactos/dll/win32/wshtcpip/wshtcpip.spec new file mode 100644 index 00000000000..bf9c7743528 --- /dev/null +++ b/reactos/dll/win32/wshtcpip/wshtcpip.spec @@ -0,0 +1,16 @@ +@ stdcall WSHAddressToString(ptr long ptr ptr ptr) +@ stdcall WSHEnumProtocols(ptr wstr ptr ptr) +@ stdcall WSHGetBroadcastSockaddr(ptr ptr ptr) +@ stdcall WSHGetProviderGuid(wstr ptr) +@ stdcall WSHGetSockaddrType(ptr long ptr) +@ stdcall WSHGetSocketInformation(ptr long ptr ptr long long ptr long) +@ stdcall WSHGetWildcardSockaddr(ptr ptr ptr) +@ stdcall WSHGetWinsockMapping(ptr long) +@ stdcall WSHGetWSAProtocolInfo(wstr ptr ptr) +@ stdcall WSHIoctl(ptr long ptr ptr long ptr long ptr long ptr ptr ptr ptr) +@ stdcall WSHJoinLeaf(ptr long ptr ptr ptr long ptr long ptr ptr ptr ptr long) +@ stdcall WSHNotify(ptr long ptr ptr long) +@ stdcall WSHOpenSocket(ptr ptr ptr ptr ptr ptr) +@ stdcall WSHOpenSocket2(ptr ptr ptr long long ptr ptr ptr) +@ stdcall WSHSetSocketInformation(ptr long ptr ptr long long ptr long) +@ stdcall WSHStringToAddress(wstr long ptr ptr ptr) From 8648e503409233a12bb0a35bc09ab09fe90ce79b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 14:19:48 +0000 Subject: [PATCH 240/304] Replace .def file by a .spec file svn path=/trunk/; revision=35233 --- reactos/dll/win32/ntmarta/ntmarta.c | 2 +- reactos/dll/win32/ntmarta/ntmarta.rbuild | 3 ++- .../ntmarta/{ntmarta.def => ntmarta.spec} | 23 ++++++++----------- 3 files changed, 12 insertions(+), 16 deletions(-) rename reactos/dll/win32/ntmarta/{ntmarta.def => ntmarta.spec} (60%) diff --git a/reactos/dll/win32/ntmarta/ntmarta.c b/reactos/dll/win32/ntmarta/ntmarta.c index c18b65223f6..7f7f523066b 100644 --- a/reactos/dll/win32/ntmarta/ntmarta.c +++ b/reactos/dll/win32/ntmarta/ntmarta.c @@ -16,7 +16,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -/* $Id$ +/* $Id: ntmarta.c 31176 2007-12-12 07:04:12Z weiden $ * * PROJECT: ReactOS MARTA provider * FILE: lib/ntmarta/ntmarta.c diff --git a/reactos/dll/win32/ntmarta/ntmarta.rbuild b/reactos/dll/win32/ntmarta/ntmarta.rbuild index b1a2e7d96f3..bbe1ac33df6 100644 --- a/reactos/dll/win32/ntmarta/ntmarta.rbuild +++ b/reactos/dll/win32/ntmarta/ntmarta.rbuild @@ -1,5 +1,5 @@ - + . 0x0500 0x600 @@ -10,5 +10,6 @@ user32 ntmarta.c ntmarta.rc + ntmarta.spec ntmarta.h diff --git a/reactos/dll/win32/ntmarta/ntmarta.def b/reactos/dll/win32/ntmarta/ntmarta.spec similarity index 60% rename from reactos/dll/win32/ntmarta/ntmarta.def rename to reactos/dll/win32/ntmarta/ntmarta.spec index e001a860320..f1c90fa7f75 100644 --- a/reactos/dll/win32/ntmarta/ntmarta.def +++ b/reactos/dll/win32/ntmarta/ntmarta.spec @@ -1,16 +1,13 @@ -LIBRARY ntmarta.dll - -EXPORTS -AccFreeIndexArray -AccGetInheritanceSource +@ stdcall AccFreeIndexArray(ptr long ptr) +@ stdcall AccGetInheritanceSource(wstr long long long ptr long ptr ptr ptr ptr) ;AccProvHandleGrantAccessRights -AccRewriteGetExplicitEntriesFromAcl -AccRewriteGetHandleRights -AccRewriteGetNamedRights -AccRewriteSetEntriesInAcl -AccRewriteSetHandleRights -AccRewriteSetNamedRights -AccTreeResetNamedSecurityInfo +@ stdcall AccRewriteGetExplicitEntriesFromAcl(ptr ptr ptr) +@ stdcall AccRewriteGetHandleRights(ptr long long ptr ptr ptr ptr ptr) +@ stdcall AccRewriteGetNamedRights(wstr long long ptr ptr ptr ptr ptr) +@ stdcall AccRewriteSetEntriesInAcl(long ptr ptr ptr) +@ stdcall AccRewriteSetHandleRights(ptr long long ptr) +@ stdcall AccRewriteSetNamedRights(wstr long long ptr) +@ stdcall AccTreeResetNamedSecurityInfo(wstr long long ptr ptr ptr ptr long ptr ptr ptr) ;AccConvertAccessMaskToActrlAccess ;AccConvertAccessToSD ;AccConvertAccessToSecurityDescriptor @@ -43,5 +40,3 @@ AccTreeResetNamedSecurityInfo ;AccSetEntriesInAList ;EventGuidToName ;EventNameFree - -; EOF From 3423abf12549474fddd253c164d9a0a2d029cf21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 14:24:51 +0000 Subject: [PATCH 241/304] Add missing APIENTRY svn path=/trunk/; revision=35234 --- reactos/include/psdk/ntgdi.h | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/reactos/include/psdk/ntgdi.h b/reactos/include/psdk/ntgdi.h index b7239f9b6e5..751c7685663 100644 --- a/reactos/include/psdk/ntgdi.h +++ b/reactos/include/psdk/ntgdi.h @@ -2843,6 +2843,7 @@ NtGdiFullscreenControl( W32KAPI DWORD +APIENTRY NtGdiGetCharSet( IN HDC hdc ); @@ -2897,6 +2898,7 @@ NtGdiQueryFontAssocInfo( #if (_WIN32_WINNT >= 0x0500) W32KAPI DWORD +APIENTRY NtGdiGetFontUnicodeRanges( IN HDC hdc, OUT OPTIONAL LPGLYPHSET pgs @@ -2906,6 +2908,7 @@ NtGdiGetFontUnicodeRanges( #ifdef LANGPACK W32KAPI BOOL +APIENTRY NtGdiGetRealizationInfo( IN HDC hdc, OUT PREALIZATION_INFO pri, @@ -2915,6 +2918,7 @@ NtGdiGetRealizationInfo( W32KAPI BOOL +APIENTRY NtGdiAddRemoteMMInstanceToDC( IN HDC hdc, IN DOWNLOADDESIGNVECTOR *pddv, @@ -3518,6 +3522,7 @@ NtGdiEngCheckAbort( W32KAPI DHPDEV +APIENTRY NtGdiGetDhpdev( IN HDEV hdev ); From 85355cf4c82b54ac2f7a0a1d068d12b27537752d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 14:47:13 +0000 Subject: [PATCH 242/304] Add missing APIENTRY svn path=/trunk/; revision=35235 --- reactos/subsystems/win32/win32k/objects/dc.c | 1 + reactos/subsystems/win32/win32k/objects/text.c | 1 + reactos/subsystems/win32/win32k/stubs/stubs.c | 3 +++ 3 files changed, 5 insertions(+) diff --git a/reactos/subsystems/win32/win32k/objects/dc.c b/reactos/subsystems/win32/win32k/objects/dc.c index f9570d1a355..60198717dbb 100644 --- a/reactos/subsystems/win32/win32k/objects/dc.c +++ b/reactos/subsystems/win32/win32k/objects/dc.c @@ -3480,6 +3480,7 @@ NtGdiSetBoundsRect( * @implemented */ DHPDEV +APIENTRY NtGdiGetDhpdev( IN HDEV hdev) { diff --git a/reactos/subsystems/win32/win32k/objects/text.c b/reactos/subsystems/win32/win32k/objects/text.c index bd875856787..77606d81765 100644 --- a/reactos/subsystems/win32/win32k/objects/text.c +++ b/reactos/subsystems/win32/win32k/objects/text.c @@ -3346,6 +3346,7 @@ IntGdiGetCharSet(HDC hDC) DWORD +APIENTRY NtGdiGetCharSet(HDC hDC) { PDC Dc; diff --git a/reactos/subsystems/win32/win32k/stubs/stubs.c b/reactos/subsystems/win32/win32k/stubs/stubs.c index d388cec7c72..2851bbc50c2 100644 --- a/reactos/subsystems/win32/win32k/stubs/stubs.c +++ b/reactos/subsystems/win32/win32k/stubs/stubs.c @@ -1607,6 +1607,7 @@ NtGdiRemoveMergeFont( * @unimplemented */ BOOL +APIENTRY NtGdiAddRemoteMMInstanceToDC( IN HDC hdc, IN DOWNLOADDESIGNVECTOR *pddv, @@ -2149,6 +2150,7 @@ NtGdiGetMonitorID( * @unimplemented */ BOOL +APIENTRY NtGdiGetRealizationInfo( IN HDC hdc, OUT PREALIZATION_INFO pri, @@ -2268,6 +2270,7 @@ NtGdiQueryFontAssocInfo( * @unimplemented */ DWORD +APIENTRY NtGdiGetFontUnicodeRanges( IN HDC hdc, OUT OPTIONAL LPGLYPHSET pgs) From addd8647a6072eae32a3ab30a9145746feeb9228 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 9 Aug 2008 15:18:20 +0000 Subject: [PATCH 243/304] - Update Russian translation svn path=/trunk/; revision=35236 --- reactos/base/applications/calc/lang/ru-RU.rc | 404 +++++++++---------- 1 file changed, 202 insertions(+), 202 deletions(-) diff --git a/reactos/base/applications/calc/lang/ru-RU.rc b/reactos/base/applications/calc/lang/ru-RU.rc index af027ccf90a..3f608ff23f1 100644 --- a/reactos/base/applications/calc/lang/ru-RU.rc +++ b/reactos/base/applications/calc/lang/ru-RU.rc @@ -231,20 +231,20 @@ END IDD_DIALOG_CONVERSION DIALOGEX 0, 0, 320, 130 STYLE WS_MINIMIZEBOX | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "ReactOS Calculator" +CAPTION " ReactOS" MENU IDR_MENU_STANDARD FONT 8, "MS Shell Dlg" BEGIN - PUSHBUTTON "Convert",IDC_BUTTON_CONVERT,35,105,76,17 + PUSHBUTTON "",IDC_BUTTON_CONVERT,35,105,76,17 COMBOBOX IDC_COMBO_CATEGORY,4,31,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Category:",IDC_STATIC,4,20,56,8 + LTEXT ":",IDC_STATIC,4,20,56,8 COMBOBOX IDC_COMBO_FROM,4,60,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Convert from:",IDC_STATIC,4,49,56,8 + LTEXT " :",IDC_STATIC,4,49,75,8 COMBOBOX IDC_COMBO_TO,4,87,140,168,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP | CBS_SORT - LTEXT "Convert to:",IDC_STATIC,4,76,56,8 + LTEXT " :",IDC_STATIC,4,76,75,8 CONTROL "C",IDC_BUTTON_CANC,"Button",BS_OWNERDRAW | BS_CENTER | BS_VCENTER | BS_NOTIFY | WS_TABSTOP,276,24,40,17 CONTROL "CE",IDC_BUTTON_CE,"Button",BS_OWNERDRAW | BS_CENTER | @@ -444,256 +444,256 @@ END // types of conversion STRINGTABLE DISCARDABLE BEGIN - IDS_CONV_AREA "Area" - IDS_CONV_CONSUMPTION "Consumption (engines)" - IDS_CONV_CURRENCY "Currencies" - IDS_CONV_ENERGY "Energy" - IDS_CONV_LENGTH "Lenghts" - IDS_CONV_POWER "Power" - IDS_CONV_PRESSURE "Pressure" - IDS_CONV_TEMPERATURE "Temperature" - IDS_CONV_VELOCITY "Velocity" - IDS_CONV_VOLUME "Volume" - IDS_CONV_WEIGHT "Weights" + IDS_CONV_AREA "" + IDS_CONV_CONSUMPTION " ()" + IDS_CONV_CURRENCY "" + IDS_CONV_ENERGY "" + IDS_CONV_LENGTH "" + IDS_CONV_POWER "" + IDS_CONV_PRESSURE "" + IDS_CONV_TEMPERATURE "" + IDS_CONV_VELOCITY "" + IDS_CONV_VOLUME "" + IDS_CONV_WEIGHT "" END // TYPES OF AREAS STRINGTABLE DISCARDABLE BEGIN - IDS_AREA_ACRES "Acres" - IDS_AREA_ACRES_BRAZIL "Acres (Brazil)" - IDS_AREA_ACRES_FRANCE "Acres (France)" - IDS_AREA_ACRES_SCOTS "Acres (Scots)" - IDS_AREA_ACRES_US "Acres (US)" - IDS_AREA_ARES "Ares" - IDS_AREA_CHOU "Chou" - IDS_AREA_DANBO "Danbo" - IDS_AREA_HECTARES "Hectares" - IDS_AREA_JEONGBO "Jeongbo" - IDS_AREA_MORGEN_HUNGARY "Morgen (Hungary)" - IDS_AREA_MU "Mu" - IDS_AREA_PING "Ping" - IDS_AREA_PYEONG "Pyeong" - IDS_AREA_PYEONGBANGJA "Pyeongbangja" - IDS_AREA_RAI "Rai" - IDS_AREA_SE "Se" - IDS_AREA_SQUARE_CENTIMETERS "Square centimeters" - IDS_AREA_SQUARE_CHR "Square chr" - IDS_AREA_SQUARE_FATHOMS "Square fathoms" - IDS_AREA_SQUARE_FATHOMS_HUNGARY "Square fathoms (Hungary)" - IDS_AREA_SQUARE_FEET "Square feet" - IDS_AREA_SQUARE_INCHES "Square inches" - IDS_AREA_SQUARE_KILOMETERS "Square kilometers" - IDS_AREA_SQUARE_LAR "Square lar" - IDS_AREA_SQUARE_METER "Square meter" - IDS_AREA_SQUARE_MILES "Square miles" - IDS_AREA_SQUARE_MILLIMETERS "Square millimeters" - IDS_AREA_SQUARE_SHAKU "Square shaku" - IDS_AREA_SQUARE_TSUEN "Square tsuen" - IDS_AREA_SQUARE_VA "Square va" - IDS_AREA_SQUARE_YARD "Square yard" - IDS_AREA_TAN "Tan" - IDS_AREA_TSUBO "Tsubo" + IDS_AREA_ACRES "" + IDS_AREA_ACRES_BRAZIL " ()" + IDS_AREA_ACRES_FRANCE " ()" + IDS_AREA_ACRES_SCOTS " ()" + IDS_AREA_ACRES_US " ()" + IDS_AREA_ARES "" + IDS_AREA_CHOU "" + IDS_AREA_DANBO "" + IDS_AREA_HECTARES "" + IDS_AREA_JEONGBO "" + IDS_AREA_MORGEN_HUNGARY " ()" + IDS_AREA_MU "" + IDS_AREA_PING "" + IDS_AREA_PYEONG "" + IDS_AREA_PYEONGBANGJA "" + IDS_AREA_RAI "" + IDS_AREA_SE " " + IDS_AREA_SQUARE_CENTIMETERS " " + IDS_AREA_SQUARE_CHR " " + IDS_AREA_SQUARE_FATHOMS " " + IDS_AREA_SQUARE_FATHOMS_HUNGARY " ()" + IDS_AREA_SQUARE_FEET " " + IDS_AREA_SQUARE_INCHES " " + IDS_AREA_SQUARE_KILOMETERS " " + IDS_AREA_SQUARE_LAR " " + IDS_AREA_SQUARE_METER " " + IDS_AREA_SQUARE_MILES " " + IDS_AREA_SQUARE_MILLIMETERS " " + IDS_AREA_SQUARE_SHAKU " " + IDS_AREA_SQUARE_TSUEN " " + IDS_AREA_SQUARE_VA " " + IDS_AREA_SQUARE_YARD " " + IDS_AREA_TAN "" + IDS_AREA_TSUBO "" END // TYPES OF COMSUMPTIONS STRINGTABLE DISCARDABLE BEGIN - IDS_CONSUMPTION_KM_PER_L "Kilometer/liter" - IDS_CONSUMPTION_L_PER_100_KM "Liters/100 kilometers" - IDS_CONSUMPTION_MILES_GALLON_UK "Miles/gallon (UK)" - IDS_CONSUMPTION_MILES_GALLON_US "Miles/gallon (US)" + IDS_CONSUMPTION_KM_PER_L "/" + IDS_CONSUMPTION_L_PER_100_KM "/100 " + IDS_CONSUMPTION_MILES_GALLON_UK "/ ()" + IDS_CONSUMPTION_MILES_GALLON_US "/ ()" END // TYPES OF CURRENCIES STRINGTABLE DISCARDABLE BEGIN - IDS_CURRENCY_AUSTRIAN_SCHILLING "Austrian schilling" - IDS_CURRENCY_BELGIAN_FRANC "Belgian franc" - IDS_CURRENCY_CYPRIOT_POUND "Cypriot pound" - IDS_CURRENCY_DEUTSCHE_MARK "Deutsche Mark" - IDS_CURRENCY_DUTCH_GUILDER "Dutch guilder" - IDS_CURRENCY_EURO "Euro" - IDS_CURRENCY_FINNISH_MARKKA "Finnish markka" - IDS_CURRENCY_FRENCH_FRANC "French franc" - IDS_CURRENCY_GREEK_DRACHMA "Greek Drachma" - IDS_CURRENCY_IRISH_POUND "Irish pound" - IDS_CURRENCY_ITALIAN_LIRA "Italian lira" - IDS_CURRENCY_LUXEMBOURG_FRANC "Luxembourg franc" - IDS_CURRENCY_MALTESE_LIRA "Maltese lira" - IDS_CURRENCY_PORTOGUESE_ESCUDO "Portoguese escudo" - IDS_CURRENCY_SLOVENIAN_TOLAR "Slovenian tolar" - IDS_CURRENCY_SPANISH_PESETA "Spanish peseta" + IDS_CURRENCY_AUSTRIAN_SCHILLING " " + IDS_CURRENCY_BELGIAN_FRANC " " + IDS_CURRENCY_CYPRIOT_POUND " " + IDS_CURRENCY_DEUTSCHE_MARK " " + IDS_CURRENCY_DUTCH_GUILDER " " + IDS_CURRENCY_EURO "" + IDS_CURRENCY_FINNISH_MARKKA " " + IDS_CURRENCY_FRENCH_FRANC " " + IDS_CURRENCY_GREEK_DRACHMA " " + IDS_CURRENCY_IRISH_POUND " " + IDS_CURRENCY_ITALIAN_LIRA " " + IDS_CURRENCY_LUXEMBOURG_FRANC " " + IDS_CURRENCY_MALTESE_LIRA " " + IDS_CURRENCY_PORTOGUESE_ESCUDO " " + IDS_CURRENCY_SLOVENIAN_TOLAR " " + IDS_CURRENCY_SPANISH_PESETA " " END // TYPES OF ENERGIES STRINGTABLE DISCARDABLE BEGIN - IDS_ENERGY_15_C_CALORIES "15 ^C calories" - IDS_ENERGY_ERGS "Ergs" - IDS_ENERGY_IT_CALORIES "International Table calories" - IDS_ENERGY_JOULES "Joules" - IDS_ENERGY_KILOJOULES "Kilojoules" - IDS_ENERGY_KILOWATT_HOURS "Kilowatt hours" - IDS_ENERGY_NUTRITION_CALORIES "Nutrition calories" - IDS_ENERGY_TH_CALORIES "Thermochemical calorie" + IDS_ENERGY_15_C_CALORIES " " + IDS_ENERGY_ERGS "" + IDS_ENERGY_IT_CALORIES " " + IDS_ENERGY_JOULES "" + IDS_ENERGY_KILOJOULES "" + IDS_ENERGY_KILOWATT_HOURS "-" + IDS_ENERGY_NUTRITION_CALORIES " " + IDS_ENERGY_TH_CALORIES " " END // TYPES OF LENGTHS STRINGTABLE DISCARDABLE BEGIN - IDS_LENGTH_ANGSTROMS "Angstroms" - IDS_LENGTH_ASTRONOMILA_UNITS "Astronomila units" - IDS_LENGTH_BARLEYCORNS "Barleycorns" - IDS_LENGTH_CENTIMETERS "Centimeters" - IDS_LENGTH_CHAINS_UK "Chains (UK)" - IDS_LENGTH_CHI "Chi" - IDS_LENGTH_CHOU "Chou" - IDS_LENGTH_CHR "Chr" - IDS_LENGTH_CUN "Cun" - IDS_LENGTH_FATHOMS "Fathoms" - IDS_LENGTH_FATHOMS_HUNGARY "Fathoms (Hungary)" - IDS_LENGTH_FEET "Feet" - IDS_LENGTH_FURLONGS "Furlongs" - IDS_LENGTH_GAN "Gan" - IDS_LENGTH_HANDS "Hands" - IDS_LENGTH_HUNH "Hunh" - IDS_LENGTH_INCHES "Inches" - IDS_LENGTH_JA "Ja" - IDS_LENGTH_JEONG "Jeong" - IDS_LENGTH_KABIET "Kabiet" - IDS_LENGTH_KEN "Ken" - IDS_LENGTH_KEUB "Keub" - IDS_LENGTH_KILOMETERS "Kilometers" - IDS_LENGTH_LAR "Lar" - IDS_LENGTH_LIGHT_YEARS "Light years" - IDS_LENGTH_LINKS_UK "Links (UK)" - IDS_LENGTH_METERS "Meters" - IDS_LENGTH_MILES "Miles" - IDS_LENGTH_MILLIMETERS "Millimeters" - IDS_LENGTH_NAUTICAL_MILES "Nautical miles" - IDS_LENGTH_NIEU "Nieu" - IDS_LENGTH_PARSECS "Parsecs" - IDS_LENGTH_PICAS "Picas" - IDS_LENGTH_RI_JAPAN "Ri (Japan)" - IDS_LENGTH_RI_KOREA "Ri (Korea)" - IDS_LENGTH_SAWK "Sawk" - IDS_LENGTH_SEN "Sen" - IDS_LENGTH_SHAKU "Shaku" - IDS_LENGTH_SPAN "Span" - IDS_LENGTH_SUN "Sun" - IDS_LENGTH_TSUEN "Tsuen" - IDS_LENGTH_VA "Va" - IDS_LENGTH_YARDS "Yards" - IDS_LENGTH_YOTE "Yote" - IDS_LENGTH_ZHANG "Zhang" + IDS_LENGTH_ANGSTROMS "" + IDS_LENGTH_ASTRONOMILA_UNITS " " + IDS_LENGTH_BARLEYCORNS "" + IDS_LENGTH_CENTIMETERS "" + IDS_LENGTH_CHAINS_UK " ()" + IDS_LENGTH_CHI "" + IDS_LENGTH_CHOU "" + IDS_LENGTH_CHR "" + IDS_LENGTH_CUN "" + IDS_LENGTH_FATHOMS "" + IDS_LENGTH_FATHOMS_HUNGARY " ()" + IDS_LENGTH_FEET "" + IDS_LENGTH_FURLONGS "" + IDS_LENGTH_GAN "" + IDS_LENGTH_HANDS "" + IDS_LENGTH_HUNH "" + IDS_LENGTH_INCHES "" + IDS_LENGTH_JA "" + IDS_LENGTH_JEONG "" + IDS_LENGTH_KABIET "" + IDS_LENGTH_KEN "" + IDS_LENGTH_KEUB "" + IDS_LENGTH_KILOMETERS "" + IDS_LENGTH_LAR "" + IDS_LENGTH_LIGHT_YEARS " " + IDS_LENGTH_LINKS_UK " ()" + IDS_LENGTH_METERS "" + IDS_LENGTH_MILES "" + IDS_LENGTH_MILLIMETERS "" + IDS_LENGTH_NAUTICAL_MILES " " + IDS_LENGTH_NIEU "" + IDS_LENGTH_PARSECS "" + IDS_LENGTH_PICAS "" + IDS_LENGTH_RI_JAPAN " ()" + IDS_LENGTH_RI_KOREA " ()" + IDS_LENGTH_SAWK "" + IDS_LENGTH_SEN "" + IDS_LENGTH_SHAKU "" + IDS_LENGTH_SPAN "" + IDS_LENGTH_SUN "" + IDS_LENGTH_TSUEN "" + IDS_LENGTH_VA "" + IDS_LENGTH_YARDS "" + IDS_LENGTH_YOTE "" + IDS_LENGTH_ZHANG "" END // TYPES OF POWERS STRINGTABLE DISCARDABLE BEGIN - IDS_POWER_HORSEPOWER "Horsepower" - IDS_POWER_KILOWATTS "Kilowatts" - IDS_POWER_MEGAWATTS "Megawatts" - IDS_POWER_WATTS "Watts" + IDS_POWER_HORSEPOWER " " + IDS_POWER_KILOWATTS "" + IDS_POWER_MEGAWATTS "" + IDS_POWER_WATTS "" END // TYPE OF PRESSURES STRINGTABLE DISCARDABLE BEGIN - IDS_PRESSURE_ATMOSPHERES "Atmospheres" - IDS_PRESSURE_BARS "Bars" - IDS_PRESSURE_MM_OF_MERCURY "Millimeters of mercury" - IDS_PRESSURE_PASCALS "Pascals" - IDS_PRESSURE_PSI "Pounds-force per square inch" + IDS_PRESSURE_ATMOSPHERES " ()" + IDS_PRESSURE_BARS "" + IDS_PRESSURE_MM_OF_MERCURY " " + IDS_PRESSURE_PASCALS "" + IDS_PRESSURE_PSI " " END // TYPES OF TEMPERATURES STRINGTABLE DISCARDABLE BEGIN - IDS_TEMPERATURE_CELSIUS "Celsius" - IDS_TEMPERATURE_FAHRENHEIT "Fahrenheit" - IDS_TEMPERATURE_KELVIN "Kelvin" - IDS_TEMPERATURE_RANKINE "Rankine" + IDS_TEMPERATURE_CELSIUS " ( )" + IDS_TEMPERATURE_FAHRENHEIT " ( )" + IDS_TEMPERATURE_KELVIN " ( )" + IDS_TEMPERATURE_RANKINE " ( Rankine)" END // TYPES OF VELOCITIES STRINGTABLE DISCARDABLE BEGIN - IDS_VELOCITY_FEET_HOUR "Feet/hour" - IDS_VELOCITY_KILOMETERS_HOUR "Kilometers/hour" - IDS_VELOCITY_KNOTS "Knots" - IDS_VELOCITY_MACH "Mach" - IDS_VELOCITY_METERS_SECOND "Meters/second" - IDS_VELOCITY_MILES_HOUR "Miles/hour" + IDS_VELOCITY_FEET_HOUR " " + IDS_VELOCITY_KILOMETERS_HOUR "/" + IDS_VELOCITY_KNOTS "" + IDS_VELOCITY_MACH "" + IDS_VELOCITY_METERS_SECOND " " + IDS_VELOCITY_MILES_HOUR " " END // TYPES OF VOLUMES STRINGTABLE DISCARDABLE BEGIN - IDS_VOLUME_BARRELS_UK "Barrels (UK)" - IDS_VOLUME_BARRELS_OIL "Barrels oil" - IDS_VOLUME_BUN "Bun" - IDS_VOLUME_BUSHELS_UK "Bushels (UK)" - IDS_VOLUME_BUSHELS_US "Bushels (US)" - IDS_VOLUME_CUBIC_CENTIMETERS "Cubic centimeters" - IDS_VOLUME_CUBIC_FEET "Cubic feet" - IDS_VOLUME_CUBIC_INCHES "Cubic inches" - IDS_VOLUME_CUBIC_METERS "Cubic meters" - IDS_VOLUME_CUBIC_YARDS "Cubic yards" - IDS_VOLUME_DOE "Doe" - IDS_VOLUME_FLUID_OUNCES_UK "Fluid ounces (UK)" - IDS_VOLUME_FLUID_OUNCES_US "Fluid ounces (US)" - IDS_VOLUME_GALLONS_UK "Gallons (UK)" - IDS_VOLUME_GALLONS_DRY_US "Gallons, dry (US)" - IDS_VOLUME_GALLONS_LIQUID_US "Gallons, liquid (US)" - IDS_VOLUME_GOU "Gou" - IDS_VOLUME_HOP "Hop" - IDS_VOLUME_ICCE "Icce" - IDS_VOLUME_KWIAN "Kwian" - IDS_VOLUME_LITERS "Liters" - IDS_VOLUME_MAL "Mal" - IDS_VOLUME_MILLILITERS "Milliliters" - IDS_VOLUME_PINTS_UK "Pints (UK)" - IDS_VOLUME_PINTS_DRY_US "Pints, dry (US)" - IDS_VOLUME_PINTS_LIQUID_US "Pints, liquid (US)" - IDS_VOLUME_QUARTS_UK "Quarts (UK)" - IDS_VOLUME_QUARTS_DRY_US "Quarts, dry (US)" - IDS_VOLUME_QUARTS_LIQUID_US "Quarts, liquid (US)" - IDS_VOLUME_SEKI "Seki" - IDS_VOLUME_SYOU "Syou" - IDS_VOLUME_TANANLOUNG "Tananloung" - IDS_VOLUME_TANG "Tang" - IDS_VOLUME_TO "To" + IDS_VOLUME_BARRELS_UK " ()" + IDS_VOLUME_BARRELS_OIL " " + IDS_VOLUME_BUN "" + IDS_VOLUME_BUSHELS_UK " ()" + IDS_VOLUME_BUSHELS_US " ()" + IDS_VOLUME_CUBIC_CENTIMETERS " " + IDS_VOLUME_CUBIC_FEET " " + IDS_VOLUME_CUBIC_INCHES " " + IDS_VOLUME_CUBIC_METERS " " + IDS_VOLUME_CUBIC_YARDS " " + IDS_VOLUME_DOE "" + IDS_VOLUME_FLUID_OUNCES_UK " ()" + IDS_VOLUME_FLUID_OUNCES_US " ()" + IDS_VOLUME_GALLONS_UK " ()" + IDS_VOLUME_GALLONS_DRY_US " ( , )" + IDS_VOLUME_GALLONS_LIQUID_US " ( , )" + IDS_VOLUME_GOU "" + IDS_VOLUME_HOP "" + IDS_VOLUME_ICCE "" + IDS_VOLUME_KWIAN "" + IDS_VOLUME_LITERS "" + IDS_VOLUME_MAL "" + IDS_VOLUME_MILLILITERS "" + IDS_VOLUME_PINTS_UK " ()" + IDS_VOLUME_PINTS_DRY_US " ( , )" + IDS_VOLUME_PINTS_LIQUID_US " ( , )" + IDS_VOLUME_QUARTS_UK " ()" + IDS_VOLUME_QUARTS_DRY_US " ( , )" + IDS_VOLUME_QUARTS_LIQUID_US " ( , )" + IDS_VOLUME_SEKI "" + IDS_VOLUME_SYOU "" + IDS_VOLUME_TANANLOUNG "" + IDS_VOLUME_TANG "" + IDS_VOLUME_TO "" END // TYPES OF WEIGHTS STRINGTABLE DISCARDABLE BEGIN - IDS_WEIGHT_BAHT "Baht" - IDS_WEIGHT_CARATS "Carats" - IDS_WEIGHT_CHUNG "Chung" - IDS_WEIGHT_DON "Don" - IDS_WEIGHT_GEUN "Geun" - IDS_WEIGHT_GRAMS "Grams" - IDS_WEIGHT_GWAN "Gwan" - IDS_WEIGHT_HARB "Harb" - IDS_WEIGHT_JIN_CHINA "Jin (China)" - IDS_WEIGHT_JIN_TAIWAN "Jin (Taiwan)" - IDS_WEIGHT_KAN "Kan" - IDS_WEIGHT_KILOGRAMS "Kilograms" - IDS_WEIGHT_KIN "Kin" - IDS_WEIGHT_LIANG_CHINA "Liang (China)" - IDS_WEIGHT_LIANG_TAIWAN "Liang (Taiwan)" - IDS_WEIGHT_MONME "Monme" - IDS_WEIGHT_OUNCES_AVOIRDUPOIS "Ounces, avoirdupois" - IDS_WEIGHT_OUNCES_TROY "Ounces, troy" - IDS_WEIGHT_POUNDS "Pounds" - IDS_WEIGHT_QUINTAL_METRIC "Quintal (metric)" - IDS_WEIGHT_SALOUNG "Saloung" - IDS_WEIGHT_STONES "Stones" - IDS_WEIGHT_TAMLUNG "Tamlung" - IDS_WEIGHT_TONNES "Tonnes" - IDS_WEIGHT_TONS_UK "Tons (UK)" - IDS_WEIGHT_TONS_US "Tons (US)" + IDS_WEIGHT_BAHT "" + IDS_WEIGHT_CARATS "" + IDS_WEIGHT_CHUNG "" + IDS_WEIGHT_DON "" + IDS_WEIGHT_GEUN "" + IDS_WEIGHT_GRAMS "" + IDS_WEIGHT_GWAN "" + IDS_WEIGHT_HARB "" + IDS_WEIGHT_JIN_CHINA " ()" + IDS_WEIGHT_JIN_TAIWAN " ()" + IDS_WEIGHT_KAN "" + IDS_WEIGHT_KILOGRAMS "" + IDS_WEIGHT_KIN "" + IDS_WEIGHT_LIANG_CHINA " ()" + IDS_WEIGHT_LIANG_TAIWAN " ()" + IDS_WEIGHT_MONME "" + IDS_WEIGHT_OUNCES_AVOIRDUPOIS " ()" + IDS_WEIGHT_OUNCES_TROY " ()" + IDS_WEIGHT_POUNDS "" + IDS_WEIGHT_QUINTAL_METRIC " ()" + IDS_WEIGHT_SALOUNG "" + IDS_WEIGHT_STONES "" + IDS_WEIGHT_TAMLUNG "" + IDS_WEIGHT_TONNES "" + IDS_WEIGHT_TONS_UK " (UK)" + IDS_WEIGHT_TONS_US " (US)" END From 2b53cd4661885ea10c55e7e084ff1715c46d71bf Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 9 Aug 2008 15:56:18 +0000 Subject: [PATCH 244/304] - Update Russian translation svn path=/trunk/; revision=35238 --- reactos/dll/win32/devmgr/lang/ru-RU.rc | 6 +++--- reactos/dll/win32/msgina/lang/ru-RU.rc | 28 ++++++++++++------------- reactos/dll/win32/userenv/lang/ru-RU.rc | 2 +- 3 files changed, 18 insertions(+), 18 deletions(-) diff --git a/reactos/dll/win32/devmgr/lang/ru-RU.rc b/reactos/dll/win32/devmgr/lang/ru-RU.rc index be5e72127c7..1b1861ce7c4 100644 --- a/reactos/dll/win32/devmgr/lang/ru-RU.rc +++ b/reactos/dll/win32/devmgr/lang/ru-RU.rc @@ -9,8 +9,8 @@ BEGIN IDS_STATUS " : %1" IDS_UNKNOWN "" IDS_LOCATIONSTR " %1!u! (%2)" - IDS_DEVCODE " ( %1!u!)" - IDS_DEVCODE2 " ( %2!u!)" + IDS_DEVCODE " ( %1!u!)" + IDS_DEVCODE2 " ( %2!u!)" IDS_ENABLEDEVICE " ()" IDS_DISABLEDEVICE " ()" IDS_UNKNOWNDEVICE " " @@ -58,7 +58,7 @@ BEGIN IDS_DEV_DISABLED " ." IDS_DEV_DISABLED2 " ." IDS_DEV_DEVLOADER_NOT_READY "The loaders for this device cannot load the required drivers." - IDS_DEV_DEVLOADER_NOT_READY2 "This display adapter is functioning correctly." + IDS_DEV_DEVLOADER_NOT_READY2 " ." IDS_DEV_DEVLOADER_NOT_READY3 "The loaders for this device cannot load the required drivers." IDS_DEV_DEVICE_NOT_THERE "This device is either not present, not working properly, or does not have all the drivers installed." IDS_DEV_MOVED "ReactOS is in the process of setting up this device." diff --git a/reactos/dll/win32/msgina/lang/ru-RU.rc b/reactos/dll/win32/msgina/lang/ru-RU.rc index b572312fc2e..a8d2e4e0787 100644 --- a/reactos/dll/win32/msgina/lang/ru-RU.rc +++ b/reactos/dll/win32/msgina/lang/ru-RU.rc @@ -15,7 +15,7 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS CAPTION " ReactOS" FONT 8,"MS Shell Dlg",400,0,1 BEGIN - LTEXT " Control-Alt-Delete",IDC_STATIC,16,18,144,14 + LTEXT " Control-Alt-Delete...",IDC_STATIC, 29, 22, 144, 14 END IDD_LOGGEDOUT_DLG DIALOGEX 0,0,275,147 @@ -23,28 +23,28 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS CAPTION "" FONT 8,"MS Shell Dlg",400,0,1 BEGIN - PUSHBUTTON "OK",IDOK,51,122,50,14,BS_DEFPUSHBUTTON - PUSHBUTTON "",IDCANCEL,115,122,50,14 - PUSHBUTTON "",IDC_SHUTDOWN,179,122,50,14 - LTEXT " :",IDC_STATIC,36,75,40,8 - LTEXT ":",IDC_STATIC,36,93,42,8 + PUSHBUTTON "OK", IDOK, 47, 122, 50, 14, BS_DEFPUSHBUTTON + PUSHBUTTON "", IDCANCEL, 109, 122, 50, 14 + PUSHBUTTON "", IDC_SHUTDOWN, 171, 122, 58, 14 + RTEXT " :", IDC_STATIC, 6, 75, 70, 8 + RTEXT ":", IDC_STATIC, 6, 93, 70, 8 EDITTEXT IDC_USERNAME,84,72,119,14,ES_AUTOHSCROLL EDITTEXT IDC_PASSWORD,84,91,119,14,ES_AUTOHSCROLL | ES_PASSWORD CONTROL "",IDC_ROSLOGO,"Static",SS_BLACKFRAME,7,7,261,51 END -IDD_LOGGEDON_DLG DIALOGEX 0,0,247,116 +IDD_LOGGEDON_DLG DIALOGEX 0, 0, 284, 116 STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS_CAPTION | WS_DLGFRAME | WS_POPUP | WS_SYSMENU CAPTION "" FONT 8,"MS Shell Dlg",400,0,1 BEGIN - PUSHBUTTON "",IDCANCEL,170,95,70,14 - PUSHBUTTON " ",IDC_LOGOFF,90,76,70,14 - PUSHBUTTON "",IDC_SHUTDOWN,170,76,70,14 - LTEXT " ?",IDC_STATIC,86,53,87,8 - PUSHBUTTON " ",IDC_LOCK,10,76,70,14 - PUSHBUTTON " ",IDC_TASKMGR,90,95,70,14 - CONTROL "",IDC_ROSLOGO,"Static",SS_BLACKFRAME,7,7,230,38 + PUSHBUTTON "", IDCANCEL, 206, 95, 70, 14 + PUSHBUTTON " ", IDC_LOGOFF, 115, 76, 86, 14 + PUSHBUTTON "",IDC_SHUTDOWN, 206, 76, 70, 14 + LTEXT " :", IDC_STATIC, 8, 59, 130, 8 + PUSHBUTTON " ", IDC_LOCK, 7, 76, 103, 14 + PUSHBUTTON " ",IDC_TASKMGR, 115, 95, 86, 14 + CONTROL "",IDC_ROSLOGO,"Static",SS_BLACKFRAME, 7, 7, 269, 38 END STRINGTABLE diff --git a/reactos/dll/win32/userenv/lang/ru-RU.rc b/reactos/dll/win32/userenv/lang/ru-RU.rc index 0b606c38212..31bf5d55566 100644 --- a/reactos/dll/win32/userenv/lang/ru-RU.rc +++ b/reactos/dll/win32/userenv/lang/ru-RU.rc @@ -22,7 +22,7 @@ STRINGTABLE BEGIN IDS_PROFILEPATH "%SystemDrive%\\Documents and Settings" IDS_APPDATA "Application Data" - IDS_DESKTOP "Desktop" + IDS_DESKTOP " " IDS_FAVORITES "" IDS_STARTMENU " " IDS_PROGRAMS " \\" From 1f866507585cafde89fa8d50604c3ded5768d51e Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 9 Aug 2008 15:59:08 +0000 Subject: [PATCH 245/304] - Fix typo svn path=/trunk/; revision=35239 --- reactos/dll/win32/msgina/lang/ru-RU.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/msgina/lang/ru-RU.rc b/reactos/dll/win32/msgina/lang/ru-RU.rc index a8d2e4e0787..ef731f4743f 100644 --- a/reactos/dll/win32/msgina/lang/ru-RU.rc +++ b/reactos/dll/win32/msgina/lang/ru-RU.rc @@ -15,7 +15,7 @@ STYLE NOT WS_VISIBLE | DS_CENTER | DS_MODALFRAME | DS_SHELLFONT | WS_BORDER | WS CAPTION " ReactOS" FONT 8,"MS Shell Dlg",400,0,1 BEGIN - LTEXT " Control-Alt-Delete...",IDC_STATIC, 29, 22, 144, 14 + LTEXT " Control-Alt-Delete...",IDC_STATIC, 29, 22, 144, 14 END IDD_LOGGEDOUT_DLG DIALOGEX 0,0,275,147 From aeedb31a0fe0541d47e92b1546a053e4e97c6df9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 16:01:20 +0000 Subject: [PATCH 246/304] Add module linker flags after project flags, so project ones can be overridden svn path=/trunk/; revision=35240 --- reactos/tools/rbuild/backend/mingw/modulehandler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp index 2c0b58e61d4..34b8554a1a5 100644 --- a/reactos/tools/rbuild/backend/mingw/modulehandler.cpp +++ b/reactos/tools/rbuild/backend/mingw/modulehandler.cpp @@ -1937,7 +1937,8 @@ MingwModuleHandler::GenerateOtherMacros () fprintf ( fMakefile, - "%s_LFLAGS += $(PROJECT_LFLAGS) -g\n", + "%s_LFLAGS := $(PROJECT_LFLAGS) -g $(%s_LFLAGS)\n", + module.name.c_str (), module.name.c_str () ); } else From 2ca0e5562ecb6fa026bc930a10fce4ceec0d56c0 Mon Sep 17 00:00:00 2001 From: Dmitry Chapyshev Date: Sat, 9 Aug 2008 16:16:49 +0000 Subject: [PATCH 247/304] - Update Russian translation svn path=/trunk/; revision=35241 --- reactos/base/shell/explorer-new/lang/ru-RU.rc | 6 ++--- reactos/base/shell/explorer/explorer-ru.rc | 22 +++++++++---------- reactos/base/system/expand/lang/ru-RU.rc | 2 +- reactos/dll/shellext/deskadp/lang/ru-RU.rc | 8 +++---- 4 files changed, 19 insertions(+), 19 deletions(-) diff --git a/reactos/base/shell/explorer-new/lang/ru-RU.rc b/reactos/base/shell/explorer-new/lang/ru-RU.rc index 0240a6f5c10..ec874784b2e 100644 --- a/reactos/base/shell/explorer-new/lang/ru-RU.rc +++ b/reactos/base/shell/explorer-new/lang/ru-RU.rc @@ -18,15 +18,15 @@ BEGIN MENUITEM "", -1, MFT_SEPARATOR POPUP "&", IDM_PROGRAMS BEGIN - MENUITEM "()", -1, MFT_STRING, MFS_GRAYED + MENUITEM "()", -1, MFT_STRING, MFS_GRAYED END POPUP "&", IDM_FAVORITES BEGIN - MENUITEM "()", -1, MFT_STRING, MFS_GRAYED + MENUITEM "()", -1, MFT_STRING, MFS_GRAYED END POPUP "&", IDM_DOCUMENTS BEGIN - MENUITEM "()", -1, MFT_STRING, MFS_GRAYED + MENUITEM "()", -1, MFT_STRING, MFS_GRAYED END POPUP "&", IDM_SETTINGS BEGIN diff --git a/reactos/base/shell/explorer/explorer-ru.rc b/reactos/base/shell/explorer/explorer-ru.rc index 78db734b84f..f658bb3bcd4 100644 --- a/reactos/base/shell/explorer/explorer-ru.rc +++ b/reactos/base/shell/explorer/explorer-ru.rc @@ -57,13 +57,13 @@ BEGIN END POPUP "&" BEGIN - MENUITEM "&", ID_TOOLS_OPTIONS + MENUITEM "&", ID_TOOLS_OPTIONS END POPUP "&" BEGIN MENUITEM "& ...", ID_EXPLORER_FAQ - MENUITEM " &", ID_ABOUT_EXPLORER - MENUITEM " &ReactOS", ID_ABOUT_WINDOWS + MENUITEM " &...", ID_ABOUT_EXPLORER + MENUITEM " &ReactOS...", ID_ABOUT_WINDOWS END END @@ -71,10 +71,10 @@ IDM_DESKTOPBAR MENU DISCARDABLE BEGIN POPUP "" BEGIN - MENUITEM "&...", ID_DESKTOPBAR_SETTINGS + MENUITEM "&...", ID_DESKTOPBAR_SETTINGS MENUITEM "& ", ID_TASKMGR MENUITEM SEPARATOR - MENUITEM "& ", ID_ABOUT_EXPLORER + MENUITEM "& ...", ID_ABOUT_EXPLORER END END @@ -96,7 +96,7 @@ BEGIN MENUITEM "& ...", ID_CONFIG_NOTIFYAREA MENUITEM " /&", ID_CONFIG_TIME MENUITEM SEPARATOR - MENUITEM "& ", ID_ABOUT_EXPLORER + MENUITEM "& ...", ID_ABOUT_EXPLORER END END @@ -120,13 +120,13 @@ BEGIN END POPUP "&" BEGIN - MENUITEM "&", ID_TOOLS_OPTIONS + MENUITEM "&", ID_TOOLS_OPTIONS END POPUP "&" BEGIN MENUITEM "& ...", ID_EXPLORER_FAQ - MENUITEM " &", ID_ABOUT_EXPLORER - MENUITEM " &ReactOS", ID_ABOUT_WINDOWS + MENUITEM " &...", ID_ABOUT_EXPLORER + MENUITEM " &ReactOS...", ID_ABOUT_WINDOWS END END @@ -169,7 +169,7 @@ END IDD_DESKBAR_DESKTOP DIALOGEX DISCARDABLE 0, 0, 212, 194 STYLE DS_SHELLFONT | WS_CHILD | WS_DISABLED | WS_CAPTION -CAPTION " " +CAPTION ": " FONT 8, "MS Shell Dlg" BEGIN LTEXT ", , \n ", @@ -339,7 +339,7 @@ BEGIN IDS_PROGRAMS "" IDS_SETTINGS "" IDS_EXPLORE "" - IDS_EMPTY "()" + IDS_EMPTY "()" IDS_RECENT " " IDS_ADMIN "" END diff --git a/reactos/base/system/expand/lang/ru-RU.rc b/reactos/base/system/expand/lang/ru-RU.rc index 25a4ce12f2f..723d14a8ea1 100644 --- a/reactos/base/system/expand/lang/ru-RU.rc +++ b/reactos/base/system/expand/lang/ru-RU.rc @@ -5,7 +5,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_Copy, " ReactOS, 1.0\n\ -Copyright Victor Schneider 1997\n\n\ + () 1997\n\n\ : %s _ [_]\n" IDS_FAILS " LZCopy, : %ld\n" diff --git a/reactos/dll/shellext/deskadp/lang/ru-RU.rc b/reactos/dll/shellext/deskadp/lang/ru-RU.rc index a3b8838ccad..7b4e9e1ba90 100644 --- a/reactos/dll/shellext/deskadp/lang/ru-RU.rc +++ b/reactos/dll/shellext/deskadp/lang/ru-RU.rc @@ -40,9 +40,9 @@ BEGIN IDES_REFRESHRATEFMT "%d " IDS_4BPP "16 " IDS_8BPP "256 " - IDS_15BPP "High Color (15 )" - IDS_16BPP "High Color (16 )" - IDS_24BPP "True Color (24 )" - IDS_32BPP "True Color (32 )" + IDS_15BPP " (15 )" + IDS_16BPP " (16 )" + IDS_24BPP " (24 )" + IDS_32BPP " (32 )" END From bca74ffa16ce7d14c6a1a509c74df2e9e2e6ce0e Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Sat, 9 Aug 2008 16:40:43 +0000 Subject: [PATCH 248/304] - Don't use LoadIcon, it's broken as it incorrectly calls LoadImage - This fixes the ugly treeview icons - *note, cursor/icon loading code needs revising svn path=/trunk/; revision=35242 --- reactos/base/applications/regedit/treeview.c | 59 +++++++++++++++----- 1 file changed, 45 insertions(+), 14 deletions(-) diff --git a/reactos/base/applications/regedit/treeview.c b/reactos/base/applications/regedit/treeview.c index ce2881f62f0..9165daba3b1 100644 --- a/reactos/base/applications/regedit/treeview.c +++ b/reactos/base/applications/regedit/treeview.c @@ -24,14 +24,12 @@ /* Image_Open, Image_Closed, and Image_Root - integer variables for indexes of the images. */ /* CX_ICON and CY_ICON - width and height of an icon. */ /* NUM_ICON - number of icons to add to the image list. */ -int Image_Open; -int Image_Closed; -int Image_Root; +static int Image_Open = 0; +static int Image_Closed = 0; +static int Image_Root = 0; static LPTSTR pathBuffer; -#define CX_ICON 16 -#define CY_ICON 16 #define NUM_ICONS 3 static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPTSTR* pKeyPath, int* pPathLen, int* pMaxLen) @@ -415,24 +413,57 @@ static BOOL InitTreeViewImageLists(HWND hwndTV) HICON hico; /* handle to icon */ /* Create the image list. */ - if ((himl = ImageList_Create(CX_ICON, CY_ICON, - ILC_MASK|ILC_COLOR32, 0, NUM_ICONS)) == NULL) + if ((himl = ImageList_Create(GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + ILC_MASK | ILC_COLOR32, + 0, + NUM_ICONS)) == NULL) + { return FALSE; + } /* Add the open file, closed file, and document bitmaps. */ - hico = LoadIcon(hInst, MAKEINTRESOURCE(IDI_OPEN_FILE)); - Image_Open = ImageList_AddIcon(himl, hico); + hico = LoadImage(hInst, + MAKEINTRESOURCE(IDI_OPEN_FILE), + IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + 0); + if (hico) + { + Image_Open = ImageList_AddIcon(himl, hico); + DestroyIcon(hico); + } - hico = LoadIcon(hInst, MAKEINTRESOURCE(IDI_CLOSED_FILE)); - Image_Closed = ImageList_AddIcon(himl, hico); + hico = LoadImage(hInst, + MAKEINTRESOURCE(IDI_CLOSED_FILE), + IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + 0); + if (hico) + { + Image_Closed = ImageList_AddIcon(himl, hico); + DestroyIcon(hico); + } - hico = LoadIcon(hInst, MAKEINTRESOURCE(IDI_ROOT)); - Image_Root = ImageList_AddIcon(himl, hico); + hico = LoadImage(hInst, + MAKEINTRESOURCE(IDI_ROOT), + IMAGE_ICON, + GetSystemMetrics(SM_CXSMICON), + GetSystemMetrics(SM_CYSMICON), + 0); + if (hico) + { + Image_Root = ImageList_AddIcon(himl, hico); + DestroyIcon(hico); + } /* Fail if not all of the images were added. */ if (ImageList_GetImageCount(himl) < NUM_ICONS) { - return FALSE; + ImageList_Destroy(himl); + return FALSE; } /* Associate the image list with the tree view control. */ From 8f4d636360f59b5ab4ec4fe1b832c21ea2b0fbc8 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sat, 9 Aug 2008 17:55:35 +0000 Subject: [PATCH 249/304] - MmAdjustWorkingSetSize has 4 parameters, not 3. svn path=/trunk/; revision=35243 --- reactos/ntoskrnl/mm/mm.c | 3 ++- reactos/ntoskrnl/ntoskrnl_i386.def | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/mm/mm.c b/reactos/ntoskrnl/mm/mm.c index 85001b0a288..1480c00d729 100644 --- a/reactos/ntoskrnl/mm/mm.c +++ b/reactos/ntoskrnl/mm/mm.c @@ -356,7 +356,8 @@ MmCommitPagedPoolAddress(PVOID Address, BOOLEAN Locked) ULONG NTAPI MmAdjustWorkingSetSize (ULONG Unknown0, ULONG Unknown1, - ULONG Unknown2) + ULONG Unknown2, + ULONG Unknown3) { UNIMPLEMENTED; return (0); diff --git a/reactos/ntoskrnl/ntoskrnl_i386.def b/reactos/ntoskrnl/ntoskrnl_i386.def index 919e539e0ca..28cf8b88b11 100644 --- a/reactos/ntoskrnl/ntoskrnl_i386.def +++ b/reactos/ntoskrnl/ntoskrnl_i386.def @@ -720,7 +720,7 @@ LsaRegisterLogonProcess@12 Mm64BitPhysicalAddress DATA MmAddPhysicalMemory@8 MmAddVerifierThunks@8 -MmAdjustWorkingSetSize@12 +MmAdjustWorkingSetSize@16 MmAdvanceMdl@8 MmAllocateContiguousMemory@12 MmAllocateContiguousMemorySpecifyCache@32 From f763594308b2b00e0f8d19e7373dd1464d03f9ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sat, 9 Aug 2008 20:14:29 +0000 Subject: [PATCH 250/304] Fix prototype svn path=/trunk/; revision=35247 --- reactos/ntoskrnl/ex/fastinterlck.c | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/ntoskrnl/ex/fastinterlck.c b/reactos/ntoskrnl/ex/fastinterlck.c index bddc62cd7bf..445f1942d6b 100644 --- a/reactos/ntoskrnl/ex/fastinterlck.c +++ b/reactos/ntoskrnl/ex/fastinterlck.c @@ -75,6 +75,7 @@ PSLIST_ENTRY FASTCALL ExInterlockedPushEntrySList(IN PSLIST_HEADER ListHead, IN PSLIST_ENTRY ListEntry) + IN PKSPIN_LOCK Lock) { return InterlockedPushEntrySList(ListHead, ListEntry); } From 809dd4cd3ccf4dcbf96547cb4d321f45b2f3a75a Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Sat, 9 Aug 2008 21:51:34 +0000 Subject: [PATCH 251/304] - Fix the way the start command parses its arguments. Previously, the arguments were split up using split() and then the parts intended for the program were recombined, but this is wrong because it cannot preserve quotes. Changed cmd_start to do tokenization itself instead. - Implement "title", /Ddirectory, /MIN, /MAX, and /WAIT options. - Remove 'first' variable which only ever contained the name of "start" itself - all the places where it was used appear to be mistakes; replaced with 'rest'. - Fix crash that happened when attempting to start a file with no extension. svn path=/trunk/; revision=35248 --- reactos/base/shell/cmd/start.c | 155 ++++++++++++++++++++++----------- 1 file changed, 103 insertions(+), 52 deletions(-) diff --git a/reactos/base/shell/cmd/start.c b/reactos/base/shell/cmd/start.c index b160dd1bf85..9e98fffaccb 100644 --- a/reactos/base/shell/cmd/start.c +++ b/reactos/base/shell/cmd/start.c @@ -15,13 +15,42 @@ #ifdef INCLUDE_CMD_START +/* Find the end of an option, and turn it into a nul-terminated string + * in place. (It's moved back one character, to make room for the nul) */ +static TCHAR *GetParameter(TCHAR **pPointer) +{ + BOOL bInQuote = FALSE; + TCHAR *start = *pPointer; + TCHAR *p; + for (p = start; *p; p++) + { + if (!bInQuote && (*p == _T('/') || _istspace(*p))) + break; + bInQuote ^= (*p == _T('"')); + p[-1] = *p; + } + p[-1] = _T('\0'); + *pPointer = p; + return start - 1; +} + +static void StripQuotes(TCHAR *in) +{ + TCHAR *out = in; + for (; *in; in++) + { + if (*in != _T('"')) + *out++ = *in; + } + *out = _T('\0'); +} INT cmd_start (LPTSTR First, LPTSTR Rest) { TCHAR szFullName[CMDLINE_LENGTH]; - TCHAR first[CMDLINE_LENGTH]; TCHAR *rest = NULL; TCHAR *param = NULL; + TCHAR *dot; TCHAR RestWithoutArgs[CMDLINE_LENGTH]; INT size; LPTSTR comspec; @@ -31,62 +60,83 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) TCHAR szFullCmdLine [CMDLINE_LENGTH]; PROCESS_INFORMATION prci; STARTUPINFO stui; - LPTSTR *arg; - INT argc = 0; INT i = 0; DWORD Priority = 0; + LPTSTR lpTitle = NULL; + LPTSTR lpDirectory = NULL; + WORD wShowWindow = SW_SHOWNORMAL; - RestWithoutArgs[0] = _T('\0'); - _tcscpy(first,First); - arg = split (Rest, &argc, FALSE); - - - for (i = 0; i < argc; i++) + while (1) { - if (!_tcsncmp (arg[i], _T("/?"), 2)) + if (_istspace(*Rest)) { - freep(arg); - ConOutResPaging(TRUE,STRING_START_HELP1); - return 0; + Rest++; } - else if(!_tcsicmp(arg[i], _T("/LOW"))) + else if (*Rest == _T('"') && !lpTitle) { - Priority = IDLE_PRIORITY_CLASS; + lpTitle = GetParameter(&Rest); + StripQuotes(lpTitle); } - else if(!_tcsicmp(arg[i], _T("/NORMAL"))) + else if (*Rest == L'/') { - Priority = NORMAL_PRIORITY_CLASS; - } - else if(!_tcsicmp(arg[i], _T("/HIGH"))) - { - Priority = HIGH_PRIORITY_CLASS; - } - else if(!_tcsicmp(arg[i], _T("/REALTIME"))) - { - Priority = REALTIME_PRIORITY_CLASS; - } - else if(!_tcsicmp(arg[i], _T("/ABOVENORMAL"))) - { - Priority = ABOVE_NORMAL_PRIORITY_CLASS; - } - else if(!_tcsicmp(arg[i], _T("/BELOWNORMAL"))) - { - Priority = BELOW_NORMAL_PRIORITY_CLASS; + LPTSTR option; + Rest++; + option = GetParameter(&Rest); + if (*option == _T('?')) + { + ConOutResPaging(TRUE,STRING_START_HELP1); + return 0; + } + else if (_totupper(*option) == _T('D')) + { + lpDirectory = option + 1; + StripQuotes(lpDirectory); + } + else if (!_tcsicmp(option, _T("MIN"))) + { + wShowWindow = SW_MINIMIZE; + } + else if (!_tcsicmp(option, _T("MAX"))) + { + wShowWindow = SW_MAXIMIZE; + } + else if (!_tcsicmp(option, _T("LOW"))) + { + Priority = IDLE_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("NORMAL"))) + { + Priority = NORMAL_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("HIGH"))) + { + Priority = HIGH_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("REALTIME"))) + { + Priority = REALTIME_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("ABOVENORMAL"))) + { + Priority = ABOVE_NORMAL_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("BELOWNORMAL"))) + { + Priority = BELOW_NORMAL_PRIORITY_CLASS; + } + else if (!_tcsicmp(option, _T("WAIT"))) + { + bWait = TRUE; + } } else { - if(RestWithoutArgs[0] != _T('\0')) - { - _tcscat(RestWithoutArgs,_T(" ")); - } - _tcscat(RestWithoutArgs,arg[i]); + /* It's not an option - must be the beginning of + * the actual command. Leave the loop. */ + break; } } - - - - - freep (arg); + _tcscpy(RestWithoutArgs, Rest); /* get comspec */ comspec = cmd_alloc ( MAX_PATH * sizeof(TCHAR)); @@ -197,15 +247,15 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) /* check for a drive change */ - if (!_tcscmp (first + 1, _T(":")) && _istalpha (*first)) + if (!_tcscmp (rest + 1, _T(":")) && _istalpha (*rest)) { TCHAR szPath[CMDLINE_LENGTH]; _tcscpy (szPath, _T("A:")); - szPath[0] = _totupper (*first); + szPath[0] = _totupper (*rest); SetCurrentDirectory (szPath); GetCurrentDirectory (CMDLINE_LENGTH, szPath); - if (szPath[0] != (TCHAR)_totupper (*first)) + if (szPath[0] != (TCHAR)_totupper (*rest)) ConErrResPuts (STRING_FREE_ERROR1); if (rest != NULL) @@ -237,8 +287,8 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) /* check if this is a .BAT or .CMD file */ - if (!_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".bat")) || - !_tcsicmp (_tcsrchr (szFullName, _T('.')), _T(".cmd"))) + dot = _tcsrchr (szFullName, _T('.')); + if (dot && (!_tcsicmp (dot, _T(".bat")) || !_tcsicmp (dot, _T(".cmd")))) { bBat = TRUE; memset(szFullCmdLine,0,CMDLINE_LENGTH * sizeof(TCHAR)); @@ -260,7 +310,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) /* build command line for CreateProcess() */ if (bBat == FALSE) { - _tcscpy (szFullCmdLine, first); + _tcscpy (szFullCmdLine, rest); if( param != NULL ) { @@ -273,17 +323,18 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) memset (&stui, 0, sizeof (STARTUPINFO)); stui.cb = sizeof (STARTUPINFO); stui.dwFlags = STARTF_USESHOWWINDOW; - stui.wShowWindow = SW_SHOWDEFAULT; + stui.lpTitle = lpTitle; + stui.wShowWindow = wShowWindow; if (bBat == TRUE) { bCreate = CreateProcess (NULL, szFullCmdLine, NULL, NULL, FALSE, - CREATE_NEW_CONSOLE | Priority, NULL, NULL, &stui, &prci); + CREATE_NEW_CONSOLE | Priority, NULL, lpDirectory, &stui, &prci); } else { bCreate = CreateProcess (szFullName, szFullCmdLine, NULL, NULL, FALSE, - CREATE_NEW_CONSOLE | Priority, NULL, NULL, &stui, &prci); + CREATE_NEW_CONSOLE | Priority, NULL, lpDirectory, &stui, &prci); } if (bCreate) From 8eb52874bed27361c23f23c00a220f9e6e1c3d93 Mon Sep 17 00:00:00 2001 From: Timo Kreuzer Date: Sat, 9 Aug 2008 22:42:35 +0000 Subject: [PATCH 252/304] - add more accelerator flags for xform objects - add MATRIX structure using FLOATOBJ instead of EFLOAT_S (which is a x86 specific structure) svn path=/trunk/; revision=35249 --- reactos/include/reactos/win32k/ntgdityp.h | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/reactos/include/reactos/win32k/ntgdityp.h b/reactos/include/reactos/win32k/ntgdityp.h index 08987867200..ac13e60cff8 100644 --- a/reactos/include/reactos/win32k/ntgdityp.h +++ b/reactos/include/reactos/win32k/ntgdityp.h @@ -101,6 +101,9 @@ typedef enum _TRANSFORMTYPE enum { MX_SCALE = 1, + MX_IDENTITYSCALE = 2, + MX_INTEGER = 4, + MX_NOTRANSLATE = 8, }; typedef enum GDIObjType @@ -356,6 +359,19 @@ typedef struct _MATRIX_S FLONG flAccel; } MATRIX_S; +typedef struct _MATRIX +{ + FLOATOBJ efM11; + FLOATOBJ efM12; + FLOATOBJ efM21; + FLOATOBJ efM22; + FLOATOBJ efDx; + FLOATOBJ efDy; + FIX fxDx; + FIX fxDy; + FLONG flAccel; +} MATRIX, *PMATRIX; + /* Gdi XForm storage union */ typedef union { From 876fa09ee5baddbf52e2f8c7d6fa46ee5b27b0b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 10 Aug 2008 05:47:20 +0000 Subject: [PATCH 253/304] Try to fix some symbol names svn path=/trunk/; revision=35252 --- reactos/ntoskrnl/ex/fastinterlck.c | 2 +- reactos/ntoskrnl/ke/i386/irqobj.c | 2 +- reactos/ntoskrnl/ke/i386/systimer.S | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/reactos/ntoskrnl/ex/fastinterlck.c b/reactos/ntoskrnl/ex/fastinterlck.c index 445f1942d6b..cd3d25d4bd5 100644 --- a/reactos/ntoskrnl/ex/fastinterlck.c +++ b/reactos/ntoskrnl/ex/fastinterlck.c @@ -74,7 +74,7 @@ ExInterlockedFlushSList(IN PSLIST_HEADER ListHead) PSLIST_ENTRY FASTCALL ExInterlockedPushEntrySList(IN PSLIST_HEADER ListHead, - IN PSLIST_ENTRY ListEntry) + IN PSLIST_ENTRY ListEntry, IN PKSPIN_LOCK Lock) { return InterlockedPushEntrySList(ListHead, ListEntry); diff --git a/reactos/ntoskrnl/ke/i386/irqobj.c b/reactos/ntoskrnl/ke/i386/irqobj.c index 52266fd63eb..282d195b820 100644 --- a/reactos/ntoskrnl/ke/i386/irqobj.c +++ b/reactos/ntoskrnl/ke/i386/irqobj.c @@ -19,7 +19,7 @@ ULONG KiISRTimeout = 55; USHORT KiISROverflow = 30000; -extern ULONG KiChainedDispatch2ndLvl; +extern ULONG NTAPI KiChainedDispatch2ndLvl(VOID); /* PRIVATE FUNCTIONS *********************************************************/ diff --git a/reactos/ntoskrnl/ke/i386/systimer.S b/reactos/ntoskrnl/ke/i386/systimer.S index a15d46df1d0..69d2822fe46 100644 --- a/reactos/ntoskrnl/ke/i386/systimer.S +++ b/reactos/ntoskrnl/ke/i386/systimer.S @@ -57,9 +57,9 @@ _KiComputeTimerTableIndex@8: ret 8 .endfunc -.globl _KeUpdateRunTime@4 -.func KeUpdateRunTime@4 -_KeUpdateRunTime@4: +.globl _KeUpdateRunTime@8 +.func KeUpdateRunTime@8 +_KeUpdateRunTime@8: /* Get KPCR */ mov eax, [fs:KPCR_SELF] @@ -227,9 +227,9 @@ SkipTick: ret 4 .endfunc -.globl _KeUpdateSystemTime@0 -.func KeUpdateSystemTime@0 -_KeUpdateSystemTime@0: +.globl _KeUpdateSystemTime@12 +.func KeUpdateSystemTime@12 +_KeUpdateSystemTime@12: /* Check if this tick is getting skipped */ cmp byte ptr fs:[KPCR_PRCB_SKIP_TICK], 0 @@ -355,7 +355,7 @@ NoDebug: /* Update system run time */ push [esp] - call _KeUpdateRunTime@4 + call _KeUpdateRunTime@8 jmp Done IncompleteTick2: From d28b0741566070d0e19f3877553f734070a930c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 10 Aug 2008 06:50:29 +0000 Subject: [PATCH 254/304] Remove stdcall decorations to fix build. Real fix should be available soon. svn path=/trunk/; revision=35253 --- reactos/ntoskrnl/ntoskrnl_i386.def | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ntoskrnl_i386.def b/reactos/ntoskrnl/ntoskrnl_i386.def index 28cf8b88b11..f349271f0af 100644 --- a/reactos/ntoskrnl/ntoskrnl_i386.def +++ b/reactos/ntoskrnl/ntoskrnl_i386.def @@ -684,8 +684,8 @@ KeTickCount DATA @KeTryToAcquireGuardedMutex@4 @KeTryToAcquireSpinLockAtDpcLevel@4 KeUnstackDetachProcess@4 -KeUpdateRunTime@4 -KeUpdateSystemTime@0 +KeUpdateRunTime +KeUpdateSystemTime KeUserModeCallback@20 KeWaitForMultipleObjects@32 KeWaitForMutexObject@20=KeWaitForSingleObject@20 From 041e42b57d4e643213af14141ae702c2c5c56c95 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 10 Aug 2008 09:02:49 +0000 Subject: [PATCH 255/304] I was wrong, because KeUpdateSystemTime prototype is not the same on all platforms svn path=/trunk/; revision=35256 --- reactos/ntoskrnl/ke/i386/systimer.S | 6 +++--- reactos/ntoskrnl/ntoskrnl_i386.def | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/ke/i386/systimer.S b/reactos/ntoskrnl/ke/i386/systimer.S index 69d2822fe46..e4ce20d24b6 100644 --- a/reactos/ntoskrnl/ke/i386/systimer.S +++ b/reactos/ntoskrnl/ke/i386/systimer.S @@ -227,9 +227,9 @@ SkipTick: ret 4 .endfunc -.globl _KeUpdateSystemTime@12 -.func KeUpdateSystemTime@12 -_KeUpdateSystemTime@12: +.globl _KeUpdateSystemTime@0 +.func KeUpdateSystemTime@0 +_KeUpdateSystemTime@0: /* Check if this tick is getting skipped */ cmp byte ptr fs:[KPCR_PRCB_SKIP_TICK], 0 diff --git a/reactos/ntoskrnl/ntoskrnl_i386.def b/reactos/ntoskrnl/ntoskrnl_i386.def index f349271f0af..481523b6c47 100644 --- a/reactos/ntoskrnl/ntoskrnl_i386.def +++ b/reactos/ntoskrnl/ntoskrnl_i386.def @@ -685,7 +685,7 @@ KeTickCount DATA @KeTryToAcquireSpinLockAtDpcLevel@4 KeUnstackDetachProcess@4 KeUpdateRunTime -KeUpdateSystemTime +KeUpdateSystemTime@0 KeUserModeCallback@20 KeWaitForMultipleObjects@32 KeWaitForMutexObject@20=KeWaitForSingleObject@20 From 889aabd9999aa78f08335814e9a6b65b60d7b0a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 10 Aug 2008 09:48:25 +0000 Subject: [PATCH 256/304] Fix exports svn path=/trunk/; revision=35258 --- reactos/dll/win32/advapi32/advapi32.def | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/dll/win32/advapi32/advapi32.def b/reactos/dll/win32/advapi32/advapi32.def index 14f567d3100..d0e140511c3 100644 --- a/reactos/dll/win32/advapi32/advapi32.def +++ b/reactos/dll/win32/advapi32/advapi32.def @@ -125,18 +125,18 @@ CredGetSessionTypes@8 ;CredMarshalCredentialA@12 ;CredMarshalCredentialW@12 ;CredProfileLoaded -CredReadA +CredReadA@16 ;CredReadDomainCredentialsA ;CredReadDomainCredentialsW -CredReadW +CredReadW@16 ;CredRenameA ;CredRenameW ;CredUnmarshalCredentialA ;CredUnmarshalCredentialW -CredWriteA +CredWriteA@8 ;CredWriteDomainCredentialsA ;CredWriteDomainCredentialsW -CredWriteW +CredWriteW@8 ;CredpConvertCredential ;CredpConvertTargetInfo ;CredpDecodeCredential From f7de51f699c3090a221c5d4449c1db509ab486a3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 10 Aug 2008 11:23:16 +0000 Subject: [PATCH 257/304] Use a .spec file for ntoskrnl. Keep specific .def for ARM, as long as it has not been tested svn path=/trunk/; revision=35261 --- reactos/ntoskrnl/ntoskrnl-generic.rbuild | 8 +- reactos/ntoskrnl/ntoskrnl.spec | 1591 ++++++++++++++++++++++ reactos/ntoskrnl/ntoskrnl_i386.def | 1590 --------------------- 3 files changed, 1598 insertions(+), 1591 deletions(-) create mode 100644 reactos/ntoskrnl/ntoskrnl.spec delete mode 100644 reactos/ntoskrnl/ntoskrnl_i386.def diff --git a/reactos/ntoskrnl/ntoskrnl-generic.rbuild b/reactos/ntoskrnl/ntoskrnl-generic.rbuild index 5e0a14b2b58..3f72f594a78 100644 --- a/reactos/ntoskrnl/ntoskrnl-generic.rbuild +++ b/reactos/ntoskrnl/ntoskrnl-generic.rbuild @@ -2,7 +2,12 @@ - + + + + + + @@ -465,5 +470,6 @@ wmi.c ntoskrnl.rc + ntoskrnl.spec ntoskrnl_$(ARCH).lnk diff --git a/reactos/ntoskrnl/ntoskrnl.spec b/reactos/ntoskrnl/ntoskrnl.spec new file mode 100644 index 00000000000..f37251e4eda --- /dev/null +++ b/reactos/ntoskrnl/ntoskrnl.spec @@ -0,0 +1,1591 @@ +#include "include/reactos/msvctarget.h" + +@ stdcall CcCanIWrite(ptr long long long) +@ stdcall CcCopyRead(ptr ptr long long ptr ptr) +@ stdcall CcCopyWrite(ptr ptr long long ptr) +@ stdcall CcDeferWrite(ptr ptr ptr ptr long long) +@ stdcall CcFastCopyRead(ptr long long long ptr ptr) +@ stdcall CcFastCopyWrite(ptr long long ptr) +@ extern CcFastMdlReadWait +@ extern CcFastReadNotPossible +@ extern CcFastReadWait +@ stdcall CcFlushCache(ptr ptr long ptr) +@ stdcall CcGetDirtyPages(ptr ptr ptr ptr) +@ stdcall CcGetFileObjectFromBcb(ptr) +@ stdcall CcGetFileObjectFromSectionPtrs(ptr) +@ stdcall CcGetFlushedValidData(ptr long) +@ stdcall CcGetLsnForFileObject(ptr ptr) +@ stdcall CcInitializeCacheMap(ptr ptr long ptr ptr) +@ stdcall CcIsThereDirtyData(ptr) +@ stdcall CcMapData(ptr ptr long long ptr ptr) +@ stdcall CcMdlRead(ptr ptr long ptr ptr) +@ stdcall CcMdlReadComplete(ptr ptr) +@ stdcall CcMdlWriteAbort(ptr ptr) +@ stdcall CcMdlWriteComplete(ptr ptr ptr) +@ stdcall CcPinMappedData(ptr ptr long long ptr) +@ stdcall CcPinRead(ptr ptr long long ptr ptr) +@ stdcall CcPrepareMdlWrite(ptr ptr long ptr ptr) +@ stdcall CcPreparePinWrite(ptr ptr long long long ptr ptr) +@ stdcall CcPurgeCacheSection(ptr ptr long long) +@ stdcall CcRemapBcb(ptr) +@ stdcall CcRepinBcb(ptr) +@ stdcall CcScheduleReadAhead(ptr ptr long) +@ stdcall CcSetAdditionalCacheAttributes(ptr long long) +@ stdcall CcSetBcbOwnerPointer(ptr ptr) +@ stdcall CcSetDirtyPageThreshold(ptr long) +@ stdcall CcSetDirtyPinnedData(ptr ptr) +@ stdcall CcSetFileSizes(ptr ptr) +@ stdcall CcSetLogHandleForFile(ptr ptr ptr) +@ stdcall CcSetReadAheadGranularity(ptr long) +@ stdcall CcUninitializeCacheMap(ptr ptr ptr) +@ stdcall CcUnpinData(ptr) +@ stdcall CcUnpinDataForThread(ptr ptr) +@ stdcall CcUnpinRepinnedBcb(ptr long ptr) +@ stdcall CcWaitForCurrentLazyWriterActivity() +@ stdcall CcZeroData(ptr ptr ptr long) +@ stdcall CmRegisterCallback(ptr ptr ptr) +@ stdcall CmUnRegisterCallback(long long) +@ stdcall DbgBreakPoint() +@ stdcall DbgBreakPointWithStatus(long) +;DbgCommandString +@ stdcall DbgLoadImageSymbols(ptr ptr long) +@ cdecl DbgPrint(str) +@ cdecl DbgPrintEx(long long str) +@ cdecl DbgPrintReturnControlC(str) +@ stdcall DbgPrompt(str ptr long) +@ stdcall DbgQueryDebugFilterState(long long) +@ stdcall DbgSetDebugFilterState(long long long) +@ fastcall ExAcquireFastMutexUnsafe(ptr) +@ stdcall ExAcquireResourceExclusiveLite(ptr long) +@ stdcall ExAcquireResourceSharedLite(ptr long) +@ fastcall ExAcquireRundownProtection(ptr) ExfAcquireRundownProtection +@ fastcall ExAcquireRundownProtectionCacheAware(ptr) ExfAcquireRundownProtectionCacheAware +@ fastcall ExAcquireRundownProtectionCacheAwareEx(ptr long) ExfAcquireRundownProtectionCacheAwareEx +@ fastcall ExAcquireRundownProtectionEx(ptr long) ExfAcquireRundownProtectionEx +@ stdcall ExAcquireSharedStarveExclusive(ptr long) +@ stdcall ExAcquireSharedWaitForExclusive(ptr long) +@ stdcall ExAllocateCacheAwareRundownProtection(long long) +@ stdcall ExAllocateFromPagedLookasideList(ptr) ExiAllocateFromPagedLookasideList +@ stdcall ExAllocatePool(long long) +@ stdcall ExAllocatePoolWithQuota(long long) +@ stdcall ExAllocatePoolWithQuotaTag(long long long) +@ stdcall ExAllocatePoolWithTag(long long long) +@ stdcall ExAllocatePoolWithTagPriority(long long long long) +@ stdcall ExConvertExclusiveToSharedLite(ptr) +@ stdcall ExCreateCallback(ptr ptr long long) +@ stdcall ExDeleteNPagedLookasideList(ptr) +@ stdcall ExDeletePagedLookasideList(ptr) +@ stdcall ExDeleteResourceLite(ptr) +@ extern ExDesktopObjectType +@ stdcall ExDisableResourceBoostLite(ptr) +@ fastcall ExEnterCriticalRegionAndAcquireFastMutexUnsafe(ptr) +@ stdcall ExEnterCriticalRegionAndAcquireResourceExclusive(ptr) +;ExEnterCriticalRegionAndAcquireResourceShared +;ExEnterCriticalRegionAndAcquireSharedWaitForExclusive +@ stdcall ExEnumHandleTable(ptr ptr ptr ptr) +@ extern ExEventObjectType _ExEventObjectType +@ stdcall ExExtendZone(ptr ptr long) +@ stdcall ExFreeCacheAwareRundownProtection(ptr) +@ stdcall ExFreePool(ptr) +@ stdcall ExFreePoolWithTag(ptr long) +@ stdcall ExFreeToPagedLookasideList(ptr ptr) ExiFreeToPagedLookasideList +@ stdcall ExGetCurrentProcessorCounts(ptr ptr ptr) +@ stdcall ExGetCurrentProcessorCpuUsage(ptr) +@ stdcall ExGetExclusiveWaiterCount(ptr) +@ stdcall ExGetPreviousMode() +@ stdcall ExGetSharedWaiterCount(ptr) +@ stdcall ExInitializeNPagedLookasideList(ptr ptr ptr long long long long) +@ stdcall ExInitializePagedLookasideList(ptr ptr ptr long long long long) +@ stdcall ExInitializeResourceLite(ptr) +@ fastcall ExInitializeRundownProtection(ptr) ExfInitializeRundownProtection +@ stdcall ExInitializeRundownProtectionCacheAware(ptr long) +@ stdcall ExInitializeZone(ptr long ptr long) +@ stdcall ExInterlockedAddLargeInteger(ptr long long ptr) +@ fastcall ExInterlockedAddLargeStatistic(ptr long) +@ stdcall ExInterlockedAddUlong(ptr long ptr) +@ fastcall ExInterlockedCompareExchange64(ptr ptr ptr ptr) +@ stdcall ExInterlockedDecrementLong(ptr ptr) +@ stdcall ExInterlockedExchangeUlong(ptr long ptr) +@ stdcall ExInterlockedExtendZone(ptr ptr long ptr) +@ fastcall ExInterlockedFlushSList(ptr) +@ stdcall ExInterlockedIncrementLong(ptr ptr) +@ stdcall ExInterlockedInsertHeadList(ptr ptr ptr) +@ stdcall ExInterlockedInsertTailList(ptr ptr ptr) +@ stdcall ExInterlockedPopEntryList(ptr ptr) +@ fastcall ExInterlockedPopEntrySList(ptr ptr) +@ stdcall ExInterlockedPushEntryList(ptr ptr ptr) +@ fastcall ExInterlockedPushEntrySList(ptr ptr ptr) +@ stdcall ExInterlockedRemoveHeadList(ptr ptr) +@ stdcall ExIsProcessorFeaturePresent(long) +@ stdcall ExIsResourceAcquiredExclusiveLite(ptr) +@ stdcall ExIsResourceAcquiredSharedLite(ptr) +@ stdcall ExLocalTimeToSystemTime(ptr ptr) +@ stdcall ExNotifyCallback(ptr ptr ptr) +@ stdcall ExQueryPoolBlockSize(ptr ptr) +@ stdcall ExQueueWorkItem(ptr long) +@ stdcall ExRaiseAccessViolation() +@ stdcall ExRaiseDatatypeMisalignment() +@ stdcall ExRaiseException(ptr) RtlRaiseException +@ stdcall ExRaiseHardError(long long long ptr long ptr) +@ stdcall ExRaiseStatus(long) RtlRaiseStatus +@ fastcall ExReInitializeRundownProtection(ptr) ExfReInitializeRundownProtection +@ fastcall ExReInitializeRundownProtectionCacheAware(ptr) ExfReInitializeRundownProtectionCacheAware +@ stdcall ExRegisterCallback(ptr ptr ptr) +@ stdcall ExReinitializeResourceLite(ptr) +@ fastcall ExReleaseFastMutexUnsafe(ptr) +@ fastcall ExReleaseFastMutexUnsafeAndLeaveCriticalRegion(ptr) +@ fastcall ExReleaseResourceAndLeaveCriticalRegion(ptr) +@ stdcall ExReleaseResourceForThreadLite(ptr long) +@ fastcall ExReleaseResourceLite(ptr) +@ fastcall ExReleaseRundownProtection(ptr) ExfReleaseRundownProtection +@ fastcall ExReleaseRundownProtectionCacheAware(ptr) ExfReleaseRundownProtectionCacheAware +@ fastcall ExReleaseRundownProtectionCacheAwareEx(ptr long) ExfReleaseRundownProtectionCacheAwareEx +@ fastcall ExReleaseRundownProtectionEx(ptr long) ExfReleaseRundownProtectionEx +@ fastcall ExRundownCompleted(ptr) ExfRundownCompleted +@ fastcall ExRundownCompletedCacheAware(ptr) ExfRundownCompletedCacheAware +@ extern ExSemaphoreObjectType _ExSemaphoreObjectType +@ stdcall ExSetResourceOwnerPointer(ptr ptr) +@ stdcall ExSetTimerResolution(long long) +@ stdcall ExSizeOfRundownProtectionCacheAware() +@ stdcall ExSystemExceptionFilter() +@ stdcall ExSystemTimeToLocalTime(ptr ptr) +@ stdcall ExUnregisterCallback(ptr) +@ stdcall ExUuidCreate(ptr) +@ stdcall ExVerifySuite(long) +@ fastcall ExWaitForRundownProtectionRelease(ptr) ExfWaitForRundownProtectionRelease +@ fastcall ExWaitForRundownProtectionReleaseCacheAware(ptr) ExfWaitForRundownProtectionReleaseCacheAware +@ extern ExWindowStationObjectType +@ fastcall ExfAcquirePushLockExclusive(ptr) +@ fastcall ExfAcquirePushLockShared(ptr) +@ fastcall ExfInterlockedAddUlong(ptr long ptr) +@ fastcall ExfInterlockedCompareExchange64(ptr ptr ptr) +@ fastcall ExfInterlockedInsertHeadList(ptr ptr ptr) +@ fastcall ExfInterlockedInsertTailList(ptr ptr ptr) +@ fastcall ExfInterlockedPopEntryList(ptr ptr) +@ fastcall ExfInterlockedPushEntryList(ptr ptr ptr) +@ fastcall ExfInterlockedRemoveHeadList(ptr ptr) +@ fastcall ExfReleasePushLock(ptr) +@ fastcall ExfReleasePushLockExclusive(ptr) +@ fastcall ExfReleasePushLockShared(ptr) +@ fastcall ExfTryToWakePushLock(ptr) +@ fastcall ExfUnblockPushLock(ptr ptr) +@ fastcall Exfi386InterlockedDecrementLong(ptr) +@ fastcall Exfi386InterlockedExchangeUlong(ptr long) +@ fastcall Exfi386InterlockedIncrementLong(ptr) +@ stdcall Exi386InterlockedDecrementLong(ptr) +@ stdcall Exi386InterlockedExchangeUlong(ptr long long) +@ stdcall Exi386InterlockedIncrementLong(ptr) +@ fastcall ExiAcquireFastMutex(ptr) ExAcquireFastMutex +@ fastcall ExiReleaseFastMutex(ptr) ExReleaseFastMutex +@ fastcall ExiTryToAcquireFastMutex(ptr) ExTryToAcquireFastMutex +@ stdcall FsRtlAcquireFileExclusive(ptr) +;FsRtlAddBaseMcbEntry +@ stdcall FsRtlAddLargeMcbEntry(ptr long long long long long long) +@ stdcall FsRtlAddMcbEntry(ptr long long long) +@ stdcall FsRtlAddToTunnelCache(ptr long long ptr ptr long long ptr) +@ stdcall FsRtlAllocateFileLock(ptr ptr) +@ stdcall FsRtlAllocatePool(long long) +@ stdcall FsRtlAllocatePoolWithQuota(long long) +@ stdcall FsRtlAllocatePoolWithQuotaTag(long long long) +@ stdcall FsRtlAllocatePoolWithTag(long long long) +@ stdcall FsRtlAllocateResource() +@ stdcall FsRtlAreNamesEqual(ptr ptr long wstr) +@ stdcall FsRtlBalanceReads(ptr) +@ stdcall FsRtlCheckLockForReadAccess(ptr ptr) +@ stdcall FsRtlCheckLockForWriteAccess(ptr ptr) +@ stdcall FsRtlCheckOplock(ptr ptr ptr ptr ptr) +@ stdcall FsRtlCopyRead(ptr ptr long long long ptr ptr ptr) +@ stdcall FsRtlCopyWrite(ptr ptr long long long ptr ptr ptr) +@ stdcall FsRtlCreateSectionForDataScan(ptr ptr ptr ptr long ptr ptr long long long) +@ stdcall FsRtlCurrentBatchOplock(ptr) +@ stdcall FsRtlDeleteKeyFromTunnelCache(ptr long long) +@ stdcall FsRtlDeleteTunnelCache(ptr) +@ stdcall FsRtlDeregisterUncProvider(ptr) +@ stdcall FsRtlDissectDbcs(long ptr ptr ptr) +@ stdcall FsRtlDissectName(long ptr ptr ptr) +@ stdcall FsRtlDoesDbcsContainWildCards(ptr) +@ stdcall FsRtlDoesNameContainWildCards(ptr) +@ stdcall FsRtlFastCheckLockForRead(ptr ptr ptr long ptr ptr) +@ stdcall FsRtlFastCheckLockForWrite(ptr ptr ptr long ptr ptr) +@ stdcall FsRtlFastUnlockAll(ptr ptr ptr ptr) +@ stdcall FsRtlFastUnlockAllByKey(ptr ptr ptr long ptr) +@ stdcall FsRtlFastUnlockSingle(ptr ptr ptr ptr ptr long ptr long) +@ stdcall FsRtlFindInTunnelCache(ptr long long ptr ptr ptr ptr ptr) +@ stdcall FsRtlFreeFileLock(ptr) +@ stdcall FsRtlGetFileSize(ptr ptr) +;FsRtlGetNextBaseMcbEntry +@ stdcall FsRtlGetNextFileLock(ptr long) +@ stdcall FsRtlGetNextLargeMcbEntry(ptr long ptr ptr ptr) +@ stdcall FsRtlGetNextMcbEntry(ptr long ptr ptr ptr) +@ stdcall FsRtlIncrementCcFastReadNoWait() +@ stdcall FsRtlIncrementCcFastReadNotPossible() +@ stdcall FsRtlIncrementCcFastReadResourceMiss() +@ stdcall FsRtlIncrementCcFastReadWait() +;FsRtlInitializeBaseMcb +@ stdcall FsRtlInitializeFileLock(ptr ptr ptr) +@ stdcall FsRtlInitializeLargeMcb(ptr long) +@ stdcall FsRtlInitializeMcb(ptr long) +@ stdcall FsRtlInitializeOplock(ptr) +@ stdcall FsRtlInitializeTunnelCache(ptr) +@ stdcall FsRtlInsertPerFileObjectContext(ptr ptr) +@ stdcall FsRtlInsertPerStreamContext(ptr ptr) +@ stdcall FsRtlIsDbcsInExpression(ptr ptr) +@ stdcall FsRtlIsFatDbcsLegal(long ptr long long long) +@ stdcall FsRtlIsHpfsDbcsLegal(long ptr long long long) +@ stdcall FsRtlIsNameInExpression(ptr ptr long wstr) +@ stdcall FsRtlIsNtstatusExpected(long) +@ stdcall FsRtlIsPagingFile(ptr) +@ stdcall FsRtlIsTotalDeviceFailure(ptr) +@ extern FsRtlLegalAnsiCharacterArray _FsRtlLegalAnsiCharacterArray +;FsRtlLookupBaseMcbEntry +@ stdcall FsRtlLookupLargeMcbEntry(ptr long long ptr ptr ptr ptr ptr) +;FsRtlLookupLastBaseMcbEntry +;FsRtlLookupLastBaseMcbEntryAndIndex +@ stdcall FsRtlLookupLastLargeMcbEntry(ptr ptr ptr) +@ stdcall FsRtlLookupLastLargeMcbEntryAndIndex(ptr ptr ptr ptr) +@ stdcall FsRtlLookupLastMcbEntry(ptr ptr ptr) +@ stdcall FsRtlLookupMcbEntry(ptr long ptr ptr ptr) +@ stdcall FsRtlLookupPerFileObjectContext(ptr ptr ptr) +@ stdcall FsRtlLookupPerStreamContextInternal(ptr ptr ptr) +@ stdcall FsRtlMdlRead(ptr ptr long long ptr ptr) +@ stdcall FsRtlMdlReadComplete(ptr ptr) +@ stdcall FsRtlMdlReadCompleteDev(ptr ptr ptr) +@ stdcall FsRtlMdlReadDev(ptr ptr long long ptr ptr ptr) +@ stdcall FsRtlMdlWriteComplete(ptr ptr ptr) +@ stdcall FsRtlMdlWriteCompleteDev(ptr ptr ptr ptr) +@ stdcall FsRtlNormalizeNtstatus(long long) +@ stdcall FsRtlNotifyChangeDirectory(ptr ptr ptr ptr long long ptr) +@ stdcall FsRtlNotifyCleanup(ptr ptr ptr) +@ stdcall FsRtlNotifyFilterChangeDirectory(ptr ptr ptr ptr long long long ptr ptr ptr ptr) +@ stdcall FsRtlNotifyFilterReportChange(ptr ptr ptr long ptr ptr long long ptr ptr) +@ stdcall FsRtlNotifyFullChangeDirectory(ptr ptr ptr ptr long long long ptr ptr ptr) +@ stdcall FsRtlNotifyFullReportChange(ptr ptr ptr long ptr ptr long long ptr) +@ stdcall FsRtlNotifyInitializeSync(ptr) +@ stdcall FsRtlNotifyReportChange(ptr ptr ptr ptr long) +@ stdcall FsRtlNotifyUninitializeSync(ptr) +@ stdcall FsRtlNotifyVolumeEvent(ptr long) +;FsRtlNumberOfRunsInBaseMcb +@ stdcall FsRtlNumberOfRunsInLargeMcb(ptr) +@ stdcall FsRtlNumberOfRunsInMcb(ptr) +@ stdcall FsRtlOplockFsctrl(ptr ptr long) +@ stdcall FsRtlOplockIsFastIoPossible(ptr) +@ stdcall FsRtlPostPagingFileStackOverflow(ptr ptr ptr) +@ stdcall FsRtlPostStackOverflow(ptr ptr ptr) +@ stdcall FsRtlPrepareMdlWrite(ptr ptr long long ptr ptr) +@ stdcall FsRtlPrepareMdlWriteDev(ptr ptr long long ptr ptr ptr) +@ stdcall FsRtlPrivateLock(ptr ptr ptr ptr ptr long long long ptr ptr ptr long) +@ stdcall FsRtlProcessFileLock(ptr ptr ptr) +@ stdcall FsRtlRegisterFileSystemFilterCallbacks(ptr ptr) +@ stdcall FsRtlRegisterUncProvider(ptr ptr long) +@ stdcall FsRtlReleaseFile(ptr) +;FsRtlRemoveBaseMcbEntry +@ stdcall FsRtlRemoveLargeMcbEntry(ptr long long long long) +@ stdcall FsRtlRemoveMcbEntry(ptr long long) +@ stdcall FsRtlRemovePerFileObjectContext(ptr ptr ptr) +@ stdcall FsRtlRemovePerStreamContext(ptr ptr ptr) +;FsRtlResetBaseMcb +@ stdcall FsRtlResetLargeMcb(ptr long) +;FsRtlSplitBaseMcb +@ stdcall FsRtlSplitLargeMcb(ptr long long long long) +@ stdcall FsRtlSyncVolumes(long long long) +@ stdcall FsRtlTeardownPerStreamContexts(ptr) +;FsRtlTruncateBaseMcb +@ stdcall FsRtlTruncateLargeMcb(ptr long long) +@ stdcall FsRtlTruncateMcb(ptr long) +;FsRtlUninitializeBaseMcb +@ stdcall FsRtlUninitializeFileLock(ptr) +@ stdcall FsRtlUninitializeLargeMcb(ptr) +@ stdcall FsRtlUninitializeMcb(ptr) +@ stdcall FsRtlUninitializeOplock(ptr) +@ extern HalDispatchTable _HalDispatchTable +@ fastcall HalExamineMBR(ptr long long ptr) +@ extern HalPrivateDispatchTable +;HeadlessDispatch +@ stdcall InbvAcquireDisplayOwnership() +@ stdcall InbvCheckDisplayOwnership() +@ stdcall InbvDisplayString(str) +@ stdcall InbvEnableBootDriver(long) +@ stdcall InbvEnableDisplayString(long) +@ stdcall InbvInstallDisplayStringFilter(ptr) +@ stdcall InbvIsBootDriverInstalled() +@ stdcall InbvNotifyDisplayOwnershipLost(ptr) +@ stdcall InbvResetDisplay() +@ stdcall InbvSetScrollRegion(long long long long) +@ stdcall InbvSetTextColor(long) +@ stdcall InbvSolidColorFill(long long long long long) +@ extern InitSafeBootMode +@ fastcall InterlockedCompareExchange(ptr long long) +@ fastcall InterlockedDecrement(ptr) +@ fastcall InterlockedExchange(ptr long) +@ fastcall InterlockedExchangeAdd(ptr long) +@ fastcall InterlockedIncrement(ptr) +@ fastcall InterlockedPopEntrySList(ptr) +@ fastcall InterlockedPushEntrySList(ptr ptr) +@ stdcall IoAcquireCancelSpinLock(ptr) +@ stdcall IoAcquireRemoveLockEx(ptr ptr str long long) +@ stdcall IoAcquireVpbSpinLock(ptr) +@ extern IoAdapterObjectType +@ stdcall IoAllocateAdapterChannel(ptr ptr long ptr ptr) +@ stdcall IoAllocateController(ptr ptr ptr ptr) +@ stdcall IoAllocateDriverObjectExtension(ptr ptr long ptr) +@ stdcall IoAllocateErrorLogEntry(ptr long) +@ stdcall IoAllocateIrp(long long) +@ stdcall IoAllocateMdl(ptr long long long ptr) +@ stdcall IoAllocateWorkItem(ptr) +@ fastcall IoAssignDriveLetters(ptr ptr ptr ptr) +@ stdcall IoAssignResources(ptr ptr ptr ptr ptr ptr) +@ stdcall IoAttachDevice(ptr ptr ptr) +@ stdcall IoAttachDeviceByPointer(ptr ptr) +@ stdcall IoAttachDeviceToDeviceStack(ptr ptr) +@ stdcall IoAttachDeviceToDeviceStackSafe(ptr ptr ptr) +@ stdcall IoBuildAsynchronousFsdRequest(long ptr ptr long ptr ptr) +@ stdcall IoBuildDeviceIoControlRequest(long ptr ptr long ptr long long ptr ptr) +@ stdcall IoBuildPartialMdl(ptr ptr ptr long) +@ stdcall IoBuildSynchronousFsdRequest(long ptr ptr long ptr ptr ptr) +@ stdcall IoCallDriver(ptr ptr) +@ stdcall IoCancelFileOpen(ptr ptr) +@ stdcall IoCancelIrp(ptr) +@ stdcall IoCheckDesiredAccess(ptr long) +@ stdcall IoCheckEaBufferValidity(ptr long ptr) +@ stdcall IoCheckFunctionAccess(long long long long ptr ptr) +@ stdcall IoCheckQuerySetFileInformation(long long long) +@ stdcall IoCheckQuerySetVolumeInformation(long long long) +@ stdcall IoCheckQuotaBufferValidity(ptr long ptr) +@ stdcall IoCheckShareAccess(long long ptr ptr long) +@ stdcall IoCompleteRequest(ptr long) +@ stdcall IoConnectInterrupt(ptr ptr ptr ptr long long long long long long long) +@ stdcall IoCreateController(long) +@ stdcall IoCreateDevice(ptr long ptr long long long ptr) +@ stdcall IoCreateDisk(ptr ptr) +@ stdcall IoCreateDriver(ptr ptr) +@ stdcall IoCreateFile(ptr long ptr ptr ptr long long long long ptr long long ptr long) +@ stdcall IoCreateFileSpecifyDeviceObjectHint(ptr long ptr ptr ptr long long long long ptr long long ptr long ptr) +@ stdcall IoCreateNotificationEvent(ptr ptr) +@ stdcall IoCreateStreamFileObject(ptr ptr) +@ stdcall IoCreateStreamFileObjectEx(ptr ptr ptr) +@ stdcall IoCreateStreamFileObjectLite(ptr ptr) +@ stdcall IoCreateSymbolicLink(ptr ptr) +@ stdcall IoCreateSynchronizationEvent(ptr ptr) +@ stdcall IoCreateUnprotectedSymbolicLink(ptr ptr) +@ stdcall IoCsqInitialize(ptr ptr ptr ptr ptr ptr ptr) +@ stdcall IoCsqInitializeEx(ptr ptr ptr ptr ptr ptr ptr) +@ stdcall IoCsqInsertIrp(ptr ptr ptr) +@ stdcall IoCsqInsertIrpEx(ptr ptr ptr ptr) +@ stdcall IoCsqRemoveIrp(ptr ptr) +@ stdcall IoCsqRemoveNextIrp(ptr ptr) +@ stdcall IoDeleteController(ptr) +@ stdcall IoDeleteDevice(ptr) +@ stdcall IoDeleteDriver(ptr) +@ stdcall IoDeleteSymbolicLink(ptr) +@ stdcall IoDetachDevice(ptr) +@ extern IoDeviceHandlerObjectSize +@ extern IoDeviceHandlerObjectType +@ extern IoDeviceObjectType +@ stdcall IoDisconnectInterrupt(ptr) +@ extern IoDriverObjectType +@ stdcall IoEnqueueIrp(ptr) +@ stdcall IoEnumerateDeviceObjectList(ptr ptr long ptr) +@ stdcall IoEnumerateRegisteredFiltersList(ptr long ptr) +@ stdcall IoFastQueryNetworkAttributes(ptr long long ptr ptr) +@ extern IoFileObjectType _IoFileObjectType +@ stdcall IoForwardAndCatchIrp(ptr ptr) IoForwardIrpSynchronously +@ stdcall IoForwardIrpSynchronously(ptr ptr) +@ stdcall IoFreeController(ptr) +@ stdcall IoFreeErrorLogEntry(ptr) +@ stdcall IoFreeIrp(ptr) +@ stdcall IoFreeMdl(ptr) +@ stdcall IoFreeWorkItem(ptr) +@ stdcall IoGetAttachedDevice(ptr) +@ stdcall IoGetAttachedDeviceReference(ptr) +@ stdcall IoGetBaseFileSystemDeviceObject(ptr) +@ stdcall IoGetBootDiskInformation(ptr long) +@ stdcall IoGetConfigurationInformation() +@ stdcall IoGetCurrentProcess() +@ stdcall IoGetDeviceAttachmentBaseRef(ptr) +@ stdcall IoGetDeviceInterfaceAlias(ptr ptr ptr) +@ stdcall IoGetDeviceInterfaces(ptr ptr long ptr) +@ stdcall IoGetDeviceObjectPointer(ptr long ptr ptr) +@ stdcall IoGetDeviceProperty(ptr long long ptr ptr) +@ stdcall IoGetDeviceToVerify(ptr) +@ stdcall IoGetDiskDeviceObject(ptr ptr) +@ stdcall IoGetDmaAdapter(ptr ptr ptr) +@ stdcall IoGetDriverObjectExtension(ptr ptr) +@ stdcall IoGetFileObjectGenericMapping() +@ stdcall IoGetInitialStack() +@ stdcall IoGetLowerDeviceObject(ptr) +@ stdcall IoGetPagingIoPriority(ptr) +@ stdcall IoGetRelatedDeviceObject(ptr) +@ stdcall IoGetRequestorProcess(ptr) +@ stdcall IoGetRequestorProcessId(ptr) +@ stdcall IoGetRequestorSessionId(ptr ptr) +@ stdcall IoGetStackLimits(ptr ptr) +@ stdcall IoGetTopLevelIrp() +@ stdcall IoInitializeIrp(ptr long long) +@ stdcall IoInitializeRemoveLockEx(ptr long long long long) +@ stdcall IoInitializeTimer(ptr ptr ptr) +@ stdcall IoInvalidateDeviceRelations(ptr long) +@ stdcall IoInvalidateDeviceState(ptr) +@ stdcall IoIsFileOriginRemote(ptr) +@ stdcall IoIsOperationSynchronous(ptr) +@ stdcall IoIsSystemThread(ptr) +@ stdcall IoIsValidNameGraftingBuffer(ptr ptr) +@ stdcall IoIsWdmVersionAvailable(long long) +@ stdcall IoMakeAssociatedIrp(ptr long) +@ stdcall IoOpenDeviceInterfaceRegistryKey(ptr long ptr) +@ stdcall IoOpenDeviceRegistryKey(ptr long long ptr) +@ stdcall IoPageRead(ptr ptr ptr ptr ptr) +@ stdcall IoPnPDeliverServicePowerNotification(long long long long) +@ stdcall IoQueryDeviceDescription(ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall IoQueryFileDosDeviceName(ptr ptr) +@ stdcall IoQueryFileInformation(ptr long long ptr ptr) +@ stdcall IoQueryVolumeInformation(ptr long long ptr ptr) +@ stdcall IoQueueThreadIrp(ptr) +@ stdcall IoQueueWorkItem(ptr ptr long ptr) +@ stdcall IoRaiseHardError(ptr ptr ptr) +@ stdcall IoRaiseInformationalHardError(long ptr ptr) +@ stdcall IoReadDiskSignature(ptr long ptr) +@ extern IoReadOperationCount +@ fastcall IoReadPartitionTable(ptr long long ptr) +@ stdcall IoReadPartitionTableEx(ptr ptr) +@ extern IoReadTransferCount +@ stdcall IoRegisterBootDriverReinitialization(ptr ptr ptr) +@ stdcall IoRegisterDeviceInterface(ptr ptr ptr ptr) +@ stdcall IoRegisterDriverReinitialization(ptr ptr ptr) +@ stdcall IoRegisterFileSystem(ptr) +@ stdcall IoRegisterFsRegistrationChange(ptr ptr) +@ stdcall IoRegisterLastChanceShutdownNotification(ptr) +@ stdcall IoRegisterPlugPlayNotification(long long ptr ptr ptr ptr ptr) +@ stdcall IoRegisterShutdownNotification(ptr) +@ stdcall IoReleaseCancelSpinLock(long) +@ stdcall IoReleaseRemoveLockAndWaitEx(ptr ptr long) +@ stdcall IoReleaseRemoveLockEx(ptr ptr long) +@ stdcall IoReleaseVpbSpinLock(long) +@ stdcall IoRemoveShareAccess(ptr ptr) +@ stdcall IoReportDetectedDevice(ptr long long long ptr ptr long ptr) +@ stdcall IoReportHalResourceUsage(ptr ptr ptr long) +@ stdcall IoReportResourceForDetection(ptr ptr long ptr ptr long ptr) +@ stdcall IoReportResourceUsage(ptr ptr ptr long ptr ptr long long ptr) +@ stdcall IoReportTargetDeviceChange(ptr ptr) +@ stdcall IoReportTargetDeviceChangeAsynchronous(ptr ptr ptr ptr) +@ stdcall IoRequestDeviceEject(ptr) +@ stdcall IoReuseIrp(ptr long) +@ stdcall IoSetCompletionRoutineEx(ptr ptr ptr ptr long long long) +@ stdcall IoSetDeviceInterfaceState(ptr long) +@ stdcall IoSetDeviceToVerify(ptr ptr) +@ stdcall IoSetFileOrigin(ptr long) +@ stdcall IoSetHardErrorOrVerifyDevice(ptr ptr) +@ stdcall IoSetInformation(ptr ptr long ptr) +@ stdcall IoSetIoCompletion(ptr ptr ptr long ptr long) +@ fastcall IoSetPartitionInformation(ptr long long long) +@ stdcall IoSetPartitionInformationEx(ptr long ptr) +@ stdcall IoSetShareAccess(long long ptr ptr) +@ stdcall IoSetStartIoAttributes(ptr long long) +@ stdcall IoSetSystemPartition(ptr) +@ stdcall IoSetThreadHardErrorMode(long) +@ stdcall IoSetTopLevelIrp(ptr) +@ stdcall IoStartNextPacket(ptr long) +@ stdcall IoStartNextPacketByKey(ptr long long) +@ stdcall IoStartPacket(ptr ptr ptr ptr) +@ stdcall IoStartTimer(ptr) +@ extern IoStatisticsLock +@ stdcall IoStopTimer(ptr) +@ stdcall IoSynchronousInvalidateDeviceRelations(ptr long) +@ stdcall IoSynchronousPageWrite(ptr ptr ptr ptr ptr) +@ stdcall IoThreadToProcess(ptr) +;IoTranslateBusAddress +@ stdcall IoUnregisterFileSystem(ptr) +@ stdcall IoUnregisterFsRegistrationChange(ptr ptr) +@ stdcall IoUnregisterPlugPlayNotification(ptr) +@ stdcall IoUnregisterShutdownNotification(ptr) +@ stdcall IoUpdateShareAccess(ptr ptr) +@ stdcall IoValidateDeviceIoControlAccess(ptr long) +@ stdcall IoVerifyPartitionTable(ptr long) +@ stdcall IoVerifyVolume(ptr long) +@ stdcall IoVolumeDeviceToDosName(ptr ptr) +@ stdcall IoWMIAllocateInstanceIds(ptr long ptr) +@ stdcall IoWMIDeviceObjectToInstanceName(ptr ptr ptr) +@ stdcall IoWMIExecuteMethod(ptr ptr long long ptr ptr) +@ stdcall IoWMIHandleToInstanceName(ptr ptr ptr) +@ stdcall IoWMIOpenBlock(ptr long ptr) +@ stdcall IoWMIQueryAllData(ptr ptr ptr) +@ stdcall IoWMIQueryAllDataMultiple(ptr long ptr ptr) +@ stdcall IoWMIQuerySingleInstance(ptr ptr ptr ptr) +@ stdcall IoWMIQuerySingleInstanceMultiple(ptr ptr long ptr ptr) +@ stdcall IoWMIRegistrationControl(ptr long) +@ stdcall IoWMISetNotificationCallback(ptr ptr ptr) +@ stdcall IoWMISetSingleInstance(ptr ptr long long ptr) +@ stdcall IoWMISetSingleItem(ptr ptr long long long ptr) +@ stdcall IoWMISuggestInstanceName(ptr ptr long ptr) +@ stdcall IoWMIWriteEvent(ptr) +@ stdcall IoWriteErrorLogEntry(ptr) +@ extern IoWriteOperationCount +@ fastcall IoWritePartitionTable(ptr long long long ptr) +@ stdcall IoWritePartitionTableEx(ptr ptr) +@ extern IoWriteTransferCount +@ fastcall IofCallDriver(ptr ptr) +@ fastcall IofCompleteRequest(ptr long) +@ stdcall KdChangeOption(long long ptr long ptr ptr) +@ extern KdDebuggerEnabled _KdDebuggerEnabled +@ extern KdDebuggerNotPresent _KdDebuggerNotPresent +@ stdcall KdDisableDebugger() +@ stdcall KdEnableDebugger() +@ extern KdEnteredDebugger +@ stdcall KdPollBreakIn() +@ stdcall KdPowerTransition(long) +@ stdcall KdRefreshDebuggerNotPresent() +@ stdcall KdSystemDebugControl(long ptr long ptr long ptr long) +@ stdcall Ke386CallBios(long ptr) +;Ke386IoSetAccessProcess +;Ke386QueryIoAccessMap +;Ke386SetIoAccessMap +@ fastcall KeAcquireGuardedMutex(ptr) +@ fastcall KeAcquireGuardedMutexUnsafe(ptr) +@ fastcall KeAcquireInStackQueuedSpinLockAtDpcLevel(ptr ptr) +@ fastcall KeAcquireInStackQueuedSpinLockForDpc(ptr ptr) +@ stdcall KeAcquireInterruptSpinLock(ptr) +@ stdcall KeAcquireSpinLockAtDpcLevel(ptr) +@ fastcall KeAcquireSpinLockForDpc(ptr) +@ stdcall KeAddSystemServiceTable(ptr ptr long ptr long) +@ stdcall KeAreAllApcsDisabled() +@ stdcall KeAreApcsDisabled() +@ stdcall KeAttachProcess(ptr) +@ stdcall KeBugCheck(long) +@ stdcall KeBugCheckEx(long ptr ptr ptr ptr) +@ stdcall KeCancelTimer(ptr) +@ stdcall KeCapturePersistentThreadState(ptr long long long long long ptr) +@ stdcall KeClearEvent(ptr) +@ stdcall KeConnectInterrupt(ptr) +@ stdcall KeDelayExecutionThread(long long ptr) +@ stdcall KeDeregisterBugCheckCallback(ptr) +@ stdcall KeDeregisterBugCheckReasonCallback(ptr) +@ stdcall KeDeregisterNmiCallback(ptr) +@ stdcall KeDetachProcess() +@ stdcall KeDisconnectInterrupt(ptr) +@ stdcall KeEnterCriticalRegion() _KeEnterCriticalRegion +@ stdcall KeEnterGuardedRegion() _KeEnterGuardedRegion +@ stdcall KeEnterKernelDebugger() +@ stdcall KeFindConfigurationEntry(ptr long long ptr) +@ stdcall KeFindConfigurationNextEntry(ptr long long ptr ptr) +@ stdcall KeFlushEntireTb(long long) +@ stdcall KeFlushQueuedDpcs() +;KeGenericCallDpc +@ stdcall KeGetCurrentThread() +@ stdcall KeGetPreviousMode() +@ stdcall KeGetRecommendedSharedDataAlignment() +;KeI386AbiosCall +@ stdcall KeI386AllocateGdtSelectors(ptr long) +;KeI386Call16BitCStyleFunction +;KeI386Call16BitFunction +@ stdcall KeI386FlatToGdtSelector(long long long) +;KeI386GetLid +@ extern KeI386MachineType +@ stdcall KeI386ReleaseGdtSelectors(ptr long) +;KeI386ReleaseLid +;KeI386SetGdtSelector +@ stdcall KeInitializeApc(ptr ptr long ptr ptr ptr long ptr) +@ stdcall KeInitializeCrashDumpHeader(long long ptr long ptr) +@ stdcall KeInitializeDeviceQueue(ptr) +@ stdcall KeInitializeDpc(ptr ptr ptr) +@ stdcall KeInitializeEvent(ptr long long) +@ fastcall KeInitializeGuardedMutex(ptr) +@ stdcall KeInitializeInterrupt(ptr ptr ptr ptr long long long long long long long) +@ stdcall KeInitializeMutant(ptr long) +@ stdcall KeInitializeMutex(ptr long) +@ stdcall KeInitializeQueue(ptr long) +@ stdcall KeInitializeSemaphore(ptr long long) +@ stdcall KeInitializeSpinLock(ptr) +@ stdcall KeInitializeThreadedDpc(ptr ptr ptr) +@ stdcall KeInitializeTimer(ptr) +@ stdcall KeInitializeTimerEx(ptr long) +@ stdcall KeInsertByKeyDeviceQueue(ptr ptr long) +@ stdcall KeInsertDeviceQueue(ptr ptr) +@ stdcall KeInsertHeadQueue(ptr ptr) +@ stdcall KeInsertQueue(ptr ptr) +@ stdcall KeInsertQueueApc(ptr ptr ptr long) +@ stdcall KeInsertQueueDpc(ptr ptr ptr) +@ stdcall KeInvalidateAllCaches() +@ stdcall KeIpiGenericCall(ptr ptr) +@ stdcall KeIsAttachedProcess() +@ stdcall KeIsExecutingDpc() +;KeIsWaitListEmpty +@ stdcall KeLeaveCriticalRegion() _KeLeaveCriticalRegion +@ stdcall KeLeaveGuardedRegion() _KeLeaveGuardedRegion +@ extern KeLoaderBlock +@ extern KeNumberProcessors +@ stdcall KeProfileInterrupt(ptr) +@ stdcall KeProfileInterruptWithSource(ptr long) +@ stdcall KePulseEvent(ptr long long) +@ stdcall KeQueryActiveProcessors() +@ stdcall KeQueryInterruptTime() +@ stdcall KeQueryPriorityThread(ptr) +@ stdcall KeQueryRuntimeThread(ptr ptr) +@ stdcall KeQuerySystemTime(ptr) +@ stdcall KeQueryTickCount(ptr) +@ stdcall KeQueryTimeIncrement() +@ stdcall KeRaiseUserException(long) +@ stdcall KeReadStateEvent(ptr) +@ stdcall KeReadStateMutant(ptr) +@ stdcall KeReadStateMutex(ptr) KeReadStateMutant +@ stdcall KeReadStateQueue(ptr) +@ stdcall KeReadStateSemaphore(ptr) +@ stdcall KeReadStateTimer(ptr) +@ stdcall KeRegisterBugCheckCallback(ptr ptr ptr long ptr) +@ stdcall KeRegisterBugCheckReasonCallback(ptr ptr ptr ptr) +@ stdcall KeRegisterNmiCallback(ptr ptr) +@ fastcall KeReleaseGuardedMutex(ptr) +@ fastcall KeReleaseGuardedMutexUnsafe(ptr) +@ fastcall KeReleaseInStackQueuedSpinLockForDpc(ptr) +@ fastcall KeReleaseInStackQueuedSpinLockFromDpcLevel(ptr) +@ stdcall KeReleaseInterruptSpinLock(ptr long) +@ stdcall KeReleaseMutant(ptr long long long) +@ stdcall KeReleaseMutex(ptr long) +@ stdcall KeReleaseSemaphore(ptr long long long) +@ fastcall KeReleaseSpinLockForDpc(ptr long) +@ stdcall KeReleaseSpinLockFromDpcLevel(ptr) +@ stdcall KeRemoveByKeyDeviceQueue(ptr long) +@ stdcall KeRemoveByKeyDeviceQueueIfBusy(ptr long) +@ stdcall KeRemoveDeviceQueue(ptr) +@ stdcall KeRemoveEntryDeviceQueue(ptr ptr) +@ stdcall KeRemoveQueue(ptr long ptr) +@ stdcall KeRemoveQueueDpc(ptr) +@ stdcall KeRemoveSystemServiceTable(long) +@ stdcall KeResetEvent(ptr) +@ stdcall KeRestoreFloatingPointState(ptr) +@ stdcall KeRevertToUserAffinityThread() +@ stdcall KeRundownQueue(ptr) +@ stdcall KeSaveFloatingPointState(ptr) +@ cdecl KeSaveStateForHibernate(ptr) +@ extern KeServiceDescriptorTable +@ stdcall KeSetAffinityThread(ptr long) +@ stdcall KeSetBasePriorityThread(ptr long) +@ stdcall KeSetDmaIoCoherency(long) +@ stdcall KeSetEvent(ptr long long) +@ stdcall KeSetEventBoostPriority(ptr ptr) +@ stdcall KeSetIdealProcessorThread(ptr long) +@ stdcall KeSetImportanceDpc(ptr long) +@ stdcall KeSetKernelStackSwapEnable(long) +@ stdcall KeSetPriorityThread(ptr long) +@ stdcall KeSetProfileIrql(long) +@ stdcall KeSetSystemAffinityThread(long) +@ stdcall KeSetTargetProcessorDpc(ptr long) +@ stdcall KeSetTimeIncrement(long long) +@ stdcall KeSetTimer(ptr long long ptr) +@ stdcall KeSetTimerEx(ptr long long long ptr) +;KeSignalCallDpcDone +;KeSignalCallDpcSynchronize +@ stdcall KeStackAttachProcess(ptr ptr) +@ stdcall KeSynchronizeExecution(ptr ptr ptr) +@ stdcall KeTerminateThread(long) +@ fastcall KeTestSpinLock(ptr) +@ extern KeTickCount +@ fastcall KeTryToAcquireGuardedMutex(ptr) +@ fastcall KeTryToAcquireSpinLockAtDpcLevel(ptr) +@ stdcall KeUnstackDetachProcess(ptr) +@ stdcall KeUpdateRunTime(ptr long) +#ifdef _M_IX86 +@ stdcall KeUpdateSystemTime() +#else +@ stdcall KeUpdateSystemTime(ptr long long) +#endif +@ stdcall KeUserModeCallback(long ptr long ptr ptr) +@ stdcall KeWaitForMultipleObjects(long ptr long long long long ptr ptr) +@ stdcall KeWaitForMutexObject(ptr long long long ptr) KeWaitForSingleObject +@ stdcall KeWaitForSingleObject(ptr long long long ptr) +@ fastcall KefAcquireSpinLockAtDpcLevel(ptr) +@ fastcall KefReleaseSpinLockFromDpcLevel(ptr) +@ stdcall Kei386EoiHelper() +@ fastcall KiAcquireSpinLock(ptr) +@ extern KiBugCheckData +@ stdcall KiCheckForKernelApcDelivery() +@ stdcall KiCoprocessorError() +@ stdcall KiDeliverApc(long ptr ptr) +@ stdcall KiDispatchInterrupt() +@ extern KiEnableTimerWatchdog +@ stdcall KiIpiServiceRoutine(ptr ptr) +@ fastcall KiReleaseSpinLock(ptr) +@ cdecl KiUnexpectedInterrupt() +;Kii386SpinOnSpinLock +@ stdcall LdrAccessResource(ptr ptr ptr ptr) +@ stdcall LdrEnumResources(ptr ptr long ptr ptr) +@ stdcall LdrFindResourceDirectory_U(ptr ptr long ptr) +@ stdcall LdrFindResource_U(ptr ptr long ptr) +@ extern LpcPortObjectType +@ stdcall LpcRequestPort(ptr ptr) +@ stdcall LpcRequestWaitReplyPort(ptr ptr ptr) +@ stdcall LsaCallAuthenticationPackage(long long long long long long long) +@ stdcall LsaDeregisterLogonProcess(long long) +@ stdcall LsaFreeReturnBuffer(ptr) +@ stdcall LsaLogonUser(ptr ptr long long ptr long ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall LsaLookupAuthenticationPackage(long long long) +@ stdcall LsaRegisterLogonProcess(ptr ptr ptr) +@ extern Mm64BitPhysicalAddress +@ stdcall MmAddPhysicalMemory(ptr ptr) +@ stdcall MmAddVerifierThunks(ptr long) +@ stdcall MmAdjustWorkingSetSize(long long long long) +@ stdcall MmAdvanceMdl(ptr long) +@ stdcall MmAllocateContiguousMemory(long long long) +@ stdcall MmAllocateContiguousMemorySpecifyCache(long long long long long long long long) +@ stdcall MmAllocateMappingAddress(long long) +@ stdcall MmAllocateNonCachedMemory(long) +@ stdcall MmAllocatePagesForMdl(ptr ptr ptr ptr ptr ptr ptr) +@ stdcall MmAllocatePagesForMdlEx(long long long long long long long long long) +@ stdcall MmBuildMdlForNonPagedPool(ptr) +@ stdcall MmCanFileBeTruncated(ptr ptr) +;MmCommitSessionMappedView +@ stdcall MmCreateMdl(ptr ptr long) +;MmCreateMirror +@ stdcall MmCreateSection(ptr long ptr ptr long long ptr ptr) +@ stdcall MmDisableModifiedWriteOfSection(long) +@ stdcall MmFlushImageSection(ptr long) +@ stdcall MmForceSectionClosed(ptr long) +@ stdcall MmFreeContiguousMemory(ptr) +@ stdcall MmFreeContiguousMemorySpecifyCache(ptr long long) +@ stdcall MmFreeMappingAddress(ptr long) +@ stdcall MmFreeNonCachedMemory(ptr long) +@ stdcall MmFreePagesFromMdl(ptr) +@ stdcall MmGetPhysicalAddress(ptr) +@ stdcall MmGetPhysicalMemoryRanges() +@ stdcall MmGetSystemRoutineAddress(ptr) +@ stdcall MmGetVirtualForPhysical(long long) +@ stdcall MmGrowKernelStack(ptr) +@ extern MmHighestUserAddress +@ stdcall MmIsAddressValid(ptr) +@ stdcall MmIsDriverVerifying(ptr) +;MmIsIoSpaceActive +@ stdcall MmIsNonPagedSystemAddressValid(ptr) +@ stdcall MmIsRecursiveIoFault() +@ stdcall MmIsThisAnNtAsSystem() +@ stdcall MmIsVerifierEnabled(ptr) +@ stdcall MmLockPagableDataSection(ptr) +@ stdcall MmLockPagableImageSection(ptr) MmLockPagableDataSection +@ stdcall MmLockPagableSectionByHandle(ptr) +@ stdcall MmMapIoSpace(long long long long) +@ stdcall MmMapLockedPages(ptr long) +@ stdcall MmMapLockedPagesSpecifyCache(ptr long long ptr long long) +@ stdcall MmMapLockedPagesWithReservedMapping(ptr long ptr long) +@ stdcall MmMapMemoryDumpMdl(ptr) +@ stdcall MmMapUserAddressesToPage(ptr long ptr) +@ stdcall MmMapVideoDisplay(long long long long) +@ stdcall MmMapViewInSessionSpace(ptr ptr ptr) +@ stdcall MmMapViewInSystemSpace(ptr ptr ptr) +@ stdcall MmMapViewOfSection(ptr ptr ptr long long ptr ptr long long long) +@ stdcall MmMarkPhysicalMemoryAsBad(ptr ptr) +@ stdcall MmMarkPhysicalMemoryAsGood(ptr ptr) +@ stdcall MmPageEntireDriver(ptr) +@ stdcall MmPrefetchPages(long ptr) +@ stdcall MmProbeAndLockPages(ptr long long) +@ stdcall MmProbeAndLockProcessPages(ptr ptr long long) +@ stdcall MmProbeAndLockSelectedPages(ptr ptr long long) +@ stdcall MmProtectMdlSystemAddress(ptr long) +@ stdcall MmQuerySystemSize() +@ stdcall MmRemovePhysicalMemory(ptr ptr) +@ stdcall MmResetDriverPaging(ptr) +@ extern MmSectionObjectType +@ stdcall MmSecureVirtualMemory(ptr long long) +@ stdcall MmSetAddressRangeModified(ptr long) +@ stdcall MmSetBankedSection(long long long long long long) +@ stdcall MmSizeOfMdl(ptr long) +@ extern MmSystemRangeStart +@ stdcall MmTrimAllSystemPagableMemory(long) +@ stdcall MmUnlockPagableImageSection(ptr) +@ stdcall MmUnlockPages(ptr) +@ stdcall MmUnmapIoSpace(ptr long) +@ stdcall MmUnmapLockedPages(ptr ptr) +@ stdcall MmUnmapReservedMapping(ptr long ptr) +@ stdcall MmUnmapVideoDisplay(ptr long) +@ stdcall MmUnmapViewInSessionSpace(ptr) +@ stdcall MmUnmapViewInSystemSpace(ptr) +@ stdcall MmUnmapViewOfSection(ptr ptr) +@ stdcall MmUnsecureVirtualMemory(ptr) +@ extern MmUserProbeAddress +@ extern NlsAnsiCodePage +@ extern NlsLeadByteInfo +@ extern NlsMbCodePageTag +@ extern NlsMbOemCodePageTag +@ extern NlsOemCodePage +@ extern NlsOemLeadByteInfo _NlsOemLeadByteInfo +@ stdcall NtAddAtom(wstr long ptr) +@ stdcall NtAdjustPrivilegesToken(ptr long ptr long ptr ptr) +@ stdcall NtAlertThread(ptr) +@ stdcall NtAllocateLocallyUniqueId(ptr) +@ stdcall NtAllocateUuids(ptr ptr ptr ptr) +@ stdcall NtAllocateVirtualMemory(ptr ptr long ptr long long) +@ extern NtBuildNumber +@ stdcall NtClose(ptr) +@ stdcall NtConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall NtCreateEvent(ptr long ptr long long) +@ stdcall NtCreateFile(ptr long ptr ptr ptr long long long long ptr long) +@ stdcall NtCreateSection(ptr long ptr ptr long long ptr) +@ stdcall NtCreateTimer(ptr long ptr long) +@ stdcall NtDeleteAtom(ptr) +@ stdcall NtDeleteFile(ptr) +@ stdcall NtDeviceIoControlFile(ptr ptr ptr ptr ptr long ptr long ptr long) +@ stdcall NtDuplicateObject(ptr ptr ptr ptr long long long) +@ stdcall NtDuplicateToken(ptr long ptr long long ptr) +@ stdcall NtFindAtom(wstr long ptr) +@ stdcall NtFreeVirtualMemory(ptr ptr ptr long) +@ stdcall NtFsControlFile(ptr ptr ptr ptr ptr long ptr long ptr long) +@ extern NtGlobalFlag +@ stdcall NtLockFile(ptr ptr ptr ptr ptr ptr ptr long long long) +@ stdcall NtMakePermanentObject(ptr) +@ stdcall NtMapViewOfSection(ptr ptr ptr long long ptr ptr long long long) +@ stdcall NtNotifyChangeDirectoryFile(ptr ptr ptr ptr ptr ptr long long long) +@ stdcall NtOpenEvent(ptr long ptr) +@ stdcall NtOpenFile(ptr long ptr ptr long long) +@ stdcall NtOpenProcess(ptr long ptr ptr) +@ stdcall NtOpenProcessToken(ptr long ptr) +@ stdcall NtOpenProcessTokenEx(ptr long long ptr) +@ stdcall NtOpenThread(ptr long ptr ptr) +@ stdcall NtOpenThreadToken(ptr long long ptr) +@ stdcall NtOpenThreadTokenEx(ptr long long long ptr) +@ stdcall NtQueryDirectoryFile(ptr ptr ptr ptr ptr ptr long long long ptr long) +@ stdcall NtQueryEaFile(ptr ptr ptr long long ptr long ptr long) +@ stdcall NtQueryInformationAtom(ptr long ptr long ptr) +@ stdcall NtQueryInformationFile(ptr ptr ptr long long) +@ stdcall NtQueryInformationProcess(ptr ptr ptr long ptr) +@ stdcall NtQueryInformationThread(ptr long ptr long ptr) +@ stdcall NtQueryInformationToken(ptr long ptr long ptr) +@ stdcall NtQueryQuotaInformationFile(ptr ptr ptr long long ptr long ptr long) +@ stdcall NtQuerySecurityObject(ptr long ptr long ptr) +@ stdcall NtQuerySystemInformation(long ptr long ptr) +@ stdcall NtQueryVolumeInformationFile(ptr ptr ptr long long) +@ stdcall NtReadFile(ptr ptr ptr ptr ptr ptr long ptr ptr) +@ stdcall NtRequestPort(ptr ptr) +@ stdcall NtRequestWaitReplyPort(ptr ptr ptr) +@ stdcall NtSetEaFile(ptr ptr ptr long) +@ stdcall NtSetEvent(ptr ptr) +@ stdcall NtSetInformationFile(ptr ptr ptr long long) +@ stdcall NtSetInformationProcess(ptr ptr ptr long) +@ stdcall NtSetInformationThread(ptr long ptr long) +@ stdcall NtSetQuotaInformationFile(ptr ptr ptr long) +@ stdcall NtSetSecurityObject(ptr long ptr) +@ stdcall NtSetVolumeInformationFile(ptr ptr ptr long long) +@ stdcall NtShutdownSystem(long) +@ stdcall NtTraceEvent(long long long ptr) +@ stdcall NtUnlockFile(ptr ptr ptr ptr long) +@ stdcall NtVdmControl(long ptr) +@ stdcall NtWaitForSingleObject(ptr long ptr) +@ stdcall NtWriteFile(ptr ptr ptr ptr ptr ptr long ptr ptr) +@ stdcall ObAssignSecurity(ptr ptr ptr ptr) +@ stdcall ObCheckCreateObjectAccess(ptr long ptr ptr long long ptr) +@ stdcall ObCheckObjectAccess(ptr ptr long long ptr) +@ stdcall ObCloseHandle(ptr long) +@ stdcall ObCreateObject(long ptr ptr long ptr long long long ptr) +@ stdcall ObCreateObjectType(ptr ptr ptr ptr) +;ObDeleteCapturedInsertInfo +@ stdcall ObDereferenceObject(ptr) +@ stdcall ObDereferenceObjectDeferDelete(ptr) +@ stdcall ObDereferenceSecurityDescriptor(ptr long) +@ stdcall ObFindHandleForObject(ptr ptr ptr ptr ptr) +@ stdcall ObGetObjectSecurity(ptr ptr ptr) +@ stdcall ObInsertObject(ptr ptr long long ptr ptr) +@ stdcall ObIsKernelHandle(ptr) +@ stdcall ObLogSecurityDescriptor(ptr ptr long) +@ stdcall ObMakeTemporaryObject(ptr) +@ stdcall ObOpenObjectByName(ptr ptr long ptr long ptr ptr) +@ stdcall ObOpenObjectByPointer(ptr long ptr long ptr long ptr) +@ stdcall ObQueryNameString(ptr ptr long ptr) +@ stdcall ObQueryObjectAuditingByHandle(ptr ptr) +@ stdcall ObReferenceObjectByHandle(ptr long ptr long ptr ptr) +@ stdcall ObReferenceObjectByName(ptr long ptr long ptr long ptr ptr) +@ stdcall ObReferenceObjectByPointer(ptr long ptr long) +@ stdcall ObReferenceSecurityDescriptor(ptr long) +@ stdcall ObReleaseObjectSecurity(ptr long) +;ObSetHandleAttributes@12 +@ stdcall ObSetSecurityDescriptorInfo(ptr ptr ptr ptr long ptr) +@ stdcall ObSetSecurityObjectByPointer(ptr long ptr) +@ fastcall ObfDereferenceObject(ptr) +@ fastcall ObfReferenceObject(ptr) +;PfxFindPrefix +;PfxInitialize +;PfxInsertPrefix +;PfxRemovePrefix +@ stdcall PoCallDriver(ptr ptr) +;PoCancelDeviceNotify +@ stdcall PoQueueShutdownWorkItem(ptr) +@ stdcall PoRegisterDeviceForIdleDetection(ptr long long long) +;PoRegisterDeviceNotify +@ stdcall PoRegisterSystemState(ptr long) +@ stdcall PoRequestPowerIrp(ptr long long ptr ptr ptr) +;PoRequestShutdownEvent +;PoSetHiberRange +@ stdcall PoSetDeviceBusy(ptr) +@ stdcall PoSetPowerState(ptr long long) +@ stdcall PoSetSystemState(long) +;PoShutdownBugCheck +@ stdcall PoStartNextPowerIrp(ptr) +@ stdcall PoUnregisterSystemState(ptr) +@ stdcall ProbeForRead(ptr long long) +@ stdcall ProbeForWrite(ptr long long) +@ stdcall PsAssignImpersonationToken(ptr ptr) +@ stdcall PsChargePoolQuota(ptr long long) +@ stdcall PsChargeProcessNonPagedPoolQuota(ptr long) +@ stdcall PsChargeProcessPagedPoolQuota(ptr long) +@ stdcall PsChargeProcessPoolQuota(ptr long long) +@ stdcall PsCreateSystemProcess(ptr long ptr) +@ stdcall PsCreateSystemThread(ptr long ptr ptr ptr ptr ptr) +@ stdcall PsDereferenceImpersonationToken(ptr) PsDereferencePrimaryToken +@ stdcall PsDereferencePrimaryToken(ptr) +@ stdcall PsDisableImpersonation(ptr ptr) +@ stdcall PsEstablishWin32Callouts(ptr) +@ stdcall PsGetContextThread(ptr ptr long) +@ stdcall PsGetCurrentProcess() IoGetCurrentProcess +@ stdcall PsGetCurrentProcessId() +@ stdcall PsGetCurrentProcessSessionId() +@ stdcall PsGetCurrentProcessWin32Process() +@ stdcall PsGetCurrentThread() KeGetCurrentThread +@ stdcall PsGetCurrentThreadId() +@ stdcall PsGetCurrentThreadPreviousMode() +;PsGetCurrentThreadProcess +;PsGetCurrentThreadProcessId +@ stdcall PsGetCurrentThreadStackBase() +@ stdcall PsGetCurrentThreadStackLimit() +;PsGetCurrentThreadTeb +@ stdcall PsGetCurrentThreadWin32Thread() +;PsGetCurrentThreadWin32ThreadAndEnterCriticalRegion +@ stdcall PsGetJobLock(ptr) +@ stdcall PsGetJobSessionId(ptr) +@ stdcall PsGetJobUIRestrictionsClass(ptr) +@ stdcall PsGetProcessCreateTimeQuadPart(ptr) +@ stdcall PsGetProcessDebugPort(ptr) +@ stdcall PsGetProcessExitProcessCalled(ptr) +@ stdcall PsGetProcessExitStatus(ptr) +@ stdcall PsGetProcessExitTime() +@ stdcall PsGetProcessId(ptr) +@ stdcall PsGetProcessImageFileName(ptr) +@ stdcall PsGetProcessInheritedFromUniqueProcessId(ptr) +@ stdcall PsGetProcessJob(ptr) +@ stdcall PsGetProcessPeb(ptr) +@ stdcall PsGetProcessPriorityClass(ptr) +@ stdcall PsGetProcessSectionBaseAddress(ptr) +@ stdcall PsGetProcessSecurityPort(ptr) +@ stdcall PsGetProcessSessionId(ptr) +;PsGetProcessSessionIdEx +@ stdcall PsGetProcessWin32Process(ptr) +@ stdcall PsGetProcessWin32WindowStation(ptr) +@ stdcall PsGetThreadFreezeCount(ptr) +@ stdcall PsGetThreadHardErrorsAreDisabled(ptr) +@ stdcall PsGetThreadId(ptr) +@ stdcall PsGetThreadProcess(ptr) +@ stdcall PsGetThreadProcessId(ptr) +@ stdcall PsGetThreadSessionId(ptr) +@ stdcall PsGetThreadTeb(ptr) +@ stdcall PsGetThreadWin32Thread(ptr) +@ stdcall PsGetVersion(ptr ptr ptr ptr) +@ stdcall PsImpersonateClient(ptr ptr long long long) +@ extern PsInitialSystemProcess +@ stdcall PsIsProcessBeingDebugged(ptr) +;PsIsSystemProcess +@ stdcall PsIsSystemThread(ptr) +@ stdcall PsIsThreadImpersonating(ptr) +@ stdcall PsIsThreadTerminating(ptr) +@ extern PsJobType +@ stdcall PsLookupProcessByProcessId(ptr ptr) +@ stdcall PsLookupProcessThreadByCid(ptr ptr ptr) +@ stdcall PsLookupThreadByThreadId(ptr ptr) +@ extern PsProcessType _PsProcessType +@ stdcall PsReferenceImpersonationToken(ptr ptr ptr ptr) +@ stdcall PsReferencePrimaryToken(ptr) +@ stdcall PsRemoveCreateThreadNotifyRoutine(ptr) +@ stdcall PsRemoveLoadImageNotifyRoutine(ptr) +@ stdcall PsRestoreImpersonation(ptr ptr) +@ stdcall PsReturnPoolQuota(ptr long long) +@ stdcall PsReturnProcessNonPagedPoolQuota(ptr long) +@ stdcall PsReturnProcessPagedPoolQuota(ptr long) +@ stdcall PsRevertThreadToSelf(ptr) +@ stdcall PsRevertToSelf() +@ stdcall PsSetContextThread(ptr ptr long) +@ stdcall PsSetCreateProcessNotifyRoutine(ptr long) +@ stdcall PsSetCreateThreadNotifyRoutine(ptr) +@ stdcall PsSetJobUIRestrictionsClass(ptr long) +@ stdcall PsSetLegoNotifyRoutine(ptr) +@ stdcall PsSetLoadImageNotifyRoutine(ptr) +@ stdcall PsSetProcessPriorityByClass(ptr ptr) +@ stdcall PsSetProcessPriorityClass(ptr long) +@ stdcall PsSetProcessSecurityPort(ptr ptr) +@ stdcall PsSetProcessWin32Process(ptr ptr) +@ stdcall PsSetProcessWindowStation(ptr ptr) +@ stdcall PsSetThreadHardErrorsAreDisabled(ptr long) +@ stdcall PsSetThreadWin32Thread(ptr ptr) +@ stdcall PsTerminateSystemThread(long) +@ extern PsThreadType _PsThreadType +;PsWrapApcWow64Thread +@ stdcall READ_REGISTER_BUFFER_UCHAR(ptr ptr long) +@ stdcall READ_REGISTER_BUFFER_ULONG(ptr ptr long) +@ stdcall READ_REGISTER_BUFFER_USHORT(ptr ptr long) +@ stdcall READ_REGISTER_UCHAR(ptr) +@ stdcall READ_REGISTER_ULONG(ptr) +@ stdcall READ_REGISTER_USHORT(ptr) +@ stdcall KeRosDumpStackFrames(ptr long) +@ stdcall RtlAbsoluteToSelfRelativeSD(ptr ptr ptr) +@ stdcall RtlAddAccessAllowedAce(ptr long long ptr) +@ stdcall RtlAddAccessAllowedAceEx(ptr long long long ptr) +@ stdcall RtlAddAce(ptr long long ptr long) +@ stdcall RtlAddAtomToAtomTable(ptr wstr ptr) +@ stdcall RtlAddRange(ptr long long long long long long ptr ptr) +@ stdcall RtlAllocateAndInitializeSid(ptr long long long long long long long long long ptr) +@ stdcall RtlAllocateHeap(ptr long long) +@ stdcall RtlAnsiCharToUnicodeChar(ptr) +@ stdcall RtlAnsiStringToUnicodeSize(ptr) RtlxAnsiStringToUnicodeSize +@ stdcall RtlAnsiStringToUnicodeString(ptr ptr long) +@ stdcall RtlAppendAsciizToString(ptr str) +@ stdcall RtlAppendStringToString(ptr ptr) +@ stdcall RtlAppendUnicodeStringToString(ptr ptr) +@ stdcall RtlAppendUnicodeToString(ptr wstr) +@ stdcall RtlAreAllAccessesGranted(long long) +@ stdcall RtlAreAnyAccessesGranted(long long) +@ stdcall RtlAreBitsClear(ptr long long) +@ stdcall RtlAreBitsSet(ptr long long) +@ stdcall RtlAssert(str str long str) +@ stdcall RtlCaptureContext(ptr) +@ stdcall RtlCaptureStackBackTrace(long long ptr ptr) +@ stdcall RtlCharToInteger(str long ptr) +@ stdcall RtlCheckRegistryKey(long wstr) +@ stdcall RtlClearAllBits(ptr) +@ stdcall RtlClearBit(ptr long) +@ stdcall RtlClearBits(ptr long long) +@ stdcall RtlCompareMemory(ptr ptr long) +@ stdcall RtlCompareMemoryUlong(ptr long long) +@ stdcall RtlCompareString(ptr ptr long) +@ stdcall RtlCompareUnicodeString(ptr ptr long) +@ stdcall RtlCompressBuffer(long ptr long ptr long long ptr ptr) +@ stdcall RtlCompressChunks(ptr long ptr long ptr long ptr) +@ stdcall RtlConvertLongToLargeInteger(long) +@ stdcall RtlConvertSidToUnicodeString(ptr ptr long) +@ stdcall RtlConvertUlongToLargeInteger(long) +@ stdcall RtlCopyLuid(ptr ptr) +@ stdcall RtlCopyRangeList(ptr ptr) +@ stdcall RtlCopySid(long ptr ptr) +@ stdcall RtlCopyString(ptr ptr) +@ stdcall RtlCopyUnicodeString(ptr ptr) +@ stdcall RtlCreateAcl(ptr long long) +@ stdcall RtlCreateAtomTable(long ptr) +@ stdcall RtlCreateHeap(long ptr long long ptr ptr) +@ stdcall RtlCreateRegistryKey(long wstr) +@ stdcall RtlCreateSecurityDescriptor(ptr long) +@ stdcall RtlCreateSystemVolumeInformationFolder(ptr) +@ stdcall RtlCreateUnicodeString(ptr wstr) +@ stdcall RtlCustomCPToUnicodeN(ptr wstr long ptr ptr long) +@ stdcall RtlDecompressBuffer(long ptr long ptr long ptr) +@ stdcall RtlDecompressChunks(ptr long ptr long ptr long ptr) +@ stdcall RtlDecompressFragment(long ptr long ptr long long ptr ptr) +@ stdcall RtlDelete(ptr) +@ stdcall RtlDeleteAce(ptr long) +@ stdcall RtlDeleteAtomFromAtomTable(ptr ptr) +@ stdcall RtlDeleteElementGenericTable(ptr ptr) +@ stdcall RtlDeleteElementGenericTableAvl(ptr ptr) +@ stdcall RtlDeleteNoSplay(ptr ptr) +@ stdcall RtlDeleteOwnersRanges(ptr ptr) +@ stdcall RtlDeleteRange(ptr long long long long ptr) +@ stdcall RtlDeleteRegistryValue(long wstr wstr) +@ stdcall RtlDescribeChunk(long ptr ptr ptr ptr) +@ stdcall RtlDestroyAtomTable(ptr) +@ stdcall RtlDestroyHeap(ptr) +@ stdcall RtlDowncaseUnicodeString(ptr ptr long) +@ stdcall RtlEmptyAtomTable(ptr long) +@ stdcall RtlEnlargedIntegerMultiply(long long) +@ stdcall RtlEnlargedUnsignedDivide(long long long ptr) +@ stdcall RtlEnlargedUnsignedMultiply(long long) +@ stdcall RtlEnumerateGenericTable(ptr long) +@ stdcall RtlEnumerateGenericTableAvl(ptr long) +@ stdcall RtlEnumerateGenericTableLikeADirectory(ptr ptr ptr long ptr ptr ptr) +@ stdcall RtlEnumerateGenericTableWithoutSplaying(ptr ptr) +@ stdcall RtlEnumerateGenericTableWithoutSplayingAvl(ptr ptr) +@ stdcall RtlEqualLuid(ptr ptr) +@ stdcall RtlEqualSid(ptr ptr) +@ stdcall RtlEqualString(ptr ptr long) +@ stdcall RtlEqualUnicodeString(ptr ptr long) +@ stdcall RtlExtendedIntegerMultiply(long long long) +@ stdcall RtlExtendedLargeIntegerDivide(long long long ptr) +@ stdcall RtlExtendedMagicDivide(long long long long long) +@ stdcall RtlFillMemory(ptr long long) +@ stdcall RtlFillMemoryUlong(ptr long long) +@ stdcall RtlFindClearBits(ptr long long) +@ stdcall RtlFindClearBitsAndSet(ptr long long) +@ stdcall RtlFindClearRuns(ptr ptr long long) +@ stdcall RtlFindFirstRunClear(ptr ptr) +@ stdcall RtlFindLastBackwardRunClear(ptr long ptr) +@ stdcall RtlFindLeastSignificantBit(long long) +@ stdcall RtlFindLongestRunClear(ptr ptr) +@ stdcall RtlFindMessage(ptr long long long ptr) +@ stdcall RtlFindMostSignificantBit(long long) +@ stdcall RtlFindNextForwardRunClear(ptr long ptr) +@ stdcall RtlFindRange(ptr long long long long long long long long ptr ptr ptr) +@ stdcall RtlFindSetBits(ptr long long) +@ stdcall RtlFindSetBitsAndClear(ptr long long) +@ stdcall RtlFindUnicodePrefix(ptr ptr long) +@ stdcall RtlFormatCurrentUserKeyPath(ptr) +@ stdcall RtlFreeAnsiString(ptr) +@ stdcall RtlFreeHeap(ptr long ptr) +@ stdcall RtlFreeOemString(ptr) +@ stdcall RtlFreeRangeList(ptr) +@ stdcall RtlFreeUnicodeString(ptr) +@ stdcall RtlGUIDFromString(ptr ptr) +@ stdcall RtlGenerate8dot3Name(ptr ptr long ptr) +@ stdcall RtlGetAce(ptr long ptr) +@ stdcall RtlGetCallersAddress(ptr ptr) +@ stdcall RtlGetCompressionWorkSpaceSize(long ptr ptr) +@ stdcall RtlGetDaclSecurityDescriptor(ptr ptr ptr ptr) +@ stdcall RtlGetDefaultCodePage(ptr ptr) +@ stdcall RtlGetElementGenericTable(ptr long) +@ stdcall RtlGetElementGenericTableAvl(ptr long) +@ stdcall RtlGetFirstRange(ptr ptr ptr) +@ stdcall RtlGetGroupSecurityDescriptor(ptr ptr ptr) +@ stdcall RtlGetNextRange(ptr ptr long) +@ stdcall RtlGetNtGlobalFlags() +@ stdcall RtlGetOwnerSecurityDescriptor(ptr ptr ptr) +@ stdcall RtlGetSaclSecurityDescriptor(ptr ptr ptr ptr) +@ stdcall RtlGetSetBootStatusData(ptr long long ptr long long) +@ stdcall RtlGetVersion(ptr) +@ stdcall RtlHashUnicodeString(ptr long long ptr) +@ stdcall RtlImageDirectoryEntryToData(ptr long long ptr) +@ stdcall RtlImageNtHeader(ptr) +@ stdcall RtlInitAnsiString(ptr str) +@ stdcall RtlInitAnsiStringEx(ptr str) +@ stdcall RtlInitCodePageTable(ptr ptr) +@ stdcall RtlInitString(ptr str) +@ stdcall RtlInitUnicodeString(ptr wstr) +@ stdcall RtlInitUnicodeStringEx(ptr wstr) +@ stdcall RtlInitializeBitMap(ptr ptr long) +@ stdcall RtlInitializeGenericTable(ptr ptr ptr ptr ptr) +@ stdcall RtlInitializeGenericTableAvl(ptr ptr ptr ptr ptr) +@ stdcall RtlInitializeRangeList(ptr) +@ stdcall RtlInitializeSid(ptr ptr long) +@ stdcall RtlInitializeUnicodePrefix(ptr) +@ stdcall RtlInsertElementGenericTable(ptr ptr long ptr) +@ stdcall RtlInsertElementGenericTableAvl(ptr ptr long ptr) +@ stdcall RtlInsertElementGenericTableFull(ptr ptr long ptr ptr long) +@ stdcall RtlInsertElementGenericTableFullAvl(ptr ptr long ptr ptr ptr) +@ stdcall RtlInsertUnicodePrefix(ptr ptr ptr) +@ stdcall RtlInt64ToUnicodeString(long long long ptr) +@ stdcall RtlIntegerToChar(long long long ptr) +@ stdcall RtlIntegerToUnicode(long long long ptr) +@ stdcall RtlIntegerToUnicodeString(long long ptr) +@ stdcall RtlInvertRangeList(ptr ptr) +@ stdcall RtlIpv4AddressToStringA(ptr ptr) +@ stdcall RtlIpv4AddressToStringExA(ptr long ptr ptr) +@ stdcall RtlIpv4AddressToStringExW(ptr long ptr ptr) +@ stdcall RtlIpv4AddressToStringW(ptr ptr) +@ stdcall RtlIpv4StringToAddressA(str long ptr ptr) +@ stdcall RtlIpv4StringToAddressExA(str long ptr ptr) +@ stdcall RtlIpv4StringToAddressExW(wstr long ptr ptr) +@ stdcall RtlIpv4StringToAddressW(wstr long ptr ptr) +@ stdcall RtlIpv6AddressToStringA(ptr ptr) +@ stdcall RtlIpv6AddressToStringExA(ptr long long ptr ptr) +@ stdcall RtlIpv6AddressToStringExW(ptr long long ptr ptr) +@ stdcall RtlIpv6AddressToStringW(ptr ptr) +@ stdcall RtlIpv6StringToAddressA(str ptr ptr) +@ stdcall RtlIpv6StringToAddressExA(str ptr ptr ptr) +@ stdcall RtlIpv6StringToAddressExW(wstr ptr ptr ptr) +@ stdcall RtlIpv6StringToAddressW(wstr ptr ptr) +@ stdcall RtlIsGenericTableEmpty(ptr) +@ stdcall RtlIsGenericTableEmptyAvl(ptr) +@ stdcall RtlIsNameLegalDOS8Dot3(ptr ptr ptr) +@ stdcall RtlIsRangeAvailable(ptr long long long long long long ptr ptr ptr) +@ stdcall RtlIsValidOemCharacter(ptr) +@ stdcall RtlLargeIntegerAdd(long long long long) +@ stdcall RtlLargeIntegerArithmeticShift(long long long) +@ stdcall RtlLargeIntegerDivide(long long long long ptr) +@ stdcall RtlLargeIntegerNegate(long long) +@ stdcall RtlLargeIntegerShiftLeft(long long long) +@ stdcall RtlLargeIntegerShiftRight(long long long) +@ stdcall RtlLargeIntegerSubtract(long long long long) +@ stdcall RtlLengthRequiredSid(long) +@ stdcall RtlLengthSecurityDescriptor(ptr) +@ stdcall RtlLengthSid(ptr) +@ stdcall RtlLockBootStatusData(ptr) +@ stdcall RtlLookupAtomInAtomTable(ptr wstr ptr) +@ stdcall RtlLookupElementGenericTable(ptr ptr) +@ stdcall RtlLookupElementGenericTableAvl(ptr ptr) +@ stdcall RtlLookupElementGenericTableFull(ptr ptr ptr ptr) +@ stdcall RtlLookupElementGenericTableFullAvl(ptr ptr ptr ptr) +@ stdcall RtlMapGenericMask(ptr ptr) +@ stdcall RtlMapSecurityErrorToNtStatus(long) +@ stdcall RtlMergeRangeLists(ptr ptr ptr long) +@ stdcall RtlMoveMemory(ptr ptr long) +@ stdcall RtlMultiByteToUnicodeN(ptr long ptr str long) +@ stdcall RtlMultiByteToUnicodeSize(ptr str long) +@ stdcall RtlNextUnicodePrefix(ptr long) +@ stdcall RtlNtStatusToDosError(long) +@ stdcall RtlNtStatusToDosErrorNoTeb(long) +@ stdcall RtlNumberGenericTableElements(ptr) +@ stdcall RtlNumberGenericTableElementsAvl(ptr) +@ stdcall RtlNumberOfClearBits(ptr) +@ stdcall RtlNumberOfSetBits(ptr) +@ stdcall RtlOemStringToCountedUnicodeString(ptr ptr long) +@ stdcall RtlOemStringToUnicodeSize(ptr) RtlxOemStringToUnicodeSize +@ stdcall RtlOemStringToUnicodeString(ptr ptr long) +@ stdcall RtlOemToUnicodeN(wstr long ptr ptr long) +@ stdcall RtlPinAtomInAtomTable(ptr ptr) +@ fastcall RtlPrefetchMemoryNonTemporal(ptr long) +@ stdcall RtlPrefixString(ptr ptr long) +@ stdcall RtlPrefixUnicodeString(ptr ptr long) +@ stdcall RtlQueryAtomInAtomTable(ptr ptr ptr ptr ptr ptr) +@ stdcall RtlQueryRegistryValues(long wstr ptr ptr ptr) +@ stdcall RtlQueryTimeZoneInformation(ptr) +@ stdcall RtlRaiseException(ptr) +@ stdcall RtlRandom(ptr) +@ stdcall RtlRandomEx(ptr) +@ stdcall RtlRealPredecessor(ptr) +@ stdcall RtlRealSuccessor(ptr) +@ stdcall RtlRemoveUnicodePrefix(ptr ptr) +@ stdcall RtlReserveChunk(long ptr ptr ptr long) +@ stdcall RtlSecondsSince1970ToTime(long ptr) +@ stdcall RtlSecondsSince1980ToTime(long ptr) +@ stdcall RtlSelfRelativeToAbsoluteSD(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall RtlSelfRelativeToAbsoluteSD2(ptr long) +@ stdcall RtlSetAllBits(ptr) +@ stdcall RtlSetBit(ptr long) +@ stdcall RtlSetBits(ptr long long) +@ stdcall RtlSetDaclSecurityDescriptor(ptr long ptr long) +@ stdcall RtlSetGroupSecurityDescriptor(ptr ptr long) +@ stdcall RtlSetOwnerSecurityDescriptor(ptr ptr long) +@ stdcall RtlSetSaclSecurityDescriptor(ptr long ptr long) +@ stdcall RtlSetTimeZoneInformation(ptr) +@ stdcall RtlSizeHeap(ptr long ptr) +@ stdcall RtlSplay(ptr) +@ stdcall RtlStringFromGUID(ptr ptr) +@ stdcall RtlSubAuthorityCountSid(ptr) +@ stdcall RtlSubAuthoritySid(ptr long) +@ stdcall RtlSubtreePredecessor(ptr) +@ stdcall RtlSubtreeSuccessor(ptr) +@ stdcall RtlTestBit(ptr long) +@ stdcall RtlTimeFieldsToTime(ptr ptr) +@ stdcall RtlTimeToElapsedTimeFields(ptr ptr) +@ stdcall RtlTimeToSecondsSince1970(ptr ptr) +@ stdcall RtlTimeToSecondsSince1980(ptr ptr) +@ stdcall RtlTimeToTimeFields(ptr ptr) +;RtlTraceDatabaseAdd +;RtlTraceDatabaseCreate +;RtlTraceDatabaseDestroy +;RtlTraceDatabaseEnumerate +;RtlTraceDatabaseFind +;RtlTraceDatabaseLock +;RtlTraceDatabaseUnlock +;RtlTraceDatabaseValidate +@ fastcall RtlUlongByteSwap(long) +@ fastcall RtlUlonglongByteSwap(long long) +@ stdcall RtlUnicodeStringToAnsiSize(ptr) RtlxUnicodeStringToAnsiSize +@ stdcall RtlUnicodeStringToAnsiString(ptr ptr long) +@ stdcall RtlUnicodeStringToCountedOemString(ptr ptr long) +@ stdcall RtlUnicodeStringToInteger(ptr long ptr) +@ stdcall RtlUnicodeStringToOemSize(ptr) RtlxUnicodeStringToOemSize +@ stdcall RtlUnicodeStringToOemString(ptr ptr long) +@ stdcall RtlUnicodeToCustomCPN(ptr ptr long ptr wstr long) +@ stdcall RtlUnicodeToMultiByteN(ptr long ptr wstr long) +@ stdcall RtlUnicodeToMultiByteSize(ptr wstr long) +@ stdcall RtlUnicodeToOemN(ptr long ptr wstr long) +@ stdcall RtlUnlockBootStatusData(ptr) +@ stdcall RtlUnwind(ptr ptr ptr ptr) +@ stdcall RtlUpcaseUnicodeChar(long) +@ stdcall RtlUpcaseUnicodeString(ptr ptr long) +@ stdcall RtlUpcaseUnicodeStringToAnsiString(ptr ptr long) +@ stdcall RtlUpcaseUnicodeStringToCountedOemString(ptr ptr long) +@ stdcall RtlUpcaseUnicodeStringToOemString(ptr ptr long) +@ stdcall RtlUpcaseUnicodeToCustomCPN(ptr ptr long ptr wstr long) +@ stdcall RtlUpcaseUnicodeToMultiByteN(ptr long ptr wstr long) +@ stdcall RtlUpcaseUnicodeToOemN(ptr long ptr wstr long) +@ stdcall RtlUpperChar(long) +@ stdcall RtlUpperString(ptr ptr) +@ fastcall RtlUshortByteSwap(long) +@ stdcall RtlValidRelativeSecurityDescriptor(ptr long long) +@ stdcall RtlValidSecurityDescriptor(ptr) +@ stdcall RtlValidSid(ptr) +@ stdcall RtlVerifyVersionInfo(ptr long long long) +@ stdcall RtlVolumeDeviceToDosName(ptr ptr) +@ stdcall RtlWalkFrameChain(ptr long long) +@ stdcall RtlWriteRegistryValue(long wstr wstr long ptr long) +@ stdcall RtlZeroHeap(ptr long) +@ stdcall RtlZeroMemory(ptr long) +@ stdcall RtlxAnsiStringToUnicodeSize(ptr) +@ stdcall RtlxOemStringToUnicodeSize(ptr) +@ stdcall RtlxUnicodeStringToAnsiSize(ptr) +@ stdcall RtlxUnicodeStringToOemSize(ptr) +@ stdcall SeAccessCheck(ptr ptr ptr long long ptr ptr long ptr ptr) +@ stdcall SeAppendPrivileges(ptr ptr) +@ stdcall SeAssignSecurity(ptr ptr ptr long ptr ptr ptr) +@ stdcall SeAssignSecurityEx(ptr ptr ptr ptr long long ptr ptr ptr) +@ stdcall SeAuditHardLinkCreation(ptr ptr long) +@ stdcall SeAuditingFileEvents(long ptr) +@ stdcall SeAuditingFileEventsWithContext(long ptr ptr) +@ stdcall SeAuditingFileOrGlobalEvents(long ptr ptr) +@ stdcall SeAuditingHardLinkEvents(long ptr) +@ stdcall SeAuditingHardLinkEventsWithContext(long ptr ptr) +@ stdcall SeCaptureSecurityDescriptor(ptr long long long ptr) +@ stdcall SeCaptureSubjectContext(ptr) +@ stdcall SeCloseObjectAuditAlarm(ptr ptr long) +@ stdcall SeCreateAccessState(ptr ptr long ptr) +@ stdcall SeCreateClientSecurity(ptr ptr long ptr) +@ stdcall SeCreateClientSecurityFromSubjectContext(ptr ptr long ptr) +@ stdcall SeDeassignSecurity(ptr) +@ stdcall SeDeleteAccessState(ptr) +@ stdcall SeDeleteObjectAuditAlarm(ptr ptr) +@ extern SeExports +@ stdcall SeFilterToken(ptr long ptr ptr ptr ptr) +@ stdcall SeFreePrivileges(ptr) +@ stdcall SeImpersonateClient(ptr ptr) +@ stdcall SeImpersonateClientEx(ptr ptr) +@ stdcall SeLockSubjectContext(ptr) +@ stdcall SeMarkLogonSessionForTerminationNotification(ptr) +@ stdcall SeOpenObjectAuditAlarm(ptr ptr ptr ptr ptr long long long ptr) +@ stdcall SeOpenObjectForDeleteAuditAlarm(ptr ptr ptr ptr ptr long long long ptr) +@ stdcall SePrivilegeCheck(ptr ptr long) +@ stdcall SePrivilegeObjectAuditAlarm(ptr ptr long ptr long long) +@ extern SePublicDefaultDacl +@ stdcall SeQueryAuthenticationIdToken(ptr ptr) +@ stdcall SeQueryInformationToken(ptr long ptr) +@ stdcall SeQuerySecurityDescriptorInfo(ptr ptr ptr ptr) +@ stdcall SeQuerySessionIdToken(ptr ptr) +@ stdcall SeRegisterLogonSessionTerminatedRoutine(ptr) +@ stdcall SeReleaseSecurityDescriptor(ptr long long) +@ stdcall SeReleaseSubjectContext(ptr) +@ stdcall SeSetAccessStateGenericMapping(ptr ptr) +;SeSetAuditParameter +@ stdcall SeSetSecurityDescriptorInfo(ptr ptr ptr ptr long ptr) +@ stdcall SeSetSecurityDescriptorInfoEx(ptr ptr ptr ptr long long ptr) +@ stdcall SeSinglePrivilegeCheck(long long long) +@ extern SeSystemDefaultDacl +@ stdcall SeTokenImpersonationLevel(ptr) +@ stdcall SeTokenIsAdmin(ptr) +@ stdcall SeTokenIsRestricted(ptr) +@ stdcall SeTokenIsWriteRestricted(ptr) +@ stdcall SeTokenType(ptr) +@ stdcall SeUnlockSubjectContext(ptr) +@ stdcall SeUnregisterLogonSessionTerminatedRoutine(ptr) +@ stdcall SeValidSecurityDescriptor(long ptr) +@ stdcall VerSetConditionMask(long long long long) +;VfFailDeviceNode +;VfFailDriver +;VfFailSystemBIOS +;VfIsVerificationEnabled +@ stdcall WRITE_REGISTER_BUFFER_UCHAR(ptr ptr long) +@ stdcall WRITE_REGISTER_BUFFER_ULONG(ptr ptr long) +@ stdcall WRITE_REGISTER_BUFFER_USHORT(ptr ptr long) +@ stdcall WRITE_REGISTER_UCHAR(ptr long) +@ stdcall WRITE_REGISTER_ULONG(ptr long) +@ stdcall WRITE_REGISTER_USHORT(ptr long) +;WmiFlushTrace +;WmiGetClock +;WmiQueryTrace +;WmiQueryTraceInformation +;WmiStartTrace +;WmiStopTrace +;WmiTraceFastEvent +;WmiTraceMessage +;WmiTraceMessageVa +;WmiUpdateTrace +;XIPDispatch +@ stdcall ZwAccessCheckAndAuditAlarm(ptr ptr ptr ptr ptr long ptr long ptr ptr ptr) +@ stdcall ZwAddBootEntry(ptr long) +@ stdcall ZwAddDriverEntry(ptr long) +@ stdcall ZwAdjustPrivilegesToken(ptr long ptr long ptr ptr) +@ stdcall ZwAlertThread(ptr) +@ stdcall ZwAllocateVirtualMemory(ptr ptr long ptr long long) +@ stdcall ZwAssignProcessToJobObject(ptr ptr) +@ stdcall ZwCancelIoFile(ptr ptr) +@ stdcall ZwCancelTimer(ptr ptr) +@ stdcall ZwClearEvent(ptr) +@ stdcall ZwClose(ptr) +@ stdcall ZwCloseObjectAuditAlarm(ptr ptr long) +@ stdcall ZwConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall ZwCreateDirectoryObject(ptr long ptr) +@ stdcall ZwCreateEvent(ptr long ptr long long) +@ stdcall ZwCreateFile(ptr long ptr ptr ptr long long long long ptr long) +@ stdcall ZwCreateJobObject(ptr long ptr) +@ stdcall ZwCreateKey(ptr long ptr long ptr long ptr) +@ stdcall ZwCreateSection(ptr long ptr ptr long long ptr) +@ stdcall ZwCreateSymbolicLinkObject(ptr long ptr ptr) +@ stdcall ZwCreateTimer(ptr long ptr long) +@ stdcall ZwDeleteBootEntry(long) +@ stdcall ZwDeleteDriverEntry(long) +@ stdcall ZwDeleteFile(ptr) +@ stdcall ZwDeleteKey(ptr) +@ stdcall ZwDeleteValueKey(ptr ptr) +@ stdcall ZwDeviceIoControlFile(ptr ptr ptr ptr ptr long ptr long ptr long) +@ stdcall ZwDisplayString(ptr) +@ stdcall ZwDuplicateObject(ptr ptr ptr ptr long long long) +@ stdcall ZwDuplicateToken(ptr long ptr long long ptr) +@ stdcall ZwEnumerateBootEntries(ptr ptr) +@ stdcall ZwEnumerateDriverEntries(ptr ptr) +@ stdcall ZwEnumerateKey(ptr long long ptr long ptr) +@ stdcall ZwEnumerateValueKey(ptr long long ptr long ptr) +@ stdcall ZwFlushInstructionCache(ptr ptr long) +@ stdcall ZwFlushKey(ptr) +@ stdcall ZwFlushVirtualMemory(ptr ptr ptr ptr) +@ stdcall ZwFreeVirtualMemory(ptr ptr ptr long) +@ stdcall ZwFsControlFile(ptr ptr ptr ptr ptr long ptr long ptr long) +@ stdcall ZwInitiatePowerAction(long long long long) +@ stdcall ZwIsProcessInJob(ptr ptr) +@ stdcall ZwLoadDriver(ptr) +@ stdcall ZwLoadKey(ptr ptr) +@ stdcall ZwMakeTemporaryObject(ptr) +@ stdcall ZwMapViewOfSection(ptr ptr ptr long long ptr ptr long long long) +@ stdcall ZwModifyBootEntry(ptr) +@ stdcall ZwModifyDriverEntry(ptr) +@ stdcall ZwNotifyChangeKey(ptr ptr ptr ptr ptr long long ptr long long) +@ stdcall ZwOpenDirectoryObject(ptr long ptr) +@ stdcall ZwOpenEvent(ptr long ptr) +@ stdcall ZwOpenFile(ptr long ptr ptr long long) +@ stdcall ZwOpenJobObject(ptr long ptr) +@ stdcall ZwOpenKey(ptr long ptr) +@ stdcall ZwOpenProcess(ptr long ptr ptr) +@ stdcall ZwOpenProcessToken(ptr long ptr) +@ stdcall ZwOpenProcessTokenEx(ptr long long ptr) +@ stdcall ZwOpenSection(ptr long ptr) +@ stdcall ZwOpenSymbolicLinkObject(ptr long ptr) +@ stdcall ZwOpenThread(ptr long ptr ptr) +@ stdcall ZwOpenThreadToken(ptr long long ptr) +@ stdcall ZwOpenThreadTokenEx(ptr long long long ptr) +@ stdcall ZwOpenTimer(ptr long ptr) +@ stdcall ZwPowerInformation(long ptr long ptr long) +@ stdcall ZwPulseEvent(ptr ptr) +@ stdcall ZwQueryBootEntryOrder(ptr ptr) +@ stdcall ZwQueryBootOptions(ptr ptr) +@ stdcall ZwQueryDefaultLocale(long ptr) +@ stdcall ZwQueryDefaultUILanguage(ptr) +@ stdcall ZwQueryDirectoryFile(ptr ptr ptr ptr ptr ptr long long long ptr long) +@ stdcall ZwQueryDirectoryObject(ptr ptr long long long ptr ptr) +@ stdcall ZwQueryDriverEntryOrder(ptr ptr) +@ stdcall ZwQueryEaFile(ptr ptr ptr long long ptr long ptr long) +@ stdcall ZwQueryFullAttributesFile(ptr ptr) +@ stdcall ZwQueryInformationAtom(ptr long ptr long ptr) +@ stdcall ZwQueryInformationFile(ptr ptr ptr long long) +@ stdcall ZwQueryInformationJobObject(ptr long ptr long ptr) +@ stdcall ZwQueryInformationProcess(ptr long ptr long ptr) +@ stdcall ZwQueryInformationThread(ptr long ptr long ptr) +@ stdcall ZwQueryInformationToken(ptr long long long ptr) +@ stdcall ZwQueryInstallUILanguage(ptr) +@ stdcall ZwQueryKey(ptr long ptr long ptr) +@ stdcall ZwQueryObject(ptr long ptr long ptr) +@ stdcall ZwQuerySection(ptr long ptr long ptr) +@ stdcall ZwQuerySecurityObject(ptr long ptr long ptr) +@ stdcall ZwQuerySymbolicLinkObject(ptr ptr ptr) +@ stdcall ZwQuerySystemInformation(long ptr long ptr) +@ stdcall ZwQueryValueKey(ptr ptr long ptr long ptr) +@ stdcall ZwQueryVolumeInformationFile(ptr ptr ptr long long) +@ stdcall ZwReadFile(ptr ptr ptr ptr ptr ptr long ptr ptr) +@ stdcall ZwReplaceKey(ptr ptr ptr) +@ stdcall ZwRequestWaitReplyPort(ptr ptr ptr) +@ stdcall ZwResetEvent(ptr ptr) +@ stdcall ZwRestoreKey(ptr ptr long) +@ stdcall ZwSaveKey(ptr ptr) +@ stdcall ZwSaveKeyEx(ptr ptr long) +@ stdcall ZwSecureConnectPort(ptr ptr ptr ptr ptr ptr ptr ptr ptr) +@ stdcall ZwSetBootEntryOrder(ptr ptr) +@ stdcall ZwSetBootOptions(ptr long) +@ stdcall ZwSetDefaultLocale(long long) +@ stdcall ZwSetDefaultUILanguage(long) +@ stdcall ZwSetDriverEntryOrder(ptr ptr) +@ stdcall ZwSetEaFile(ptr ptr ptr long) +@ stdcall ZwSetEvent(ptr ptr) +@ stdcall ZwSetInformationFile(ptr ptr ptr long long) +@ stdcall ZwSetInformationJobObject(ptr long ptr long) +@ stdcall ZwSetInformationObject(ptr long ptr long) +@ stdcall ZwSetInformationProcess(ptr long ptr long) +@ stdcall ZwSetInformationThread(ptr long ptr long) +@ stdcall ZwSetSecurityObject(ptr long ptr) +@ stdcall ZwSetSystemInformation(long ptr long) +@ stdcall ZwSetSystemTime(ptr ptr) +@ stdcall ZwSetTimer(ptr ptr ptr ptr long long ptr) +@ stdcall ZwSetValueKey(ptr ptr long long ptr long) +@ stdcall ZwSetVolumeInformationFile(ptr ptr ptr long long) +@ stdcall ZwTerminateJobObject(ptr long) +@ stdcall ZwTerminateProcess(ptr long) +@ stdcall ZwTranslateFilePath(ptr long ptr long) +@ stdcall ZwUnloadDriver(ptr) +@ stdcall ZwUnloadKey(ptr) +@ stdcall ZwUnmapViewOfSection(ptr ptr) +@ stdcall ZwWaitForMultipleObjects(long ptr long long ptr) +@ stdcall ZwWaitForSingleObject(ptr long ptr) +@ stdcall ZwWriteFile(ptr ptr ptr ptr ptr ptr long ptr ptr); +@ stdcall ZwYieldExecution() +;_CIcos +;_CIsin +;_CIsqrt +@ cdecl _abnormal_termination() +@ cdecl _alldiv() +@ cdecl _alldvrm() +@ cdecl _allmul() +@ cdecl _alloca_probe() +@ cdecl _allrem() +@ cdecl _allshl() +@ cdecl _allshr() +@ cdecl _aulldiv() +@ cdecl _aulldvrm() +@ cdecl _aullrem() +@ cdecl _aullshr() +@ cdecl _except_handler2() +@ cdecl _except_handler3() +@ cdecl _global_unwind2() +@ cdecl _itoa() +@ cdecl _itow() +@ cdecl _local_unwind2() +@ cdecl _purecall() +@ cdecl _snprintf() +@ cdecl _snwprintf() +@ cdecl _stricmp() +@ cdecl _strlwr() +@ cdecl _strnicmp() +@ cdecl _strnset() +@ cdecl _strrev() +@ cdecl _strset() +@ cdecl _strupr() +@ cdecl _vsnprintf() +@ cdecl _vsnwprintf() +@ cdecl _wcsicmp() +@ cdecl _wcslwr() +@ cdecl _wcsnicmp() +@ cdecl _wcsnset() +@ cdecl _wcsrev() +@ cdecl _wcsupr() +@ cdecl atoi() +@ cdecl atol() +@ cdecl isdigit() +@ cdecl islower() +@ cdecl isprint() +@ cdecl isspace() +@ cdecl isupper() +@ cdecl isxdigit() +@ cdecl mbstowcs() +@ cdecl mbtowc() +@ cdecl memchr() +@ cdecl memcpy() +@ cdecl memmove() +@ cdecl memset() +@ cdecl qsort() +@ cdecl rand() +@ cdecl sprintf() +@ cdecl srand() +@ cdecl strcat() +@ cdecl strchr() +@ cdecl strcmp() +@ cdecl strcpy() +@ cdecl strlen() +@ cdecl strncat() +@ cdecl strncmp() +@ cdecl strncpy() +@ cdecl strrchr() +@ cdecl strspn() +@ cdecl strstr() +@ cdecl swprintf() +@ cdecl tolower() +@ cdecl toupper() +@ cdecl towlower() +@ cdecl towupper() +@ stdcall vDbgPrintEx(long long str ptr) +@ stdcall vDbgPrintExWithPrefix(str long long str ptr) +@ cdecl vsprintf() +@ cdecl wcscat() +@ cdecl wcschr() +@ cdecl wcscmp() +@ cdecl wcscpy() +@ cdecl wcscspn() +@ cdecl wcslen() +@ cdecl wcsncat() +@ cdecl wcsncmp() +@ cdecl wcsncpy() +@ cdecl wcsrchr() +@ cdecl wcsspn() +@ cdecl wcsstr() +@ cdecl wcstombs() +@ cdecl wctomb() diff --git a/reactos/ntoskrnl/ntoskrnl_i386.def b/reactos/ntoskrnl/ntoskrnl_i386.def deleted file mode 100644 index 481523b6c47..00000000000 --- a/reactos/ntoskrnl/ntoskrnl_i386.def +++ /dev/null @@ -1,1590 +0,0 @@ -; reactos/ntoskrnl/ntoskrnl.def -; -; ReactOS Operating System -; -EXPORTS -CcCanIWrite@16 -CcCopyRead@24 -CcCopyWrite@20 -CcDeferWrite@24 -CcFastCopyRead@24 -CcFastCopyWrite@16 -CcFastMdlReadWait DATA -CcFastReadNotPossible DATA -CcFastReadWait DATA -CcFlushCache@16 -CcGetDirtyPages@16 -CcGetFileObjectFromBcb@4 -CcGetFileObjectFromSectionPtrs@4 -CcGetFlushedValidData@8 -CcGetLsnForFileObject@8 -CcInitializeCacheMap@20 -CcIsThereDirtyData@4 -CcMapData@24 -CcMdlRead@20 -CcMdlReadComplete@8 -CcMdlWriteAbort@8 -CcMdlWriteComplete@12 -CcPinMappedData@20 -CcPinRead@24 -CcPrepareMdlWrite@20 -CcPreparePinWrite@28 -CcPurgeCacheSection@16 -CcRemapBcb@4 -CcRepinBcb@4 -CcScheduleReadAhead@12 -CcSetAdditionalCacheAttributes@12 -CcSetBcbOwnerPointer@8 -CcSetDirtyPageThreshold@8 -CcSetDirtyPinnedData@8 -CcSetFileSizes@8 -CcSetLogHandleForFile@12 -CcSetReadAheadGranularity@8 -CcUninitializeCacheMap@12 -CcUnpinData@4 -CcUnpinDataForThread@8 -CcUnpinRepinnedBcb@12 -CcWaitForCurrentLazyWriterActivity@0 -CcZeroData@16 -CmRegisterCallback@12 -CmUnRegisterCallback@8 -DbgBreakPoint@0 -DbgBreakPointWithStatus@4 -;DbgCommandString -DbgLoadImageSymbols@12 -DbgPrint -DbgPrintEx -DbgPrintReturnControlC -DbgPrompt@12 -DbgQueryDebugFilterState@8 -DbgSetDebugFilterState@12 -@ExAcquireFastMutexUnsafe@4 -ExAcquireResourceExclusiveLite@8 -ExAcquireResourceSharedLite@8 -ExAcquireRundownProtection=@ExfAcquireRundownProtection@4 -ExAcquireRundownProtectionCacheAware=@ExfAcquireRundownProtectionCacheAware@4 -ExAcquireRundownProtectionCacheAwareEx=@ExfAcquireRundownProtectionCacheAwareEx@8 -ExAcquireRundownProtectionEx=@ExfAcquireRundownProtectionEx@8 -ExAcquireSharedStarveExclusive@8 -ExAcquireSharedWaitForExclusive@8 -ExAllocateCacheAwareRundownProtection@8 -ExAllocateFromPagedLookasideList@4=ExiAllocateFromPagedLookasideList@4 -ExAllocatePool@8 -ExAllocatePoolWithQuota@8 -ExAllocatePoolWithQuotaTag@12 -ExAllocatePoolWithTag@12 -ExAllocatePoolWithTagPriority@16 -ExConvertExclusiveToSharedLite@4 -ExCreateCallback@16 -ExDeleteNPagedLookasideList@4 -ExDeletePagedLookasideList@4 -ExDeleteResourceLite@4 -ExDesktopObjectType -ExDisableResourceBoostLite@4 -@ExEnterCriticalRegionAndAcquireFastMutexUnsafe@4 -ExEnterCriticalRegionAndAcquireResourceExclusive@4 -;ExEnterCriticalRegionAndAcquireResourceShared -;ExEnterCriticalRegionAndAcquireSharedWaitForExclusive -ExEnumHandleTable@16 -ExEventObjectType=_ExEventObjectType -ExExtendZone@12 -ExFreeCacheAwareRundownProtection@4 -ExFreePool@4 -ExFreePoolWithTag@8 -ExFreeToPagedLookasideList@8=ExiFreeToPagedLookasideList@8 -ExGetCurrentProcessorCounts@12 -ExGetCurrentProcessorCpuUsage@4 -ExGetExclusiveWaiterCount@4 -ExGetPreviousMode@0 -ExGetSharedWaiterCount@4 -ExInitializeNPagedLookasideList@28 -ExInitializePagedLookasideList@28 -ExInitializeResourceLite@4 -ExInitializeRundownProtection=@ExfInitializeRundownProtection@4 -ExInitializeRundownProtectionCacheAware@8 -ExInitializeZone@16 -ExInterlockedAddLargeInteger@16 -@ExInterlockedAddLargeStatistic@8 -ExInterlockedAddUlong@12 -@ExInterlockedCompareExchange64@16 -ExInterlockedDecrementLong@8 -ExInterlockedExchangeUlong@12 -ExInterlockedExtendZone@16 -@ExInterlockedFlushSList@4 -ExInterlockedIncrementLong@8 -ExInterlockedInsertHeadList@12 -ExInterlockedInsertTailList@12 -ExInterlockedPopEntryList@8 -@ExInterlockedPopEntrySList@8 -ExInterlockedPushEntryList@12 -@ExInterlockedPushEntrySList@12 -ExInterlockedRemoveHeadList@8 -ExIsProcessorFeaturePresent@4 -ExIsResourceAcquiredExclusiveLite@4 -ExIsResourceAcquiredSharedLite@4 -ExLocalTimeToSystemTime@8 -ExNotifyCallback@12 -ExQueryPoolBlockSize@8 -ExQueueWorkItem@8 -ExRaiseAccessViolation@0 -ExRaiseDatatypeMisalignment@0 -ExRaiseException@4=RtlRaiseException@4 -ExRaiseHardError@24 -ExRaiseStatus@4=RtlRaiseStatus@4 -ExReInitializeRundownProtection=@ExfReInitializeRundownProtection@4 -ExReInitializeRundownProtectionCacheAware=@ExfReInitializeRundownProtectionCacheAware@4 -ExRegisterCallback@12 -ExReinitializeResourceLite@4 -@ExReleaseFastMutexUnsafe@4 -@ExReleaseFastMutexUnsafeAndLeaveCriticalRegion@4 -@ExReleaseResourceAndLeaveCriticalRegion@4 -ExReleaseResourceForThreadLite@8 -@ExReleaseResourceLite@4 -ExReleaseRundownProtection=@ExfReleaseRundownProtection@4 -ExReleaseRundownProtectionCacheAware=@ExfReleaseRundownProtectionCacheAware@4 -ExReleaseRundownProtectionCacheAwareEx=@ExfReleaseRundownProtectionCacheAwareEx@8 -ExReleaseRundownProtectionEx=@ExfReleaseRundownProtectionEx@8 -ExRundownCompleted=@ExfRundownCompleted@4 -ExRundownCompletedCacheAware=@ExfRundownCompletedCacheAware@4 -ExSemaphoreObjectType=_ExSemaphoreObjectType -ExSetResourceOwnerPointer@8 -ExSetTimerResolution@8 -ExSizeOfRundownProtectionCacheAware@0 -ExSystemExceptionFilter@0 -ExSystemTimeToLocalTime@8 -ExUnregisterCallback@4 -ExUuidCreate@4 -ExVerifySuite@4 -ExWaitForRundownProtectionRelease=@ExfWaitForRundownProtectionRelease@4 -ExWaitForRundownProtectionReleaseCacheAware=@ExfWaitForRundownProtectionReleaseCacheAware@4 -ExWindowStationObjectType DATA -@ExfAcquirePushLockExclusive@4 -@ExfAcquirePushLockShared@4 -@ExfInterlockedAddUlong@12 -@ExfInterlockedCompareExchange64@12 -@ExfInterlockedInsertHeadList@12 -@ExfInterlockedInsertTailList@12 -@ExfInterlockedPopEntryList@8 -@ExfInterlockedPushEntryList@12 -@ExfInterlockedRemoveHeadList@8 -@ExfReleasePushLock@4 -@ExfReleasePushLockExclusive@4 -@ExfReleasePushLockShared@4 -@ExfTryToWakePushLock@4 -@ExfUnblockPushLock@8 -@Exfi386InterlockedDecrementLong@4 -@Exfi386InterlockedExchangeUlong@8 -@Exfi386InterlockedIncrementLong@4 -Exi386InterlockedDecrementLong@4 -Exi386InterlockedExchangeUlong@12 -Exi386InterlockedIncrementLong@4 -@ExiAcquireFastMutex@4=@ExAcquireFastMutex@4 -@ExiReleaseFastMutex@4=@ExReleaseFastMutex@4 -@ExiTryToAcquireFastMutex@4=@ExTryToAcquireFastMutex@4 -FsRtlAcquireFileExclusive -;FsRtlAddBaseMcbEntry -FsRtlAddLargeMcbEntry -FsRtlAddMcbEntry -FsRtlAddToTunnelCache -FsRtlAllocateFileLock@8 -FsRtlAllocatePool -FsRtlAllocatePoolWithQuota -FsRtlAllocatePoolWithQuotaTag -FsRtlAllocatePoolWithTag@12 -FsRtlAllocateResource -FsRtlAreNamesEqual@16 -FsRtlBalanceReads -FsRtlCheckLockForReadAccess@8 -FsRtlCheckLockForWriteAccess@8 -FsRtlCheckOplock@20 -FsRtlCopyRead@32 -FsRtlCopyWrite -FsRtlCreateSectionForDataScan@40 -FsRtlCurrentBatchOplock@4 -FsRtlDeleteKeyFromTunnelCache -FsRtlDeleteTunnelCache -FsRtlDeregisterUncProvider -FsRtlDissectDbcs -FsRtlDissectName@16 -FsRtlDoesDbcsContainWildCards -FsRtlDoesNameContainWildCards@4 -FsRtlFastCheckLockForRead@24 -FsRtlFastCheckLockForWrite -FsRtlFastUnlockAll@16 -FsRtlFastUnlockAllByKey@20 -FsRtlFastUnlockSingle@32 -FsRtlFindInTunnelCache -FsRtlFreeFileLock@4 -FsRtlGetFileSize -;FsRtlGetNextBaseMcbEntry -FsRtlGetNextFileLock -FsRtlGetNextLargeMcbEntry -FsRtlGetNextMcbEntry -FsRtlIncrementCcFastReadNoWait -FsRtlIncrementCcFastReadNotPossible -FsRtlIncrementCcFastReadResourceMiss -FsRtlIncrementCcFastReadWait -;FsRtlInitializeBaseMcb -FsRtlInitializeFileLock@12 -FsRtlInitializeLargeMcb -FsRtlInitializeMcb -FsRtlInitializeOplock -FsRtlInitializeTunnelCache -FsRtlInsertPerFileObjectContext -FsRtlInsertPerStreamContext -FsRtlIsDbcsInExpression -FsRtlIsFatDbcsLegal@20 -FsRtlIsHpfsDbcsLegal -FsRtlIsNameInExpression@16 -FsRtlIsNtstatusExpected@4 -FsRtlIsPagingFile -FsRtlIsTotalDeviceFailure -FsRtlLegalAnsiCharacterArray=_FsRtlLegalAnsiCharacterArray -;FsRtlLookupBaseMcbEntry -FsRtlLookupLargeMcbEntry -;FsRtlLookupLastBaseMcbEntry -;FsRtlLookupLastBaseMcbEntryAndIndex -FsRtlLookupLastLargeMcbEntry -FsRtlLookupLastLargeMcbEntryAndIndex -FsRtlLookupLastMcbEntry -FsRtlLookupMcbEntry -FsRtlLookupPerFileObjectContext -FsRtlLookupPerStreamContextInternal -FsRtlMdlRead -FsRtlMdlReadComplete -FsRtlMdlReadCompleteDev@12 -FsRtlMdlReadDev@28 -FsRtlMdlWriteComplete -FsRtlMdlWriteCompleteDev@16 -FsRtlNormalizeNtstatus@8 -FsRtlNotifyChangeDirectory -FsRtlNotifyCleanup@12 -FsRtlNotifyFilterChangeDirectory -FsRtlNotifyFilterReportChange -FsRtlNotifyFullChangeDirectory@40 -FsRtlNotifyFullReportChange -FsRtlNotifyInitializeSync@4 -FsRtlNotifyReportChange -FsRtlNotifyUninitializeSync@4 -FsRtlNotifyVolumeEvent@8 -;FsRtlNumberOfRunsInBaseMcb -FsRtlNumberOfRunsInLargeMcb -FsRtlNumberOfRunsInMcb -FsRtlOplockFsctrl@12 -FsRtlOplockIsFastIoPossible@4 -FsRtlPostPagingFileStackOverflow -FsRtlPostStackOverflow -FsRtlPrepareMdlWrite -FsRtlPrepareMdlWriteDev@28 -FsRtlPrivateLock@48 -FsRtlProcessFileLock@12 -FsRtlRegisterFileSystemFilterCallbacks -FsRtlRegisterUncProvider -FsRtlReleaseFile -;FsRtlRemoveBaseMcbEntry -FsRtlRemoveLargeMcbEntry -FsRtlRemoveMcbEntry -FsRtlRemovePerFileObjectContext -FsRtlRemovePerStreamContext -;FsRtlResetBaseMcb -FsRtlResetLargeMcb -;FsRtlSplitBaseMcb -FsRtlSplitLargeMcb -FsRtlSyncVolumes -FsRtlTeardownPerStreamContexts@4 -;FsRtlTruncateBaseMcb -FsRtlTruncateLargeMcb -FsRtlTruncateMcb -;FsRtlUninitializeBaseMcb -FsRtlUninitializeFileLock@4 -FsRtlUninitializeLargeMcb -FsRtlUninitializeMcb -FsRtlUninitializeOplock@4 -HalDispatchTable=_HalDispatchTable -@HalExamineMBR@16 -HalPrivateDispatchTable DATA -;HeadlessDispatch -InbvAcquireDisplayOwnership@0 -InbvCheckDisplayOwnership@0 -InbvDisplayString@4 -InbvEnableBootDriver@4 -InbvEnableDisplayString@4 -InbvInstallDisplayStringFilter@4 -InbvIsBootDriverInstalled@0 -InbvNotifyDisplayOwnershipLost@4 -InbvResetDisplay@0 -InbvSetScrollRegion@16 -InbvSetTextColor@4 -InbvSolidColorFill@20 -InitSafeBootMode DATA -@InterlockedCompareExchange@12 -@InterlockedDecrement@4 -@InterlockedExchange@8 -@InterlockedExchangeAdd@8 -@InterlockedIncrement@4 -@InterlockedPopEntrySList@4 -@InterlockedPushEntrySList@8 -IoAcquireCancelSpinLock@4 -IoAcquireRemoveLockEx@20 -IoAcquireVpbSpinLock@4 -IoAdapterObjectType DATA -IoAllocateAdapterChannel@20 -IoAllocateController@16 -IoAllocateDriverObjectExtension@16 -IoAllocateErrorLogEntry@8 -IoAllocateIrp@8 -IoAllocateMdl@20 -IoAllocateWorkItem@4 -@IoAssignDriveLetters@16 -IoAssignResources@24 -IoAttachDevice@12 -IoAttachDeviceByPointer@8 -IoAttachDeviceToDeviceStack@8 -IoAttachDeviceToDeviceStackSafe@12 -IoBuildAsynchronousFsdRequest@24 -IoBuildDeviceIoControlRequest@36 -IoBuildPartialMdl@16 -IoBuildSynchronousFsdRequest@28 -IoCallDriver@8 -IoCancelFileOpen@8 -IoCancelIrp@4 -IoCheckDesiredAccess@8 -IoCheckEaBufferValidity@12 -IoCheckFunctionAccess@24 -IoCheckQuerySetFileInformation@12 -IoCheckQuerySetVolumeInformation@12 -IoCheckQuotaBufferValidity@12 -IoCheckShareAccess@20 -IoCompleteRequest@8 -IoConnectInterrupt@44 -IoCreateController@4 -IoCreateDevice@28 -IoCreateDisk@8 -IoCreateDriver@8 -IoCreateFile@56 -IoCreateFileSpecifyDeviceObjectHint@60 -IoCreateNotificationEvent@8 -IoCreateStreamFileObject@8 -IoCreateStreamFileObjectEx@12 -IoCreateStreamFileObjectLite@8 -IoCreateSymbolicLink@8 -IoCreateSynchronizationEvent@8 -IoCreateUnprotectedSymbolicLink@8 -IoCsqInitialize@28 -IoCsqInitializeEx@28 -IoCsqInsertIrp@12 -IoCsqInsertIrpEx@16 -IoCsqRemoveIrp@8 -IoCsqRemoveNextIrp@8 -IoDeleteController@4 -IoDeleteDevice@4 -IoDeleteDriver@4 -IoDeleteSymbolicLink@4 -IoDetachDevice@4 -IoDeviceHandlerObjectSize DATA -IoDeviceHandlerObjectType DATA -IoDeviceObjectType DATA -IoDisconnectInterrupt@4 -IoDriverObjectType DATA -IoEnqueueIrp@4 -IoEnumerateDeviceObjectList@16 -IoEnumerateRegisteredFiltersList@12 -IoFastQueryNetworkAttributes@20 -IoFileObjectType=_IoFileObjectType -IoForwardAndCatchIrp@8=IoForwardIrpSynchronously@8 -IoForwardIrpSynchronously@8 -IoFreeController@4 -IoFreeErrorLogEntry@4 -IoFreeIrp@4 -IoFreeMdl@4 -IoFreeWorkItem@4 -IoGetAttachedDevice@4 -IoGetAttachedDeviceReference@4 -IoGetBaseFileSystemDeviceObject@4 -IoGetBootDiskInformation@8 -IoGetConfigurationInformation@0 -IoGetCurrentProcess@0 -IoGetDeviceAttachmentBaseRef@4 -IoGetDeviceInterfaceAlias@12 -IoGetDeviceInterfaces@16 -IoGetDeviceObjectPointer@16 -IoGetDeviceProperty@20 -IoGetDeviceToVerify@4 -IoGetDiskDeviceObject@8 -IoGetDmaAdapter@12 -IoGetDriverObjectExtension@8 -IoGetFileObjectGenericMapping@0 -IoGetInitialStack@0 -IoGetLowerDeviceObject@4 -IoGetPagingIoPriority@4 -IoGetRelatedDeviceObject@4 -IoGetRequestorProcess@4 -IoGetRequestorProcessId@4 -IoGetRequestorSessionId@8 -IoGetStackLimits@8 -IoGetTopLevelIrp@0 -IoInitializeIrp@12 -IoInitializeRemoveLockEx@20 -IoInitializeTimer@12 -IoInvalidateDeviceRelations@8 -IoInvalidateDeviceState@4 -IoIsFileOriginRemote@4 -IoIsOperationSynchronous@4 -IoIsSystemThread@4 -IoIsValidNameGraftingBuffer@8 -IoIsWdmVersionAvailable@8 -IoMakeAssociatedIrp@8 -IoOpenDeviceInterfaceRegistryKey@12 -IoOpenDeviceRegistryKey@16 -IoPageRead@20 -IoPnPDeliverServicePowerNotification@16 -IoQueryDeviceDescription@32 -IoQueryFileDosDeviceName@8 -IoQueryFileInformation@20 -IoQueryVolumeInformation@20 -IoQueueThreadIrp@4 -IoQueueWorkItem@16 -IoRaiseHardError@12 -IoRaiseInformationalHardError@12 -IoReadDiskSignature@12 -IoReadOperationCount DATA -@IoReadPartitionTable@16 -IoReadPartitionTableEx@8 -IoReadTransferCount DATA -IoRegisterBootDriverReinitialization@12 -IoRegisterDeviceInterface@16 -IoRegisterDriverReinitialization@12 -IoRegisterFileSystem@4 -IoRegisterFsRegistrationChange@8 -IoRegisterLastChanceShutdownNotification@4 -IoRegisterPlugPlayNotification@28 -IoRegisterShutdownNotification@4 -IoReleaseCancelSpinLock@4 -IoReleaseRemoveLockAndWaitEx@12 -IoReleaseRemoveLockEx@12 -IoReleaseVpbSpinLock@4 -IoRemoveShareAccess@8 -IoReportDetectedDevice@32 -IoReportHalResourceUsage@16 -IoReportResourceForDetection@28 -IoReportResourceUsage@36 -IoReportTargetDeviceChange@8 -IoReportTargetDeviceChangeAsynchronous@16 -IoRequestDeviceEject@4 -IoReuseIrp@8 -IoSetCompletionRoutineEx@28 -IoSetDeviceInterfaceState@8 -IoSetDeviceToVerify@8 -IoSetFileOrigin@8 -IoSetHardErrorOrVerifyDevice@8 -IoSetInformation@16 -IoSetIoCompletion@24 -@IoSetPartitionInformation@16 -IoSetPartitionInformationEx@12 -IoSetShareAccess@16 -IoSetStartIoAttributes@12 -IoSetSystemPartition@4 -IoSetThreadHardErrorMode@4 -IoSetTopLevelIrp@4 -IoStartNextPacket@8 -IoStartNextPacketByKey@12 -IoStartPacket@16 -IoStartTimer@4 -IoStatisticsLock DATA -IoStopTimer@4 -IoSynchronousInvalidateDeviceRelations@8 -IoSynchronousPageWrite@20 -IoThreadToProcess@4 -;IoTranslateBusAddress -IoUnregisterFileSystem@4 -IoUnregisterFsRegistrationChange@8 -IoUnregisterPlugPlayNotification@4 -IoUnregisterShutdownNotification@4 -IoUpdateShareAccess@8 -IoValidateDeviceIoControlAccess@8 -IoVerifyPartitionTable@8 -IoVerifyVolume@8 -IoVolumeDeviceToDosName@8 -IoWMIAllocateInstanceIds@12 -IoWMIDeviceObjectToInstanceName@12 -IoWMIExecuteMethod@24 -IoWMIHandleToInstanceName@12 -IoWMIOpenBlock@12 -IoWMIQueryAllData@12 -IoWMIQueryAllDataMultiple@16 -IoWMIQuerySingleInstance@16 -IoWMIQuerySingleInstanceMultiple@20 -IoWMIRegistrationControl@8 -IoWMISetNotificationCallback@12 -IoWMISetSingleInstance@20 -IoWMISetSingleItem@24 -IoWMISuggestInstanceName@16 -IoWMIWriteEvent@4 -IoWriteErrorLogEntry@4 -IoWriteOperationCount DATA -@IoWritePartitionTable@20 -IoWritePartitionTableEx@8 -IoWriteTransferCount DATA -@IofCallDriver@8 -@IofCompleteRequest@8 -KdChangeOption@24 -KdDebuggerEnabled=_KdDebuggerEnabled -KdDebuggerNotPresent=_KdDebuggerNotPresent -KdDisableDebugger@0 -KdEnableDebugger@0 -KdEnteredDebugger -KdPollBreakIn@0 -KdPowerTransition@4 -KdRefreshDebuggerNotPresent@0 -KdSystemDebugControl@28 -Ke386CallBios@8 -;Ke386IoSetAccessProcess -;Ke386QueryIoAccessMap -;Ke386SetIoAccessMap -@KeAcquireGuardedMutex@4 -@KeAcquireGuardedMutexUnsafe@4 -@KeAcquireInStackQueuedSpinLockAtDpcLevel@8 -@KeAcquireInStackQueuedSpinLockForDpc@8 -KeAcquireInterruptSpinLock@4 -KeAcquireSpinLockAtDpcLevel@4 -@KeAcquireSpinLockForDpc@4 -KeAddSystemServiceTable@20 -KeAreAllApcsDisabled@0 -KeAreApcsDisabled@0 -KeAttachProcess@4 -KeBugCheck@4 -KeBugCheckEx@20 -KeCancelTimer@4 -KeCapturePersistentThreadState@28 -KeClearEvent@4 -KeConnectInterrupt@4 -KeDelayExecutionThread@12 -KeDeregisterBugCheckCallback@4 -KeDeregisterBugCheckReasonCallback@4 -KeDeregisterNmiCallback@4 -KeDetachProcess@0 -KeDisconnectInterrupt@4 -KeEnterCriticalRegion@0=_KeEnterCriticalRegion@0 -KeEnterGuardedRegion@0=_KeEnterGuardedRegion@0 -KeEnterKernelDebugger@0 -KeFindConfigurationEntry@16 -KeFindConfigurationNextEntry@20 -KeFlushEntireTb@8 -KeFlushQueuedDpcs@0 -;KeGenericCallDpc -KeGetCurrentThread@0 -KeGetPreviousMode@0 -KeGetRecommendedSharedDataAlignment@0 -;KeI386AbiosCall -KeI386AllocateGdtSelectors@8 -;KeI386Call16BitCStyleFunction -;KeI386Call16BitFunction -KeI386FlatToGdtSelector@12 -;KeI386GetLid -KeI386MachineType DATA -KeI386ReleaseGdtSelectors@8 -;KeI386ReleaseLid -;KeI386SetGdtSelector -KeInitializeApc@32 -KeInitializeCrashDumpHeader@20 -KeInitializeDeviceQueue@4 -KeInitializeDpc@12 -KeInitializeEvent@12 -@KeInitializeGuardedMutex@4 -KeInitializeInterrupt@44 -KeInitializeMutant@8 -KeInitializeMutex@8 -KeInitializeQueue@8 -KeInitializeSemaphore@12 -KeInitializeSpinLock@4 -KeInitializeThreadedDpc@12 -KeInitializeTimer@4 -KeInitializeTimerEx@8 -KeInsertByKeyDeviceQueue@12 -KeInsertDeviceQueue@8 -KeInsertHeadQueue@8 -KeInsertQueue@8 -KeInsertQueueApc@16 -KeInsertQueueDpc@12 -KeInvalidateAllCaches@0 -KeIpiGenericCall@8 -KeIsAttachedProcess@0 -KeIsExecutingDpc@0 -;KeIsWaitListEmpty -KeLeaveCriticalRegion@0=_KeLeaveCriticalRegion@0 -KeLeaveGuardedRegion@0=_KeLeaveGuardedRegion@0 -KeLoaderBlock DATA -KeNumberProcessors DATA -KeProfileInterrupt@4 -KeProfileInterruptWithSource@8 -KePulseEvent@12 -KeQueryActiveProcessors@0 -KeQueryInterruptTime@0 -KeQueryPriorityThread@4 -KeQueryRuntimeThread@8 -KeQuerySystemTime@4 -KeQueryTickCount@4 -KeQueryTimeIncrement@0 -KeRaiseUserException@4 -KeReadStateEvent@4 -KeReadStateMutant@4 -KeReadStateMutex@4=KeReadStateMutant@4 -KeReadStateQueue@4 -KeReadStateSemaphore@4 -KeReadStateTimer@4 -KeRegisterBugCheckCallback@20 -KeRegisterBugCheckReasonCallback@16 -KeRegisterNmiCallback@8 -@KeReleaseGuardedMutex@4 -@KeReleaseGuardedMutexUnsafe@4 -@KeReleaseInStackQueuedSpinLockForDpc@4 -@KeReleaseInStackQueuedSpinLockFromDpcLevel@4 -KeReleaseInterruptSpinLock@8 -KeReleaseMutant@16 -KeReleaseMutex@8 -KeReleaseSemaphore@16 -@KeReleaseSpinLockForDpc@8 -KeReleaseSpinLockFromDpcLevel@4 -KeRemoveByKeyDeviceQueue@8 -KeRemoveByKeyDeviceQueueIfBusy@8 -KeRemoveDeviceQueue@4 -KeRemoveEntryDeviceQueue@8 -KeRemoveQueue@12 -KeRemoveQueueDpc@4 -KeRemoveSystemServiceTable@4 -KeResetEvent@4 -KeRestoreFloatingPointState@4 -KeRevertToUserAffinityThread@0 -KeRundownQueue@4 -KeSaveFloatingPointState@4 -KeSaveStateForHibernate -KeServiceDescriptorTable DATA -KeSetAffinityThread@8 -KeSetBasePriorityThread@8 -KeSetDmaIoCoherency@4 -KeSetEvent@12 -KeSetEventBoostPriority@8 -KeSetIdealProcessorThread@8 -KeSetImportanceDpc@8 -KeSetKernelStackSwapEnable@4 -KeSetPriorityThread@8 -KeSetProfileIrql@4 -KeSetSystemAffinityThread@4 -KeSetTargetProcessorDpc@8 -KeSetTimeIncrement@8 -KeSetTimer@16 -KeSetTimerEx@20 -;KeSignalCallDpcDone -;KeSignalCallDpcSynchronize -KeStackAttachProcess@8 -KeSynchronizeExecution@12 -KeTerminateThread@4 -@KeTestSpinLock@4 -KeTickCount DATA -@KeTryToAcquireGuardedMutex@4 -@KeTryToAcquireSpinLockAtDpcLevel@4 -KeUnstackDetachProcess@4 -KeUpdateRunTime -KeUpdateSystemTime@0 -KeUserModeCallback@20 -KeWaitForMultipleObjects@32 -KeWaitForMutexObject@20=KeWaitForSingleObject@20 -KeWaitForSingleObject@20 -@KefAcquireSpinLockAtDpcLevel@4 -@KefReleaseSpinLockFromDpcLevel@4 -Kei386EoiHelper@0 -@KiAcquireSpinLock@4 -KiBugCheckData DATA -KiCheckForKernelApcDelivery@0 -KiCoprocessorError@0 -KiDeliverApc@12 -KiDispatchInterrupt@0 -KiEnableTimerWatchdog -KiIpiServiceRoutine@8 -@KiReleaseSpinLock@4 -KiUnexpectedInterrupt -;Kii386SpinOnSpinLock -LdrAccessResource@16 -LdrEnumResources@20 -LdrFindResourceDirectory_U@16 -LdrFindResource_U@16 -LpcPortObjectType DATA -LpcRequestPort@8 -LpcRequestWaitReplyPort@12 -LsaCallAuthenticationPackage@28 -LsaDeregisterLogonProcess@8 -LsaFreeReturnBuffer@4 -LsaLogonUser@56 -LsaLookupAuthenticationPackage@12 -LsaRegisterLogonProcess@12 -Mm64BitPhysicalAddress DATA -MmAddPhysicalMemory@8 -MmAddVerifierThunks@8 -MmAdjustWorkingSetSize@16 -MmAdvanceMdl@8 -MmAllocateContiguousMemory@12 -MmAllocateContiguousMemorySpecifyCache@32 -MmAllocateMappingAddress@8 -MmAllocateNonCachedMemory@4 -MmAllocatePagesForMdl@28 -MmAllocatePagesForMdlEx@36 -MmBuildMdlForNonPagedPool@4 -MmCanFileBeTruncated@8 -;MmCommitSessionMappedView -MmCreateMdl@12 -;MmCreateMirror -MmCreateSection@32 -MmDisableModifiedWriteOfSection@4 -MmFlushImageSection@8 -MmForceSectionClosed@8 -MmFreeContiguousMemory@4 -MmFreeContiguousMemorySpecifyCache@12 -MmFreeMappingAddress@8 -MmFreeNonCachedMemory@8 -MmFreePagesFromMdl@4 -MmGetPhysicalAddress@4 -MmGetPhysicalMemoryRanges@0 -MmGetSystemRoutineAddress@4 -MmGetVirtualForPhysical@8 -MmGrowKernelStack@4 -MmHighestUserAddress DATA -MmIsAddressValid@4 -MmIsDriverVerifying@4 -;MmIsIoSpaceActive -MmIsNonPagedSystemAddressValid@4 -MmIsRecursiveIoFault@0 -MmIsThisAnNtAsSystem@0 -MmIsVerifierEnabled@4 -MmLockPagableDataSection@4 -MmLockPagableImageSection@4=MmLockPagableDataSection@4 -MmLockPagableSectionByHandle@4 -MmMapIoSpace@16 -MmMapLockedPages@8 -MmMapLockedPagesSpecifyCache@24 -MmMapLockedPagesWithReservedMapping@16 -MmMapMemoryDumpMdl@4 -MmMapUserAddressesToPage@12 -MmMapVideoDisplay@16 -MmMapViewInSessionSpace@12 -MmMapViewInSystemSpace@12 -MmMapViewOfSection@40 -MmMarkPhysicalMemoryAsBad@8 -MmMarkPhysicalMemoryAsGood@8 -MmPageEntireDriver@4 -MmPrefetchPages@8 -MmProbeAndLockPages@12 -MmProbeAndLockProcessPages@16 -MmProbeAndLockSelectedPages@16 -MmProtectMdlSystemAddress@8 -MmQuerySystemSize@0 -MmRemovePhysicalMemory@8 -MmResetDriverPaging@4 -MmSectionObjectType DATA -MmSecureVirtualMemory@12 -MmSetAddressRangeModified@8 -MmSetBankedSection@24 -MmSizeOfMdl@8 -MmSystemRangeStart DATA -MmTrimAllSystemPagableMemory@4 -MmUnlockPagableImageSection@4 -MmUnlockPages@4 -MmUnmapIoSpace@8 -MmUnmapLockedPages@8 -MmUnmapReservedMapping@12 -MmUnmapVideoDisplay@8 -MmUnmapViewInSessionSpace@4 -MmUnmapViewInSystemSpace@4 -MmUnmapViewOfSection@8 -MmUnsecureVirtualMemory@4 -MmUserProbeAddress DATA -NlsAnsiCodePage DATA -NlsLeadByteInfo DATA -NlsMbCodePageTag DATA -NlsMbOemCodePageTag DATA -NlsOemCodePage DATA -NlsOemLeadByteInfo=_NlsOemLeadByteInfo -NtAddAtom@12 -NtAdjustPrivilegesToken@24 -NtAlertThread@4 -NtAllocateLocallyUniqueId@4 -NtAllocateUuids@16 -NtAllocateVirtualMemory@24 -NtBuildNumber DATA -NtClose@4 -NtConnectPort@32 -NtCreateEvent@20 -NtCreateFile@44 -NtCreateSection@28 -NtCreateTimer@16 -NtDeleteAtom@4 -NtDeleteFile@4 -NtDeviceIoControlFile@40 -NtDuplicateObject@28 -NtDuplicateToken@24 -NtFindAtom@12 -NtFreeVirtualMemory@16 -NtFsControlFile@40 -NtGlobalFlag DATA -NtLockFile@40 -NtMakePermanentObject@4 -NtMapViewOfSection@40 -NtNotifyChangeDirectoryFile@36 -NtOpenEvent@12 -NtOpenFile@24 -NtOpenProcess@16 -NtOpenProcessToken@12 -NtOpenProcessTokenEx@16 -NtOpenThread@16 -NtOpenThreadToken@16 -NtOpenThreadTokenEx@20 -NtQueryDirectoryFile@44 -NtQueryEaFile@36 -NtQueryInformationAtom@20 -NtQueryInformationFile@20 -NtQueryInformationProcess@20 -NtQueryInformationThread@20 -NtQueryInformationToken@20 -NtQueryQuotaInformationFile@36 -NtQuerySecurityObject@20 -NtQuerySystemInformation@16 -NtQueryVolumeInformationFile@20 -NtReadFile@36 -NtRequestPort@8 -NtRequestWaitReplyPort@12 -NtSetEaFile@16 -NtSetEvent@8 -NtSetInformationFile@20 -NtSetInformationProcess@16 -NtSetInformationThread@16 -NtSetQuotaInformationFile@16 -NtSetSecurityObject@12 -NtSetVolumeInformationFile@20 -NtShutdownSystem@4 -NtTraceEvent@16 -NtUnlockFile@20 -NtVdmControl@8 -NtWaitForSingleObject@12 -NtWriteFile@36 -ObAssignSecurity@16 -ObCheckCreateObjectAccess@28 -ObCheckObjectAccess@20 -ObCloseHandle@8 -ObCreateObject@36 -ObCreateObjectType@16 -;ObDeleteCapturedInsertInfo -ObDereferenceObject@4 -ObDereferenceObjectDeferDelete@4 -ObDereferenceSecurityDescriptor@8 -ObFindHandleForObject@20 -ObGetObjectSecurity@12 -ObInsertObject@24 -ObIsKernelHandle@4 -ObLogSecurityDescriptor@12 -ObMakeTemporaryObject@4 -ObOpenObjectByName@28 -ObOpenObjectByPointer@28 -ObQueryNameString@16 -ObQueryObjectAuditingByHandle@8 -ObReferenceObjectByHandle@24 -ObReferenceObjectByName@32 -ObReferenceObjectByPointer@16 -ObReferenceSecurityDescriptor@8 -ObReleaseObjectSecurity@8 -;ObSetHandleAttributes@12 -ObSetSecurityDescriptorInfo@24 -ObSetSecurityObjectByPointer@12 -@ObfDereferenceObject@4 -@ObfReferenceObject@4 -;PfxFindPrefix -;PfxInitialize -;PfxInsertPrefix -;PfxRemovePrefix -PoCallDriver@8 -;PoCancelDeviceNotify -PoQueueShutdownWorkItem@4 -PoRegisterDeviceForIdleDetection@16 -;PoRegisterDeviceNotify -PoRegisterSystemState@8 -PoRequestPowerIrp@24 -;PoRequestShutdownEvent -;PoSetHiberRange -PoSetDeviceBusy@4 -PoSetPowerState@12 -PoSetSystemState@4 -;PoShutdownBugCheck -PoStartNextPowerIrp@4 -PoUnregisterSystemState@4 -ProbeForRead@12 -ProbeForWrite@12 -PsAssignImpersonationToken@8 -PsChargePoolQuota@12 -PsChargeProcessNonPagedPoolQuota@4=PsDereferenceImpersonationToken@4 -PsChargeProcessPagedPoolQuota@8 -PsChargeProcessPoolQuota@12 -PsCreateSystemProcess@12 -PsCreateSystemThread@28 -PsDereferenceImpersonationToken@4=PsDereferencePrimaryToken@4 -PsDereferencePrimaryToken@4 -PsDisableImpersonation@8 -PsEstablishWin32Callouts@4 -PsGetContextThread@12 -PsGetCurrentProcess@0=IoGetCurrentProcess@0 -PsGetCurrentProcessId@0 -PsGetCurrentProcessSessionId@0 -PsGetCurrentProcessWin32Process@0 -PsGetCurrentThread@0=KeGetCurrentThread@0 -PsGetCurrentThreadId@0 -PsGetCurrentThreadPreviousMode@0 -;PsGetCurrentThreadProcess -;PsGetCurrentThreadProcessId -PsGetCurrentThreadStackBase@0 -PsGetCurrentThreadStackLimit@0 -;PsGetCurrentThreadTeb -PsGetCurrentThreadWin32Thread@0 -;PsGetCurrentThreadWin32ThreadAndEnterCriticalRegion -PsGetJobLock@4 -PsGetJobSessionId@4 -PsGetJobUIRestrictionsClass@4 -PsGetProcessCreateTimeQuadPart@4 -PsGetProcessDebugPort@4 -PsGetProcessExitProcessCalled@4 -PsGetProcessExitStatus@4 -PsGetProcessExitTime@0 -PsGetProcessId@4 -PsGetProcessImageFileName@4 -PsGetProcessInheritedFromUniqueProcessId@4 -PsGetProcessJob@4 -PsGetProcessPeb@4 -PsGetProcessPriorityClass@4 -PsGetProcessSectionBaseAddress@4 -PsGetProcessSecurityPort@4 -PsGetProcessSessionId@4 -;PsGetProcessSessionIdEx -PsGetProcessWin32Process@4 -PsGetProcessWin32WindowStation@4 -PsGetThreadFreezeCount@4 -PsGetThreadHardErrorsAreDisabled@4 -PsGetThreadId@4 -PsGetThreadProcess@4 -PsGetThreadProcessId@4 -PsGetThreadSessionId@4 -PsGetThreadTeb@4 -PsGetThreadWin32Thread@4 -PsGetVersion@16 -PsImpersonateClient@20 -PsInitialSystemProcess DATA -PsIsProcessBeingDebugged@4 -;PsIsSystemProcess -PsIsSystemThread@4 -PsIsThreadImpersonating@4 -PsIsThreadTerminating@4 -PsJobType DATA -PsLookupProcessByProcessId@8 -PsLookupProcessThreadByCid@12 -PsLookupThreadByThreadId@8 -PsProcessType=_PsProcessType -PsReferenceImpersonationToken@16 -PsReferencePrimaryToken@4 -PsRemoveCreateThreadNotifyRoutine@4 -PsRemoveLoadImageNotifyRoutine@4 -PsRestoreImpersonation@8 -PsReturnPoolQuota@12 -PsReturnProcessNonPagedPoolQuota@8 -PsReturnProcessPagedPoolQuota@8 -PsRevertThreadToSelf@4 -PsRevertToSelf@0 -PsSetContextThread@12 -PsSetCreateProcessNotifyRoutine@8 -PsSetCreateThreadNotifyRoutine@4 -PsSetJobUIRestrictionsClass@8 -PsSetLegoNotifyRoutine@4 -PsSetLoadImageNotifyRoutine@4 -PsSetProcessPriorityByClass@8 -PsSetProcessPriorityClass@8 -PsSetProcessSecurityPort@8 -PsSetProcessWin32Process@8 -PsSetProcessWindowStation@8 -PsSetThreadHardErrorsAreDisabled@8 -PsSetThreadWin32Thread@8 -PsTerminateSystemThread@4 -PsThreadType=_PsThreadType -;PsWrapApcWow64Thread -READ_REGISTER_BUFFER_UCHAR@12 -READ_REGISTER_BUFFER_ULONG@12 -READ_REGISTER_BUFFER_USHORT@12 -READ_REGISTER_UCHAR@4 -READ_REGISTER_ULONG@4 -READ_REGISTER_USHORT@4 -KeRosDumpStackFrames@8 -RtlAbsoluteToSelfRelativeSD@12 -RtlAddAccessAllowedAce@16 -RtlAddAccessAllowedAceEx@20 -RtlAddAce@20 -RtlAddAtomToAtomTable@12 -RtlAddRange@36 -RtlAllocateAndInitializeSid@44 -RtlAllocateHeap@12 -RtlAnsiCharToUnicodeChar@4 -RtlAnsiStringToUnicodeSize@4=RtlxAnsiStringToUnicodeSize@4 -RtlAnsiStringToUnicodeString@12 -RtlAppendAsciizToString@8 -RtlAppendStringToString@8 -RtlAppendUnicodeStringToString@8 -RtlAppendUnicodeToString@8 -RtlAreAllAccessesGranted@8 -RtlAreAnyAccessesGranted@8 -RtlAreBitsClear@12 -RtlAreBitsSet@12 -RtlAssert@16 -RtlCaptureContext@4 -RtlCaptureStackBackTrace@16 -RtlCharToInteger@12 -RtlCheckRegistryKey@8 -RtlClearAllBits@4 -RtlClearBit@8 -RtlClearBits@12 -RtlCompareMemory@12 -RtlCompareMemoryUlong@12 -RtlCompareString@12 -RtlCompareUnicodeString@12 -RtlCompressBuffer@32 -RtlCompressChunks@28 -RtlConvertLongToLargeInteger@4 -RtlConvertSidToUnicodeString@12 -RtlConvertUlongToLargeInteger@4 -RtlCopyLuid@8 -RtlCopyRangeList@8 -RtlCopySid@12 -RtlCopyString@8 -RtlCopyUnicodeString@8 -RtlCreateAcl@12 -RtlCreateAtomTable@8 -RtlCreateHeap@24 -RtlCreateRegistryKey@8 -RtlCreateSecurityDescriptor@8 -RtlCreateSystemVolumeInformationFolder@4 -RtlCreateUnicodeString@8 -RtlCustomCPToUnicodeN@24 -RtlDecompressBuffer@24 -RtlDecompressChunks@28 -RtlDecompressFragment@32 -RtlDelete@4 -RtlDeleteAce@8 -RtlDeleteAtomFromAtomTable@8 -RtlDeleteElementGenericTable@8 -RtlDeleteElementGenericTableAvl@8 -RtlDeleteNoSplay@8 -RtlDeleteOwnersRanges@8 -RtlDeleteRange@24 -RtlDeleteRegistryValue@12 -RtlDescribeChunk@20 -RtlDestroyAtomTable@4 -RtlDestroyHeap@4 -RtlDowncaseUnicodeString@12 -RtlEmptyAtomTable@8 -RtlEnlargedIntegerMultiply@8 -RtlEnlargedUnsignedDivide@16 -RtlEnlargedUnsignedMultiply@8 -RtlEnumerateGenericTable@8 -RtlEnumerateGenericTableAvl@8 -RtlEnumerateGenericTableLikeADirectory@28 -RtlEnumerateGenericTableWithoutSplaying@8 -RtlEnumerateGenericTableWithoutSplayingAvl@8 -RtlEqualLuid@8 -RtlEqualSid@8 -RtlEqualString@12 -RtlEqualUnicodeString@12 -RtlExtendedIntegerMultiply@12 -RtlExtendedLargeIntegerDivide@16 -RtlExtendedMagicDivide@20 -RtlFillMemory@12 -RtlFillMemoryUlong@12 -RtlFindClearBits@12 -RtlFindClearBitsAndSet@12 -RtlFindClearRuns@16 -RtlFindFirstRunClear@8 -RtlFindLastBackwardRunClear@12 -RtlFindLeastSignificantBit@8 -RtlFindLongestRunClear@8 -RtlFindMessage@20 -RtlFindMostSignificantBit@8 -RtlFindNextForwardRunClear@12 -RtlFindRange@48 -RtlFindSetBits@12 -RtlFindSetBitsAndClear@12 -RtlFindUnicodePrefix@12 -RtlFormatCurrentUserKeyPath@4 -RtlFreeAnsiString@4 -RtlFreeHeap@12 -RtlFreeOemString@4 -RtlFreeRangeList@4 -RtlFreeUnicodeString@4 -RtlGUIDFromString@8 -RtlGenerate8dot3Name@16 -RtlGetAce@12 -RtlGetCallersAddress@8 -RtlGetCompressionWorkSpaceSize@12 -RtlGetDaclSecurityDescriptor@16 -RtlGetDefaultCodePage@8 -RtlGetElementGenericTable@8 -RtlGetElementGenericTableAvl@8 -RtlGetFirstRange@12 -RtlGetGroupSecurityDescriptor@12 -RtlGetNextRange@12 -RtlGetNtGlobalFlags@0 -RtlGetOwnerSecurityDescriptor@12 -RtlGetSaclSecurityDescriptor@16 -RtlGetSetBootStatusData@24 -RtlGetVersion@4 -RtlHashUnicodeString@16 -RtlImageDirectoryEntryToData@16 -RtlImageNtHeader@4 -RtlInitAnsiString@8 -RtlInitAnsiStringEx@8 -RtlInitCodePageTable@8 -RtlInitString@8 -RtlInitUnicodeString@8 -RtlInitUnicodeStringEx@8 -RtlInitializeBitMap@12 -RtlInitializeGenericTable@20 -RtlInitializeGenericTableAvl@20 -RtlInitializeRangeList@4 -RtlInitializeSid@12 -RtlInitializeUnicodePrefix@4 -RtlInsertElementGenericTable@16 -RtlInsertElementGenericTableAvl@16 -RtlInsertElementGenericTableFull@24 -RtlInsertElementGenericTableFullAvl@24 -RtlInsertUnicodePrefix@12 -RtlInt64ToUnicodeString@16 -RtlIntegerToChar@16 -RtlIntegerToUnicode@16 -RtlIntegerToUnicodeString@12 -RtlInvertRangeList@8 -RtlIpv4AddressToStringA@8 -RtlIpv4AddressToStringExA@16 -RtlIpv4AddressToStringExW@16 -RtlIpv4AddressToStringW@8 -RtlIpv4StringToAddressA@16 -RtlIpv4StringToAddressExA@16 -RtlIpv4StringToAddressExW@16 -RtlIpv4StringToAddressW@16 -RtlIpv6AddressToStringA@8 -RtlIpv6AddressToStringExA@20 -RtlIpv6AddressToStringExW@20 -RtlIpv6AddressToStringW@8 -RtlIpv6StringToAddressA@12 -RtlIpv6StringToAddressExA@16 -RtlIpv6StringToAddressExW@16 -RtlIpv6StringToAddressW@12 -RtlIsGenericTableEmpty@4 -RtlIsGenericTableEmptyAvl@4 -RtlIsNameLegalDOS8Dot3@12 -RtlIsRangeAvailable@40 -RtlIsValidOemCharacter@4 -RtlLargeIntegerAdd@16 -RtlLargeIntegerArithmeticShift@12 -RtlLargeIntegerDivide@20 -RtlLargeIntegerNegate@8 -RtlLargeIntegerShiftLeft@12 -RtlLargeIntegerShiftRight@12 -RtlLargeIntegerSubtract@16 -RtlLengthRequiredSid@4 -RtlLengthSecurityDescriptor@4 -RtlLengthSid@4 -RtlLockBootStatusData@4 -RtlLookupAtomInAtomTable@12 -RtlLookupElementGenericTable@8 -RtlLookupElementGenericTableAvl@8 -RtlLookupElementGenericTableFull@16 -RtlLookupElementGenericTableFullAvl@16 -RtlMapGenericMask@8 -RtlMapSecurityErrorToNtStatus@4 -RtlMergeRangeLists@16 -RtlMoveMemory@12 -RtlMultiByteToUnicodeN@20 -RtlMultiByteToUnicodeSize@12 -RtlNextUnicodePrefix@8 -RtlNtStatusToDosError@4 -RtlNtStatusToDosErrorNoTeb@4 -RtlNumberGenericTableElements@4 -RtlNumberGenericTableElementsAvl@4 -RtlNumberOfClearBits@4 -RtlNumberOfSetBits@4 -RtlOemStringToCountedUnicodeString@12 -RtlOemStringToUnicodeSize@4=RtlxOemStringToUnicodeSize@4 -RtlOemStringToUnicodeString@12 -RtlOemToUnicodeN@20 -RtlPinAtomInAtomTable@8 -@RtlPrefetchMemoryNonTemporal@8 -RtlPrefixString@12 -RtlPrefixUnicodeString@12 -RtlQueryAtomInAtomTable@24 -RtlQueryRegistryValues@20 -RtlQueryTimeZoneInformation@4 -RtlRaiseException@4 -RtlRandom@4 -RtlRandomEx@4 -RtlRealPredecessor@4 -RtlRealSuccessor@4 -RtlRemoveUnicodePrefix@8 -RtlReserveChunk@20 -RtlSecondsSince1970ToTime@8 -RtlSecondsSince1980ToTime@8 -RtlSelfRelativeToAbsoluteSD@44 -RtlSelfRelativeToAbsoluteSD2@8 -RtlSetAllBits@4 -RtlSetBit@8 -RtlSetBits@12 -RtlSetDaclSecurityDescriptor@16 -RtlSetGroupSecurityDescriptor@12 -RtlSetOwnerSecurityDescriptor@12 -RtlSetSaclSecurityDescriptor@16 -RtlSetTimeZoneInformation@4 -RtlSizeHeap@12 -RtlSplay@4 -RtlStringFromGUID@8 -RtlSubAuthorityCountSid@4 -RtlSubAuthoritySid@8 -RtlSubtreePredecessor@4 -RtlSubtreeSuccessor@4 -RtlTestBit@8 -RtlTimeFieldsToTime@8 -RtlTimeToElapsedTimeFields@8 -RtlTimeToSecondsSince1970@8 -RtlTimeToSecondsSince1980@8 -RtlTimeToTimeFields@8 -;RtlTraceDatabaseAdd -;RtlTraceDatabaseCreate -;RtlTraceDatabaseDestroy -;RtlTraceDatabaseEnumerate -;RtlTraceDatabaseFind -;RtlTraceDatabaseLock -;RtlTraceDatabaseUnlock -;RtlTraceDatabaseValidate -@RtlUlongByteSwap@4 -@RtlUlonglongByteSwap@8 -RtlUnicodeStringToAnsiSize@4=RtlxUnicodeStringToAnsiSize@4 -RtlUnicodeStringToAnsiString@12 -RtlUnicodeStringToCountedOemString@12 -RtlUnicodeStringToInteger@12 -RtlUnicodeStringToOemSize@4=RtlxUnicodeStringToOemSize@4 -RtlUnicodeStringToOemString@12 -RtlUnicodeToCustomCPN@24 -RtlUnicodeToMultiByteN@20 -RtlUnicodeToMultiByteSize@12 -RtlUnicodeToOemN@20 -RtlUnlockBootStatusData@4 -RtlUnwind@16 -RtlUpcaseUnicodeChar@4 -RtlUpcaseUnicodeString@12 -RtlUpcaseUnicodeStringToAnsiString@12 -RtlUpcaseUnicodeStringToCountedOemString@12 -RtlUpcaseUnicodeStringToOemString@12 -RtlUpcaseUnicodeToCustomCPN@24 -RtlUpcaseUnicodeToMultiByteN@20 -RtlUpcaseUnicodeToOemN@20 -RtlUpperChar@4 -RtlUpperString@8 -@RtlUshortByteSwap@4 -RtlValidRelativeSecurityDescriptor@12 -RtlValidSecurityDescriptor@4 -RtlValidSid@4 -RtlVerifyVersionInfo@16 -RtlVolumeDeviceToDosName@8 -RtlWalkFrameChain@12 -RtlWriteRegistryValue@24 -RtlZeroHeap@8 -RtlZeroMemory@8 -RtlxAnsiStringToUnicodeSize@4 -RtlxOemStringToUnicodeSize@4 -RtlxUnicodeStringToAnsiSize@4 -RtlxUnicodeStringToOemSize@4 -SeAccessCheck@40 -SeAppendPrivileges@8 -SeAssignSecurity@28 -SeAssignSecurityEx@36 -SeAuditHardLinkCreation@12 -SeAuditingFileEvents@8 -SeAuditingFileEventsWithContext@12 -SeAuditingFileOrGlobalEvents@12 -SeAuditingHardLinkEvents@8 -SeAuditingHardLinkEventsWithContext@12 -SeCaptureSecurityDescriptor@20 -SeCaptureSubjectContext@4 -SeCloseObjectAuditAlarm@12 -SeCreateAccessState@16 -SeCreateClientSecurity@16 -SeCreateClientSecurityFromSubjectContext@16 -SeDeassignSecurity@4 -SeDeleteAccessState@4 -SeDeleteObjectAuditAlarm@8 -SeExports DATA -SeFilterToken@24 -SeFreePrivileges@4 -SeImpersonateClient@8 -SeImpersonateClientEx@8 -SeLockSubjectContext@4 -SeMarkLogonSessionForTerminationNotification@4 -SeOpenObjectAuditAlarm@36 -SeOpenObjectForDeleteAuditAlarm@36 -SePrivilegeCheck@12 -SePrivilegeObjectAuditAlarm@24 -SePublicDefaultDacl DATA -SeQueryAuthenticationIdToken@8 -SeQueryInformationToken@12 -SeQuerySecurityDescriptorInfo@16 -SeQuerySessionIdToken@8 -SeRegisterLogonSessionTerminatedRoutine@4 -SeReleaseSecurityDescriptor@12 -SeReleaseSubjectContext@4 -SeSetAccessStateGenericMapping@8 -;SeSetAuditParameter -SeSetSecurityDescriptorInfo@24 -SeSetSecurityDescriptorInfoEx@28 -SeSinglePrivilegeCheck@12 -SeSystemDefaultDacl DATA -SeTokenImpersonationLevel@4 -SeTokenIsAdmin@4 -SeTokenIsRestricted@4 -SeTokenIsWriteRestricted@4 -SeTokenType@4 -SeUnlockSubjectContext@4 -SeUnregisterLogonSessionTerminatedRoutine@4 -SeValidSecurityDescriptor@8 -VerSetConditionMask@16 -;VfFailDeviceNode -;VfFailDriver -;VfFailSystemBIOS -;VfIsVerificationEnabled -WRITE_REGISTER_BUFFER_UCHAR@12 -WRITE_REGISTER_BUFFER_ULONG@12 -WRITE_REGISTER_BUFFER_USHORT@12 -WRITE_REGISTER_UCHAR@8 -WRITE_REGISTER_ULONG@8 -WRITE_REGISTER_USHORT@8 -;WmiFlushTrace -;WmiGetClock -;WmiQueryTrace -;WmiQueryTraceInformation -;WmiStartTrace -;WmiStopTrace -;WmiTraceFastEvent -;WmiTraceMessage -;WmiTraceMessageVa -;WmiUpdateTrace -;XIPDispatch -ZwAccessCheckAndAuditAlarm@44 -ZwAddBootEntry@8 -ZwAddDriverEntry@8 -ZwAdjustPrivilegesToken@24 -ZwAlertThread@4 -ZwAllocateVirtualMemory@24 -ZwAssignProcessToJobObject@8 -ZwCancelIoFile@8 -ZwCancelTimer@8 -ZwClearEvent@4 -ZwClose@4 -ZwCloseObjectAuditAlarm@12 -ZwConnectPort@32 -ZwCreateDirectoryObject@12 -ZwCreateEvent@20 -ZwCreateFile@44 -ZwCreateJobObject@12 -ZwCreateKey@28 -ZwCreateSection@28 -ZwCreateSymbolicLinkObject@16 -ZwCreateTimer@16 -ZwDeleteBootEntry@4 -ZwDeleteDriverEntry@4 -ZwDeleteFile@4 -ZwDeleteKey@4 -ZwDeleteValueKey@8 -ZwDeviceIoControlFile@40 -ZwDisplayString@4 -ZwDuplicateObject@28 -ZwDuplicateToken@24 -ZwEnumerateBootEntries@8 -ZwEnumerateDriverEntries@8 -ZwEnumerateKey@24 -ZwEnumerateValueKey@24 -ZwFlushInstructionCache@12 -ZwFlushKey@4 -ZwFlushVirtualMemory@16 -ZwFreeVirtualMemory@16 -ZwFsControlFile@40 -ZwInitiatePowerAction@16 -ZwIsProcessInJob@8 -ZwLoadDriver@4 -ZwLoadKey@8 -ZwMakeTemporaryObject@4 -ZwMapViewOfSection@40 -ZwModifyBootEntry@4 -ZwModifyDriverEntry@4 -ZwNotifyChangeKey@40 -ZwOpenDirectoryObject@12 -ZwOpenEvent@12 -ZwOpenFile@24 -ZwOpenJobObject@12 -ZwOpenKey@12 -ZwOpenProcess@16 -ZwOpenProcessToken@12 -ZwOpenProcessTokenEx@16 -ZwOpenSection@12 -ZwOpenSymbolicLinkObject@12 -ZwOpenThread@16 -ZwOpenThreadToken@16 -ZwOpenThreadTokenEx@20 -ZwOpenTimer@12 -ZwPowerInformation@20 -ZwPulseEvent@8 -ZwQueryBootEntryOrder@8 -ZwQueryBootOptions@8 -ZwQueryDefaultLocale@8 -ZwQueryDefaultUILanguage@4 -ZwQueryDirectoryFile@44 -ZwQueryDirectoryObject@28 -ZwQueryDriverEntryOrder@8 -ZwQueryEaFile@36 -ZwQueryFullAttributesFile@8 -ZwQueryInformationAtom@20 -ZwQueryInformationFile@20 -ZwQueryInformationJobObject@20 -ZwQueryInformationProcess@20 -ZwQueryInformationThread@20 -ZwQueryInformationToken@20 -ZwQueryInstallUILanguage@4 -ZwQueryKey@20 -ZwQueryObject@20 -ZwQuerySection@20 -ZwQuerySecurityObject@20 -ZwQuerySymbolicLinkObject@12 -ZwQuerySystemInformation@16 -ZwQueryValueKey@24 -ZwQueryVolumeInformationFile@20 -ZwReadFile@36 -ZwReplaceKey@12 -ZwRequestWaitReplyPort@12 -ZwResetEvent@8 -ZwRestoreKey@12 -ZwSaveKey@8 -ZwSaveKeyEx@12 -ZwSecureConnectPort@36 -ZwSetBootEntryOrder@8 -ZwSetBootOptions@8 -ZwSetDefaultLocale@8 -ZwSetDefaultUILanguage@4 -ZwSetDriverEntryOrder@8 -ZwSetEaFile@16 -ZwSetEvent@8 -ZwSetInformationFile@20 -ZwSetInformationJobObject@16 -ZwSetInformationObject@16 -ZwSetInformationProcess@16 -ZwSetInformationThread@16 -ZwSetSecurityObject@12 -ZwSetSystemInformation@12 -ZwSetSystemTime@8 -ZwSetTimer@28 -ZwSetValueKey@24 -ZwSetVolumeInformationFile@20 -ZwTerminateJobObject@8 -ZwTerminateProcess@8 -ZwTranslateFilePath@16 -ZwUnloadDriver@4 -ZwUnloadKey@4 -ZwUnmapViewOfSection@8 -ZwWaitForMultipleObjects@20 -ZwWaitForSingleObject@12 -ZwWriteFile@36 -ZwYieldExecution@0 -;_CIcos -;_CIsin -;_CIsqrt -_abnormal_termination -_alldiv -_alldvrm -_allmul -_alloca_probe -_allrem -_allshl -_allshr -_aulldiv -_aulldvrm -_aullrem -_aullshr -_except_handler2 -_except_handler3 -_global_unwind2 -_itoa -_itow -_local_unwind2 -_purecall -_snprintf -_snwprintf -_stricmp -_strlwr -_strnicmp -_strnset -_strrev -_strset -_strupr -_vsnprintf -_vsnwprintf -_wcsicmp -_wcslwr -_wcsnicmp -_wcsnset -_wcsrev -_wcsupr -atoi -atol -isdigit -islower -isprint -isspace -isupper -isxdigit -mbstowcs -mbtowc -memchr -memcpy -memmove -memset -qsort -rand -sprintf -srand -strcat -strchr -strcmp -strcpy -strlen -strncat -strncmp -strncpy -strrchr -strspn -strstr -swprintf -tolower -toupper -towlower -towupper -vDbgPrintEx -vDbgPrintExWithPrefix -vsprintf -wcscat -wcschr -wcscmp -wcscpy -wcscspn -wcslen -wcsncat -wcsncmp -wcsncpy -wcsrchr -wcsspn -wcsstr -wcstombs -wctomb From 0cf60adb98b74be73882f6722be11522b6db78fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 10 Aug 2008 11:33:33 +0000 Subject: [PATCH 258/304] On newer versions, vDbgPrintEx and vDbgPrintExWithPrefix are stdcall, not cdecl svn path=/trunk/; revision=35262 --- reactos/include/ddk/winddk.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/include/ddk/winddk.h b/reactos/include/ddk/winddk.h index da2dfe0e1f4..3a658aac111 100644 --- a/reactos/include/ddk/winddk.h +++ b/reactos/include/ddk/winddk.h @@ -11091,7 +11091,7 @@ DbgPrintEx( IN ...); ULONG -DDKCDECLAPI +NTAPI vDbgPrintEx( IN ULONG ComponentId, IN ULONG Level, @@ -11099,7 +11099,7 @@ vDbgPrintEx( IN va_list ap); ULONG -DDKCDECLAPI +NTAPI vDbgPrintExWithPrefix( IN LPCSTR Prefix, IN ULONG ComponentId, From b2a074adbf7ba39db3465f09073b368f407004f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Sun, 10 Aug 2008 11:42:31 +0000 Subject: [PATCH 259/304] Limit use of -enable-stdcall-fixup to mesa32, msvcrt and riched20 modules svn path=/trunk/; revision=35263 --- reactos/ReactOS-i386.rbuild | 2 +- reactos/dll/3rdparty/mesa32/mesa32.rbuild | 1 + reactos/dll/win32/msvcrt/msvcrt.rbuild | 1 + reactos/dll/win32/riched20/riched20.rbuild | 1 + 4 files changed, 4 insertions(+), 1 deletion(-) diff --git a/reactos/ReactOS-i386.rbuild b/reactos/ReactOS-i386.rbuild index e3d45283b02..8ddfbb57622 100644 --- a/reactos/ReactOS-i386.rbuild +++ b/reactos/ReactOS-i386.rbuild @@ -37,6 +37,6 @@ -fno-strict-aliasing -Wno-strict-aliasing -Wpointer-arith - -enable-stdcall-fixup + -disable-stdcall-fixup diff --git a/reactos/dll/3rdparty/mesa32/mesa32.rbuild b/reactos/dll/3rdparty/mesa32/mesa32.rbuild index 77e1ade8565..5afb01eb1ba 100644 --- a/reactos/dll/3rdparty/mesa32/mesa32.rbuild +++ b/reactos/dll/3rdparty/mesa32/mesa32.rbuild @@ -2,6 +2,7 @@ + -enable-stdcall-fixup ntdll kernel32 msvcrt diff --git a/reactos/dll/win32/msvcrt/msvcrt.rbuild b/reactos/dll/win32/msvcrt/msvcrt.rbuild index a5a985284b9..cbacf30cd67 100644 --- a/reactos/dll/win32/msvcrt/msvcrt.rbuild +++ b/reactos/dll/win32/msvcrt/msvcrt.rbuild @@ -11,6 +11,7 @@ + -enable-stdcall-fixup diff --git a/reactos/dll/win32/riched20/riched20.rbuild b/reactos/dll/win32/riched20/riched20.rbuild index 736d3a3b520..e01a41bb17b 100644 --- a/reactos/dll/win32/riched20/riched20.rbuild +++ b/reactos/dll/win32/riched20/riched20.rbuild @@ -8,6 +8,7 @@ 0x600 0x600 + -enable-stdcall-fixup caret.c clipboard.c context.c From 197cc3f6341f153a0678fe93c85c4f7e6f2d6aa6 Mon Sep 17 00:00:00 2001 From: Ged Murphy Date: Sun, 10 Aug 2008 13:06:58 +0000 Subject: [PATCH 260/304] Give Techbot the ability to check for and ghost existing bots, then rename itself svn path=/trunk/; revision=35264 --- irc/TechBot/TechBot.IRCLibrary/IRC.cs | 4 +- irc/TechBot/TechBot.IRCLibrary/IrcClient.cs | 91 ++++++++++++++++++- .../TechBot.Library/TechBotIrcService.cs | 12 ++- 3 files changed, 99 insertions(+), 8 deletions(-) diff --git a/irc/TechBot/TechBot.IRCLibrary/IRC.cs b/irc/TechBot/TechBot.IRCLibrary/IRC.cs index f125ecea6d1..ca85f08fd7b 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IRC.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IRC.cs @@ -17,10 +17,12 @@ namespace TechBot.IRCLibrary public const string PRIVMSG = "PRIVMSG"; public const string USER = "USER"; public const string PASS = "PASS"; - public const string GHOST = "MSG NICKSERV GHOST"; + public const string GHOST = "NICKSERV GHOST"; + public const string NOTICE = "NOTICE"; public const string RPL_NAMREPLY = "353"; public const string RPL_ENDOFNAMES = "366"; + public const string ERR_NICKNAMEINUSE = "433"; #endregion diff --git a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs index 6682bd7c4e4..361071507ce 100644 --- a/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs +++ b/irc/TechBot/TechBot.IRCLibrary/IrcClient.cs @@ -191,6 +191,7 @@ namespace TechBot.IRCLibrary #region Private fields private bool firstPingReceived = false; + private bool awaitingGhostDeath = false; private System.Text.Encoding encoding = System.Text.Encoding.UTF8; private TcpClient tcpClient; private NetworkStream networkStream; @@ -198,6 +199,9 @@ namespace TechBot.IRCLibrary private LineBuffer messageStream; private ArrayList ircCommandEventRegistrations = new ArrayList(); private ArrayList channels = new ArrayList(); + private string reqNickname; + private string curNickname; + private string password; #endregion #region Public events @@ -240,6 +244,16 @@ namespace TechBot.IRCLibrary } } + /// + /// Nickname for the bot. + /// + public string Nickname + { + get + { + return curNickname; + } + } #endregion #region Private methods @@ -361,6 +375,24 @@ namespace TechBot.IRCLibrary firstPingReceived = true; } + /// + /// Send a PONG message when a PING message is received. + /// + /// Received IRC message. + private void NoticeMessageReceived(IrcMessage message) + { + if (awaitingGhostDeath) + { + string str = string.Format("{0} has been ghosted", reqNickname); + if (message.Parameters.Contains(str)) + { + ChangeNick(reqNickname); + SubmitPassword(password); + awaitingGhostDeath = false; + } + } + } + /// /// Process RPL_NAMREPLY message. /// @@ -472,6 +504,31 @@ namespace TechBot.IRCLibrary } } + /// + /// Process ERR_NICKNAMEINUSE message. + /// + /// Received IRC message. + private void ERR_NICKNAMEINUSEMessageReceived(IrcMessage message) + { + try + { + if (message.Parameters == null) + { + System.Diagnostics.Debug.WriteLine(String.Format("Message has no parameters.")); + return; + } + + /* Connect with a different name */ + string[] parameters = message.Parameters.Split(new char[] { ' ' }); + string nickname = parameters[1]; + ChangeNick(nickname + "__"); + } + catch (Exception ex) + { + System.Diagnostics.Debug.WriteLine(String.Format("Ex. {0}", ex)); + } + } + #endregion /// @@ -500,10 +557,14 @@ namespace TechBot.IRCLibrary } /* Install PING message handler */ MonitorCommand(IRC.PING, new MessageReceivedHandler(PingMessageReceived)); + /* Install NOTICE message handler */ + MonitorCommand(IRC.NOTICE, new MessageReceivedHandler(NoticeMessageReceived)); /* Install RPL_NAMREPLY message handler */ MonitorCommand(IRC.RPL_NAMREPLY, new MessageReceivedHandler(RPL_NAMREPLYMessageReceived)); /* Install RPL_ENDOFNAMES message handler */ MonitorCommand(IRC.RPL_ENDOFNAMES, new MessageReceivedHandler(RPL_ENDOFNAMESMessageReceived)); + /* Install ERR_NICKNAMEINUSE message handler */ + MonitorCommand(IRC.ERR_NICKNAMEINUSE, new MessageReceivedHandler(ERR_NICKNAMEINUSEMessageReceived)); /* Start receiving data */ Receive(); } @@ -520,8 +581,6 @@ namespace TechBot.IRCLibrary } else { - - connected = false; tcpClient.Close(); tcpClient = null; @@ -606,10 +665,32 @@ namespace TechBot.IRCLibrary if (nickname == null) throw new ArgumentNullException("nickname", "Nickname cannot be null."); + Console.WriteLine("Changing nick to {0}\n", nickname); + curNickname = nickname; + /* NICK [ ] */ SendMessage(new IrcMessage(IRC.NICK, nickname)); } + /// + /// Ghost nickname. + /// + /// Nickname. + public void GhostNick(string nickname, + string password) + { + if (nickname == null) + throw new ArgumentNullException("nickname", "Nickname cannot be null."); + + if (password == null) + throw new ArgumentNullException("password", "Password cannot be null."); + + awaitingGhostDeath = true; + + /* GHOST */ + SendMessage(new IrcMessage(IRC.GHOST, nickname + " " + password)); + } + /// /// Submit password to identify user. /// @@ -619,6 +700,8 @@ namespace TechBot.IRCLibrary if (password == null) throw new ArgumentNullException("password", "Password cannot be null."); + this.password = password; + /* PASS */ SendMessage(new IrcMessage(IRC.PASS, password)); } @@ -635,12 +718,10 @@ namespace TechBot.IRCLibrary { if (nickname == null) throw new ArgumentNullException("nickname", "Nickname cannot be null."); + reqNickname = nickname; firstPingReceived = false; if (password != null) { - /* First ghost ourself and then register */ - if (nickname != null) - SendMessage(new IrcMessage(IRC.GHOST, nickname + " " + password)); SubmitPassword(password); } ChangeNick(nickname); diff --git a/irc/TechBot/TechBot.Library/TechBotIrcService.cs b/irc/TechBot/TechBot.Library/TechBotIrcService.cs index 238261cec5a..2a51374d330 100644 --- a/irc/TechBot/TechBot.Library/TechBotIrcService.cs +++ b/irc/TechBot/TechBot.Library/TechBotIrcService.cs @@ -88,7 +88,15 @@ namespace TechBot.Library m_IrcClient.Connect(hostname, port); m_IrcClient.Register(botname, password, null); - Console.WriteLine("Registered as {0}...", botname); + Console.WriteLine("Registered as {0}...", m_IrcClient.Nickname); + + /* Did we get the nick we wanted? */ + if (m_IrcClient.Nickname != botname) + { + /* there must have been an existing one, kill it */ + m_IrcClient.GhostNick(botname, password);; + } + JoinChannels(); while (!isStopped) @@ -279,7 +287,7 @@ namespace TechBot.Library injectMessage, GetMessageSource(context))); InjectMessage(context, - injectMessage); + injectMessage); } else { From 044c66916e6a28e247780cc3524283f100fc3ca1 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 10 Aug 2008 16:25:26 +0000 Subject: [PATCH 261/304] - Fix dxtn build. svn path=/trunk/; revision=35265 --- reactos/dll/3rdparty/dxtn/internal.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/3rdparty/dxtn/internal.h b/reactos/dll/3rdparty/dxtn/internal.h index e5aad300363..b7e01dbe938 100644 --- a/reactos/dll/3rdparty/dxtn/internal.h +++ b/reactos/dll/3rdparty/dxtn/internal.h @@ -29,7 +29,7 @@ #ifdef __WIN32__ #define TAPI __declspec(dllexport) -#define TAPIENTRY /*__stdcall*/ +#define TAPIENTRY __stdcall #else #define TAPI #define TAPIENTRY From a4bc39749862a31f0108957c39b3f7ed556280eb Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Sun, 10 Aug 2008 18:06:21 +0000 Subject: [PATCH 262/304] - .def -> .spec svn path=/trunk/; revision=35266 --- .../applications/screensavers/blankscr/blankscr.rbuild | 3 ++- .../applications/screensavers/blankscr/scrnsave.def | 5 ----- .../applications/screensavers/blankscr/scrnsave.spec | 2 ++ .../screensavers/butterflies/butterflies.def | 10 ---------- .../screensavers/butterflies/butterflies.rbuild | 3 ++- .../screensavers/butterflies/butterflies.spec | 2 ++ 6 files changed, 8 insertions(+), 17 deletions(-) delete mode 100644 rosapps/applications/screensavers/blankscr/scrnsave.def create mode 100644 rosapps/applications/screensavers/blankscr/scrnsave.spec delete mode 100644 rosapps/applications/screensavers/butterflies/butterflies.def create mode 100644 rosapps/applications/screensavers/butterflies/butterflies.spec diff --git a/rosapps/applications/screensavers/blankscr/blankscr.rbuild b/rosapps/applications/screensavers/blankscr/blankscr.rbuild index c6960894245..6b7ca7af67b 100644 --- a/rosapps/applications/screensavers/blankscr/blankscr.rbuild +++ b/rosapps/applications/screensavers/blankscr/blankscr.rbuild @@ -1,7 +1,7 @@ - + scrnsave kernel32 user32 @@ -9,4 +9,5 @@ scrnsave.c scrnsave.rc + scrnsave.spec diff --git a/rosapps/applications/screensavers/blankscr/scrnsave.def b/rosapps/applications/screensavers/blankscr/scrnsave.def deleted file mode 100644 index ff549fee676..00000000000 --- a/rosapps/applications/screensavers/blankscr/scrnsave.def +++ /dev/null @@ -1,5 +0,0 @@ -NAME blankscr.SCR - -EXPORTS - ScreenSaverProc - ScreenSaverConfigureDialog diff --git a/rosapps/applications/screensavers/blankscr/scrnsave.spec b/rosapps/applications/screensavers/blankscr/scrnsave.spec new file mode 100644 index 00000000000..ac72010d393 --- /dev/null +++ b/rosapps/applications/screensavers/blankscr/scrnsave.spec @@ -0,0 +1,2 @@ +@ stdcall ScreenSaverProc(ptr long ptr ptr) +@ stdcall ScreenSaverConfigureDialog(ptr long ptr ptr) diff --git a/rosapps/applications/screensavers/butterflies/butterflies.def b/rosapps/applications/screensavers/butterflies/butterflies.def deleted file mode 100644 index 0f37ad2e775..00000000000 --- a/rosapps/applications/screensavers/butterflies/butterflies.def +++ /dev/null @@ -1,10 +0,0 @@ -NAME butterflies.SCR - -DESCRIPTION 'OpenGL Butterflies screen saver' - -HEAPSIZE 1024 -STACKSIZE 4096 - -EXPORTS - ScreenSaverProc - ScreenSaverConfigureDialog diff --git a/rosapps/applications/screensavers/butterflies/butterflies.rbuild b/rosapps/applications/screensavers/butterflies/butterflies.rbuild index 8da00a1e968..19a55edf7fd 100644 --- a/rosapps/applications/screensavers/butterflies/butterflies.rbuild +++ b/rosapps/applications/screensavers/butterflies/butterflies.rbuild @@ -1,7 +1,7 @@ - + . scrnsave kernel32 @@ -16,4 +16,5 @@ butterflies.c butterflies.rc + butterflies.spec diff --git a/rosapps/applications/screensavers/butterflies/butterflies.spec b/rosapps/applications/screensavers/butterflies/butterflies.spec new file mode 100644 index 00000000000..ac72010d393 --- /dev/null +++ b/rosapps/applications/screensavers/butterflies/butterflies.spec @@ -0,0 +1,2 @@ +@ stdcall ScreenSaverProc(ptr long ptr ptr) +@ stdcall ScreenSaverConfigureDialog(ptr long ptr ptr) From 30b9ab966fa65a1cb0e9d0d238a1c89ad7e2989a Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Mon, 11 Aug 2008 00:02:26 +0000 Subject: [PATCH 263/304] Merge aicom-network-fixes up to 35260 svn path=/trunk/; revision=35267 --- reactos/drivers/network/afd/afd/select.c | 11 ++--- reactos/drivers/network/afd/afd/tdi.c | 2 - reactos/drivers/network/afd/include/afd.h | 49 +++++++++++++++++++++++ 3 files changed, 55 insertions(+), 7 deletions(-) diff --git a/reactos/drivers/network/afd/afd/select.c b/reactos/drivers/network/afd/afd/select.c index 109a519ade2..1888340cd3d 100644 --- a/reactos/drivers/network/afd/afd/select.c +++ b/reactos/drivers/network/afd/afd/select.c @@ -85,6 +85,7 @@ static VOID SignalSocket( PollReq->Handles[i].Status)); } UnlockHandles( AFD_HANDLES(PollReq), PollReq->HandleCount ); + if( Irp->MdlAddress ) UnlockRequest( Irp, IoGetCurrentIrpStackLocation( Irp ) ); AFD_DbgPrint(MID_TRACE,("Completing\n")); IoCompleteRequest( Irp, IO_NETWORK_INCREMENT ); AFD_DbgPrint(MID_TRACE,("Done\n")); @@ -391,6 +392,11 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) { /* Take care of any event select signalling */ FCB = (PAFD_FCB)FileObject->FsContext; + if( !FCB ) { + KeReleaseSpinLock( &DeviceExt->Lock, OldIrql ); + return; + } + /* Not sure if i can do this at DISPATCH_LEVEL ... try it at passive */ AFD_DbgPrint(MID_TRACE,("Current State: %x, Events Fired: %x, " "Select Triggers %x\n", @@ -401,11 +407,6 @@ VOID PollReeval( PAFD_DEVICE_EXTENSION DeviceExt, PFILE_OBJECT FileObject ) { EventSelect = FCB->EventSelect; } - if( !FCB ) { - KeReleaseSpinLock( &DeviceExt->Lock, OldIrql ); - return; - } - /* Now signal normal select irps */ ThePollEnt = DeviceExt->Polls.Flink; diff --git a/reactos/drivers/network/afd/afd/tdi.c b/reactos/drivers/network/afd/afd/tdi.c index 93701ab5cd8..925a07277fe 100644 --- a/reactos/drivers/network/afd/afd/tdi.c +++ b/reactos/drivers/network/afd/afd/tdi.c @@ -631,7 +631,6 @@ NTSTATUS TdiQueryInformation( return Status; } -#if 0 NTSTATUS TdiQueryInformationEx( PFILE_OBJECT FileObject, ULONG Entity, @@ -807,7 +806,6 @@ NTSTATUS TdiQueryAddress( return Status; } -#endif NTSTATUS TdiSend ( PIRP *Irp, diff --git a/reactos/drivers/network/afd/include/afd.h b/reactos/drivers/network/afd/include/afd.h index 285907a60af..e77d64bf598 100644 --- a/reactos/drivers/network/afd/include/afd.h +++ b/reactos/drivers/network/afd/include/afd.h @@ -28,6 +28,55 @@ #define MIN(x,y) (((x)<(y))?(x):(y)) #endif +#define IOCTL_TCP_QUERY_INFORMATION_EX \ + CTL_CODE(FILE_DEVICE_NETWORK, 0, METHOD_NEITHER, FILE_ANY_ACCESS) + +#define TL_INSTANCE 0 +#define IP_MIB_STATS_ID 1 +#define IP_MIB_ADDRTABLE_ENTRY_ID 0x102 + +typedef struct IPSNMP_INFO { + ULONG Forwarding; + ULONG DefaultTTL; + ULONG InReceives; + ULONG InHdrErrors; + ULONG InAddrErrors; + ULONG ForwDatagrams; + ULONG InUnknownProtos; + ULONG InDiscards; + ULONG InDelivers; + ULONG OutRequests; + ULONG RoutingDiscards; + ULONG OutDiscards; + ULONG OutNoRoutes; + ULONG ReasmTimeout; + ULONG ReasmReqds; + ULONG ReasmOks; + ULONG ReasmFails; + ULONG FragOks; + ULONG FragFails; + ULONG FragCreates; + ULONG NumIf; + ULONG NumAddr; + ULONG NumRoutes; +} IPSNMP_INFO, *PIPSNMP_INFO; + +typedef struct IPADDR_ENTRY { + ULONG Addr; + ULONG Index; + ULONG Mask; + ULONG BcastAddr; + ULONG ReasmSize; + USHORT Context; + USHORT Pad; +} IPADDR_ENTRY, *PIPADDR_ENTRY; + +#define DN2H(dw) \ + ((((dw) & 0xFF000000L) >> 24) | \ + (((dw) & 0x00FF0000L) >> 8) | \ + (((dw) & 0x0000FF00L) << 8) | \ + (((dw) & 0x000000FFL) << 24)) + #define SOCKET_STATE_INVALID_TRANSITION ((DWORD)-1) #define SOCKET_STATE_CREATED 0 #define SOCKET_STATE_BOUND 1 From 87e74cda2147f161cd3daf8f6a8405c5352ac428 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Mon, 11 Aug 2008 08:40:52 +0000 Subject: [PATCH 264/304] - NDK Fix: DirectoryTableBase member of KPROCESS is ULONG[2] and not LARGE_INTEGER since Windows 2000 ("Inside Windows 2000", Chapter 6), and till Windows 2003. svn path=/trunk/; revision=35269 --- reactos/include/ndk/ketypes.h | 2 +- reactos/ntoskrnl/include/internal/ke.h | 2 +- reactos/ntoskrnl/include/internal/mm.h | 4 +-- reactos/ntoskrnl/ke/i386/kiinit.c | 7 ++--- reactos/ntoskrnl/ke/procobj.c | 5 ++-- reactos/ntoskrnl/mm/i386/page.c | 37 ++++++++++++-------------- reactos/ntoskrnl/mm/mminit.c | 6 ++--- reactos/ntoskrnl/ps/process.c | 8 +++--- 8 files changed, 35 insertions(+), 36 deletions(-) diff --git a/reactos/include/ndk/ketypes.h b/reactos/include/ndk/ketypes.h index ea91b01da36..f7b7b9a3f33 100644 --- a/reactos/include/ndk/ketypes.h +++ b/reactos/include/ndk/ketypes.h @@ -955,7 +955,7 @@ typedef struct _KPROCESS ULONG DirectoryTableBase; ULONG Unused0; #else - LARGE_INTEGER DirectoryTableBase; + ULONG DirectoryTableBase[2]; #endif #if defined(_M_IX86) KGDTENTRY LdtDescriptor; diff --git a/reactos/ntoskrnl/include/internal/ke.h b/reactos/ntoskrnl/include/internal/ke.h index d3f2a5f5efe..4dfb18a0e62 100644 --- a/reactos/ntoskrnl/include/internal/ke.h +++ b/reactos/ntoskrnl/include/internal/ke.h @@ -537,7 +537,7 @@ KeInitializeProcess( struct _KPROCESS *Process, KPRIORITY Priority, KAFFINITY Affinity, - PLARGE_INTEGER DirectoryTableBase, + PULONG DirectoryTableBase, IN BOOLEAN Enable ); diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index fb3ef149bf2..49b336ca92c 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1275,14 +1275,14 @@ NTAPI MmCreateProcessAddressSpace( IN ULONG MinWs, IN PEPROCESS Dest, - IN PLARGE_INTEGER DirectoryTableBase + IN PULONG DirectoryTableBase ); NTSTATUS NTAPI MmInitializeHandBuiltProcess( IN PEPROCESS Process, - IN PLARGE_INTEGER DirectoryTableBase + IN PULONG DirectoryTableBase ); diff --git a/reactos/ntoskrnl/ke/i386/kiinit.c b/reactos/ntoskrnl/ke/i386/kiinit.c index 3ec1695aa3e..a87d09638f7 100644 --- a/reactos/ntoskrnl/ke/i386/kiinit.c +++ b/reactos/ntoskrnl/ke/i386/kiinit.c @@ -391,7 +391,7 @@ KiInitializeKernel(IN PKPROCESS InitProcess, { BOOLEAN NpxPresent; ULONG FeatureBits; - LARGE_INTEGER PageDirectory; + ULONG PageDirectory[2]; PVOID DpcStack; ULONG Vendor[3]; @@ -503,11 +503,12 @@ KiInitializeKernel(IN PKPROCESS InitProcess, /* Initialize the Idle Process and the Process Listhead */ InitializeListHead(&KiProcessListHead); - PageDirectory.QuadPart = 0; + PageDirectory[0] = 0; + PageDirectory[1] = 0; KeInitializeProcess(InitProcess, 0, 0xFFFFFFFF, - &PageDirectory, + PageDirectory, FALSE); InitProcess->QuantumReset = MAXCHAR; } diff --git a/reactos/ntoskrnl/ke/procobj.c b/reactos/ntoskrnl/ke/procobj.c index 87826d3dd74..114554b1fb1 100644 --- a/reactos/ntoskrnl/ke/procobj.c +++ b/reactos/ntoskrnl/ke/procobj.c @@ -115,7 +115,7 @@ NTAPI KeInitializeProcess(IN OUT PKPROCESS Process, IN KPRIORITY Priority, IN KAFFINITY Affinity, - IN PLARGE_INTEGER DirectoryTableBase, + IN PULONG DirectoryTableBase, IN BOOLEAN Enable) { #ifdef CONFIG_SMP @@ -134,7 +134,8 @@ KeInitializeProcess(IN OUT PKPROCESS Process, Process->Affinity = Affinity; Process->BasePriority = (CHAR)Priority; Process->QuantumReset = 6; - Process->DirectoryTableBase = *DirectoryTableBase; + Process->DirectoryTableBase[0] = DirectoryTableBase[0]; + Process->DirectoryTableBase[1] = DirectoryTableBase[1]; Process->AutoAlignment = Enable; #if defined(_M_IX86) Process->IopmOffset = KiComputeIopmOffset(IO_ACCESS_MAP_NONE); diff --git a/reactos/ntoskrnl/mm/i386/page.c b/reactos/ntoskrnl/mm/i386/page.c index 1fcba4f853e..36713e7deac 100644 --- a/reactos/ntoskrnl/mm/i386/page.c +++ b/reactos/ntoskrnl/mm/i386/page.c @@ -162,7 +162,7 @@ Mmi386ReleaseMmInfo(PEPROCESS Process) ExFreePool((PVOID) LdtBase); } - PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); + PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); for (i = 0; i < ADDR_TO_PDE_OFFSET(MmSystemRangeStart); i++) { if (PageDir[i] != 0) @@ -173,16 +173,11 @@ Mmi386ReleaseMmInfo(PEPROCESS Process) } MmReleasePageMemoryConsumer(MC_NPPOOL, PTE_TO_PFN(PageDir[ADDR_TO_PDE_OFFSET(HYPERSPACE)])); MmDeleteHyperspaceMapping(PageDir); - MmReleasePageMemoryConsumer(MC_NPPOOL, PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); - -#if defined(__GNUC__) - - Process->Pcb.DirectoryTableBase.QuadPart = 0LL; -#else - - Process->Pcb.DirectoryTableBase.QuadPart = 0; -#endif - + MmReleasePageMemoryConsumer(MC_NPPOOL, PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); + + Process->Pcb.DirectoryTableBase[0] = 0; + Process->Pcb.DirectoryTableBase[1] = 0; + DPRINT("Finished Mmi386ReleaseMmInfo()\n"); return(STATUS_SUCCESS); } @@ -190,15 +185,16 @@ Mmi386ReleaseMmInfo(PEPROCESS Process) NTSTATUS NTAPI MmInitializeHandBuiltProcess(IN PEPROCESS Process, - IN PLARGE_INTEGER DirectoryTableBase) + IN PULONG DirectoryTableBase) { /* Share the directory base with the idle process */ - *DirectoryTableBase = PsGetCurrentProcess()->Pcb.DirectoryTableBase; - + DirectoryTableBase[0] = PsGetCurrentProcess()->Pcb.DirectoryTableBase[0]; + DirectoryTableBase[1] = PsGetCurrentProcess()->Pcb.DirectoryTableBase[1]; + /* Initialize the Addresss Space */ KeInitializeGuardedMutex(&Process->AddressCreationLock); Process->VadRoot.BalancedRoot.u1.Parent = NULL; - + /* The process now has an address space */ Process->HasAddressSpace = TRUE; return STATUS_SUCCESS; @@ -208,7 +204,7 @@ BOOLEAN STDCALL MmCreateProcessAddressSpace(IN ULONG MinWs, IN PEPROCESS Process, - IN PLARGE_INTEGER DirectoryTableBase) + IN PULONG DirectoryTableBase) { NTSTATUS Status; ULONG i, j; @@ -243,8 +239,9 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, MmDeleteHyperspaceMapping(PageDirectory); - DirectoryTableBase->QuadPart = PFN_TO_PTE(Pfn[0]); - DPRINT("Finished MmCopyMmInfo(): %I64x\n", DirectoryTableBase->QuadPart); + DirectoryTableBase[0] = PFN_TO_PTE(Pfn[0]); + DirectoryTableBase[1] = 0; + DPRINT("Finished MmCopyMmInfo(): 0x%x\n", DirectoryTableBase[0]); return TRUE; } @@ -329,7 +326,7 @@ MmGetPageTableForProcess(PEPROCESS Process, PVOID Address, BOOLEAN Create) if (Address < MmSystemRangeStart && Process && Process != PsGetCurrentProcess()) { - PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.LowPart)); + PageDir = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); if (PageDir == NULL) { KEBUGCHECK(0); @@ -1286,7 +1283,7 @@ MmUpdatePageDir(PEPROCESS Process, PVOID Address, ULONG Size) if (Process != NULL && Process != PsGetCurrentProcess()) { - Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase.u.LowPart)); + Pde = MmCreateHyperspaceMapping(PTE_TO_PFN(Process->Pcb.DirectoryTableBase[0])); } else { diff --git a/reactos/ntoskrnl/mm/mminit.c b/reactos/ntoskrnl/mm/mminit.c index b606a086a3b..54634da983a 100644 --- a/reactos/ntoskrnl/mm/mminit.c +++ b/reactos/ntoskrnl/mm/mminit.c @@ -368,13 +368,13 @@ NTAPI MmInit1(VOID) { PLDR_DATA_TABLE_ENTRY LdrEntry; - LARGE_INTEGER Dummy; + ULONG Dummy[2]; /* Dump memory descriptors */ if (MiDbgEnableMdDump) MiDbgDumpMemoryDescriptors(); /* Set the page directory */ - PsGetCurrentProcess()->Pcb.DirectoryTableBase.LowPart = (ULONG)MmGetPageDirectory(); + PsGetCurrentProcess()->Pcb.DirectoryTableBase[0] = (ULONG)MmGetPageDirectory(); /* Get the size of FreeLDR's image allocations */ MmBootImageSize = KeLoaderBlock->Extension->LoaderPagesSpanned; @@ -396,7 +396,7 @@ MmInit1(VOID) DbgPrint("Used memory %dKb\n", (MmNumberOfPhysicalPages * PAGE_SIZE) / 1024); /* Initialize the kernel address space */ - MmInitializeHandBuiltProcess(PsGetCurrentProcess(), &Dummy); + MmInitializeHandBuiltProcess(PsGetCurrentProcess(), Dummy); MmKernelAddressSpace = MmGetCurrentAddressSpace(); MmInitGlobalKernelPageDirectory(); diff --git a/reactos/ntoskrnl/ps/process.c b/reactos/ntoskrnl/ps/process.c index 035efcc02d8..3e549ff9bd8 100644 --- a/reactos/ntoskrnl/ps/process.c +++ b/reactos/ntoskrnl/ps/process.c @@ -365,7 +365,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, PDEBUG_OBJECT DebugObject; PSECTION_OBJECT SectionObject; NTSTATUS Status, AccessStatus; - PHYSICAL_ADDRESS DirectoryTableBase = {{0}}; + ULONG DirectoryTableBase[2] = {0,0}; KAFFINITY Affinity; HANDLE_TABLE_ENTRY CidEntry; PETHREAD CurrentThread = PsGetCurrentThread(); @@ -562,7 +562,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, /* Create the address space for the child */ if (!MmCreateProcessAddressSpace(MinWs, Process, - &DirectoryTableBase)) + DirectoryTableBase)) { /* Failed */ Status = STATUS_INSUFFICIENT_RESOURCES; @@ -573,7 +573,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, { /* Otherwise, we are the boot process, we're already semi-initialized */ Process->ObjectTable = CurrentProcess->ObjectTable; - Status = MmInitializeHandBuiltProcess(Process, &DirectoryTableBase); + Status = MmInitializeHandBuiltProcess(Process, DirectoryTableBase); if (!NT_SUCCESS(Status)) goto CleanupWithRef; } @@ -587,7 +587,7 @@ PspCreateProcess(OUT PHANDLE ProcessHandle, KeInitializeProcess(&Process->Pcb, PROCESS_PRIORITY_NORMAL, Affinity, - &DirectoryTableBase, + DirectoryTableBase, (BOOLEAN)(Process->DefaultHardErrorProcessing & 4)); /* Duplicate Parent Token */ From fe7a26fb3f463507e13e2746631dede6929226ff Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 11 Aug 2008 09:51:35 +0000 Subject: [PATCH 265/304] * implement restoring of a deleted file * use volume labels for storing bitbucket information * store a context for each drive * apply changes for each available drive svn path=/trunk/; revision=35270 --- reactos/dll/win32/shell32/recyclebin.c | 376 +++++++++++++++++++++---- 1 file changed, 328 insertions(+), 48 deletions(-) diff --git a/reactos/dll/win32/shell32/recyclebin.c b/reactos/dll/win32/shell32/recyclebin.c index 8e1d4c4c6cc..6e5d7e6adff 100644 --- a/reactos/dll/win32/shell32/recyclebin.c +++ b/reactos/dll/win32/shell32/recyclebin.c @@ -77,26 +77,6 @@ static const columninfo RecycleBinColumns[] = #define COLUMNS_COUNT 6 -static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft) -{ - FILETIME lft; - SYSTEMTIME time; - int ret; - - FileTimeToLocalFileTime(ft, &lft); - FileTimeToSystemTime(&lft, &time); - - ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); - if (ret>0 && retpFileDetails, dwSize); + if (!ret) + { + pContext->hDeletedFile = hDeletedFile; + pContext->bFound = TRUE; + } + else + CloseRecycleBinHandle(hDeletedFile); + + SHFree(pFileDetails); + return ret; +} + + BOOL WINAPI @@ -286,7 +332,6 @@ CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) LPITEMIDLIST pidl = NULL; BOOL ret; - TRACE("CBEnumBitBucket entered\n"); if (!GetDeletedFileDetailsW(hDeletedFile, 0, NULL, @@ -563,6 +608,26 @@ static HRESULT WINAPI RecycleBin_GetDetailsEx(IShellFolder2 *iface, LPCITEMIDLIS return E_NOTIMPL; } +static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft) +{ + FILETIME lft; + SYSTEMTIME time; + int ret; + + FileTimeToLocalFileTime(ft, &lft); + FileTimeToSystemTime(&lft, &time); + + ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); + if (ret>0 && ret(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + if (lpcmi->lpVerb == MAKEINTRESOURCE(1) || lpcmi->lpVerb == MAKEINTRESOURCE(5)) + { + Context.pFileDetails = _ILGetRecycleStruct(This->apidl); + Context.bFound = FALSE; + + EnumerateRecycleBinW(szDrive, CBSearchBitBucket, (PVOID)&Context); + if (!Context.bFound) + return E_FAIL; + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) + { + /* restore file */ + if (RestoreFile(Context.hDeletedFile)) + return S_OK; + else + return E_FAIL; + } + else + { + FIXME("implement delete\n"); + CloseRecycleBinHandle(Context.hDeletedFile); + return E_NOTIMPL; + } + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(3)) + { + FIXME("implement cut\n"); + return E_NOTIMPL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(7)) + { + FIXME("implement properties\n"); + return E_NOTIMPL; + } + return S_OK; } @@ -1098,9 +1201,10 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) WCHAR CurDrive = L'A'; WCHAR szDrive[] = L"A:\\"; DWORD dwDrives; - WCHAR szName[30]; + WCHAR szName[100]; WCHAR szVolume[100]; DWORD MaxComponent, Flags; + DWORD dwSerial; LVCOLUMNW lc; HWND hDlgCtrl; LVITEMW li; @@ -1109,7 +1213,8 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) RECT rect; int columnSize; int defIndex = 0; - DWORD dwNukeOnDelete, dwSize; + DWORD dwSize; + PDRIVE_ITEM_CONTEXT pItem = NULL, pDefault = NULL, pFirst = NULL; hDlgCtrl = GetDlgItem(hwndDlg, 14000); @@ -1147,23 +1252,45 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) UINT Type = GetDriveTypeW(szDrive); if (Type == DRIVE_FIXED) //FIXME { - if (!GetVolumeInformationW(szDrive, szName, sizeof(szName) / sizeof(WCHAR), NULL, &MaxComponent, &Flags, NULL, 0)) + if (!GetVolumeInformationW(szDrive, szName, sizeof(szName) / sizeof(WCHAR), &dwSerial, &MaxComponent, &Flags, NULL, 0)) { szName[0] = 0; + dwSerial = -1; } + sprintfW(szVolume, L"%s (%c)", szName, szDrive[0]); memset(&li, 0x0, sizeof(LVITEMW)); li.mask = LVIF_TEXT | LVIF_PARAM; li.iSubItem = 0; li.pszText = szVolume; li.iItem = itemCount; - li.lParam = CurDrive; (void)ListView_InsertItemW(hDlgCtrl, &li); if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable , &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) { if (StrFormatByteSizeW(TotalNumberOfFreeBytes.QuadPart, szVolume, sizeof(szVolume) / sizeof(WCHAR))) { - memset(&li, 0x0, sizeof(LVITEMW)); + + pItem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DRIVE_ITEM_CONTEXT)); + if (pItem) + { + sprintfW(szName, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\%04X-%04X", LOWORD(dwSerial), HIWORD(dwSerial)); + dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, szName, L"MaxCapacity", RRF_RT_DWORD, NULL, &pItem->dwMaxCapacity, &dwSize); + dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, szName, L"NukeOnDelete", RRF_RT_DWORD, NULL, &pItem->dwNukeOnDelete, &dwSize); + pItem->dwSerial = dwSerial; + li.mask = LVIF_PARAM; + li.lParam = (LPARAM)pItem; + (void)ListView_SetItemW(hDlgCtrl, &li); + if (CurDrive == DefaultDrive) + { + defIndex = itemCount; + pDefault = pItem; + } + } + if (!pFirst) + pFirst = pItem; + li.mask = LVIF_TEXT; li.iSubItem = 1; li.pszText = szVolume; @@ -1171,12 +1298,6 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) (void)ListView_SetItemW(hDlgCtrl, &li); } } - - if (CurDrive == DefaultDrive) - { - defIndex = itemCount; - } - itemCount++; } } @@ -1185,27 +1306,114 @@ InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) dwDrives = (dwDrives >> 1); }while(dwDrives); + if (!pDefault) + pDefault = pFirst; + if (pDefault) + { + toggleNukeOnDeleteOption(hwndDlg, pDefault->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pDefault->dwMaxCapacity, FALSE); + } + ZeroMemory(&li, sizeof(li)); li.mask = LVIF_STATE; - li.state = LVIS_FOCUSED; + li.stateMask = (UINT)-1; + li.state = LVIS_FOCUSED|LVIS_SELECTED; li.iItem = defIndex; (void)ListView_SetItemW(hDlgCtrl, &li); - wcscpy(szVolume, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\c"); - szVolume[62] = DefaultDrive; +} - dwSize = sizeof(dwNukeOnDelete); - if (RegGetValueW(HKEY_LOCAL_MACHINE, szVolume, L"NukeOnDelete", RRF_RT_REG_DWORD, NULL, &dwNukeOnDelete, &dwSize) == ERROR_SUCCESS) +static BOOL StoreDriveSettings(HWND hwndDlg) +{ + int iCount, iIndex; + HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); + LVITEMW li; + PDRIVE_ITEM_CONTEXT pItem; + HKEY hKey, hSubKey; + WCHAR szSerial[20]; + DWORD dwSize; + + + if (RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume", 0, KEY_WRITE, &hKey) != ERROR_SUCCESS) + return FALSE; + + iCount = ListView_GetItemCount(hDlgCtrl); + + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + + for(iIndex = 0; iIndex < iCount; iIndex++) { - toggleNukeOnDeleteOption(hwndDlg, dwNukeOnDelete); + li.iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, &li)) + { + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + sprintfW(szSerial, L"%04X-%04X", LOWORD(pItem->dwSerial), HIWORD(pItem->dwSerial)); + if (RegCreateKeyExW(hKey, szSerial, 0, NULL, 0, KEY_WRITE, NULL, &hSubKey, NULL) == ERROR_SUCCESS) + { + dwSize = sizeof(DWORD); + RegSetValueExW(hSubKey, L"NukeOnDelete", 0, REG_DWORD, (LPVOID)&pItem->dwNukeOnDelete, dwSize); + dwSize = sizeof(DWORD); + RegSetValueExW(hSubKey, L"MaxCapacity", 0, REG_DWORD, (LPVOID)&pItem->dwMaxCapacity, dwSize); + RegCloseKey(hSubKey); + } + } } - else + RegCloseKey(hKey); + return TRUE; + +} + +static VOID FreeDriveItemContext(HWND hwndDlg) +{ + int iCount, iIndex; + HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); + LVITEMW li; + + iCount = ListView_GetItemCount(hDlgCtrl); + + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + + for(iIndex = 0; iIndex < iCount; iIndex++) { - /* default to NukeOnDelete - */ - toggleNukeOnDeleteOption(hwndDlg, TRUE); + li.iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, &li)) + { + HeapFree(GetProcessHeap(), 0, (LPVOID)li.lParam); + } } } +INT +GetDefaultItem(HWND hwndDlg, LVITEMW * li) +{ + HWND hDlgCtrl; + UINT iItemCount, iIndex; + + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + if (!hDlgCtrl) + return -1; + + iItemCount = ListView_GetItemCount(hDlgCtrl); + if (!iItemCount) + return -1; + + ZeroMemory(li, sizeof(LVITEMW)); + li->mask = LVIF_PARAM | LVIF_STATE; + li->stateMask = (UINT)-1; + for (iIndex = 0; iIndex < iItemCount; iIndex++) + { + li->iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, li)) + { + if (li->state & LVIS_SELECTED) + return iIndex; + } + } + return -1; + +} + INT_PTR CALLBACK BitBucketDlg( @@ -1215,12 +1423,23 @@ BitBucketDlg( LPARAM lParam ) { + LPPSHNOTIFY lppsn; + LPNMLISTVIEW lppl; + LVITEMW li; + PDRIVE_ITEM_CONTEXT pItem; + BOOL bSuccess; + UINT uResult; + switch(uMsg) { case WM_INITDIALOG: InitializeBitBucketDlg(hwndDlg, (WCHAR)lParam); + if (GetDlgCtrlID((HWND)wParam) != 14000) + { + SetFocus(GetDlgItem(hwndDlg, 14000)); + return FALSE; + } return TRUE; - case WM_COMMAND: switch(LOWORD(wParam)) { @@ -1237,6 +1456,67 @@ BitBucketDlg( break; } break; + case WM_NOTIFY: + lppsn = (LPPSHNOTIFY) lParam; + lppl = (LPNMLISTVIEW) lParam; + if (lppsn->hdr.code == PSN_APPLY) + { + if (GetDefaultItem(hwndDlg, &li) > -1) + { + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + if (pItem) + { + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + pItem->dwMaxCapacity = uResult; + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + } + if (StoreDriveSettings(hwndDlg)) + { + SetWindowLong( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + } + else if (lppl->hdr.code == LVN_ITEMCHANGING) + { + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + li.iItem = lppl->iItem; + if (!ListView_GetItemW(lppl->hdr.hwndFrom, &li)) + return TRUE; + + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + if (!pItem) + return TRUE; + + if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED)) + { + /* new focused item */ + toggleNukeOnDeleteOption(lppl->hdr.hwndFrom, pItem->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); + } + else if ((lppl->uOldState & LVIS_FOCUSED) && !(lppl->uNewState & LVIS_FOCUSED)) + { + /* kill focus */ + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + pItem->dwMaxCapacity = uResult; + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + return TRUE; + + } + break; + case WM_DESTROY: + FreeDriveItemContext(hwndDlg); + break; } return FALSE; } @@ -1306,7 +1586,7 @@ TRASH_CanTrashFile(LPCWSTR wszPath) sprintfW(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber)); wcscat(szKey, szBuffer); - if (RegCreateKeyExW(HKEY_CURRENT_USER, szBuffer, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) + if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) { ERR("RegCreateKeyExW failed\n"); return FALSE; @@ -1319,7 +1599,7 @@ TRASH_CanTrashFile(LPCWSTR wszPath) RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); /* per default unlimited size */ dwSize = -1; - RegSetValueExW(hKey, L"MaxSize", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); + RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); RegCloseKey(hKey); return TRUE; } @@ -1329,25 +1609,25 @@ TRASH_CanTrashFile(LPCWSTR wszPath) ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize); if (ret != ERROR_SUCCESS) { - sprintfW(szBuffer, L"ret %u\n", ret); - MessageBoxW(NULL, szBuffer, NULL, MB_OK); - RegCloseKey(hKey); if (ret == ERROR_FILE_NOT_FOUND) { /* restore key and enable bitbucket */ dwNukeOnDelete = 0; RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); } + RegCloseKey(hKey); return TRUE; } else if (dwNukeOnDelete) { /* do not delete to bitbucket */ + RegCloseKey(hKey); return FALSE; } /* FIXME * check if bitbucket is full */ + RegCloseKey(hKey); return TRUE; } } From 40040950f13dba9aafaa3f17e60ad0fde6ceb0c9 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 11 Aug 2008 14:49:32 +0000 Subject: [PATCH 266/304] Copied remotely svn path=/trunk/; revision=35275 --- reactos/dll/win32/shell32/shfldr_recyclebin.c | 1651 +++++++++++++++++ 1 file changed, 1651 insertions(+) create mode 100644 reactos/dll/win32/shell32/shfldr_recyclebin.c diff --git a/reactos/dll/win32/shell32/shfldr_recyclebin.c b/reactos/dll/win32/shell32/shfldr_recyclebin.c new file mode 100644 index 00000000000..6e5d7e6adff --- /dev/null +++ b/reactos/dll/win32/shell32/shfldr_recyclebin.c @@ -0,0 +1,1651 @@ +/* + * Trash virtual folder support. The trashing engine is implemented in trash.c + * + * Copyright (C) 2006 Mikolaj Zalewski + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "config.h" +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT +#define MAX_PROPERTY_SHEET_PAGE 32 + +#include + +#include "winerror.h" +#include "windef.h" +#include "winbase.h" +#include "winreg.h" +#include "winuser.h" +#include "ntquery.h" +#include "shlwapi.h" +#include "shlobj.h" +#include "shresdef.h" +#include "pidl.h" +#include "wine/debug.h" + +#include "shell32_main.h" +#include "enumidlist.h" +#include "xdg.h" +#include "recyclebin.h" +#include + +WINE_DEFAULT_DEBUG_CHANNEL(recyclebin); + +typedef struct +{ + int column_name_id; + const GUID *fmtId; + DWORD pid; + int pcsFlags; + int fmt; + int cxChars; +} columninfo; + +static const columninfo RecycleBinColumns[] = +{ + {IDS_SHV_COLUMN1, &FMTID_Storage, PID_STG_NAME, SHCOLSTATE_TYPE_STR|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 30}, + {IDS_SHV_COLUMN_DELFROM, &FMTID_Displaced, PID_DISPLACED_FROM, SHCOLSTATE_TYPE_STR|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 30}, + {IDS_SHV_COLUMN_DELDATE, &FMTID_Displaced, PID_DISPLACED_DATE, SHCOLSTATE_TYPE_DATE|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, + {IDS_SHV_COLUMN2, &FMTID_Storage, PID_STG_SIZE, SHCOLSTATE_TYPE_INT|SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 20}, + {IDS_SHV_COLUMN3, &FMTID_Storage, PID_STG_STORAGETYPE,SHCOLSTATE_TYPE_INT|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, + {IDS_SHV_COLUMN4, &FMTID_Storage, PID_STG_WRITETIME, SHCOLSTATE_TYPE_DATE|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, +/* {"creation time", &FMTID_Storage, PID_STG_CREATETIME, SHCOLSTATE_TYPE_DATE, LVCFMT_LEFT, 20}, */ +/* {"attribs", &FMTID_Storage, PID_STG_ATTRIBUTES, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 20}, */ +}; + +#define COLUMN_NAME 0 +#define COLUMN_DELFROM 1 +#define COLUMN_DATEDEL 2 +#define COLUMN_SIZE 3 +#define COLUMN_TYPE 4 +#define COLUMN_MTIME 5 + +#define COLUMNS_COUNT 6 + +/* + * Recycle Bin folder + */ + +typedef struct tagRecycleBin +{ + const IShellFolder2Vtbl *lpVtbl; + const IPersistFolder2Vtbl *lpPersistFolderVtbl; + const IContextMenu2Vtbl *lpContextMenu2; + const IShellExtInitVtbl *lpSEI; + LONG refCount; + + INT iIdOpen; + INT iIdEmpty; + INT iIdProperties; + + LPITEMIDLIST pidl; + LPCITEMIDLIST apidl; +} RecycleBin; + +typedef struct +{ + PIDLRecycleStruct *pFileDetails; + HANDLE hDeletedFile; + BOOL bFound; +}SEARCH_CONTEXT, *PSEARCH_CONTEXT; + +typedef struct +{ + DWORD dwNukeOnDelete; + DWORD dwSerial; + DWORD dwMaxCapacity; +}DRIVE_ITEM_CONTEXT, *PDRIVE_ITEM_CONTEXT; + + +static const IContextMenu2Vtbl recycleBincmVtblFolder; +static const IContextMenu2Vtbl recycleBincmVtblBitbucketItem; +static const IShellFolder2Vtbl recycleBinVtbl; +static const IPersistFolder2Vtbl recycleBinPersistVtbl; +static const IShellExtInitVtbl eivt; + +static RecycleBin *impl_from_IContextMenu2(IContextMenu2 *iface) +{ + return (RecycleBin *)((char *)iface - FIELD_OFFSET(RecycleBin, lpContextMenu2)); +} + +static RecycleBin *impl_from_IPersistFolder(IPersistFolder2 *iface) +{ + return (RecycleBin *)((char *)iface - FIELD_OFFSET(RecycleBin, lpPersistFolderVtbl)); +} + +static inline RecycleBin *impl_from_IShellExtInit( IShellExtInit *iface ) +{ + return (RecycleBin *)((char*)iface - FIELD_OFFSET(RecycleBin, lpSEI)); +} + +static void RecycleBin_Destructor(RecycleBin *This); + +HRESULT WINAPI RecycleBin_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppOutput) +{ + RecycleBin *obj; + HRESULT ret; + if (pUnkOuter) + return CLASS_E_NOAGGREGATION; + + obj = SHAlloc(sizeof(RecycleBin)); + if (obj == NULL) + return E_OUTOFMEMORY; + ZeroMemory(obj, sizeof(RecycleBin)); + obj->lpVtbl = &recycleBinVtbl; + obj->lpSEI = &eivt; + obj->lpPersistFolderVtbl = &recycleBinPersistVtbl; + obj->lpContextMenu2 = NULL; + if (FAILED(ret = IUnknown_QueryInterface((IUnknown *)obj, riid, ppOutput))) + { + RecycleBin_Destructor(obj); + return ret; + } +/* InterlockedIncrement(&objCount);*/ + return S_OK; +} + +static void RecycleBin_Destructor(RecycleBin *This) +{ +/* InterlockedDecrement(&objCount);*/ + SHFree(This->pidl); + SHFree(This); +} + +static HRESULT WINAPI RecycleBin_QueryInterface(IShellFolder2 *iface, REFIID riid, void **ppvObject) +{ + RecycleBin *This = (RecycleBin *)iface; + TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppvObject); + + *ppvObject = NULL; + if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IShellFolder) + || IsEqualGUID(riid, &IID_IShellFolder2)) + *ppvObject = This; + + if (IsEqualGUID(riid, &IID_IPersist) || IsEqualGUID(riid, &IID_IPersistFolder) + || IsEqualGUID(riid, &IID_IPersistFolder2)) + *ppvObject = &This->lpPersistFolderVtbl; + + if (IsEqualIID(riid, &IID_IContextMenu) || IsEqualGUID(riid, &IID_IContextMenu2)) + { + This->lpContextMenu2 = &recycleBincmVtblFolder; + *ppvObject = &This->lpContextMenu2; + } + if(IsEqualIID(riid, &IID_IShellExtInit)) + { + *ppvObject = &(This->lpSEI); + } + + if (*ppvObject != NULL) + { + IUnknown_AddRef((IUnknown *)*ppvObject); + return S_OK; + } + WARN("no interface %s\n", debugstr_guid(riid)); + return E_NOINTERFACE; +} + +static ULONG WINAPI RecycleBin_AddRef(IShellFolder2 *iface) +{ + RecycleBin *This = (RecycleBin *)iface; + TRACE("(%p)\n", This); + return InterlockedIncrement(&This->refCount); +} + +static ULONG WINAPI RecycleBin_Release(IShellFolder2 *iface) +{ + RecycleBin *This = (RecycleBin *)iface; + LONG result; + + TRACE("(%p)\n", This); + result = InterlockedDecrement(&This->refCount); + if (result == 0) + { + TRACE("Destroy object\n"); + RecycleBin_Destructor(This); + } + return result; +} + +static HRESULT WINAPI RecycleBin_ParseDisplayName(IShellFolder2 *This, HWND hwnd, LPBC pbc, + LPOLESTR pszDisplayName, ULONG *pchEaten, LPITEMIDLIST *ppidl, + ULONG *pdwAttributes) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + + +PDELETED_FILE_DETAILS_W +UnpackDetailsFromPidl(LPCITEMIDLIST pidl) +{ + return (PDELETED_FILE_DETAILS_W)&pidl->mkid.abID; +} + +static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails) +{ + PIDLDATA tmp; + LPITEMIDLIST pidl; + PIDLRecycleStruct * p; + int size0 = (char*)&tmp.u.crecycle.szName-(char*)&tmp.u.crecycle; + int size = size0; + + tmp.type = 0x00; + size += (wcslen(pFileDetails->FileName) + 1) * sizeof(WCHAR); + + pidl = (LPITEMIDLIST)SHAlloc(size + 4); + if (!pidl) + return pidl; + + pidl->mkid.cb = size+2; + memcpy(pidl->mkid.abID, &tmp, 2+size0); + + p = &((PIDLDATA*)pidl->mkid.abID)->u.crecycle; + RtlCopyMemory(p, pFileDetails, sizeof(DELETED_FILE_DETAILS_W)); + wcscpy(p->szName, pFileDetails->FileName); + *(WORD*)((char*)pidl+(size+2)) = 0; + return pidl; +} + +static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl) +{ + LPPIDLDATA pdata = _ILGetDataPointer(pidl); + + if (pdata && pdata->type==0x00) + return (PIDLRecycleStruct*)&(pdata->u.crecycle); + + return NULL; +} + +BOOL +WINAPI +CBSearchBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) +{ + PSEARCH_CONTEXT pContext = (PSEARCH_CONTEXT)Context; + + PDELETED_FILE_DETAILS_W pFileDetails; + DWORD dwSize; + BOOL ret; + + if (!GetDeletedFileDetailsW(hDeletedFile, + 0, + NULL, + &dwSize) && + GetLastError() != ERROR_INSUFFICIENT_BUFFER) + { + ERR("GetDeletedFileDetailsW failed\n"); + return FALSE; + } + + pFileDetails = SHAlloc(dwSize); + if (!pFileDetails) + { + ERR("No memory\n"); + return FALSE; + } + + if (!GetDeletedFileDetailsW(hDeletedFile, + dwSize, + pFileDetails, + NULL)) + { + ERR("GetDeletedFileDetailsW failed\n"); + SHFree(pFileDetails); + return FALSE; + } + + ret = memcmp(pFileDetails, pContext->pFileDetails, dwSize); + if (!ret) + { + pContext->hDeletedFile = hDeletedFile; + pContext->bFound = TRUE; + } + else + CloseRecycleBinHandle(hDeletedFile); + + SHFree(pFileDetails); + return ret; +} + + + +BOOL +WINAPI +CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) +{ + PDELETED_FILE_DETAILS_W pFileDetails; + DWORD dwSize; + LPITEMIDLIST pidl = NULL; + BOOL ret; + + if (!GetDeletedFileDetailsW(hDeletedFile, + 0, + NULL, + &dwSize) && + GetLastError() != ERROR_INSUFFICIENT_BUFFER) + { + ERR("GetDeletedFileDetailsW failed\n"); + return FALSE; + } + + pFileDetails = SHAlloc(dwSize); + if (!pFileDetails) + { + ERR("No memory\n"); + return FALSE; + } + + if (!GetDeletedFileDetailsW(hDeletedFile, + dwSize, + pFileDetails, + NULL)) + { + ERR("GetDeletedFileDetailsW failed\n"); + SHFree(pFileDetails); + return FALSE; + } + + pidl = _ILCreateRecycleItem(pFileDetails); + if (!pidl) + { + SHFree(pFileDetails); + return FALSE; + } + + ret = AddToEnumList((IEnumIDList*)Context, pidl); + + if (!ret) + SHFree(pidl); + SHFree(pFileDetails); + TRACE("Returning %d\n", ret); + CloseRecycleBinHandle(hDeletedFile); + return ret; +} + +static HRESULT WINAPI RecycleBin_EnumObjects(IShellFolder2 *iface, HWND hwnd, SHCONTF grfFlags, IEnumIDList **ppenumIDList) +{ + RecycleBin *This = (RecycleBin *)iface; + IEnumIDList *list; + static LPCWSTR szDrive = L"C:\\"; + + TRACE("(%p, %p, %x, %p)\n", This, hwnd, (unsigned int)grfFlags, ppenumIDList); + + if (grfFlags & SHCONTF_NONFOLDERS) + { + TRACE("Starting Enumeration\n"); + *ppenumIDList = NULL; + list = IEnumIDList_Constructor(); + if (list == NULL) + return E_OUTOFMEMORY; + + if (!EnumerateRecycleBinW(szDrive, //FIXME + CBEnumBitBucket, + (PVOID)list)) + { + WARN("Error: EnumerateRecycleBinW failed\n"); + } + *ppenumIDList = list; + } + else + { + *ppenumIDList = IEnumIDList_Constructor(); + if (*ppenumIDList == NULL) + return E_OUTOFMEMORY; + } + + return S_OK; + +} + +static HRESULT WINAPI RecycleBin_BindToObject(IShellFolder2 *This, LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) +{ + FIXME("(%p, %p, %p, %s, %p) - stub\n", This, pidl, pbc, debugstr_guid(riid), ppv); + return E_NOTIMPL; +} + +static HRESULT WINAPI RecycleBin_BindToStorage(IShellFolder2 *This, LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) +{ + FIXME("(%p, %p, %p, %s, %p) - stub\n", This, pidl, pbc, debugstr_guid(riid), ppv); + return E_NOTIMPL; +} + +static HRESULT WINAPI RecycleBin_CompareIDs(IShellFolder2 *iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + RecycleBin *This = (RecycleBin *)iface; + + /* TODO */ + TRACE("(%p, %p, %p, %p)\n", This, (void *)lParam, pidl1, pidl2); + if (pidl1->mkid.cb != pidl2->mkid.cb) + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, pidl1->mkid.cb - pidl2->mkid.cb); + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (unsigned short)memcmp(pidl1->mkid.abID, pidl2->mkid.abID, pidl1->mkid.cb)); +} + +static HRESULT WINAPI RecycleBin_CreateViewObject(IShellFolder2 *iface, HWND hwndOwner, REFIID riid, void **ppv) +{ + RecycleBin *This = (RecycleBin *)iface; + LPSHELLVIEW pShellView; + HRESULT hr = E_NOINTERFACE; + + TRACE("(%p, %p, %s, %p)\n", This, hwndOwner, debugstr_guid(riid), ppv); + + if (!ppv) + return hr; + + *ppv = NULL; + + if (IsEqualIID (riid, &IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IContextMenu) || IsEqualIID (riid, &IID_IContextMenu2)) + { + This->lpContextMenu2 = &recycleBincmVtblFolder; + *ppv = &This->lpContextMenu2; + This->refCount++; + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppv); + IShellView_Release (pShellView); + } + } + else + return hr; + TRACE ("-- (%p)->(interface=%p)\n", This, ppv); + return hr; + +} + +static HRESULT WINAPI RecycleBin_GetAttributesOf(IShellFolder2 *This, UINT cidl, LPCITEMIDLIST *apidl, + SFGAOF *rgfInOut) +{ + TRACE("(%p, %d, {%p, ...}, {%x})\n", This, cidl, apidl[0], (unsigned int)*rgfInOut); + *rgfInOut &= SFGAO_CANMOVE|SFGAO_CANDELETE|SFGAO_HASPROPSHEET|SFGAO_FILESYSTEM; + return S_OK; +} + +static HRESULT WINAPI RecycleBin_GetUIObjectOf(IShellFolder2 *iface, HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, + REFIID riid, UINT *prgfInOut, void **ppv) +{ + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + RecycleBin * This = (RecycleBin*)iface; + + TRACE ("(%p)->(%p,%u,apidl=%p, %p %p)\n", This, + hwndOwner, cidl, apidl, prgfInOut, ppv); + + if (!ppv) + return hr; + + *ppv = NULL; + + if ((IsEqualIID (riid, &IID_IContextMenu) || IsEqualIID(riid, &IID_IContextMenu2)) && (cidl >= 1)) + { + This->lpContextMenu2 = &recycleBincmVtblBitbucketItem; + pObj = (IUnknown*)(&This->lpContextMenu2); + This->apidl = apidl[0]; + IUnknown_AddRef(pObj); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) + { + hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppv = pObj; + TRACE ("(%p)->hr=0x%08x\n", This, hr); + return hr; +} + +static HRESULT WINAPI RecycleBin_GetDisplayNameOf(IShellFolder2 *This, LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *pName) +{ + PIDLRecycleStruct *pFileDetails; + LPWSTR pFileName; + + TRACE("(%p, %p, %x, %p)\n", This, pidl, (unsigned int)uFlags, pName); + + + if (_ILIsBitBucket (pidl)) + { + WCHAR pszPath[100]; + + HCR_GetClassNameW(&CLSID_RecycleBin, pszPath, MAX_PATH); + pName->uType = STRRET_WSTR; + pName->u.pOleStr = StrDupW(pszPath); + return S_OK; + } + + pFileDetails = _ILGetRecycleStruct(pidl); + if (!pFileDetails) + { + pName->u.cStr[0] = 0; + pName->uType = STRRET_CSTR; + return E_INVALIDARG; + } + + pFileName = wcsrchr(pFileDetails->szName, L'\\'); + if (!pFileName) + { + pName->u.cStr[0] = 0; + pName->uType = STRRET_CSTR; + return E_UNEXPECTED; + } + + pName->u.pOleStr = StrDupW(pFileName + 1); + if (pName->u.pOleStr == NULL) + return E_OUTOFMEMORY; + + pName->uType = STRRET_WSTR; + return S_OK; +} + +static HRESULT WINAPI RecycleBin_SetNameOf(IShellFolder2 *This, HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR pszName, + SHGDNF uFlags, LPITEMIDLIST *ppidlOut) +{ + TRACE("\n"); + return E_FAIL; /* not supported */ +} + +static HRESULT WINAPI RecycleBin_GetDefaultSearchGUID(IShellFolder2 *iface, GUID *pguid) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT WINAPI RecycleBin_EnumSearches(IShellFolder2 *iface, IEnumExtraSearch **ppEnum) +{ + FIXME("stub\n"); + *ppEnum = NULL; + return E_NOTIMPL; +} + +static HRESULT WINAPI RecycleBin_GetDefaultColumn(IShellFolder2 *iface, DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) +{ + RecycleBin *This = (RecycleBin *)iface; + TRACE("(%p, %x, %p, %p)\n", This, (unsigned int)dwReserved, pSort, pDisplay); + *pSort = 0; + *pDisplay = 0; + return S_OK; +} + +static HRESULT WINAPI RecycleBin_GetDefaultColumnState(IShellFolder2 *iface, UINT iColumn, SHCOLSTATEF *pcsFlags) +{ + RecycleBin *This = (RecycleBin *)iface; + TRACE("(%p, %d, %p)\n", This, iColumn, pcsFlags); + if (iColumn >= COLUMNS_COUNT) + return E_INVALIDARG; + *pcsFlags = RecycleBinColumns[iColumn].pcsFlags; + return S_OK; +} + +static HRESULT WINAPI RecycleBin_GetDetailsEx(IShellFolder2 *iface, LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) +{ + FIXME("stub\n"); + return E_NOTIMPL; +} + +static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft) +{ + FILETIME lft; + SYSTEMTIME time; + int ret; + + FileTimeToLocalFileTime(ft, &lft); + FileTimeToSystemTime(&lft, &time); + + ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); + if (ret>0 && ret= COLUMNS_COUNT) + return E_FAIL; + pDetails->fmt = RecycleBinColumns[iColumn].fmt; + pDetails->cxChar = RecycleBinColumns[iColumn].cxChars; + if (pidl == NULL) + { + pDetails->str.uType = STRRET_WSTR; + LoadStringW(shell32_hInstance, RecycleBinColumns[iColumn].column_name_id, buffer, MAX_PATH); + return SHStrDupW(buffer, &pDetails->str.u.pOleStr); + } + + if (iColumn == COLUMN_NAME) + return RecycleBin_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &pDetails->str); + + pFileDetails = _ILGetRecycleStruct(pidl); + switch (iColumn) + { + case COLUMN_DATEDEL: + FormatDateTime(buffer, MAX_PATH, &pFileDetails->DeletionTime); + break; + case COLUMN_DELFROM: + pszBackslash = wcsrchr(pFileDetails->szName, L'\\'); + Length = (pszBackslash - pFileDetails->szName); + memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR)); + buffer[Length] = L'\0'; + break; + case COLUMN_SIZE: + StrFormatKBSizeW(pFileDetails->FileSize.QuadPart, buffer, MAX_PATH); + break; + case COLUMN_MTIME: + FormatDateTime(buffer, MAX_PATH, &pFileDetails->LastModification); + break; + case COLUMN_TYPE: + szTypeName[0] = L'\0'; + lstrcpyW(buffer,PathFindExtensionW(pFileDetails->szName)); + if (!( HCR_MapTypeToValueW(buffer, buffer, sizeof(buffer)/sizeof(WCHAR), TRUE) && + HCR_MapTypeToValueW(buffer, szTypeName, sizeof(szTypeName)/sizeof(WCHAR), FALSE ))) + { + lstrcpyW (szTypeName, PathFindExtensionW(pFileDetails->szName)); + strcatW(szTypeName, L"-"); + Length = wcslen(szTypeName); + if (LoadStringW(shell32_hInstance, IDS_SHV_COLUMN1, &szTypeName[Length], (sizeof(szTypeName)/sizeof(WCHAR))- Length)) + szTypeName[(sizeof(szTypeName)/sizeof(WCHAR))-1] = L'\0'; + } + pDetails->str.uType = STRRET_WSTR; + return SHStrDupW(szTypeName, &pDetails->str.u.pOleStr); + break; + default: + return E_FAIL; + } + + pDetails->str.uType = STRRET_WSTR; + return SHStrDupW(buffer, &pDetails->str.u.pOleStr); +} + +static HRESULT WINAPI RecycleBin_MapColumnToSCID(IShellFolder2 *iface, UINT iColumn, SHCOLUMNID *pscid) +{ + RecycleBin *This = (RecycleBin *)iface; + TRACE("(%p, %d, %p)\n", This, iColumn, pscid); + if (iColumn>=COLUMNS_COUNT) + return E_INVALIDARG; + pscid->fmtid = *RecycleBinColumns[iColumn].fmtId; + pscid->pid = RecycleBinColumns[iColumn].pid; + return S_OK; +} + +static const IShellFolder2Vtbl recycleBinVtbl = +{ + /* IUnknown */ + RecycleBin_QueryInterface, + RecycleBin_AddRef, + RecycleBin_Release, + + /* IShellFolder */ + RecycleBin_ParseDisplayName, + RecycleBin_EnumObjects, + RecycleBin_BindToObject, + RecycleBin_BindToStorage, + RecycleBin_CompareIDs, + RecycleBin_CreateViewObject, + RecycleBin_GetAttributesOf, + RecycleBin_GetUIObjectOf, + RecycleBin_GetDisplayNameOf, + RecycleBin_SetNameOf, + + /* IShellFolder2 */ + RecycleBin_GetDefaultSearchGUID, + RecycleBin_EnumSearches, + RecycleBin_GetDefaultColumn, + RecycleBin_GetDefaultColumnState, + RecycleBin_GetDetailsEx, + RecycleBin_GetDetailsOf, + RecycleBin_MapColumnToSCID +}; + +static HRESULT WINAPI RecycleBin_IPersistFolder2_GetClassID(IPersistFolder2 *This, CLSID *pClassID) +{ + TRACE("(%p, %p)\n", This, pClassID); + if (This == NULL || pClassID == NULL) + return E_INVALIDARG; + memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID)); + return S_OK; +} + +static HRESULT WINAPI RecycleBin_IPersistFolder2_Initialize(IPersistFolder2 *iface, LPCITEMIDLIST pidl) +{ + RecycleBin *This = impl_from_IPersistFolder(iface); + TRACE("(%p, %p)\n", This, pidl); + + This->pidl = ILClone(pidl); + if (This->pidl == NULL) + return E_OUTOFMEMORY; + return S_OK; +} + +static HRESULT WINAPI RecycleBin_IPersistFolder2_GetCurFolder(IPersistFolder2 *iface, LPITEMIDLIST *ppidl) +{ + RecycleBin *This = impl_from_IPersistFolder(iface); + TRACE("\n"); + *ppidl = ILClone(This->pidl); + return S_OK; +} + +static HRESULT WINAPI RecycleBin_IPersistFolder2_QueryInterface(IPersistFolder2 *This, REFIID riid, void **ppvObject) +{ + return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IPersistFolder(This), riid, ppvObject); +} + +static ULONG WINAPI RecycleBin_IPersistFolder2_AddRef(IPersistFolder2 *This) +{ + return RecycleBin_AddRef((IShellFolder2 *)impl_from_IPersistFolder(This)); +} + +static ULONG WINAPI RecycleBin_IPersistFolder2_Release(IPersistFolder2 *This) +{ + return RecycleBin_Release((IShellFolder2 *)impl_from_IPersistFolder(This)); +} + +static const IPersistFolder2Vtbl recycleBinPersistVtbl = +{ + /* IUnknown */ + RecycleBin_IPersistFolder2_QueryInterface, + RecycleBin_IPersistFolder2_AddRef, + RecycleBin_IPersistFolder2_Release, + + /* IPersist */ + RecycleBin_IPersistFolder2_GetClassID, + /* IPersistFolder */ + RecycleBin_IPersistFolder2_Initialize, + /* IPersistFolder2 */ + RecycleBin_IPersistFolder2_GetCurFolder +}; + +/************************************************************************* + * BitBucket IShellExtInit interface + */ + +static HRESULT WINAPI +RecycleBin_ExtInit_QueryInterface( IShellExtInit* iface, REFIID riid, void** ppvObject ) +{ + return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IShellExtInit(iface), riid, ppvObject); +} + +static ULONG WINAPI +RecycleBin_ExtInit_AddRef( IShellExtInit* iface ) +{ + return RecycleBin_AddRef((IShellFolder2 *)impl_from_IShellExtInit(iface)); +} + +static ULONG WINAPI +RecycleBin_ExtInit_Release( IShellExtInit* iface ) +{ + return RecycleBin_Release((IShellFolder2 *)impl_from_IShellExtInit(iface)); +} + +static HRESULT WINAPI +RecycleBin_ExtInit_Initialize( IShellExtInit* iface, LPCITEMIDLIST pidlFolder, + IDataObject *pdtobj, HKEY hkeyProgID ) +{ + RecycleBin *This = impl_from_IShellExtInit(iface); + + TRACE("%p %p %p %p\n", This, pidlFolder, pdtobj, hkeyProgID ); + return S_OK; +} + + +static const IShellExtInitVtbl eivt = +{ + RecycleBin_ExtInit_QueryInterface, + RecycleBin_ExtInit_AddRef, + RecycleBin_ExtInit_Release, + RecycleBin_ExtInit_Initialize +}; + + +/************************************************************************* + * BitBucket context menu + * + */ + +static HRESULT WINAPI +RecycleBin_IContextMenu2Folder_QueryInterface( IContextMenu2* iface, REFIID riid, void** ppvObject ) +{ + return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IContextMenu2(iface), riid, ppvObject); +} + +static ULONG WINAPI +RecycleBin_IContextMenu2Folder_AddRef( IContextMenu2* iface ) +{ + return RecycleBin_AddRef((IShellFolder2 *)impl_from_IContextMenu2(iface)); +} + +static ULONG WINAPI +RecycleBin_IContextMenu2Folder_Release( IContextMenu2* iface ) +{ + return RecycleBin_Release((IShellFolder2 *)impl_from_IContextMenu2(iface)); +} + +static HRESULT WINAPI +RecycleBin_IContextMenu2Folder_QueryContextMenu( IContextMenu2* iface, HMENU hmenu, UINT indexMenu, + UINT idCmdFirst, UINT idCmdLast, UINT uFlags ) +{ + WCHAR szBuffer[100]; + MENUITEMINFOW mii; + int id = 1; + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("%p %p %u %u %u %u\n", This, + hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); + + if ( !hmenu ) + return E_INVALIDARG; + + memset( &mii, 0, sizeof(mii) ); + mii.cbSize = sizeof(mii); + mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; + szBuffer[0] = L'\0'; + LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)); + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + mii.dwTypeData = (LPWSTR)szBuffer; + mii.cch = strlenW( mii.dwTypeData ); + mii.wID = idCmdFirst + id++; + mii.fState = MFS_ENABLED; + mii.fType = MFT_STRING; + + if (!InsertMenuItemW( hmenu, indexMenu, TRUE, &mii )) + return E_FAIL; + This->iIdOpen = 1; + + mii.fState = MFS_ENABLED; + szBuffer[0] = L'\0'; + LoadStringW(shell32_hInstance, IDS_EMPTY_BITBUCKET, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)); + szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; + mii.cch = strlenW( mii.dwTypeData ); + mii.wID = idCmdFirst + id++; + if (!InsertMenuItemW( hmenu, idCmdLast, TRUE, &mii )) + { + TRACE("RecycleBin_IContextMenu2Folder_QueryContextMenu failed to insert item properties"); + return E_FAIL; + } + This->iIdEmpty = 2; + return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id ); +} + +static HRESULT WINAPI +RecycleBin_IContextMenu2Folder_InvokeCommand( IContextMenu2* iface, LPCMINVOKECOMMANDINFO lpici ) +{ + HRESULT hr; + LPSHELLBROWSER lpSB; + LPSHELLVIEW lpSV = NULL; + + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("%p %p verb %p\n", This, lpici, lpici->lpVerb); + + if ( LOWORD(lpici->lpVerb) == This->iIdEmpty) + { + // FIXME + // path & flags + hr = SHEmptyRecycleBinW(lpici->hwnd, L"C:\\", 0); + TRACE("result %x\n", hr); + if (hr != S_OK) + { + return hr; + } + + if((lpSB = (LPSHELLBROWSER)SendMessageA(lpici->hwnd, CWM_GETISHELLBROWSER,0,0))) + { + if(SUCCEEDED(IShellBrowser_QueryActiveShellView(lpSB, &lpSV))) + { + IShellView_Refresh(lpSV); + } + } + } + + + if ( LOWORD(lpici->lpVerb) == This->iIdProperties) + { + WCHAR szDrive = 'C'; + SH_ShowRecycleBinProperties(szDrive); + return S_OK; + } + + return S_OK; +} + +static HRESULT WINAPI +RecycleBin_IContextMenu2Folder_GetCommandString( IContextMenu2* iface, UINT_PTR idCmd, UINT uType, + UINT* pwReserved, LPSTR pszName, UINT cchMax ) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + FIXME("%p %lu %u %p %p %u\n", This, + idCmd, uType, pwReserved, pszName, cchMax ); + + return E_NOTIMPL; +} + +/************************************************************************** +* RecycleBin_IContextMenu2Item_HandleMenuMsg() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Folder_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("RecycleBin_IContextMenu2Item_IContextMenu2Folder_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + + +static const IContextMenu2Vtbl recycleBincmVtblFolder = +{ + RecycleBin_IContextMenu2Folder_QueryInterface, + RecycleBin_IContextMenu2Folder_AddRef, + RecycleBin_IContextMenu2Folder_Release, + RecycleBin_IContextMenu2Folder_QueryContextMenu, + RecycleBin_IContextMenu2Folder_InvokeCommand, + RecycleBin_IContextMenu2Folder_GetCommandString, + RecycleBin_IContextMenu2Folder_HandleMenuMsg +}; + + +/************************************************************************** +* IContextMenu2 Bitbucket Item Implementation +*/ + +/************************************************************************ + * RecycleBin_IContextMenu2Item_QueryInterface + */ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_QueryInterface(IContextMenu2 * iface, REFIID iid, LPVOID * ppvObject) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)\n", This); + + return RecycleBin_QueryInterface((IShellFolder2*)This, iid, ppvObject); +} + +/************************************************************************ + * RecycleBin_IContextMenu2Item_AddRef + */ +static ULONG WINAPI RecycleBin_IContextMenu2Item_AddRef(IContextMenu2 * iface) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(count=%u)\n", This, This->refCount); + + return RecycleBin_AddRef((IShellFolder2*)This); +} + +/************************************************************************ + * RecycleBin_IContextMenu2Item_Release + */ +static ULONG WINAPI RecycleBin_IContextMenu2Item_Release(IContextMenu2 * iface) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(count=%u)\n", This, This->refCount); + + return RecycleBin_Release((IShellFolder2*)This); +} + +/************************************************************************** +* RecycleBin_IContextMenu2Item_QueryContextMenu() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_QueryContextMenu( + IContextMenu2 *iface, + HMENU hMenu, + UINT indexMenu, + UINT idCmdFirst, + UINT idCmdLast, + UINT uFlags) +{ + char szBuffer[30] = {0}; + ULONG Count = 1; + + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", + This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); + + if (LoadStringA(shell32_hInstance, IDS_RESTORE, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); + Count++; + } + + if (LoadStringA(shell32_hInstance, IDS_CUT, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); + } + + if (LoadStringA(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(char))) + { + szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); + _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); + } + + return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); +} + + +/************************************************************************** +* RecycleBin_IContextMenu2Item_InvokeCommand() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_InvokeCommand( + IContextMenu2 *iface, + LPCMINVOKECOMMANDINFO lpcmi) +{ + + SEARCH_CONTEXT Context; + RecycleBin * This = impl_from_IContextMenu2(iface); + static LPCWSTR szDrive = L"C:\\"; + + TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1) || lpcmi->lpVerb == MAKEINTRESOURCE(5)) + { + Context.pFileDetails = _ILGetRecycleStruct(This->apidl); + Context.bFound = FALSE; + + EnumerateRecycleBinW(szDrive, CBSearchBitBucket, (PVOID)&Context); + if (!Context.bFound) + return E_FAIL; + + if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) + { + /* restore file */ + if (RestoreFile(Context.hDeletedFile)) + return S_OK; + else + return E_FAIL; + } + else + { + FIXME("implement delete\n"); + CloseRecycleBinHandle(Context.hDeletedFile); + return E_NOTIMPL; + } + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(3)) + { + FIXME("implement cut\n"); + return E_NOTIMPL; + } + else if (lpcmi->lpVerb == MAKEINTRESOURCE(7)) + { + FIXME("implement properties\n"); + return E_NOTIMPL; + } + + return S_OK; +} + +/************************************************************************** + * RecycleBin_IContextMenu2Item_GetCommandString() + * + */ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_GetCommandString( + IContextMenu2 *iface, + UINT_PTR idCommand, + UINT uFlags, + UINT* lpReserved, + LPSTR lpszName, + UINT uMaxNameLen) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); + + + return E_FAIL; +} + + + +/************************************************************************** +* RecycleBin_IContextMenu2Item_HandleMenuMsg() +*/ +static HRESULT WINAPI RecycleBin_IContextMenu2Item_HandleMenuMsg( + IContextMenu2 *iface, + UINT uMsg, + WPARAM wParam, + LPARAM lParam) +{ + RecycleBin * This = impl_from_IContextMenu2(iface); + + TRACE("RecycleBin_IContextMenu2Item_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); + + return E_NOTIMPL; +} + +static const IContextMenu2Vtbl recycleBincmVtblBitbucketItem = +{ + RecycleBin_IContextMenu2Item_QueryInterface, + RecycleBin_IContextMenu2Item_AddRef, + RecycleBin_IContextMenu2Item_Release, + RecycleBin_IContextMenu2Item_QueryContextMenu, + RecycleBin_IContextMenu2Item_InvokeCommand, + RecycleBin_IContextMenu2Item_GetCommandString, + RecycleBin_IContextMenu2Item_HandleMenuMsg +}; + + +void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable) +{ + if (bEnable) + { + SendDlgItemMessage(hwndDlg, 14001, BM_SETCHECK, BST_UNCHECKED, 0); + EnableWindow(GetDlgItem(hwndDlg, 14002), FALSE); + SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_CHECKED, 0); + } + else + { + SendDlgItemMessage(hwndDlg, 14001, BM_SETCHECK, BST_CHECKED, 0); + EnableWindow(GetDlgItem(hwndDlg, 14002), TRUE); + SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_UNCHECKED, 0); + } +} + + +void +InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) +{ + WCHAR CurDrive = L'A'; + WCHAR szDrive[] = L"A:\\"; + DWORD dwDrives; + WCHAR szName[100]; + WCHAR szVolume[100]; + DWORD MaxComponent, Flags; + DWORD dwSerial; + LVCOLUMNW lc; + HWND hDlgCtrl; + LVITEMW li; + INT itemCount; + ULARGE_INTEGER TotalNumberOfFreeBytes, TotalNumberOfBytes, FreeBytesAvailable; + RECT rect; + int columnSize; + int defIndex = 0; + DWORD dwSize; + PDRIVE_ITEM_CONTEXT pItem = NULL, pDefault = NULL, pFirst = NULL; + + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + + if (!LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_LOCATION, szVolume, sizeof(szVolume) / sizeof(WCHAR))) + szVolume[0] = 0; + + GetClientRect(hDlgCtrl, &rect); + + memset(&lc, 0, sizeof(LV_COLUMN) ); + lc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT; + + columnSize = 140; //FIXME + lc.iSubItem = 0; + lc.fmt = LVCFMT_FIXED_WIDTH; + lc.cx = columnSize; + lc.cchTextMax = lstrlenW(szVolume); + lc.pszText = szVolume; + (void)ListView_InsertColumnW(hDlgCtrl, 0, &lc); + + if (!LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_DISKSPACE, szVolume, sizeof(szVolume) / sizeof(WCHAR))) + szVolume[0] = 0; + + lc.iSubItem = 1; + lc.cx = rect.right - rect.left - columnSize; + lc.cchTextMax = lstrlenW(szVolume); + lc.pszText = szVolume; + (void)ListView_InsertColumnW(hDlgCtrl, 1, &lc); + + dwDrives = GetLogicalDrives(); + itemCount = 0; + do + { + if ((dwDrives & 0x1)) + { + UINT Type = GetDriveTypeW(szDrive); + if (Type == DRIVE_FIXED) //FIXME + { + if (!GetVolumeInformationW(szDrive, szName, sizeof(szName) / sizeof(WCHAR), &dwSerial, &MaxComponent, &Flags, NULL, 0)) + { + szName[0] = 0; + dwSerial = -1; + } + + sprintfW(szVolume, L"%s (%c)", szName, szDrive[0]); + memset(&li, 0x0, sizeof(LVITEMW)); + li.mask = LVIF_TEXT | LVIF_PARAM; + li.iSubItem = 0; + li.pszText = szVolume; + li.iItem = itemCount; + (void)ListView_InsertItemW(hDlgCtrl, &li); + if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable , &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) + { + if (StrFormatByteSizeW(TotalNumberOfFreeBytes.QuadPart, szVolume, sizeof(szVolume) / sizeof(WCHAR))) + { + + pItem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DRIVE_ITEM_CONTEXT)); + if (pItem) + { + sprintfW(szName, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\%04X-%04X", LOWORD(dwSerial), HIWORD(dwSerial)); + dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, szName, L"MaxCapacity", RRF_RT_DWORD, NULL, &pItem->dwMaxCapacity, &dwSize); + dwSize = sizeof(DWORD); + RegGetValueW(HKEY_CURRENT_USER, szName, L"NukeOnDelete", RRF_RT_DWORD, NULL, &pItem->dwNukeOnDelete, &dwSize); + pItem->dwSerial = dwSerial; + li.mask = LVIF_PARAM; + li.lParam = (LPARAM)pItem; + (void)ListView_SetItemW(hDlgCtrl, &li); + if (CurDrive == DefaultDrive) + { + defIndex = itemCount; + pDefault = pItem; + } + } + if (!pFirst) + pFirst = pItem; + + li.mask = LVIF_TEXT; + li.iSubItem = 1; + li.pszText = szVolume; + li.iItem = itemCount; + (void)ListView_SetItemW(hDlgCtrl, &li); + } + } + itemCount++; + } + } + CurDrive++; + szDrive[0] = CurDrive; + dwDrives = (dwDrives >> 1); + }while(dwDrives); + + if (!pDefault) + pDefault = pFirst; + if (pDefault) + { + toggleNukeOnDeleteOption(hwndDlg, pDefault->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pDefault->dwMaxCapacity, FALSE); + } + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_STATE; + li.stateMask = (UINT)-1; + li.state = LVIS_FOCUSED|LVIS_SELECTED; + li.iItem = defIndex; + (void)ListView_SetItemW(hDlgCtrl, &li); + +} + +static BOOL StoreDriveSettings(HWND hwndDlg) +{ + int iCount, iIndex; + HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); + LVITEMW li; + PDRIVE_ITEM_CONTEXT pItem; + HKEY hKey, hSubKey; + WCHAR szSerial[20]; + DWORD dwSize; + + + if (RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume", 0, KEY_WRITE, &hKey) != ERROR_SUCCESS) + return FALSE; + + iCount = ListView_GetItemCount(hDlgCtrl); + + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + + for(iIndex = 0; iIndex < iCount; iIndex++) + { + li.iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, &li)) + { + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + sprintfW(szSerial, L"%04X-%04X", LOWORD(pItem->dwSerial), HIWORD(pItem->dwSerial)); + if (RegCreateKeyExW(hKey, szSerial, 0, NULL, 0, KEY_WRITE, NULL, &hSubKey, NULL) == ERROR_SUCCESS) + { + dwSize = sizeof(DWORD); + RegSetValueExW(hSubKey, L"NukeOnDelete", 0, REG_DWORD, (LPVOID)&pItem->dwNukeOnDelete, dwSize); + dwSize = sizeof(DWORD); + RegSetValueExW(hSubKey, L"MaxCapacity", 0, REG_DWORD, (LPVOID)&pItem->dwMaxCapacity, dwSize); + RegCloseKey(hSubKey); + } + } + } + RegCloseKey(hKey); + return TRUE; + +} + +static VOID FreeDriveItemContext(HWND hwndDlg) +{ + int iCount, iIndex; + HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); + LVITEMW li; + + iCount = ListView_GetItemCount(hDlgCtrl); + + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + + for(iIndex = 0; iIndex < iCount; iIndex++) + { + li.iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, &li)) + { + HeapFree(GetProcessHeap(), 0, (LPVOID)li.lParam); + } + } +} + +INT +GetDefaultItem(HWND hwndDlg, LVITEMW * li) +{ + HWND hDlgCtrl; + UINT iItemCount, iIndex; + + hDlgCtrl = GetDlgItem(hwndDlg, 14000); + if (!hDlgCtrl) + return -1; + + iItemCount = ListView_GetItemCount(hDlgCtrl); + if (!iItemCount) + return -1; + + ZeroMemory(li, sizeof(LVITEMW)); + li->mask = LVIF_PARAM | LVIF_STATE; + li->stateMask = (UINT)-1; + for (iIndex = 0; iIndex < iItemCount; iIndex++) + { + li->iItem = iIndex; + if (ListView_GetItemW(hDlgCtrl, li)) + { + if (li->state & LVIS_SELECTED) + return iIndex; + } + } + return -1; + +} + +INT_PTR +CALLBACK +BitBucketDlg( + HWND hwndDlg, + UINT uMsg, + WPARAM wParam, + LPARAM lParam +) +{ + LPPSHNOTIFY lppsn; + LPNMLISTVIEW lppl; + LVITEMW li; + PDRIVE_ITEM_CONTEXT pItem; + BOOL bSuccess; + UINT uResult; + + switch(uMsg) + { + case WM_INITDIALOG: + InitializeBitBucketDlg(hwndDlg, (WCHAR)lParam); + if (GetDlgCtrlID((HWND)wParam) != 14000) + { + SetFocus(GetDlgItem(hwndDlg, 14000)); + return FALSE; + } + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case 14001: + toggleNukeOnDeleteOption(hwndDlg, FALSE); + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + break; + case 14003: + toggleNukeOnDeleteOption(hwndDlg, TRUE); + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + break; + case 14004: + PropSheet_Changed(GetParent(hwndDlg), hwndDlg); + break; + } + break; + case WM_NOTIFY: + lppsn = (LPPSHNOTIFY) lParam; + lppl = (LPNMLISTVIEW) lParam; + if (lppsn->hdr.code == PSN_APPLY) + { + if (GetDefaultItem(hwndDlg, &li) > -1) + { + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + if (pItem) + { + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + pItem->dwMaxCapacity = uResult; + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + } + if (StoreDriveSettings(hwndDlg)) + { + SetWindowLong( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); + return TRUE; + } + } + else if (lppl->hdr.code == LVN_ITEMCHANGING) + { + ZeroMemory(&li, sizeof(li)); + li.mask = LVIF_PARAM; + li.iItem = lppl->iItem; + if (!ListView_GetItemW(lppl->hdr.hwndFrom, &li)) + return TRUE; + + pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; + if (!pItem) + return TRUE; + + if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED)) + { + /* new focused item */ + toggleNukeOnDeleteOption(lppl->hdr.hwndFrom, pItem->dwNukeOnDelete); + SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); + } + else if ((lppl->uOldState & LVIS_FOCUSED) && !(lppl->uNewState & LVIS_FOCUSED)) + { + /* kill focus */ + uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); + if (bSuccess) + pItem->dwMaxCapacity = uResult; + if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) + pItem->dwNukeOnDelete = TRUE; + else + pItem->dwNukeOnDelete = FALSE; + } + return TRUE; + + } + break; + case WM_DESTROY: + FreeDriveItemContext(hwndDlg); + break; + } + return FALSE; +} + +BOOL SH_ShowRecycleBinProperties(WCHAR sDrive) +{ + HPROPSHEETPAGE hpsp[1]; + PROPSHEETHEADERW psh; + HPROPSHEETPAGE hprop; + + BOOL ret; + + + ZeroMemory(&psh, sizeof(PROPSHEETHEADERW)); + psh.dwSize = sizeof(PROPSHEETHEADERW); + psh.dwFlags = PSP_DEFAULT | PSH_PROPTITLE; + psh.pszCaption = MAKEINTRESOURCEW(IDS_RECYCLEBIN_FOLDER_NAME); + psh.hwndParent = NULL; + psh.u3.phpage = hpsp; + psh.hInstance = shell32_hInstance; + + hprop = SH_CreatePropertySheetPage("BITBUCKET_PROPERTIES_DLG", BitBucketDlg, (LPARAM)sDrive, NULL); + if (!hprop) + { + ERR("Failed to create property sheet\n"); + return FALSE; + } + hpsp[psh.nPages] = hprop; + psh.nPages++; + + + ret = PropertySheetW(&psh); + if (ret < 0) + return FALSE; + else + return TRUE; +} + +BOOL +TRASH_CanTrashFile(LPCWSTR wszPath) +{ + LONG ret; + DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength; + DWORD FileSystemFlags, dwSize, dwDisposition; + HKEY hKey; + WCHAR szBuffer[10]; + WCHAR szKey[150] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\"; + + if (wszPath[1] != L':') + { + /* path is UNC */ + return FALSE; + } + + if (GetDriveTypeW(wszPath) != DRIVE_FIXED) + { + /* no bitbucket on removable media */ + return FALSE; + } + + if (!GetVolumeInformationW(wszPath, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0)) + { + ERR("GetVolumeInformationW failed with %u\n", GetLastError()); + return FALSE; + } + + sprintfW(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber)); + wcscat(szKey, szBuffer); + + if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) + { + ERR("RegCreateKeyExW failed\n"); + return FALSE; + } + + if (dwDisposition & REG_CREATED_NEW_KEY) + { + /* per default move to bitbucket */ + dwNukeOnDelete = 0; + RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); + /* per default unlimited size */ + dwSize = -1; + RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); + RegCloseKey(hKey); + return TRUE; + } + else + { + dwSize = sizeof(dwNukeOnDelete); + ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize); + if (ret != ERROR_SUCCESS) + { + if (ret == ERROR_FILE_NOT_FOUND) + { + /* restore key and enable bitbucket */ + dwNukeOnDelete = 0; + RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); + } + RegCloseKey(hKey); + return TRUE; + } + else if (dwNukeOnDelete) + { + /* do not delete to bitbucket */ + RegCloseKey(hKey); + return FALSE; + } + /* FIXME + * check if bitbucket is full + */ + RegCloseKey(hKey); + return TRUE; + } +} + +BOOL +TRASH_TrashFile(LPCWSTR wszPath) +{ + TRACE("(%s)\n", debugstr_w(wszPath)); + return DeleteFileToRecycleBinW(wszPath); +} + +/************************************************************************* + * SHUpdateRecycleBinIcon [SHELL32.@] + * + * Undocumented + */ +HRESULT WINAPI SHUpdateRecycleBinIcon(void) +{ + FIXME("stub\n"); + return S_OK; +} From c39ab3054111fd236d1195f1999c8f1de61c4b19 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 11 Aug 2008 14:52:22 +0000 Subject: [PATCH 267/304] - rename recyclebin svn path=/trunk/; revision=35277 --- reactos/dll/win32/shell32/recyclebin.c | 1651 ---------------------- reactos/dll/win32/shell32/shell32.rbuild | 2 +- 2 files changed, 1 insertion(+), 1652 deletions(-) delete mode 100644 reactos/dll/win32/shell32/recyclebin.c diff --git a/reactos/dll/win32/shell32/recyclebin.c b/reactos/dll/win32/shell32/recyclebin.c deleted file mode 100644 index 6e5d7e6adff..00000000000 --- a/reactos/dll/win32/shell32/recyclebin.c +++ /dev/null @@ -1,1651 +0,0 @@ -/* - * Trash virtual folder support. The trashing engine is implemented in trash.c - * - * Copyright (C) 2006 Mikolaj Zalewski - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "config.h" -#define COBJMACROS -#define NONAMELESSUNION -#define NONAMELESSSTRUCT -#define MAX_PROPERTY_SHEET_PAGE 32 - -#include - -#include "winerror.h" -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "winuser.h" -#include "ntquery.h" -#include "shlwapi.h" -#include "shlobj.h" -#include "shresdef.h" -#include "pidl.h" -#include "wine/debug.h" - -#include "shell32_main.h" -#include "enumidlist.h" -#include "xdg.h" -#include "recyclebin.h" -#include - -WINE_DEFAULT_DEBUG_CHANNEL(recyclebin); - -typedef struct -{ - int column_name_id; - const GUID *fmtId; - DWORD pid; - int pcsFlags; - int fmt; - int cxChars; -} columninfo; - -static const columninfo RecycleBinColumns[] = -{ - {IDS_SHV_COLUMN1, &FMTID_Storage, PID_STG_NAME, SHCOLSTATE_TYPE_STR|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 30}, - {IDS_SHV_COLUMN_DELFROM, &FMTID_Displaced, PID_DISPLACED_FROM, SHCOLSTATE_TYPE_STR|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 30}, - {IDS_SHV_COLUMN_DELDATE, &FMTID_Displaced, PID_DISPLACED_DATE, SHCOLSTATE_TYPE_DATE|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, - {IDS_SHV_COLUMN2, &FMTID_Storage, PID_STG_SIZE, SHCOLSTATE_TYPE_INT|SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 20}, - {IDS_SHV_COLUMN3, &FMTID_Storage, PID_STG_STORAGETYPE,SHCOLSTATE_TYPE_INT|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, - {IDS_SHV_COLUMN4, &FMTID_Storage, PID_STG_WRITETIME, SHCOLSTATE_TYPE_DATE|SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 20}, -/* {"creation time", &FMTID_Storage, PID_STG_CREATETIME, SHCOLSTATE_TYPE_DATE, LVCFMT_LEFT, 20}, */ -/* {"attribs", &FMTID_Storage, PID_STG_ATTRIBUTES, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 20}, */ -}; - -#define COLUMN_NAME 0 -#define COLUMN_DELFROM 1 -#define COLUMN_DATEDEL 2 -#define COLUMN_SIZE 3 -#define COLUMN_TYPE 4 -#define COLUMN_MTIME 5 - -#define COLUMNS_COUNT 6 - -/* - * Recycle Bin folder - */ - -typedef struct tagRecycleBin -{ - const IShellFolder2Vtbl *lpVtbl; - const IPersistFolder2Vtbl *lpPersistFolderVtbl; - const IContextMenu2Vtbl *lpContextMenu2; - const IShellExtInitVtbl *lpSEI; - LONG refCount; - - INT iIdOpen; - INT iIdEmpty; - INT iIdProperties; - - LPITEMIDLIST pidl; - LPCITEMIDLIST apidl; -} RecycleBin; - -typedef struct -{ - PIDLRecycleStruct *pFileDetails; - HANDLE hDeletedFile; - BOOL bFound; -}SEARCH_CONTEXT, *PSEARCH_CONTEXT; - -typedef struct -{ - DWORD dwNukeOnDelete; - DWORD dwSerial; - DWORD dwMaxCapacity; -}DRIVE_ITEM_CONTEXT, *PDRIVE_ITEM_CONTEXT; - - -static const IContextMenu2Vtbl recycleBincmVtblFolder; -static const IContextMenu2Vtbl recycleBincmVtblBitbucketItem; -static const IShellFolder2Vtbl recycleBinVtbl; -static const IPersistFolder2Vtbl recycleBinPersistVtbl; -static const IShellExtInitVtbl eivt; - -static RecycleBin *impl_from_IContextMenu2(IContextMenu2 *iface) -{ - return (RecycleBin *)((char *)iface - FIELD_OFFSET(RecycleBin, lpContextMenu2)); -} - -static RecycleBin *impl_from_IPersistFolder(IPersistFolder2 *iface) -{ - return (RecycleBin *)((char *)iface - FIELD_OFFSET(RecycleBin, lpPersistFolderVtbl)); -} - -static inline RecycleBin *impl_from_IShellExtInit( IShellExtInit *iface ) -{ - return (RecycleBin *)((char*)iface - FIELD_OFFSET(RecycleBin, lpSEI)); -} - -static void RecycleBin_Destructor(RecycleBin *This); - -HRESULT WINAPI RecycleBin_Constructor(IUnknown *pUnkOuter, REFIID riid, LPVOID *ppOutput) -{ - RecycleBin *obj; - HRESULT ret; - if (pUnkOuter) - return CLASS_E_NOAGGREGATION; - - obj = SHAlloc(sizeof(RecycleBin)); - if (obj == NULL) - return E_OUTOFMEMORY; - ZeroMemory(obj, sizeof(RecycleBin)); - obj->lpVtbl = &recycleBinVtbl; - obj->lpSEI = &eivt; - obj->lpPersistFolderVtbl = &recycleBinPersistVtbl; - obj->lpContextMenu2 = NULL; - if (FAILED(ret = IUnknown_QueryInterface((IUnknown *)obj, riid, ppOutput))) - { - RecycleBin_Destructor(obj); - return ret; - } -/* InterlockedIncrement(&objCount);*/ - return S_OK; -} - -static void RecycleBin_Destructor(RecycleBin *This) -{ -/* InterlockedDecrement(&objCount);*/ - SHFree(This->pidl); - SHFree(This); -} - -static HRESULT WINAPI RecycleBin_QueryInterface(IShellFolder2 *iface, REFIID riid, void **ppvObject) -{ - RecycleBin *This = (RecycleBin *)iface; - TRACE("(%p, %s, %p)\n", This, debugstr_guid(riid), ppvObject); - - *ppvObject = NULL; - if (IsEqualGUID(riid, &IID_IUnknown) || IsEqualGUID(riid, &IID_IShellFolder) - || IsEqualGUID(riid, &IID_IShellFolder2)) - *ppvObject = This; - - if (IsEqualGUID(riid, &IID_IPersist) || IsEqualGUID(riid, &IID_IPersistFolder) - || IsEqualGUID(riid, &IID_IPersistFolder2)) - *ppvObject = &This->lpPersistFolderVtbl; - - if (IsEqualIID(riid, &IID_IContextMenu) || IsEqualGUID(riid, &IID_IContextMenu2)) - { - This->lpContextMenu2 = &recycleBincmVtblFolder; - *ppvObject = &This->lpContextMenu2; - } - if(IsEqualIID(riid, &IID_IShellExtInit)) - { - *ppvObject = &(This->lpSEI); - } - - if (*ppvObject != NULL) - { - IUnknown_AddRef((IUnknown *)*ppvObject); - return S_OK; - } - WARN("no interface %s\n", debugstr_guid(riid)); - return E_NOINTERFACE; -} - -static ULONG WINAPI RecycleBin_AddRef(IShellFolder2 *iface) -{ - RecycleBin *This = (RecycleBin *)iface; - TRACE("(%p)\n", This); - return InterlockedIncrement(&This->refCount); -} - -static ULONG WINAPI RecycleBin_Release(IShellFolder2 *iface) -{ - RecycleBin *This = (RecycleBin *)iface; - LONG result; - - TRACE("(%p)\n", This); - result = InterlockedDecrement(&This->refCount); - if (result == 0) - { - TRACE("Destroy object\n"); - RecycleBin_Destructor(This); - } - return result; -} - -static HRESULT WINAPI RecycleBin_ParseDisplayName(IShellFolder2 *This, HWND hwnd, LPBC pbc, - LPOLESTR pszDisplayName, ULONG *pchEaten, LPITEMIDLIST *ppidl, - ULONG *pdwAttributes) -{ - FIXME("stub\n"); - return E_NOTIMPL; -} - - -PDELETED_FILE_DETAILS_W -UnpackDetailsFromPidl(LPCITEMIDLIST pidl) -{ - return (PDELETED_FILE_DETAILS_W)&pidl->mkid.abID; -} - -static LPITEMIDLIST _ILCreateRecycleItem(PDELETED_FILE_DETAILS_W pFileDetails) -{ - PIDLDATA tmp; - LPITEMIDLIST pidl; - PIDLRecycleStruct * p; - int size0 = (char*)&tmp.u.crecycle.szName-(char*)&tmp.u.crecycle; - int size = size0; - - tmp.type = 0x00; - size += (wcslen(pFileDetails->FileName) + 1) * sizeof(WCHAR); - - pidl = (LPITEMIDLIST)SHAlloc(size + 4); - if (!pidl) - return pidl; - - pidl->mkid.cb = size+2; - memcpy(pidl->mkid.abID, &tmp, 2+size0); - - p = &((PIDLDATA*)pidl->mkid.abID)->u.crecycle; - RtlCopyMemory(p, pFileDetails, sizeof(DELETED_FILE_DETAILS_W)); - wcscpy(p->szName, pFileDetails->FileName); - *(WORD*)((char*)pidl+(size+2)) = 0; - return pidl; -} - -static PIDLRecycleStruct * _ILGetRecycleStruct(LPCITEMIDLIST pidl) -{ - LPPIDLDATA pdata = _ILGetDataPointer(pidl); - - if (pdata && pdata->type==0x00) - return (PIDLRecycleStruct*)&(pdata->u.crecycle); - - return NULL; -} - -BOOL -WINAPI -CBSearchBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) -{ - PSEARCH_CONTEXT pContext = (PSEARCH_CONTEXT)Context; - - PDELETED_FILE_DETAILS_W pFileDetails; - DWORD dwSize; - BOOL ret; - - if (!GetDeletedFileDetailsW(hDeletedFile, - 0, - NULL, - &dwSize) && - GetLastError() != ERROR_INSUFFICIENT_BUFFER) - { - ERR("GetDeletedFileDetailsW failed\n"); - return FALSE; - } - - pFileDetails = SHAlloc(dwSize); - if (!pFileDetails) - { - ERR("No memory\n"); - return FALSE; - } - - if (!GetDeletedFileDetailsW(hDeletedFile, - dwSize, - pFileDetails, - NULL)) - { - ERR("GetDeletedFileDetailsW failed\n"); - SHFree(pFileDetails); - return FALSE; - } - - ret = memcmp(pFileDetails, pContext->pFileDetails, dwSize); - if (!ret) - { - pContext->hDeletedFile = hDeletedFile; - pContext->bFound = TRUE; - } - else - CloseRecycleBinHandle(hDeletedFile); - - SHFree(pFileDetails); - return ret; -} - - - -BOOL -WINAPI -CBEnumBitBucket(IN PVOID Context, IN HANDLE hDeletedFile) -{ - PDELETED_FILE_DETAILS_W pFileDetails; - DWORD dwSize; - LPITEMIDLIST pidl = NULL; - BOOL ret; - - if (!GetDeletedFileDetailsW(hDeletedFile, - 0, - NULL, - &dwSize) && - GetLastError() != ERROR_INSUFFICIENT_BUFFER) - { - ERR("GetDeletedFileDetailsW failed\n"); - return FALSE; - } - - pFileDetails = SHAlloc(dwSize); - if (!pFileDetails) - { - ERR("No memory\n"); - return FALSE; - } - - if (!GetDeletedFileDetailsW(hDeletedFile, - dwSize, - pFileDetails, - NULL)) - { - ERR("GetDeletedFileDetailsW failed\n"); - SHFree(pFileDetails); - return FALSE; - } - - pidl = _ILCreateRecycleItem(pFileDetails); - if (!pidl) - { - SHFree(pFileDetails); - return FALSE; - } - - ret = AddToEnumList((IEnumIDList*)Context, pidl); - - if (!ret) - SHFree(pidl); - SHFree(pFileDetails); - TRACE("Returning %d\n", ret); - CloseRecycleBinHandle(hDeletedFile); - return ret; -} - -static HRESULT WINAPI RecycleBin_EnumObjects(IShellFolder2 *iface, HWND hwnd, SHCONTF grfFlags, IEnumIDList **ppenumIDList) -{ - RecycleBin *This = (RecycleBin *)iface; - IEnumIDList *list; - static LPCWSTR szDrive = L"C:\\"; - - TRACE("(%p, %p, %x, %p)\n", This, hwnd, (unsigned int)grfFlags, ppenumIDList); - - if (grfFlags & SHCONTF_NONFOLDERS) - { - TRACE("Starting Enumeration\n"); - *ppenumIDList = NULL; - list = IEnumIDList_Constructor(); - if (list == NULL) - return E_OUTOFMEMORY; - - if (!EnumerateRecycleBinW(szDrive, //FIXME - CBEnumBitBucket, - (PVOID)list)) - { - WARN("Error: EnumerateRecycleBinW failed\n"); - } - *ppenumIDList = list; - } - else - { - *ppenumIDList = IEnumIDList_Constructor(); - if (*ppenumIDList == NULL) - return E_OUTOFMEMORY; - } - - return S_OK; - -} - -static HRESULT WINAPI RecycleBin_BindToObject(IShellFolder2 *This, LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) -{ - FIXME("(%p, %p, %p, %s, %p) - stub\n", This, pidl, pbc, debugstr_guid(riid), ppv); - return E_NOTIMPL; -} - -static HRESULT WINAPI RecycleBin_BindToStorage(IShellFolder2 *This, LPCITEMIDLIST pidl, LPBC pbc, REFIID riid, void **ppv) -{ - FIXME("(%p, %p, %p, %s, %p) - stub\n", This, pidl, pbc, debugstr_guid(riid), ppv); - return E_NOTIMPL; -} - -static HRESULT WINAPI RecycleBin_CompareIDs(IShellFolder2 *iface, LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) -{ - RecycleBin *This = (RecycleBin *)iface; - - /* TODO */ - TRACE("(%p, %p, %p, %p)\n", This, (void *)lParam, pidl1, pidl2); - if (pidl1->mkid.cb != pidl2->mkid.cb) - return MAKE_HRESULT(SEVERITY_SUCCESS, 0, pidl1->mkid.cb - pidl2->mkid.cb); - return MAKE_HRESULT(SEVERITY_SUCCESS, 0, (unsigned short)memcmp(pidl1->mkid.abID, pidl2->mkid.abID, pidl1->mkid.cb)); -} - -static HRESULT WINAPI RecycleBin_CreateViewObject(IShellFolder2 *iface, HWND hwndOwner, REFIID riid, void **ppv) -{ - RecycleBin *This = (RecycleBin *)iface; - LPSHELLVIEW pShellView; - HRESULT hr = E_NOINTERFACE; - - TRACE("(%p, %p, %s, %p)\n", This, hwndOwner, debugstr_guid(riid), ppv); - - if (!ppv) - return hr; - - *ppv = NULL; - - if (IsEqualIID (riid, &IID_IDropTarget)) - { - WARN ("IDropTarget not implemented\n"); - hr = E_NOTIMPL; - } - else if (IsEqualIID (riid, &IID_IContextMenu) || IsEqualIID (riid, &IID_IContextMenu2)) - { - This->lpContextMenu2 = &recycleBincmVtblFolder; - *ppv = &This->lpContextMenu2; - This->refCount++; - hr = S_OK; - } - else if (IsEqualIID (riid, &IID_IShellView)) - { - pShellView = IShellView_Constructor ((IShellFolder *) iface); - if (pShellView) - { - hr = IShellView_QueryInterface (pShellView, riid, ppv); - IShellView_Release (pShellView); - } - } - else - return hr; - TRACE ("-- (%p)->(interface=%p)\n", This, ppv); - return hr; - -} - -static HRESULT WINAPI RecycleBin_GetAttributesOf(IShellFolder2 *This, UINT cidl, LPCITEMIDLIST *apidl, - SFGAOF *rgfInOut) -{ - TRACE("(%p, %d, {%p, ...}, {%x})\n", This, cidl, apidl[0], (unsigned int)*rgfInOut); - *rgfInOut &= SFGAO_CANMOVE|SFGAO_CANDELETE|SFGAO_HASPROPSHEET|SFGAO_FILESYSTEM; - return S_OK; -} - -static HRESULT WINAPI RecycleBin_GetUIObjectOf(IShellFolder2 *iface, HWND hwndOwner, UINT cidl, LPCITEMIDLIST *apidl, - REFIID riid, UINT *prgfInOut, void **ppv) -{ - IUnknown *pObj = NULL; - HRESULT hr = E_INVALIDARG; - RecycleBin * This = (RecycleBin*)iface; - - TRACE ("(%p)->(%p,%u,apidl=%p, %p %p)\n", This, - hwndOwner, cidl, apidl, prgfInOut, ppv); - - if (!ppv) - return hr; - - *ppv = NULL; - - if ((IsEqualIID (riid, &IID_IContextMenu) || IsEqualIID(riid, &IID_IContextMenu2)) && (cidl >= 1)) - { - This->lpContextMenu2 = &recycleBincmVtblBitbucketItem; - pObj = (IUnknown*)(&This->lpContextMenu2); - This->apidl = apidl[0]; - IUnknown_AddRef(pObj); - hr = S_OK; - } - else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) - { - hr = IShellFolder_QueryInterface (iface, &IID_IDropTarget, (LPVOID *) & pObj); - } - else - hr = E_NOINTERFACE; - - if (SUCCEEDED(hr) && !pObj) - hr = E_OUTOFMEMORY; - - *ppv = pObj; - TRACE ("(%p)->hr=0x%08x\n", This, hr); - return hr; -} - -static HRESULT WINAPI RecycleBin_GetDisplayNameOf(IShellFolder2 *This, LPCITEMIDLIST pidl, SHGDNF uFlags, STRRET *pName) -{ - PIDLRecycleStruct *pFileDetails; - LPWSTR pFileName; - - TRACE("(%p, %p, %x, %p)\n", This, pidl, (unsigned int)uFlags, pName); - - - if (_ILIsBitBucket (pidl)) - { - WCHAR pszPath[100]; - - HCR_GetClassNameW(&CLSID_RecycleBin, pszPath, MAX_PATH); - pName->uType = STRRET_WSTR; - pName->u.pOleStr = StrDupW(pszPath); - return S_OK; - } - - pFileDetails = _ILGetRecycleStruct(pidl); - if (!pFileDetails) - { - pName->u.cStr[0] = 0; - pName->uType = STRRET_CSTR; - return E_INVALIDARG; - } - - pFileName = wcsrchr(pFileDetails->szName, L'\\'); - if (!pFileName) - { - pName->u.cStr[0] = 0; - pName->uType = STRRET_CSTR; - return E_UNEXPECTED; - } - - pName->u.pOleStr = StrDupW(pFileName + 1); - if (pName->u.pOleStr == NULL) - return E_OUTOFMEMORY; - - pName->uType = STRRET_WSTR; - return S_OK; -} - -static HRESULT WINAPI RecycleBin_SetNameOf(IShellFolder2 *This, HWND hwnd, LPCITEMIDLIST pidl, LPCOLESTR pszName, - SHGDNF uFlags, LPITEMIDLIST *ppidlOut) -{ - TRACE("\n"); - return E_FAIL; /* not supported */ -} - -static HRESULT WINAPI RecycleBin_GetDefaultSearchGUID(IShellFolder2 *iface, GUID *pguid) -{ - FIXME("stub\n"); - return E_NOTIMPL; -} - -static HRESULT WINAPI RecycleBin_EnumSearches(IShellFolder2 *iface, IEnumExtraSearch **ppEnum) -{ - FIXME("stub\n"); - *ppEnum = NULL; - return E_NOTIMPL; -} - -static HRESULT WINAPI RecycleBin_GetDefaultColumn(IShellFolder2 *iface, DWORD dwReserved, ULONG *pSort, ULONG *pDisplay) -{ - RecycleBin *This = (RecycleBin *)iface; - TRACE("(%p, %x, %p, %p)\n", This, (unsigned int)dwReserved, pSort, pDisplay); - *pSort = 0; - *pDisplay = 0; - return S_OK; -} - -static HRESULT WINAPI RecycleBin_GetDefaultColumnState(IShellFolder2 *iface, UINT iColumn, SHCOLSTATEF *pcsFlags) -{ - RecycleBin *This = (RecycleBin *)iface; - TRACE("(%p, %d, %p)\n", This, iColumn, pcsFlags); - if (iColumn >= COLUMNS_COUNT) - return E_INVALIDARG; - *pcsFlags = RecycleBinColumns[iColumn].pcsFlags; - return S_OK; -} - -static HRESULT WINAPI RecycleBin_GetDetailsEx(IShellFolder2 *iface, LPCITEMIDLIST pidl, const SHCOLUMNID *pscid, VARIANT *pv) -{ - FIXME("stub\n"); - return E_NOTIMPL; -} - -static HRESULT FormatDateTime(LPWSTR buffer, int size, FILETIME * ft) -{ - FILETIME lft; - SYSTEMTIME time; - int ret; - - FileTimeToLocalFileTime(ft, &lft); - FileTimeToSystemTime(&lft, &time); - - ret = GetDateFormatW(LOCALE_USER_DEFAULT, DATE_SHORTDATE, &time, NULL, buffer, size); - if (ret>0 && ret= COLUMNS_COUNT) - return E_FAIL; - pDetails->fmt = RecycleBinColumns[iColumn].fmt; - pDetails->cxChar = RecycleBinColumns[iColumn].cxChars; - if (pidl == NULL) - { - pDetails->str.uType = STRRET_WSTR; - LoadStringW(shell32_hInstance, RecycleBinColumns[iColumn].column_name_id, buffer, MAX_PATH); - return SHStrDupW(buffer, &pDetails->str.u.pOleStr); - } - - if (iColumn == COLUMN_NAME) - return RecycleBin_GetDisplayNameOf(iface, pidl, SHGDN_NORMAL, &pDetails->str); - - pFileDetails = _ILGetRecycleStruct(pidl); - switch (iColumn) - { - case COLUMN_DATEDEL: - FormatDateTime(buffer, MAX_PATH, &pFileDetails->DeletionTime); - break; - case COLUMN_DELFROM: - pszBackslash = wcsrchr(pFileDetails->szName, L'\\'); - Length = (pszBackslash - pFileDetails->szName); - memcpy((LPVOID)buffer, pFileDetails->szName, Length * sizeof(WCHAR)); - buffer[Length] = L'\0'; - break; - case COLUMN_SIZE: - StrFormatKBSizeW(pFileDetails->FileSize.QuadPart, buffer, MAX_PATH); - break; - case COLUMN_MTIME: - FormatDateTime(buffer, MAX_PATH, &pFileDetails->LastModification); - break; - case COLUMN_TYPE: - szTypeName[0] = L'\0'; - lstrcpyW(buffer,PathFindExtensionW(pFileDetails->szName)); - if (!( HCR_MapTypeToValueW(buffer, buffer, sizeof(buffer)/sizeof(WCHAR), TRUE) && - HCR_MapTypeToValueW(buffer, szTypeName, sizeof(szTypeName)/sizeof(WCHAR), FALSE ))) - { - lstrcpyW (szTypeName, PathFindExtensionW(pFileDetails->szName)); - strcatW(szTypeName, L"-"); - Length = wcslen(szTypeName); - if (LoadStringW(shell32_hInstance, IDS_SHV_COLUMN1, &szTypeName[Length], (sizeof(szTypeName)/sizeof(WCHAR))- Length)) - szTypeName[(sizeof(szTypeName)/sizeof(WCHAR))-1] = L'\0'; - } - pDetails->str.uType = STRRET_WSTR; - return SHStrDupW(szTypeName, &pDetails->str.u.pOleStr); - break; - default: - return E_FAIL; - } - - pDetails->str.uType = STRRET_WSTR; - return SHStrDupW(buffer, &pDetails->str.u.pOleStr); -} - -static HRESULT WINAPI RecycleBin_MapColumnToSCID(IShellFolder2 *iface, UINT iColumn, SHCOLUMNID *pscid) -{ - RecycleBin *This = (RecycleBin *)iface; - TRACE("(%p, %d, %p)\n", This, iColumn, pscid); - if (iColumn>=COLUMNS_COUNT) - return E_INVALIDARG; - pscid->fmtid = *RecycleBinColumns[iColumn].fmtId; - pscid->pid = RecycleBinColumns[iColumn].pid; - return S_OK; -} - -static const IShellFolder2Vtbl recycleBinVtbl = -{ - /* IUnknown */ - RecycleBin_QueryInterface, - RecycleBin_AddRef, - RecycleBin_Release, - - /* IShellFolder */ - RecycleBin_ParseDisplayName, - RecycleBin_EnumObjects, - RecycleBin_BindToObject, - RecycleBin_BindToStorage, - RecycleBin_CompareIDs, - RecycleBin_CreateViewObject, - RecycleBin_GetAttributesOf, - RecycleBin_GetUIObjectOf, - RecycleBin_GetDisplayNameOf, - RecycleBin_SetNameOf, - - /* IShellFolder2 */ - RecycleBin_GetDefaultSearchGUID, - RecycleBin_EnumSearches, - RecycleBin_GetDefaultColumn, - RecycleBin_GetDefaultColumnState, - RecycleBin_GetDetailsEx, - RecycleBin_GetDetailsOf, - RecycleBin_MapColumnToSCID -}; - -static HRESULT WINAPI RecycleBin_IPersistFolder2_GetClassID(IPersistFolder2 *This, CLSID *pClassID) -{ - TRACE("(%p, %p)\n", This, pClassID); - if (This == NULL || pClassID == NULL) - return E_INVALIDARG; - memcpy(pClassID, &CLSID_RecycleBin, sizeof(CLSID)); - return S_OK; -} - -static HRESULT WINAPI RecycleBin_IPersistFolder2_Initialize(IPersistFolder2 *iface, LPCITEMIDLIST pidl) -{ - RecycleBin *This = impl_from_IPersistFolder(iface); - TRACE("(%p, %p)\n", This, pidl); - - This->pidl = ILClone(pidl); - if (This->pidl == NULL) - return E_OUTOFMEMORY; - return S_OK; -} - -static HRESULT WINAPI RecycleBin_IPersistFolder2_GetCurFolder(IPersistFolder2 *iface, LPITEMIDLIST *ppidl) -{ - RecycleBin *This = impl_from_IPersistFolder(iface); - TRACE("\n"); - *ppidl = ILClone(This->pidl); - return S_OK; -} - -static HRESULT WINAPI RecycleBin_IPersistFolder2_QueryInterface(IPersistFolder2 *This, REFIID riid, void **ppvObject) -{ - return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IPersistFolder(This), riid, ppvObject); -} - -static ULONG WINAPI RecycleBin_IPersistFolder2_AddRef(IPersistFolder2 *This) -{ - return RecycleBin_AddRef((IShellFolder2 *)impl_from_IPersistFolder(This)); -} - -static ULONG WINAPI RecycleBin_IPersistFolder2_Release(IPersistFolder2 *This) -{ - return RecycleBin_Release((IShellFolder2 *)impl_from_IPersistFolder(This)); -} - -static const IPersistFolder2Vtbl recycleBinPersistVtbl = -{ - /* IUnknown */ - RecycleBin_IPersistFolder2_QueryInterface, - RecycleBin_IPersistFolder2_AddRef, - RecycleBin_IPersistFolder2_Release, - - /* IPersist */ - RecycleBin_IPersistFolder2_GetClassID, - /* IPersistFolder */ - RecycleBin_IPersistFolder2_Initialize, - /* IPersistFolder2 */ - RecycleBin_IPersistFolder2_GetCurFolder -}; - -/************************************************************************* - * BitBucket IShellExtInit interface - */ - -static HRESULT WINAPI -RecycleBin_ExtInit_QueryInterface( IShellExtInit* iface, REFIID riid, void** ppvObject ) -{ - return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IShellExtInit(iface), riid, ppvObject); -} - -static ULONG WINAPI -RecycleBin_ExtInit_AddRef( IShellExtInit* iface ) -{ - return RecycleBin_AddRef((IShellFolder2 *)impl_from_IShellExtInit(iface)); -} - -static ULONG WINAPI -RecycleBin_ExtInit_Release( IShellExtInit* iface ) -{ - return RecycleBin_Release((IShellFolder2 *)impl_from_IShellExtInit(iface)); -} - -static HRESULT WINAPI -RecycleBin_ExtInit_Initialize( IShellExtInit* iface, LPCITEMIDLIST pidlFolder, - IDataObject *pdtobj, HKEY hkeyProgID ) -{ - RecycleBin *This = impl_from_IShellExtInit(iface); - - TRACE("%p %p %p %p\n", This, pidlFolder, pdtobj, hkeyProgID ); - return S_OK; -} - - -static const IShellExtInitVtbl eivt = -{ - RecycleBin_ExtInit_QueryInterface, - RecycleBin_ExtInit_AddRef, - RecycleBin_ExtInit_Release, - RecycleBin_ExtInit_Initialize -}; - - -/************************************************************************* - * BitBucket context menu - * - */ - -static HRESULT WINAPI -RecycleBin_IContextMenu2Folder_QueryInterface( IContextMenu2* iface, REFIID riid, void** ppvObject ) -{ - return RecycleBin_QueryInterface((IShellFolder2 *)impl_from_IContextMenu2(iface), riid, ppvObject); -} - -static ULONG WINAPI -RecycleBin_IContextMenu2Folder_AddRef( IContextMenu2* iface ) -{ - return RecycleBin_AddRef((IShellFolder2 *)impl_from_IContextMenu2(iface)); -} - -static ULONG WINAPI -RecycleBin_IContextMenu2Folder_Release( IContextMenu2* iface ) -{ - return RecycleBin_Release((IShellFolder2 *)impl_from_IContextMenu2(iface)); -} - -static HRESULT WINAPI -RecycleBin_IContextMenu2Folder_QueryContextMenu( IContextMenu2* iface, HMENU hmenu, UINT indexMenu, - UINT idCmdFirst, UINT idCmdLast, UINT uFlags ) -{ - WCHAR szBuffer[100]; - MENUITEMINFOW mii; - int id = 1; - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("%p %p %u %u %u %u\n", This, - hmenu, indexMenu, idCmdFirst, idCmdLast, uFlags ); - - if ( !hmenu ) - return E_INVALIDARG; - - memset( &mii, 0, sizeof(mii) ); - mii.cbSize = sizeof(mii); - mii.fMask = MIIM_TYPE | MIIM_ID | MIIM_STATE; - szBuffer[0] = L'\0'; - LoadStringW(shell32_hInstance, IDS_OPEN, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)); - szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; - mii.dwTypeData = (LPWSTR)szBuffer; - mii.cch = strlenW( mii.dwTypeData ); - mii.wID = idCmdFirst + id++; - mii.fState = MFS_ENABLED; - mii.fType = MFT_STRING; - - if (!InsertMenuItemW( hmenu, indexMenu, TRUE, &mii )) - return E_FAIL; - This->iIdOpen = 1; - - mii.fState = MFS_ENABLED; - szBuffer[0] = L'\0'; - LoadStringW(shell32_hInstance, IDS_EMPTY_BITBUCKET, szBuffer, sizeof(szBuffer)/sizeof(WCHAR)); - szBuffer[(sizeof(szBuffer)/sizeof(WCHAR))-1] = L'\0'; - mii.cch = strlenW( mii.dwTypeData ); - mii.wID = idCmdFirst + id++; - if (!InsertMenuItemW( hmenu, idCmdLast, TRUE, &mii )) - { - TRACE("RecycleBin_IContextMenu2Folder_QueryContextMenu failed to insert item properties"); - return E_FAIL; - } - This->iIdEmpty = 2; - return MAKE_HRESULT( SEVERITY_SUCCESS, 0, id ); -} - -static HRESULT WINAPI -RecycleBin_IContextMenu2Folder_InvokeCommand( IContextMenu2* iface, LPCMINVOKECOMMANDINFO lpici ) -{ - HRESULT hr; - LPSHELLBROWSER lpSB; - LPSHELLVIEW lpSV = NULL; - - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("%p %p verb %p\n", This, lpici, lpici->lpVerb); - - if ( LOWORD(lpici->lpVerb) == This->iIdEmpty) - { - // FIXME - // path & flags - hr = SHEmptyRecycleBinW(lpici->hwnd, L"C:\\", 0); - TRACE("result %x\n", hr); - if (hr != S_OK) - { - return hr; - } - - if((lpSB = (LPSHELLBROWSER)SendMessageA(lpici->hwnd, CWM_GETISHELLBROWSER,0,0))) - { - if(SUCCEEDED(IShellBrowser_QueryActiveShellView(lpSB, &lpSV))) - { - IShellView_Refresh(lpSV); - } - } - } - - - if ( LOWORD(lpici->lpVerb) == This->iIdProperties) - { - WCHAR szDrive = 'C'; - SH_ShowRecycleBinProperties(szDrive); - return S_OK; - } - - return S_OK; -} - -static HRESULT WINAPI -RecycleBin_IContextMenu2Folder_GetCommandString( IContextMenu2* iface, UINT_PTR idCmd, UINT uType, - UINT* pwReserved, LPSTR pszName, UINT cchMax ) -{ - RecycleBin * This = impl_from_IContextMenu2(iface); - - FIXME("%p %lu %u %p %p %u\n", This, - idCmd, uType, pwReserved, pszName, cchMax ); - - return E_NOTIMPL; -} - -/************************************************************************** -* RecycleBin_IContextMenu2Item_HandleMenuMsg() -*/ -static HRESULT WINAPI RecycleBin_IContextMenu2Folder_HandleMenuMsg( - IContextMenu2 *iface, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("RecycleBin_IContextMenu2Item_IContextMenu2Folder_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); - - return E_NOTIMPL; -} - - -static const IContextMenu2Vtbl recycleBincmVtblFolder = -{ - RecycleBin_IContextMenu2Folder_QueryInterface, - RecycleBin_IContextMenu2Folder_AddRef, - RecycleBin_IContextMenu2Folder_Release, - RecycleBin_IContextMenu2Folder_QueryContextMenu, - RecycleBin_IContextMenu2Folder_InvokeCommand, - RecycleBin_IContextMenu2Folder_GetCommandString, - RecycleBin_IContextMenu2Folder_HandleMenuMsg -}; - - -/************************************************************************** -* IContextMenu2 Bitbucket Item Implementation -*/ - -/************************************************************************ - * RecycleBin_IContextMenu2Item_QueryInterface - */ -static HRESULT WINAPI RecycleBin_IContextMenu2Item_QueryInterface(IContextMenu2 * iface, REFIID iid, LPVOID * ppvObject) -{ - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("(%p)\n", This); - - return RecycleBin_QueryInterface((IShellFolder2*)This, iid, ppvObject); -} - -/************************************************************************ - * RecycleBin_IContextMenu2Item_AddRef - */ -static ULONG WINAPI RecycleBin_IContextMenu2Item_AddRef(IContextMenu2 * iface) -{ - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("(%p)->(count=%u)\n", This, This->refCount); - - return RecycleBin_AddRef((IShellFolder2*)This); -} - -/************************************************************************ - * RecycleBin_IContextMenu2Item_Release - */ -static ULONG WINAPI RecycleBin_IContextMenu2Item_Release(IContextMenu2 * iface) -{ - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("(%p)->(count=%u)\n", This, This->refCount); - - return RecycleBin_Release((IShellFolder2*)This); -} - -/************************************************************************** -* RecycleBin_IContextMenu2Item_QueryContextMenu() -*/ -static HRESULT WINAPI RecycleBin_IContextMenu2Item_QueryContextMenu( - IContextMenu2 *iface, - HMENU hMenu, - UINT indexMenu, - UINT idCmdFirst, - UINT idCmdLast, - UINT uFlags) -{ - char szBuffer[30] = {0}; - ULONG Count = 1; - - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("(%p)->(hmenu=%p indexmenu=%x cmdfirst=%x cmdlast=%x flags=%x )\n", - This, hMenu, indexMenu, idCmdFirst, idCmdLast, uFlags); - - if (LoadStringA(shell32_hInstance, IDS_RESTORE, szBuffer, sizeof(szBuffer)/sizeof(char))) - { - szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_ENABLED); - Count++; - } - - if (LoadStringA(shell32_hInstance, IDS_CUT, szBuffer, sizeof(szBuffer)/sizeof(char))) - { - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); - szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); - } - - if (LoadStringA(shell32_hInstance, IDS_DELETE, szBuffer, sizeof(szBuffer)/sizeof(char))) - { - szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_STRING, szBuffer, MFS_ENABLED); - } - - if (LoadStringA(shell32_hInstance, IDS_PROPERTIES, szBuffer, sizeof(szBuffer)/sizeof(char))) - { - szBuffer[(sizeof(szBuffer)/sizeof(char))-1] = L'\0'; - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count++, MFT_SEPARATOR, NULL, MFS_ENABLED); - _InsertMenuItem(hMenu, indexMenu++, TRUE, idCmdFirst + Count, MFT_STRING, szBuffer, MFS_DEFAULT); - } - - return MAKE_HRESULT(SEVERITY_SUCCESS, 0, Count); -} - - -/************************************************************************** -* RecycleBin_IContextMenu2Item_InvokeCommand() -*/ -static HRESULT WINAPI RecycleBin_IContextMenu2Item_InvokeCommand( - IContextMenu2 *iface, - LPCMINVOKECOMMANDINFO lpcmi) -{ - - SEARCH_CONTEXT Context; - RecycleBin * This = impl_from_IContextMenu2(iface); - static LPCWSTR szDrive = L"C:\\"; - - TRACE("(%p)->(invcom=%p verb=%p wnd=%p)\n",This,lpcmi,lpcmi->lpVerb, lpcmi->hwnd); - - if (lpcmi->lpVerb == MAKEINTRESOURCE(1) || lpcmi->lpVerb == MAKEINTRESOURCE(5)) - { - Context.pFileDetails = _ILGetRecycleStruct(This->apidl); - Context.bFound = FALSE; - - EnumerateRecycleBinW(szDrive, CBSearchBitBucket, (PVOID)&Context); - if (!Context.bFound) - return E_FAIL; - - if (lpcmi->lpVerb == MAKEINTRESOURCE(1)) - { - /* restore file */ - if (RestoreFile(Context.hDeletedFile)) - return S_OK; - else - return E_FAIL; - } - else - { - FIXME("implement delete\n"); - CloseRecycleBinHandle(Context.hDeletedFile); - return E_NOTIMPL; - } - } - else if (lpcmi->lpVerb == MAKEINTRESOURCE(3)) - { - FIXME("implement cut\n"); - return E_NOTIMPL; - } - else if (lpcmi->lpVerb == MAKEINTRESOURCE(7)) - { - FIXME("implement properties\n"); - return E_NOTIMPL; - } - - return S_OK; -} - -/************************************************************************** - * RecycleBin_IContextMenu2Item_GetCommandString() - * - */ -static HRESULT WINAPI RecycleBin_IContextMenu2Item_GetCommandString( - IContextMenu2 *iface, - UINT_PTR idCommand, - UINT uFlags, - UINT* lpReserved, - LPSTR lpszName, - UINT uMaxNameLen) -{ - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("(%p)->(idcom=%lx flags=%x %p name=%p len=%x)\n",This, idCommand, uFlags, lpReserved, lpszName, uMaxNameLen); - - - return E_FAIL; -} - - - -/************************************************************************** -* RecycleBin_IContextMenu2Item_HandleMenuMsg() -*/ -static HRESULT WINAPI RecycleBin_IContextMenu2Item_HandleMenuMsg( - IContextMenu2 *iface, - UINT uMsg, - WPARAM wParam, - LPARAM lParam) -{ - RecycleBin * This = impl_from_IContextMenu2(iface); - - TRACE("RecycleBin_IContextMenu2Item_HandleMenuMsg (%p)->(msg=%x wp=%lx lp=%lx)\n",This, uMsg, wParam, lParam); - - return E_NOTIMPL; -} - -static const IContextMenu2Vtbl recycleBincmVtblBitbucketItem = -{ - RecycleBin_IContextMenu2Item_QueryInterface, - RecycleBin_IContextMenu2Item_AddRef, - RecycleBin_IContextMenu2Item_Release, - RecycleBin_IContextMenu2Item_QueryContextMenu, - RecycleBin_IContextMenu2Item_InvokeCommand, - RecycleBin_IContextMenu2Item_GetCommandString, - RecycleBin_IContextMenu2Item_HandleMenuMsg -}; - - -void toggleNukeOnDeleteOption(HWND hwndDlg, BOOL bEnable) -{ - if (bEnable) - { - SendDlgItemMessage(hwndDlg, 14001, BM_SETCHECK, BST_UNCHECKED, 0); - EnableWindow(GetDlgItem(hwndDlg, 14002), FALSE); - SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_CHECKED, 0); - } - else - { - SendDlgItemMessage(hwndDlg, 14001, BM_SETCHECK, BST_CHECKED, 0); - EnableWindow(GetDlgItem(hwndDlg, 14002), TRUE); - SendDlgItemMessage(hwndDlg, 14003, BM_SETCHECK, BST_UNCHECKED, 0); - } -} - - -void -InitializeBitBucketDlg(HWND hwndDlg, WCHAR DefaultDrive) -{ - WCHAR CurDrive = L'A'; - WCHAR szDrive[] = L"A:\\"; - DWORD dwDrives; - WCHAR szName[100]; - WCHAR szVolume[100]; - DWORD MaxComponent, Flags; - DWORD dwSerial; - LVCOLUMNW lc; - HWND hDlgCtrl; - LVITEMW li; - INT itemCount; - ULARGE_INTEGER TotalNumberOfFreeBytes, TotalNumberOfBytes, FreeBytesAvailable; - RECT rect; - int columnSize; - int defIndex = 0; - DWORD dwSize; - PDRIVE_ITEM_CONTEXT pItem = NULL, pDefault = NULL, pFirst = NULL; - - hDlgCtrl = GetDlgItem(hwndDlg, 14000); - - if (!LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_LOCATION, szVolume, sizeof(szVolume) / sizeof(WCHAR))) - szVolume[0] = 0; - - GetClientRect(hDlgCtrl, &rect); - - memset(&lc, 0, sizeof(LV_COLUMN) ); - lc.mask = LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM | LVCF_FMT; - - columnSize = 140; //FIXME - lc.iSubItem = 0; - lc.fmt = LVCFMT_FIXED_WIDTH; - lc.cx = columnSize; - lc.cchTextMax = lstrlenW(szVolume); - lc.pszText = szVolume; - (void)ListView_InsertColumnW(hDlgCtrl, 0, &lc); - - if (!LoadStringW(shell32_hInstance, IDS_RECYCLEBIN_DISKSPACE, szVolume, sizeof(szVolume) / sizeof(WCHAR))) - szVolume[0] = 0; - - lc.iSubItem = 1; - lc.cx = rect.right - rect.left - columnSize; - lc.cchTextMax = lstrlenW(szVolume); - lc.pszText = szVolume; - (void)ListView_InsertColumnW(hDlgCtrl, 1, &lc); - - dwDrives = GetLogicalDrives(); - itemCount = 0; - do - { - if ((dwDrives & 0x1)) - { - UINT Type = GetDriveTypeW(szDrive); - if (Type == DRIVE_FIXED) //FIXME - { - if (!GetVolumeInformationW(szDrive, szName, sizeof(szName) / sizeof(WCHAR), &dwSerial, &MaxComponent, &Flags, NULL, 0)) - { - szName[0] = 0; - dwSerial = -1; - } - - sprintfW(szVolume, L"%s (%c)", szName, szDrive[0]); - memset(&li, 0x0, sizeof(LVITEMW)); - li.mask = LVIF_TEXT | LVIF_PARAM; - li.iSubItem = 0; - li.pszText = szVolume; - li.iItem = itemCount; - (void)ListView_InsertItemW(hDlgCtrl, &li); - if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailable , &TotalNumberOfBytes, &TotalNumberOfFreeBytes)) - { - if (StrFormatByteSizeW(TotalNumberOfFreeBytes.QuadPart, szVolume, sizeof(szVolume) / sizeof(WCHAR))) - { - - pItem = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(DRIVE_ITEM_CONTEXT)); - if (pItem) - { - sprintfW(szName, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\%04X-%04X", LOWORD(dwSerial), HIWORD(dwSerial)); - dwSize = sizeof(DWORD); - RegGetValueW(HKEY_CURRENT_USER, szName, L"MaxCapacity", RRF_RT_DWORD, NULL, &pItem->dwMaxCapacity, &dwSize); - dwSize = sizeof(DWORD); - RegGetValueW(HKEY_CURRENT_USER, szName, L"NukeOnDelete", RRF_RT_DWORD, NULL, &pItem->dwNukeOnDelete, &dwSize); - pItem->dwSerial = dwSerial; - li.mask = LVIF_PARAM; - li.lParam = (LPARAM)pItem; - (void)ListView_SetItemW(hDlgCtrl, &li); - if (CurDrive == DefaultDrive) - { - defIndex = itemCount; - pDefault = pItem; - } - } - if (!pFirst) - pFirst = pItem; - - li.mask = LVIF_TEXT; - li.iSubItem = 1; - li.pszText = szVolume; - li.iItem = itemCount; - (void)ListView_SetItemW(hDlgCtrl, &li); - } - } - itemCount++; - } - } - CurDrive++; - szDrive[0] = CurDrive; - dwDrives = (dwDrives >> 1); - }while(dwDrives); - - if (!pDefault) - pDefault = pFirst; - if (pDefault) - { - toggleNukeOnDeleteOption(hwndDlg, pDefault->dwNukeOnDelete); - SetDlgItemInt(hwndDlg, 14002, pDefault->dwMaxCapacity, FALSE); - } - ZeroMemory(&li, sizeof(li)); - li.mask = LVIF_STATE; - li.stateMask = (UINT)-1; - li.state = LVIS_FOCUSED|LVIS_SELECTED; - li.iItem = defIndex; - (void)ListView_SetItemW(hDlgCtrl, &li); - -} - -static BOOL StoreDriveSettings(HWND hwndDlg) -{ - int iCount, iIndex; - HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); - LVITEMW li; - PDRIVE_ITEM_CONTEXT pItem; - HKEY hKey, hSubKey; - WCHAR szSerial[20]; - DWORD dwSize; - - - if (RegOpenKeyExW(HKEY_CURRENT_USER, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume", 0, KEY_WRITE, &hKey) != ERROR_SUCCESS) - return FALSE; - - iCount = ListView_GetItemCount(hDlgCtrl); - - ZeroMemory(&li, sizeof(li)); - li.mask = LVIF_PARAM; - - for(iIndex = 0; iIndex < iCount; iIndex++) - { - li.iItem = iIndex; - if (ListView_GetItemW(hDlgCtrl, &li)) - { - pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; - sprintfW(szSerial, L"%04X-%04X", LOWORD(pItem->dwSerial), HIWORD(pItem->dwSerial)); - if (RegCreateKeyExW(hKey, szSerial, 0, NULL, 0, KEY_WRITE, NULL, &hSubKey, NULL) == ERROR_SUCCESS) - { - dwSize = sizeof(DWORD); - RegSetValueExW(hSubKey, L"NukeOnDelete", 0, REG_DWORD, (LPVOID)&pItem->dwNukeOnDelete, dwSize); - dwSize = sizeof(DWORD); - RegSetValueExW(hSubKey, L"MaxCapacity", 0, REG_DWORD, (LPVOID)&pItem->dwMaxCapacity, dwSize); - RegCloseKey(hSubKey); - } - } - } - RegCloseKey(hKey); - return TRUE; - -} - -static VOID FreeDriveItemContext(HWND hwndDlg) -{ - int iCount, iIndex; - HWND hDlgCtrl = GetDlgItem(hwndDlg, 14000); - LVITEMW li; - - iCount = ListView_GetItemCount(hDlgCtrl); - - ZeroMemory(&li, sizeof(li)); - li.mask = LVIF_PARAM; - - for(iIndex = 0; iIndex < iCount; iIndex++) - { - li.iItem = iIndex; - if (ListView_GetItemW(hDlgCtrl, &li)) - { - HeapFree(GetProcessHeap(), 0, (LPVOID)li.lParam); - } - } -} - -INT -GetDefaultItem(HWND hwndDlg, LVITEMW * li) -{ - HWND hDlgCtrl; - UINT iItemCount, iIndex; - - hDlgCtrl = GetDlgItem(hwndDlg, 14000); - if (!hDlgCtrl) - return -1; - - iItemCount = ListView_GetItemCount(hDlgCtrl); - if (!iItemCount) - return -1; - - ZeroMemory(li, sizeof(LVITEMW)); - li->mask = LVIF_PARAM | LVIF_STATE; - li->stateMask = (UINT)-1; - for (iIndex = 0; iIndex < iItemCount; iIndex++) - { - li->iItem = iIndex; - if (ListView_GetItemW(hDlgCtrl, li)) - { - if (li->state & LVIS_SELECTED) - return iIndex; - } - } - return -1; - -} - -INT_PTR -CALLBACK -BitBucketDlg( - HWND hwndDlg, - UINT uMsg, - WPARAM wParam, - LPARAM lParam -) -{ - LPPSHNOTIFY lppsn; - LPNMLISTVIEW lppl; - LVITEMW li; - PDRIVE_ITEM_CONTEXT pItem; - BOOL bSuccess; - UINT uResult; - - switch(uMsg) - { - case WM_INITDIALOG: - InitializeBitBucketDlg(hwndDlg, (WCHAR)lParam); - if (GetDlgCtrlID((HWND)wParam) != 14000) - { - SetFocus(GetDlgItem(hwndDlg, 14000)); - return FALSE; - } - return TRUE; - case WM_COMMAND: - switch(LOWORD(wParam)) - { - case 14001: - toggleNukeOnDeleteOption(hwndDlg, FALSE); - PropSheet_Changed(GetParent(hwndDlg), hwndDlg); - break; - case 14003: - toggleNukeOnDeleteOption(hwndDlg, TRUE); - PropSheet_Changed(GetParent(hwndDlg), hwndDlg); - break; - case 14004: - PropSheet_Changed(GetParent(hwndDlg), hwndDlg); - break; - } - break; - case WM_NOTIFY: - lppsn = (LPPSHNOTIFY) lParam; - lppl = (LPNMLISTVIEW) lParam; - if (lppsn->hdr.code == PSN_APPLY) - { - if (GetDefaultItem(hwndDlg, &li) > -1) - { - pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; - if (pItem) - { - uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); - if (bSuccess) - pItem->dwMaxCapacity = uResult; - if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) - pItem->dwNukeOnDelete = TRUE; - else - pItem->dwNukeOnDelete = FALSE; - } - } - if (StoreDriveSettings(hwndDlg)) - { - SetWindowLong( hwndDlg, DWL_MSGRESULT, PSNRET_NOERROR ); - return TRUE; - } - } - else if (lppl->hdr.code == LVN_ITEMCHANGING) - { - ZeroMemory(&li, sizeof(li)); - li.mask = LVIF_PARAM; - li.iItem = lppl->iItem; - if (!ListView_GetItemW(lppl->hdr.hwndFrom, &li)) - return TRUE; - - pItem = (PDRIVE_ITEM_CONTEXT)li.lParam; - if (!pItem) - return TRUE; - - if (!(lppl->uOldState & LVIS_FOCUSED) && (lppl->uNewState & LVIS_FOCUSED)) - { - /* new focused item */ - toggleNukeOnDeleteOption(lppl->hdr.hwndFrom, pItem->dwNukeOnDelete); - SetDlgItemInt(hwndDlg, 14002, pItem->dwMaxCapacity, FALSE); - } - else if ((lppl->uOldState & LVIS_FOCUSED) && !(lppl->uNewState & LVIS_FOCUSED)) - { - /* kill focus */ - uResult = GetDlgItemInt(hwndDlg, 14002, &bSuccess, FALSE); - if (bSuccess) - pItem->dwMaxCapacity = uResult; - if (SendDlgItemMessageW(hwndDlg, 14003, BM_GETCHECK, 0, 0) == BST_CHECKED) - pItem->dwNukeOnDelete = TRUE; - else - pItem->dwNukeOnDelete = FALSE; - } - return TRUE; - - } - break; - case WM_DESTROY: - FreeDriveItemContext(hwndDlg); - break; - } - return FALSE; -} - -BOOL SH_ShowRecycleBinProperties(WCHAR sDrive) -{ - HPROPSHEETPAGE hpsp[1]; - PROPSHEETHEADERW psh; - HPROPSHEETPAGE hprop; - - BOOL ret; - - - ZeroMemory(&psh, sizeof(PROPSHEETHEADERW)); - psh.dwSize = sizeof(PROPSHEETHEADERW); - psh.dwFlags = PSP_DEFAULT | PSH_PROPTITLE; - psh.pszCaption = MAKEINTRESOURCEW(IDS_RECYCLEBIN_FOLDER_NAME); - psh.hwndParent = NULL; - psh.u3.phpage = hpsp; - psh.hInstance = shell32_hInstance; - - hprop = SH_CreatePropertySheetPage("BITBUCKET_PROPERTIES_DLG", BitBucketDlg, (LPARAM)sDrive, NULL); - if (!hprop) - { - ERR("Failed to create property sheet\n"); - return FALSE; - } - hpsp[psh.nPages] = hprop; - psh.nPages++; - - - ret = PropertySheetW(&psh); - if (ret < 0) - return FALSE; - else - return TRUE; -} - -BOOL -TRASH_CanTrashFile(LPCWSTR wszPath) -{ - LONG ret; - DWORD dwNukeOnDelete, dwType, VolSerialNumber, MaxComponentLength; - DWORD FileSystemFlags, dwSize, dwDisposition; - HKEY hKey; - WCHAR szBuffer[10]; - WCHAR szKey[150] = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Bitbucket\\Volume\\"; - - if (wszPath[1] != L':') - { - /* path is UNC */ - return FALSE; - } - - if (GetDriveTypeW(wszPath) != DRIVE_FIXED) - { - /* no bitbucket on removable media */ - return FALSE; - } - - if (!GetVolumeInformationW(wszPath, NULL, 0, &VolSerialNumber, &MaxComponentLength, &FileSystemFlags, NULL, 0)) - { - ERR("GetVolumeInformationW failed with %u\n", GetLastError()); - return FALSE; - } - - sprintfW(szBuffer, L"%04X-%04X", LOWORD(VolSerialNumber), HIWORD(VolSerialNumber)); - wcscat(szKey, szBuffer); - - if (RegCreateKeyExW(HKEY_CURRENT_USER, szKey, 0, NULL, 0, KEY_WRITE, NULL, &hKey, &dwDisposition) != ERROR_SUCCESS) - { - ERR("RegCreateKeyExW failed\n"); - return FALSE; - } - - if (dwDisposition & REG_CREATED_NEW_KEY) - { - /* per default move to bitbucket */ - dwNukeOnDelete = 0; - RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); - /* per default unlimited size */ - dwSize = -1; - RegSetValueExW(hKey, L"MaxCapacity", 0, REG_DWORD, (LPBYTE)&dwSize, sizeof(DWORD)); - RegCloseKey(hKey); - return TRUE; - } - else - { - dwSize = sizeof(dwNukeOnDelete); - ret = RegQueryValueExW(hKey, L"NukeOnDelete", NULL, &dwType, (LPBYTE)&dwNukeOnDelete, &dwSize); - if (ret != ERROR_SUCCESS) - { - if (ret == ERROR_FILE_NOT_FOUND) - { - /* restore key and enable bitbucket */ - dwNukeOnDelete = 0; - RegSetValueExW(hKey, L"NukeOnDelete", 0, REG_DWORD, (LPBYTE)&dwNukeOnDelete, sizeof(DWORD)); - } - RegCloseKey(hKey); - return TRUE; - } - else if (dwNukeOnDelete) - { - /* do not delete to bitbucket */ - RegCloseKey(hKey); - return FALSE; - } - /* FIXME - * check if bitbucket is full - */ - RegCloseKey(hKey); - return TRUE; - } -} - -BOOL -TRASH_TrashFile(LPCWSTR wszPath) -{ - TRACE("(%s)\n", debugstr_w(wszPath)); - return DeleteFileToRecycleBinW(wszPath); -} - -/************************************************************************* - * SHUpdateRecycleBinIcon [SHELL32.@] - * - * Undocumented - */ -HRESULT WINAPI SHUpdateRecycleBinIcon(void) -{ - FIXME("stub\n"); - return S_OK; -} diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild index 33687610aa8..2f79efe89e6 100644 --- a/reactos/dll/win32/shell32/shell32.rbuild +++ b/reactos/dll/win32/shell32/shell32.rbuild @@ -71,7 +71,7 @@ shell32.spec fprop.c drive.c - recyclebin.c + shfldr_recyclebin.c she_ocmenu.c shv_item_new.c folder_options.c From fe3033e3eae428f9fd840526f532e8901c89ed35 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Mon, 11 Aug 2008 14:57:00 +0000 Subject: [PATCH 268/304] - add flags for SHEmptyRecycleBin svn path=/trunk/; revision=35278 --- reactos/include/psdk/shellapi.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/reactos/include/psdk/shellapi.h b/reactos/include/psdk/shellapi.h index e952d5a0dff..0ec5510a089 100644 --- a/reactos/include/psdk/shellapi.h +++ b/reactos/include/psdk/shellapi.h @@ -304,6 +304,10 @@ typedef struct _SHNAMEMAPPINGW { } SHNAMEMAPPINGW, *LPSHNAMEMAPPINGW; #include +#define SHERB_NOCONFIRMATION 0x1 +#define SHERB_NOPROGRESSUI 0x2 +#define SHERB_NOSOUND 0x4 + LPWSTR * WINAPI CommandLineToArgvW(LPCWSTR,int*); void WINAPI DragAcceptFiles(HWND,BOOL); void WINAPI DragFinish(HDROP); From 6cf2b6c90d289680817e0c697bfdff72718729a2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herv=C3=A9=20Poussineau?= Date: Mon, 11 Aug 2008 17:31:51 +0000 Subject: [PATCH 269/304] Expand recyclebin API with DeleteFileHandleToRecycleBin and GetRecycleBinDetails svn path=/trunk/; revision=35280 --- reactos/lib/recyclebin/recyclebin.c | 32 +++++++++++++++++++++++++++++ reactos/lib/recyclebin/recyclebin.h | 20 ++++++++++++++++++ 2 files changed, 52 insertions(+) diff --git a/reactos/lib/recyclebin/recyclebin.c b/reactos/lib/recyclebin/recyclebin.c index 1a925a41253..7bee36c62d8 100644 --- a/reactos/lib/recyclebin/recyclebin.c +++ b/reactos/lib/recyclebin/recyclebin.c @@ -93,6 +93,26 @@ cleanup: return FALSE; } +BOOL WINAPI +DeleteFileHandleToRecycleBin( + IN HANDLE hDeletedFile) +{ + IRecycleBinFile *rbf = (IRecycleBinFile *)hDeletedFile; + HRESULT hr; + + TRACE("(%p)\n", hDeletedFile); + + hr = IRecycleBinFile_Delete(rbf); + + if (SUCCEEDED(hr)) + return TRUE; + if (HRESULT_FACILITY(hr) == FACILITY_WIN32) + SetLastError(HRESULT_CODE(hr)); + else + SetLastError(ERROR_GEN_FAILURE); + return FALSE; +} + BOOL WINAPI EmptyRecycleBinA( IN LPCSTR pszRoot OPTIONAL) @@ -334,6 +354,18 @@ cleanup: return FALSE; } +BOOL WINAPI +GetRecycleBinDetails( + IN LPCWSTR pszVolume OPTIONAL, + OUT ULARGE_INTEGER *pulTotalItems, + OUT ULARGE_INTEGER *pulTotalSize) +{ + pulTotalItems->QuadPart = 0; + pulTotalSize->QuadPart = 0; + SetLastError(ERROR_CALL_NOT_IMPLEMENTED); + return FALSE; +} + BOOL WINAPI RestoreFile( IN HANDLE hDeletedFile) diff --git a/reactos/lib/recyclebin/recyclebin.h b/reactos/lib/recyclebin/recyclebin.h index 873751dc383..a1f64e9373b 100644 --- a/reactos/lib/recyclebin/recyclebin.h +++ b/reactos/lib/recyclebin/recyclebin.h @@ -72,6 +72,15 @@ DeleteFileToRecycleBinW( #define DeleteFileToRecycleBin DeleteFileToRecycleBinA #endif +/* Moves a file to the recycle bin. + * hDeletedFile: handle of the deleted file to delete + * Returns TRUE if operation succeeded, FALSE otherwise. + * Remark: The handle is obtained in the PENUMERATE_RECYCLEBIN_CALLBACK callback + */ +BOOL WINAPI +DeleteFileHandleToRecycleBin( + IN HANDLE hDeletedFile); + /* Removes all elements contained in a recycle bin * pszRoot: the name of the drive containing the recycle bin * Returns TRUE if operation succeeded, FALSE otherwise. @@ -138,6 +147,17 @@ GetDeletedFileDetailsW( #define GetDeletedFileDetails GetDeletedFileDetailsA #endif +/* Get details about a whole recycle bin + * pszVolume: + * pulTotalItems: + * pulTotalSize + */ +BOOL WINAPI +GetRecycleBinDetails( + IN LPCWSTR pszVolume OPTIONAL, + OUT ULARGE_INTEGER *pulTotalItems, + OUT ULARGE_INTEGER *pulTotalSize); + /* Restores a deleted file * hDeletedFile: handle of the deleted file to restore * Returns TRUE if operation succeeded, FALSE otherwise. From 2afb2380759a86f88d6566ddfb4d4244839bc687 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Tue, 12 Aug 2008 06:59:37 +0000 Subject: [PATCH 270/304] Harden 'proc list' svn path=/trunk/; revision=35284 --- reactos/ntoskrnl/kdbg/kdb_cli.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/kdbg/kdb_cli.c b/reactos/ntoskrnl/kdbg/kdb_cli.c index e44f0de68e3..6c157563583 100644 --- a/reactos/ntoskrnl/kdbg/kdb_cli.c +++ b/reactos/ntoskrnl/kdbg/kdb_cli.c @@ -1266,7 +1266,7 @@ KdbpCmdProc(ULONG Argc, PCHAR Argv[]) if (Argc >= 2 && _stricmp(Argv[1], "list") == 0) { Entry = PsActiveProcessHead.Flink; - if (Entry == &PsActiveProcessHead) + if (!Entry || Entry == &PsActiveProcessHead) { KdbpPrint("No processes in the system!\n"); return TRUE; From e03a9212c0d22472d2a5f379df4b58943dc4d9e2 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 12 Aug 2008 08:38:54 +0000 Subject: [PATCH 271/304] Giannis Adamopoulos - Removes duplicated implementation of FrLdrLoadKernel, LoadDriver and LoadNlsFile from setupldr.c, use FrLdrLoadImage, FrLdrLoadNlsFile and FrLdrLoadDriver from reactos.c. - Also remove the call to RegInitializeRegistry as setupldr doesn't need the registry. - Make setupldr load the fastfat and ext2 drivers via txtsetup.sif, instead of hardcoding them in setupldr.c svn path=/trunk/; revision=35285 --- reactos/boot/bootdata/txtsetup.sif | 4 +- .../boot/freeldr/freeldr/reactos/reactos.c | 2 +- .../boot/freeldr/freeldr/reactos/setupldr.c | 179 +++--------------- 3 files changed, 32 insertions(+), 153 deletions(-) diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index ee5883dcacb..1c1bcf39602 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -32,8 +32,8 @@ ntfs.sys=,,,,,,,,,,,,4 pci.sys=,,,,,,,,,,,,4 scsiport.sys=,,,,,,x,,,,,,4 uniata.sys=,,,,,,,,,,,,4 -fastfat.sys=,,,,,,,,,,,,4 -ext2.sys=,,,,,,,,,,,,4 +fastfat.sys=,,,,,,x,,,,,,4 +ext2.sys=,,,,,,x,,,,,,4 [HardwareIdsDatabase] *PNP0C08 = acpi diff --git a/reactos/boot/freeldr/freeldr/reactos/reactos.c b/reactos/boot/freeldr/freeldr/reactos/reactos.c index 91ac1536291..1439f419dd9 100644 --- a/reactos/boot/freeldr/freeldr/reactos/reactos.c +++ b/reactos/boot/freeldr/freeldr/reactos/reactos.c @@ -189,7 +189,7 @@ FrLdrLoadImage(IN PCHAR szFileName, return LoadBase; } -static BOOLEAN +BOOLEAN FrLdrLoadNlsFile(PCSTR szFileName, PCSTR szModuleName) { diff --git a/reactos/boot/freeldr/freeldr/reactos/setupldr.c b/reactos/boot/freeldr/freeldr/reactos/setupldr.c index cc1f29b06cb..4ca3a0e5f3c 100644 --- a/reactos/boot/freeldr/freeldr/reactos/setupldr.c +++ b/reactos/boot/freeldr/freeldr/reactos/setupldr.c @@ -38,133 +38,16 @@ extern ULONG_PTR KernelBase; extern ROS_KERNEL_ENTRY_POINT KernelEntryPoint; extern BOOLEAN FrLdrLoadDriver(PCHAR szFileName, INT nPos); +extern BOOLEAN FrLdrLoadNlsFile(PCSTR szFileName, PCSTR szModuleName); #define USE_UI -BOOLEAN -NTAPI -static FrLdrLoadKernel(IN PCHAR szFileName, - IN INT nPos) -{ - PFILE FilePointer; - PCHAR szShortName; - CHAR szBuffer[256]; - PVOID LoadBase; - PIMAGE_NT_HEADERS NtHeader; - - /* Extract Kernel filename without path */ - szShortName = strrchr(szFileName, '\\'); - if (!szShortName) - { - /* No path, leave it alone */ - szShortName = szFileName; - } - else - { - /* Skip the path */ - szShortName = szShortName + 1; - } - - /* Open the Kernel */ - FilePointer = FsOpenFile(szFileName); - if (!FilePointer) - { - /* Return failure on the short name */ - strcpy(szBuffer, szShortName); - strcat(szBuffer, " not found."); - UiMessageBox(szBuffer); - return FALSE; - } - - /* Update the status bar with the current file */ - strcpy(szBuffer, "Reading "); - strcat(szBuffer, szShortName); - UiDrawStatusText(szBuffer); - - /* Do the actual loading */ - LoadBase = FrLdrReadAndMapImage(FilePointer, szShortName, 1); - - /* Get the NT header, kernel base and kernel entry */ - NtHeader = RtlImageNtHeader(LoadBase); - KernelBase = NtHeader->OptionalHeader.ImageBase; - KernelEntryPoint = (ROS_KERNEL_ENTRY_POINT)(KernelBase + NtHeader->OptionalHeader.AddressOfEntryPoint); - LoaderBlock.KernelBase = KernelBase; - - /* Update Processbar and return success */ - return TRUE; -} - -static BOOLEAN -LoadDriver(PCSTR szSourcePath, PCSTR szFileName) -{ - return FrLdrLoadDriver((PCHAR)szFileName, 0); -} - - -static BOOLEAN -LoadNlsFile(PCSTR szSourcePath, PCSTR szFileName, PCSTR szModuleName) -{ - CHAR szFullName[256]; - CHAR szBuffer[80]; - PFILE FilePointer; - PCSTR szShortName; - - if (szSourcePath[0] != '\\') - { - strcpy(szFullName, "\\"); - strcat(szFullName, szSourcePath); - } - else - { - strcpy(szFullName, szSourcePath); - } - - if (szFullName[strlen(szFullName)] != '\\') - { - strcat(szFullName, "\\"); - } - - if (szFileName[0] != '\\') - { - strcat(szFullName, szFileName); - } - else - { - strcat(szFullName, szFileName + 1); - } - - szShortName = strrchr(szFileName, '\\'); - if (szShortName == NULL) - szShortName = szFileName; - else - szShortName = szShortName + 1; - - - FilePointer = FsOpenFile(szFullName); - if (FilePointer == NULL) - { - printf("Could not find %s\n", szFileName); - return(FALSE); - } - - /* - * Update the status bar with the current file - */ - sprintf(szBuffer, "Setup is loading files (%s)", szShortName); - UiDrawStatusText(szBuffer); - - /* Load the driver */ - FrLdrLoadModule(FilePointer, szModuleName, NULL); - - return(TRUE); -} - VOID RunLoader(VOID) { - ULONG i; - const char *SourcePath; - const char *LoadOptions = "", *DbgLoadOptions = ""; - const char *sourcePaths[] = { + ULONG i; + LPCSTR SourcePath; + LPCSTR LoadOptions, DbgLoadOptions; + LPCSTR sourcePaths[] = { "", /* Only for floppy boot */ #if defined(_M_IX86) "\\I386", @@ -175,11 +58,13 @@ VOID RunLoader(VOID) #endif "\\reactos", NULL }; - char szKernelName[256]; + CHAR FileName[256]; HINF InfHandle; ULONG ErrorLine; INFCONTEXT InfContext; + PIMAGE_NT_HEADERS NtHeader; + PVOID LoadBase; /* Setup multiboot information structure */ LoaderBlock.CommandLine = reactos_kernel_cmdline; @@ -226,9 +111,6 @@ VOID RunLoader(VOID) extern BOOLEAN FrLdrBootType; FrLdrBootType = TRUE; - /* Initialize registry */ - RegInitializeRegistry(); - /* Detect hardware */ UiDrawStatusText("Detecting hardware..."); LoaderBlock.ArchExtra = (ULONG)MachHwDetect(); @@ -244,6 +126,7 @@ VOID RunLoader(VOID) return; } + UiDrawStatusText("Loading txtsetup.sif..."); /* Open 'txtsetup.sif' */ for (i = MachDiskBootingFromFloppy() ? 0 : 1; ; i++) { @@ -253,9 +136,8 @@ VOID RunLoader(VOID) printf("Failed to open 'txtsetup.sif'\n"); return; } - strcpy(szKernelName, SourcePath); - strcat(szKernelName, "\\txtsetup.sif"); - if (InfOpenFile (&InfHandle, szKernelName, &ErrorLine)) + sprintf(FileName,"%s\\txtsetup.sif", SourcePath); + if (InfOpenFile (&InfHandle, FileName, &ErrorLine)) break; } if (!*SourcePath) @@ -294,20 +176,22 @@ VOID RunLoader(VOID) strcat(strcat(strcat(strcat(reactos_kernel_cmdline, SourcePath), " "), LoadOptions), DbgLoadOptions); - strcpy(SystemRoot, SourcePath); - strcat(SystemRoot, "\\"); - /* Setup the boot path and kernel path */ strcpy(szBootPath, SourcePath); - strcpy(szKernelName, szBootPath); - strcat(szKernelName, "\\ntoskrnl.exe"); - /* Setup the HAL path */ - strcpy(szHalName, szBootPath); - strcat(szHalName, "\\hal.dll"); + sprintf(SystemRoot,"%s\\", SourcePath); + sprintf(FileName,"%s\\ntoskrnl.exe", SourcePath); + sprintf(szHalName,"%s\\hal.dll", SourcePath); /* Load the kernel */ - if (!FrLdrLoadKernel(szKernelName, 5)) return; + LoadBase = FrLdrLoadImage(FileName, 5, 1); + if (!LoadBase) return; + + /* Get the NT header, kernel base and kernel entry */ + NtHeader = RtlImageNtHeader(LoadBase); + KernelBase = SWAPD(NtHeader->OptionalHeader.ImageBase); + KernelEntryPoint = (ROS_KERNEL_ENTRY_POINT)(KernelBase + SWAPD(NtHeader->OptionalHeader.AddressOfEntryPoint)); + LoaderBlock.KernelBase = KernelBase; /* Insert boot disk 2 */ if (MachDiskBootingFromFloppy()) @@ -343,8 +227,9 @@ VOID RunLoader(VOID) return; } + sprintf(FileName,"%s\\%s", SourcePath,LoadOptions); /* Load ANSI codepage file */ - if (!LoadNlsFile(SourcePath, LoadOptions, "ansi.nls")) + if (!FrLdrLoadNlsFile(FileName, "ansi.nls")) { UiMessageBox("Failed to load the ANSI codepage file."); return; @@ -368,8 +253,9 @@ VOID RunLoader(VOID) return; } + sprintf(FileName,"%s\\%s", SourcePath,LoadOptions); /* Load OEM codepage file */ - if (!LoadNlsFile(SourcePath, LoadOptions, "oem.nls")) + if (!FrLdrLoadNlsFile(FileName, "oem.nls")) { UiMessageBox("Failed to load the OEM codepage file."); return; @@ -393,21 +279,14 @@ VOID RunLoader(VOID) return; } + sprintf(FileName,"%s\\%s", SourcePath,LoadOptions); /* Load Unicode casemap file */ - if (!LoadNlsFile(SourcePath, LoadOptions, "casemap.nls")) + if (!FrLdrLoadNlsFile(FileName, "casemap.nls")) { UiMessageBox("Failed to load the Unicode casemap file."); return; } - /* Load fastfat.sys (could be loaded by the setup prog!) */ - if (!LoadDriver(SourcePath, "fastfat.sys")) - return; - - /* Load ext2.sys (could be loaded by the setup prog!) */ - if (!LoadDriver(SourcePath, "ext2.sys")) - return; - /* Load additional files specified in txtsetup.inf */ if (InfFindFirstLine(InfHandle, "SourceDisksFiles", @@ -422,7 +301,7 @@ VOID RunLoader(VOID) { if (strcmp(Media, "x") == 0) { - if (!LoadDriver(SourcePath, DriverName)) + if (!FrLdrLoadDriver((PCHAR)DriverName,0)) return; } } From 2c26076f3c8fd53ff95dad731b5a6fe62f945657 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Tue, 12 Aug 2008 08:46:31 +0000 Subject: [PATCH 272/304] - Change while (true) to an ASSERT(FALSE). See issue #3616 for more details. svn path=/trunk/; revision=35286 --- reactos/ntoskrnl/config/cmsysini.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/config/cmsysini.c b/reactos/ntoskrnl/config/cmsysini.c index 9d1540ce86e..d96919bfa45 100644 --- a/reactos/ntoskrnl/config/cmsysini.c +++ b/reactos/ntoskrnl/config/cmsysini.c @@ -120,7 +120,7 @@ CmpQueryKeyName(IN PVOID ObjectBody, IN KPROCESSOR_MODE PreviousMode) { DPRINT1("CmpQueryKeyName() called\n"); - while (TRUE); + ASSERT(FALSE); return STATUS_SUCCESS; } From ae4dc9391756d5db28a7c5e84fefa0d9f03af22e Mon Sep 17 00:00:00 2001 From: Colin Finck Date: Tue, 12 Aug 2008 14:48:51 +0000 Subject: [PATCH 273/304] Attempt to fix release build (broken in r35285) svn path=/trunk/; revision=35288 --- reactos/boot/freeldr/freeldr/reactos/setupldr.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/reactos/boot/freeldr/freeldr/reactos/setupldr.c b/reactos/boot/freeldr/freeldr/reactos/setupldr.c index 4ca3a0e5f3c..2dcd86deb6c 100644 --- a/reactos/boot/freeldr/freeldr/reactos/setupldr.c +++ b/reactos/boot/freeldr/freeldr/reactos/setupldr.c @@ -153,6 +153,8 @@ VOID RunLoader(VOID) if (!InfGetDataField (&InfContext, 1, &DbgLoadOptions)) DbgLoadOptions = ""; } +#else + DbgLoadOptions = ""; #endif if (!strlen(DbgLoadOptions) && !InfFindFirstLine (InfHandle, "SetupData", From 2517d40711f0b980e7036050c7eea724222cf2a7 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Tue, 12 Aug 2008 21:40:06 +0000 Subject: [PATCH 274/304] - Fix a typo in PsTerminateSystemThread. Now this API will actually terminate system threads. svn path=/trunk/; revision=35293 --- reactos/ntoskrnl/ps/kill.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ps/kill.c b/reactos/ntoskrnl/ps/kill.c index 670ddd0b530..78393d96d11 100644 --- a/reactos/ntoskrnl/ps/kill.c +++ b/reactos/ntoskrnl/ps/kill.c @@ -1086,7 +1086,7 @@ PsTerminateSystemThread(IN NTSTATUS ExitStatus) PETHREAD Thread = PsGetCurrentThread(); /* Make sure this is a system thread */ - if (Thread->SystemThread) return STATUS_INVALID_PARAMETER; + if (!Thread->SystemThread) return STATUS_INVALID_PARAMETER; /* Terminate it for real */ return PspTerminateThreadByPointer(Thread, ExitStatus, TRUE); From bd974a9e1c5b9b5d5def0e145bfae6b12c6562f5 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Tue, 12 Aug 2008 22:22:51 +0000 Subject: [PATCH 275/304] - Temporarily revert my last change. We don't set the SystemThread flag appropriately and it is always zero svn path=/trunk/; revision=35294 --- reactos/ntoskrnl/ps/kill.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ps/kill.c b/reactos/ntoskrnl/ps/kill.c index 78393d96d11..670ddd0b530 100644 --- a/reactos/ntoskrnl/ps/kill.c +++ b/reactos/ntoskrnl/ps/kill.c @@ -1086,7 +1086,7 @@ PsTerminateSystemThread(IN NTSTATUS ExitStatus) PETHREAD Thread = PsGetCurrentThread(); /* Make sure this is a system thread */ - if (!Thread->SystemThread) return STATUS_INVALID_PARAMETER; + if (Thread->SystemThread) return STATUS_INVALID_PARAMETER; /* Terminate it for real */ return PspTerminateThreadByPointer(Thread, ExitStatus, TRUE); From ab8e76985a72bb0490b3131a34519051f90d487b Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Tue, 12 Aug 2008 23:46:15 +0000 Subject: [PATCH 276/304] - Moved ExpandAlias call from ParseCommandLine to ReadCommand; aliases should only be processed when reading from the console. Removed processing of %variable% substitutions in ExpandAlias - not necessary now that aliases are expanded earlier. - Rewrite %variable% substitution code, should be much more compatible with Windows cmd now. svn path=/trunk/; revision=35295 --- reactos/base/shell/cmd/alias.c | 23 -- reactos/base/shell/cmd/cmd.c | 406 +++++++++++++----------------- reactos/base/shell/cmd/cmdinput.c | 5 + 3 files changed, 181 insertions(+), 253 deletions(-) diff --git a/reactos/base/shell/cmd/alias.c b/reactos/base/shell/cmd/alias.c index d4e4ae39aa3..0c317f82d88 100644 --- a/reactos/base/shell/cmd/alias.c +++ b/reactos/base/shell/cmd/alias.c @@ -89,8 +89,6 @@ VOID ExpandAlias (LPTSTR cmd, INT maxlen) TCHAR* position; LPTSTR Token; LPTSTR tmp; - LPTSTR ip, cp; - BOOL bModeSetA = FALSE; tmp = cmd_alloc(maxlen); if (!tmp) @@ -136,27 +134,6 @@ VOID ExpandAlias (LPTSTR cmd, INT maxlen) _tcscpy(cmd, buffer); } - ip = cp = cmd; - - while (*ip) - { - if ( (*ip == _T('%')) || (*ip == _T('!')) ) - { - UINT envNameLen; - LPCTSTR envVal = GetParsedEnvVar ( ip, &envNameLen, bModeSetA ); - if ( envVal ) - { - ip += envNameLen; - cp = _stpcpy ( cp, envVal ); - } - } - - if (*ip != _T('\0') && (_istcntrl (*ip))) - *ip = _T(' '); - *cp++ = *ip++; - } - *cp = _T('\0'); - cmd_free(buffer); cmd_free(tmp); diff --git a/reactos/base/shell/cmd/cmd.c b/reactos/base/shell/cmd/cmd.c index 8dd6a60b9f4..84c1e959069 100644 --- a/reactos/base/shell/cmd/cmd.c +++ b/reactos/base/shell/cmd/cmd.c @@ -712,11 +712,6 @@ VOID ParseCommandLine (LPTSTR cmd) TRACE ("ParseCommandLine: (\'%s\')\n", debugstr_aw(s)); -#ifdef FEATURE_ALIASES - /* expand all aliases */ - ExpandAlias (s, CMDLINE_LENGTH); -#endif /* FEATURE_ALIAS */ - #ifdef FEATURE_REDIRECTION /* find the temp path to store temporary files */ Length = GetTempPath (MAX_PATH, szTempPath); @@ -1092,57 +1087,20 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) static LPTSTR ret = NULL; static UINT retlen = 0; UINT size; - TCHAR varNameFixed[MAX_PATH]; - TCHAR ReturnValue[MAX_PATH]; - LPTSTR position; - LPTSTR Token; - SIZE_T i = 0; - INT StringPart[1] = {0}; - - position = _tcsstr(varName, _T(":~")); - if (position) - _tcsncpy(varNameFixed, varName, (int) (position - varName)); - else - _tcscpy(varNameFixed, varName); - size = GetEnvironmentVariable ( varNameFixed, ret, retlen ); + size = GetEnvironmentVariable ( varName, ret, retlen ); if ( size > retlen ) { if ( !GrowIfNecessary ( size, &ret, &retlen ) ) return NULL; - size = GetEnvironmentVariable ( varNameFixed, ret, retlen ); + size = GetEnvironmentVariable ( varName, ret, retlen ); } if ( size ) - { - if (position) - { - position += 2; - if (_tcschr(position, _T(',')) != NULL) - { - Token = _tcstok(position, _T(",")); - while ((Token != NULL) && (i < 2)) - { - StringPart[i] = _ttoi(Token); - i++; - Token = _tcstok (NULL, _T(",")); - } - if (i > 0) - { - if (StringPart[1] < 0) - StringPart[1] = _tcslen(ret + StringPart[0]) + StringPart[1]; - _tcsncpy(ReturnValue, ret + StringPart[0], StringPart[1]); - _tcscpy(ret, ReturnValue); - } - } - return ret; - } - else - return ret; - } + return ret; /* env var doesn't exist, look for a "special" one */ /* %CD% */ - if (_tcsicmp(varNameFixed,_T("cd")) ==0) + if (_tcsicmp(varName,_T("cd")) ==0) { size = GetCurrentDirectory ( retlen, ret ); if ( size > retlen ) @@ -1156,7 +1114,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) return ret; } /* %TIME% */ - else if (_tcsicmp(varNameFixed,_T("time")) ==0) + else if (_tcsicmp(varName,_T("time")) ==0) { SYSTEMTIME t; if ( !GrowIfNecessary ( MAX_PATH, &ret, &retlen ) ) @@ -1168,7 +1126,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) return ret; } /* %DATE% */ - else if (_tcsicmp(varNameFixed,_T("date")) ==0) + else if (_tcsicmp(varName,_T("date")) ==0) { if ( !GrowIfNecessary ( GetDateFormat(LOCALE_USER_DEFAULT, DATE_SHORTDATE, NULL, NULL, NULL, 0), &ret, &retlen ) ) @@ -1182,7 +1140,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) } /* %RANDOM% */ - else if (_tcsicmp(varNameFixed,_T("random")) ==0) + else if (_tcsicmp(varName,_T("random")) ==0) { if ( !GrowIfNecessary ( MAX_PATH, &ret, &retlen ) ) return NULL; @@ -1192,13 +1150,13 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) } /* %CMDCMDLINE% */ - else if (_tcsicmp(varNameFixed,_T("cmdcmdline")) ==0) + else if (_tcsicmp(varName,_T("cmdcmdline")) ==0) { return GetCommandLine(); } /* %CMDEXTVERSION% */ - else if (_tcsicmp(varNameFixed,_T("cmdextversion")) ==0) + else if (_tcsicmp(varName,_T("cmdextversion")) ==0) { if ( !GrowIfNecessary ( MAX_PATH, &ret, &retlen ) ) return NULL; @@ -1208,7 +1166,7 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) } /* %ERRORLEVEL% */ - else if (_tcsicmp(varNameFixed,_T("errorlevel")) ==0) + else if (_tcsicmp(varName,_T("errorlevel")) ==0) { if ( !GrowIfNecessary ( MAX_PATH, &ret, &retlen ) ) return NULL; @@ -1216,30 +1174,17 @@ GetEnvVarOrSpecial ( LPCTSTR varName ) return ret; } - GrowIfNecessary(_tcslen(varNameFixed) + 3, &ret, &retlen); - _stprintf(ret,_T("%%%s%%"),varNameFixed); - return ret; /* not found - return orginal string */ + return NULL; } LPCTSTR -GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) +GetBatchVar ( LPCTSTR varName, UINT* varNameLen ) { static LPTSTR ret = NULL; static UINT retlen = 0; - LPTSTR p, tmp; - UINT size; - TCHAR c; if ( varNameLen ) - *varNameLen = 0; - SetLastError(0); - c = *varName; - - if ( (*varName != '!') && (*varName++ != '%') ) - return NULL; - - if (c == _T('!')) - varName++; + *varNameLen = 1; switch ( *varName ) { @@ -1248,7 +1193,7 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) if (_tcsncicmp(varName, _T("dp0"), 3) == 0) { if ( varNameLen ) - *varNameLen = 5; + *varNameLen = 4; return bc->BatchFilePath; } case _T('0'): @@ -1261,60 +1206,16 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) case _T('7'): case _T('8'): case _T('9'): - if ((tmp = FindArg (*varName - _T('0')))) - { - if ( varNameLen ) - *varNameLen = 2; - if ( !*tmp ) - return _T(""); - if ( !GrowIfNecessary ( _tcslen(tmp)+1, &ret, &retlen ) ) - return NULL; - _tcscpy ( ret, tmp ); - return ret; - } - if ( !GrowIfNecessary ( 3, &ret, &retlen ) ) - return NULL; - ret[0] = _T('%'); - ret[1] = *varName; - ret[2] = 0; - if ( varNameLen ) - *varNameLen = 2; - return ret; + return FindArg(*varName - _T('0')); case _T('*'): - if(bc == NULL) - { - // - // No batch file to see here, move along - // - if ( !GrowIfNecessary ( 3, &ret, &retlen ) ) - return NULL; - ret[0] = _T('%'); - ret[1] = _T('*'); - ret[2] = 0; - if ( varNameLen ) - *varNameLen = 2; - return ret; - } - // // Copy over the raw params(not including the batch file name // - if ( !GrowIfNecessary ( _tcslen(bc->raw_params)+1, &ret, &retlen ) ) - return NULL; - if ( varNameLen ) - *varNameLen = 2; - _tcscpy ( ret, bc->raw_params ); - return ret; + return bc->raw_params; case _T('%'): - if ( !GrowIfNecessary ( 2, &ret, &retlen ) ) - return NULL; - ret[0] = _T('%'); - ret[1] = 0; - if ( varNameLen ) - *varNameLen = 2; - return ret; + return _T("%"); case _T('?'): /* TODO FIXME 10 is only max size for 32-bit */ @@ -1322,35 +1223,164 @@ GetParsedEnvVar ( LPCTSTR varName, UINT* varNameLen, BOOL ModeSetA ) return NULL; _sntprintf ( ret, retlen, _T("%u"), nErrorLevel); ret[retlen-1] = 0; - if ( varNameLen ) - *varNameLen = 2; - return ret; - } - if ( ModeSetA ) - { - /* HACK for set/a */ - if ( !GrowIfNecessary ( 2, &ret, &retlen ) ) - return NULL; - ret[0] = _T('%'); - ret[1] = 0; if ( varNameLen ) *varNameLen = 1; return ret; } - p = _tcschr ( varName, c ); - if ( !p ) + return NULL; +} + +BOOL +SubstituteVars(TCHAR *Src, TCHAR *Dest, TCHAR Delim, BOOL bIsBatch) +{ +#define APPEND(From, Length) { \ + if (Dest + (Length) > DestEnd) \ + goto too_long; \ + memcpy(Dest, From, (Length) * sizeof(TCHAR)); \ + Dest += Length; } +#define APPEND1(Char) { \ + if (Dest >= DestEnd) \ + goto too_long; \ + *Dest++ = Char; } + + TCHAR *DestEnd = Dest + CMDLINE_LENGTH - 1; + const TCHAR *Var; + int VarLength; + TCHAR *SubstStart; + TCHAR EndChr; + while (*Src) { - SetLastError ( ERROR_INVALID_PARAMETER ); - return NULL; + if (*Src != Delim) + { + APPEND1(*Src++) + continue; + } + + Src++; + if (bIsBatch && Delim == _T('%')) + { + UINT NameLen; + Var = GetBatchVar(Src, &NameLen); + if (Var != NULL) + { + VarLength = _tcslen(Var); + APPEND(Var, VarLength) + Src += NameLen; + continue; + } + } + + /* Find the end of the variable name. A colon (:) will usually + * end the name and begin the optional modifier, but not if it + * is immediately followed by the delimiter (%VAR:%). */ + SubstStart = Src; + while (*Src != Delim && !(*Src == _T(':') && Src[1] != Delim)) + { + if (!*Src) + goto bad_subst; + Src++; + } + + EndChr = *Src; + *Src = _T('\0'); + Var = GetEnvVarOrSpecial(SubstStart); + *Src++ = EndChr; + if (Var == NULL) + { + /* In a batch file, %NONEXISTENT% "expands" to an empty string */ + if (bIsBatch) + continue; + goto bad_subst; + } + VarLength = _tcslen(Var); + + if (EndChr == Delim) + { + /* %VAR% - use as-is */ + APPEND(Var, VarLength) + } + else if (*Src == _T('~')) + { + /* %VAR:~[start][,length]% - substring + * Negative values are offsets from the end */ + int Start = _tcstol(Src + 1, &Src, 0); + int End = VarLength; + if (Start < 0) + Start += VarLength; + Start = max(Start, 0); + Start = min(Start, VarLength); + if (*Src == _T(',')) + { + End = _tcstol(Src + 1, &Src, 0); + End += (End < 0) ? VarLength : Start; + End = max(End, Start); + End = min(End, VarLength); + } + if (*Src++ != Delim) + goto bad_subst; + APPEND(&Var[Start], End - Start); + } + else + { + /* %VAR:old=new% - replace all occurrences of old with new + * %VAR:*old=new% - replace first occurrence only, + * and remove everything before it */ + TCHAR *Old, *New; + DWORD OldLength, NewLength; + BOOL Star = FALSE; + int LastMatch = 0, i = 0; + + if (*Src == _T('*')) + { + Star = TRUE; + Src++; + } + + /* the string to replace may contain the delimiter */ + Src = _tcschr(Old = Src, _T('=')); + if (Src == NULL) + goto bad_subst; + OldLength = Src++ - Old; + if (OldLength == 0) + goto bad_subst; + + Src = _tcschr(New = Src, Delim); + if (Src == NULL) + goto bad_subst; + NewLength = Src++ - New; + + while (i < VarLength) + { + if (_tcsnicmp(&Var[i], Old, OldLength) == 0) + { + if (!Star) + APPEND(&Var[LastMatch], i - LastMatch) + APPEND(New, NewLength) + i += OldLength; + LastMatch = i; + if (Star) + break; + continue; + } + i++; + } + APPEND(&Var[LastMatch], VarLength - LastMatch) + } + continue; + + bad_subst: + Src = SubstStart; + if (!bIsBatch) + APPEND1(Delim) } - size = p-varName; - if ( varNameLen ) - *varNameLen = size + 2; - p = alloca ( (size+1) * sizeof(TCHAR) ); - memmove ( p, varName, size * sizeof(TCHAR) ); - p[size] = 0; - varName = p; - return GetEnvVarOrSpecial ( varName ); + *Dest = _T('\0'); + return TRUE; +too_long: + ConOutResPrintf(STRING_ALIAS_ERROR); + nErrorLevel = 9023; + return FALSE; +#undef APPEND +#undef APPEND1 } @@ -1365,10 +1395,7 @@ ProcessInput (BOOL bFlag) TCHAR commandline[CMDLINE_LENGTH]; TCHAR readline[CMDLINE_LENGTH]; LPTSTR ip; - LPTSTR cp; - LPCTSTR tmp; BOOL bEchoThisLine; - BOOL bModeSetA; BOOL bIsBatch; do @@ -1393,94 +1420,8 @@ ProcessInput (BOOL bFlag) while ( _istspace(*ip) ) ++ip; - cp = commandline; - bModeSetA = FALSE; - while (*ip) - { - if ( (*ip == _T('%')) || (*ip == _T('!')) ) - { - UINT envNameLen; - LPCTSTR envVal = GetParsedEnvVar ( ip, &envNameLen, bModeSetA ); - if ( envVal ) - { - ip += envNameLen; - cp = _stpcpy ( cp, envVal ); - } - } - - if (*ip != _T('\0') && (_istcntrl (*ip))) - *ip = _T(' '); - *cp++ = *ip++; - - /* HACK HACK HACK check whether bModeSetA needs to be toggled */ - *cp = 0; - tmp = commandline; - tmp += _tcsspn(tmp,_T(" \t")); - /* first we find and skip and pre-redirections... */ - while (( tmp ) && - ( _tcschr(_T("<>"),*tmp) - || !_tcsncmp(tmp,_T("1>"),2) - || !_tcsncmp(tmp,_T("2>"),2) )) - { - if ( _istdigit(*tmp) ) - tmp += 2; - else - tmp++; - tmp += _tcsspn(tmp,_T(" \t")); - if ( *tmp == _T('\"') ) - { - tmp = _tcschr(tmp+1,_T('\"')); - if ( tmp ) - ++tmp; - } - else - tmp = _tcspbrk(tmp,_T(" \t")); - if ( tmp ) - tmp += _tcsspn(tmp,_T(" \t")); - } - /* we should now be pointing to the actual command - * (if there is one yet)*/ - if ( tmp ) - { - /* if we're currently substituting ( which is default ) - * check to see if we've parsed out a set/a. if so, we - * need to disable substitution until we come across a - * redirection */ - if ( !bModeSetA ) - { - /* look for set /a */ - if ( !_tcsnicmp(tmp,_T("set"),3) ) - { - tmp += 3; - tmp += _tcsspn(tmp,_T(" \t")); - if ( !_tcsnicmp(tmp,_T("/a"),2) ) - bModeSetA = TRUE; - } - } - /* if we're not currently substituting, it means we're - * already inside a set /a. now we need to look for - * a redirection in order to turn redirection back on */ - else - { - /* look for redirector of some kind after the command */ - while ( (tmp = _tcspbrk ( tmp, _T("^<>|") )) ) - { - if ( *tmp == _T('^') ) - { - if ( _tcschr(_T("<>|&"), *++tmp ) && *tmp ) - ++tmp; - } - else - { - bModeSetA = FALSE; - break; - } - } - } - } - } - - *cp = _T('\0'); + if (!SubstituteVars(ip, commandline, _T('%'), bIsBatch)) + continue; /* JPP 19980807 */ /* Echo batch file line */ @@ -1490,6 +1431,11 @@ ProcessInput (BOOL bFlag) ConOutPuts (commandline); } + /* FIXME: !vars! should be substituted later, after parsing. */ + if (!SubstituteVars(commandline, readline, _T('!'), bIsBatch)) + continue; + _tcscpy(commandline, readline); + if (!CheckCtrlBreak(BREAK_INPUT) && *commandline) { ParseCommandLine (commandline); diff --git a/reactos/base/shell/cmd/cmdinput.c b/reactos/base/shell/cmd/cmdinput.c index fdba537068a..573a21b62ac 100644 --- a/reactos/base/shell/cmd/cmdinput.c +++ b/reactos/base/shell/cmd/cmdinput.c @@ -587,4 +587,9 @@ VOID ReadCommand (LPTSTR str, INT maxlen) while (!bReturn); SetCursorType (bInsert, TRUE); + +#ifdef FEATURE_ALIASES + /* expand all aliases */ + ExpandAlias (str, maxlen); +#endif /* FEATURE_ALIAS */ } From f93e329c60c5fbccfeafe155801bd8654851ccdb Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 07:55:59 +0000 Subject: [PATCH 277/304] - Reapply the PsTerminateSystemThread typo fix. We do boot fine with this fix. - Note to self: Don't commit after midnight and always test your patches yourself svn path=/trunk/; revision=35299 --- reactos/ntoskrnl/ps/kill.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ps/kill.c b/reactos/ntoskrnl/ps/kill.c index 670ddd0b530..78393d96d11 100644 --- a/reactos/ntoskrnl/ps/kill.c +++ b/reactos/ntoskrnl/ps/kill.c @@ -1086,7 +1086,7 @@ PsTerminateSystemThread(IN NTSTATUS ExitStatus) PETHREAD Thread = PsGetCurrentThread(); /* Make sure this is a system thread */ - if (Thread->SystemThread) return STATUS_INVALID_PARAMETER; + if (!Thread->SystemThread) return STATUS_INVALID_PARAMETER; /* Terminate it for real */ return PspTerminateThreadByPointer(Thread, ExitStatus, TRUE); From 17beba5f93561603fddcb6a40eabae16044058e8 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 08:02:52 +0000 Subject: [PATCH 278/304] - Fix a (comment) typo svn path=/trunk/; revision=35300 --- reactos/ntoskrnl/ps/thread.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ps/thread.c b/reactos/ntoskrnl/ps/thread.c index 357ccf3fcab..8d648090d8f 100644 --- a/reactos/ntoskrnl/ps/thread.c +++ b/reactos/ntoskrnl/ps/thread.c @@ -155,7 +155,7 @@ PspSystemThreadStartup(IN PKSTART_ROUTINE StartRoutine, { if (!(Thread->Terminated) && !(Thread->DeadThread)) { - /* Call it the Start Routine */ + /* Call the Start Routine */ StartRoutine(StartContext); } } From 7d75e41b42f520a4ab0cd61d3e1f7fdd4049fa84 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 13 Aug 2008 08:45:20 +0000 Subject: [PATCH 279/304] - implement deleting file using recyclebin api - play a sound on when requested using the user default for emptying recycle bin - rename shlfldr_mydocuments.c svn path=/trunk/; revision=35301 --- reactos/dll/win32/shell32/shell32.rbuild | 3 +- reactos/dll/win32/shell32/shellord.c | 55 +++++++++++++++++-- ...ldr_mydocuments.c => shfldr_mydocuments.c} | 0 reactos/dll/win32/shell32/shfldr_recyclebin.c | 6 +- 4 files changed, 55 insertions(+), 9 deletions(-) rename reactos/dll/win32/shell32/{shlfldr_mydocuments.c => shfldr_mydocuments.c} (100%) diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild index 2f79efe89e6..b3de9c6068e 100644 --- a/reactos/dll/win32/shell32/shell32.rbuild +++ b/reactos/dll/win32/shell32/shell32.rbuild @@ -24,6 +24,7 @@ version devmgr winspool + winmm authors.c autocomplete.c brsfolder.c @@ -54,7 +55,7 @@ shfldr_desktop.c shfldr_fs.c shfldr_mycomp.c - shlfldr_mydocuments.c + shfldr_mydocuments.c shfldr_printers.c shlexec.c shlfileop.c diff --git a/reactos/dll/win32/shell32/shellord.c b/reactos/dll/win32/shell32/shellord.c index a221859af01..e43907f2b33 100644 --- a/reactos/dll/win32/shell32/shellord.c +++ b/reactos/dll/win32/shell32/shellord.c @@ -1962,14 +1962,18 @@ BOOL WINAPI SHGetNewLinkInfoW(LPCWSTR pszLinkTo, LPCWSTR pszDir, LPWSTR pszName, return FALSE; } - +/************************************************************************* + * SHStartNetConnectionDialog (SHELL32.@) + */ HRESULT WINAPI SHStartNetConnectionDialog(HWND hwnd, LPCSTR pszRemoteName, DWORD dwType) { FIXME("%p, %s, 0x%08x - stub\n", hwnd, debugstr_a(pszRemoteName), dwType); return S_OK; } - +/************************************************************************* + * SHEmptyRecycleBinA (SHELL32.@) + */ HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags) { LPWSTR szRootPathW = NULL; @@ -2001,16 +2005,55 @@ HRESULT WINAPI SHEmptyRecycleBinA(HWND hwnd, LPCSTR pszRootPath, DWORD dwFlags) HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags) { - BOOL ret; + WCHAR szPath[MAX_PATH] = {0}; + DWORD dwSize, dwType; + LONG ret; TRACE("%p, %s, 0x%08x\n", hwnd, debugstr_w(pszRootPath), dwFlags); - FIXME("0x%08x flags ignored\n", dwFlags); - ret = EmptyRecycleBinW(pszRootPath); + if (!(dwFlags & SHERB_NOCONFIRMATION)) + { + /* FIXME + * enumerate available files + * show confirmation dialog + */ + FIXME("show confirmation dialog\n"); + } + + if (dwFlags & SHERB_NOPROGRESSUI) + { + ret = EmptyRecycleBinW(pszRootPath); + } + else + { + /* FIXME + * show a progress dialog + */ + ret = EmptyRecycleBinW(pszRootPath); + } + if (!ret) return HRESULT_FROM_WIN32(GetLastError()); - /* FIXME: update icon? */ + if (!(dwFlags & SHERB_NOSOUND)) + { + dwSize = sizeof(szPath); + ret = RegGetValueW(HKEY_CURRENT_USER, + L"AppEvents\\Schemes\\Apps\\Explorer\\EmptyRecycleBin\\.Current", + NULL, + RRF_RT_REG_EXPAND_SZ, + &dwType, + (PVOID)szPath, + &dwSize); + if (ret != ERROR_SUCCESS) + return S_OK; + + if (dwType != REG_EXPAND_SZ) /* type dismatch */ + return S_OK; + + szPath[(sizeof(szPath)/sizeof(WCHAR))-1] = L'\0'; + PlaySoundW(szPath, NULL, SND_FILENAME); + } return S_OK; } diff --git a/reactos/dll/win32/shell32/shlfldr_mydocuments.c b/reactos/dll/win32/shell32/shfldr_mydocuments.c similarity index 100% rename from reactos/dll/win32/shell32/shlfldr_mydocuments.c rename to reactos/dll/win32/shell32/shfldr_mydocuments.c diff --git a/reactos/dll/win32/shell32/shfldr_recyclebin.c b/reactos/dll/win32/shell32/shfldr_recyclebin.c index 6e5d7e6adff..aae4772cdf5 100644 --- a/reactos/dll/win32/shell32/shfldr_recyclebin.c +++ b/reactos/dll/win32/shell32/shfldr_recyclebin.c @@ -1109,8 +1109,7 @@ static HRESULT WINAPI RecycleBin_IContextMenu2Item_InvokeCommand( } else { - FIXME("implement delete\n"); - CloseRecycleBinHandle(Context.hDeletedFile); + DeleteFileHandleToRecycleBin(Context.hDeletedFile); return E_NOTIMPL; } } @@ -1647,5 +1646,8 @@ TRASH_TrashFile(LPCWSTR wszPath) HRESULT WINAPI SHUpdateRecycleBinIcon(void) { FIXME("stub\n"); + + + return S_OK; } From 8091f3118293e6a1a76c56b79247286569a46c39 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 09:00:50 +0000 Subject: [PATCH 280/304] - Fix a broken check in PspExitThread. We should check if Stack Swapping is _disabled_ during termination, not crash if it is enabled! - Fix KeInitThread to respect this, and initialize EnableStackSwap to TRUE. Otherwise, only executive worker threads who modify the stack swap flag themselves encounter this issue. - This, along with my previous change, fixes worker thread termination being completely broken and crashing ros. - Thanks to Aleksey for confirming my changes svn path=/trunk/; revision=35302 --- reactos/ntoskrnl/ke/thrdobj.c | 2 +- reactos/ntoskrnl/ps/kill.c | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/reactos/ntoskrnl/ke/thrdobj.c b/reactos/ntoskrnl/ke/thrdobj.c index 41b8b2742d5..0651740fbd5 100644 --- a/reactos/ntoskrnl/ke/thrdobj.c +++ b/reactos/ntoskrnl/ke/thrdobj.c @@ -742,7 +742,7 @@ KeInitThread(IN OUT PKTHREAD Thread, } /* Set swap settings */ - Thread->EnableStackSwap = FALSE;//TRUE; + Thread->EnableStackSwap = TRUE; Thread->IdealProcessor = 1; Thread->SwapBusy = FALSE; Thread->KernelStackResident = TRUE; diff --git a/reactos/ntoskrnl/ps/kill.c b/reactos/ntoskrnl/ps/kill.c index 78393d96d11..042b0c987d0 100644 --- a/reactos/ntoskrnl/ps/kill.c +++ b/reactos/ntoskrnl/ps/kill.c @@ -697,10 +697,10 @@ PspExitThread(IN NTSTATUS ExitStatus) PspW32ProcessCallout(CurrentProcess, FALSE); } - /* Make sure Stack Swap isn't enabled */ - if (Thread->Tcb.EnableStackSwap) + /* Make sure Stack Swap is enabled */ + if (!Thread->Tcb.EnableStackSwap) { - /* Stack swap really shouldn't be on during exit !*/ + /* Stack swap really shouldn't be disabled during exit! */ KEBUGCHECKEX(KERNEL_STACK_LOCKED_AT_EXIT, 0, 0, 0, 0); } From 86d20a647b2c424b1857ba894846440ca016f151 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 09:07:34 +0000 Subject: [PATCH 281/304] - Code cleanup svn path=/trunk/; revision=35303 --- reactos/ntoskrnl/mm/physical.c | 75 ++++++++++++++-------------------- 1 file changed, 30 insertions(+), 45 deletions(-) diff --git a/reactos/ntoskrnl/mm/physical.c b/reactos/ntoskrnl/mm/physical.c index 9187f32430d..0a04f230ea3 100644 --- a/reactos/ntoskrnl/mm/physical.c +++ b/reactos/ntoskrnl/mm/physical.c @@ -1,89 +1,74 @@ /* - * COPYRIGHT: See COPYING in the top level directory - * PROJECT: ReactOS kernel + * PROJECT: ReactOS Kernel + * LICENSE: GPL - See COPYING in the top level directory * FILE: ntoskrnl/mm/physical.c - * PURPOSE: Physical Memory Manipulation functions - * - * PROGRAMMERS: Alex Ionescu (alex@relsoft.net) + * PURPOSE: Physical Memory Manipulation Routines + * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org) */ /* INCLUDES *****************************************************************/ #include -#include - +#define NDEBUG +#include /* FUNCTIONS *****************************************************************/ - /* * @unimplemented */ NTSTATUS -STDCALL -MmAddPhysicalMemory ( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes - ) +NTAPI +MmAddPhysicalMemory (IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } - /* * @unimplemented */ NTSTATUS -STDCALL -MmMarkPhysicalMemoryAsBad( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes - ) +NTAPI +MmMarkPhysicalMemoryAsBad(IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } - /* * @unimplemented */ NTSTATUS -STDCALL -MmMarkPhysicalMemoryAsGood( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes - ) +NTAPI +MmMarkPhysicalMemoryAsGood(IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } - /* * @unimplemented */ NTSTATUS -STDCALL -MmRemovePhysicalMemory ( - IN PPHYSICAL_ADDRESS StartAddress, - IN OUT PLARGE_INTEGER NumberOfBytes - ) +NTAPI +MmRemovePhysicalMemory(IN PPHYSICAL_ADDRESS StartAddress, + IN OUT PLARGE_INTEGER NumberOfBytes) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + UNIMPLEMENTED; + return STATUS_NOT_IMPLEMENTED; } /* * @unimplemented */ PPHYSICAL_MEMORY_RANGE -STDCALL -MmGetPhysicalMemoryRanges ( - VOID - ) +NTAPI +MmGetPhysicalMemoryRanges(VOID) { - UNIMPLEMENTED; - return 0; + UNIMPLEMENTED; + return 0; } From 57debf9c5c4343633b26151c1e42d101ade51024 Mon Sep 17 00:00:00 2001 From: Aleksey Bragin Date: Wed, 13 Aug 2008 11:47:34 +0000 Subject: [PATCH 282/304] - Replace crt's lnx_sprintf implementation with the one from lib/rtl (46kb of useless code substituted by 14kb of code, works the same). svn path=/trunk/; revision=35304 --- reactos/lib/sdk/crt/crt.rbuild | 4 - reactos/lib/sdk/crt/stdio/lnx_sprintf.c | 703 ++++++++++++++++- reactos/lib/sdk/crt/stdio/lnx_vfprintf.c | 874 ---------------------- reactos/lib/sdk/crt/stdio/lnx_vfwprint.c | 847 --------------------- reactos/lib/sdk/crt/stdio/lnx_vsprintf.c | 41 - reactos/lib/sdk/crt/stdio/lnx_vswprintf.c | 4 - 6 files changed, 690 insertions(+), 1783 deletions(-) delete mode 100644 reactos/lib/sdk/crt/stdio/lnx_vfprintf.c delete mode 100644 reactos/lib/sdk/crt/stdio/lnx_vfwprint.c delete mode 100644 reactos/lib/sdk/crt/stdio/lnx_vsprintf.c delete mode 100644 reactos/lib/sdk/crt/stdio/lnx_vswprintf.c diff --git a/reactos/lib/sdk/crt/crt.rbuild b/reactos/lib/sdk/crt/crt.rbuild index bba157a2488..bb78b1739bd 100644 --- a/reactos/lib/sdk/crt/crt.rbuild +++ b/reactos/lib/sdk/crt/crt.rbuild @@ -239,10 +239,6 @@ find.c fmode.c lnx_sprintf.c - lnx_vfprintf.c - lnx_vfwprint.c - lnx_vsprintf.c - lnx_vswprintf.c perror.c popen.c waccess.c diff --git a/reactos/lib/sdk/crt/stdio/lnx_sprintf.c b/reactos/lib/sdk/crt/stdio/lnx_sprintf.c index efef2b6d22d..3b48479e7c7 100644 --- a/reactos/lib/sdk/crt/stdio/lnx_sprintf.c +++ b/reactos/lib/sdk/crt/stdio/lnx_sprintf.c @@ -1,9 +1,20 @@ /* - * PROJECT: ReactOS CRT library - * LICENSE: LGPL - See COPYING in the top level directory - * FILE: lib/sdk/crt/stdio/lnx_sprintf.c - * PURPOSE: Base implementation of sprintf - * PROGRAMMERS: Aleksey Bragin (aleksey@reactos.org) + * PROGRAMMERS: David Welch + * Eric Kohl + * + * TODO: + * - Verify the implementation of '%Z'. + */ + +/* + * linux/lib/vsprintf.c + * + * Copyright (C) 1991, 1992 Linus Torvalds + */ + +/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ +/* + * Wirzenius wrote this portably, Torvalds fucked it up :-) */ #include @@ -11,18 +22,684 @@ #include #include +#define ZEROPAD 1 /* pad with zero */ +#define SIGN 2 /* unsigned/signed long */ +#define PLUS 4 /* show plus */ +#define SPACE 8 /* space if plus */ +#define LEFT 16 /* left justified */ +#define SPECIAL 32 /* 0x */ +#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ +#define REMOVEHEX 256 /* use 256 as remve 0x frim BASE 16 */ + +static +__inline +int +do_div(long long *n, int base) +{ + int a; + a = ((unsigned long long) *n) % (unsigned) base; + *n = ((unsigned long long) *n) / (unsigned) base; + return a; +} + + +static int skip_atoi(const char **s) +{ + int i=0; + + while (isdigit(**s)) + i = i*10 + *((*s)++) - '0'; + return i; +} + + +static char * +number(char * buf, char * end, long long num, int base, int size, int precision, int type) +{ + char c,sign,tmp[66]; + const char *digits; + const char *small_digits = "0123456789abcdefghijklmnopqrstuvwxyz"; + const char *large_digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + + digits = (type & LARGE) ? large_digits : small_digits; + if (type & LEFT) + type &= ~ZEROPAD; + if (base < 2 || base > 36) + return 0; + c = (type & ZEROPAD) ? '0' : ' '; + sign = 0; + if (type & SIGN) { + if (num < 0) { + sign = '-'; + num = -num; + size--; + } else if (type & PLUS) { + sign = '+'; + size--; + } else if (type & SPACE) { + sign = ' '; + size--; + } + } + + if ((type & SPECIAL) && ((type & REMOVEHEX) == 0)) { + if (base == 16) + size -= 2; + + } + i = 0; + if ((num == 0) && (precision !=0)) + tmp[i++] = '0'; + else while (num != 0) + tmp[i++] = digits[do_div(&num,base)]; + if (i > precision) + precision = i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) { + while(size-->0) { + if (buf <= end) + *buf = ' '; + ++buf; + } + } + if (sign) { + if (buf <= end) + *buf = sign; + ++buf; + } + + if ((type & SPECIAL) && ((type & REMOVEHEX) == 0)) { + if (base==16) { + if (buf <= end) + *buf = '0'; + ++buf; + if (buf <= end) + *buf = digits[33]; + ++buf; + } + } + + if (!(type & LEFT)) { + while (size-- > 0) { + if (buf <= end) + *buf = c; + ++buf; + } + } + while (i < precision--) { + if (buf <= end) + *buf = '0'; + ++buf; + } + while (i-- > 0) { + if (buf <= end) + *buf = tmp[i]; + ++buf; + } + while (size-- > 0) { + if (buf <= end) + *buf = ' '; + ++buf; + } + + return buf; +} + +static char * +numberf(char * buf, char * end, double num, int base, int size, int precision, int type) +{ + char c,sign,tmp[66]; + const char *digits; + const char *small_digits = "0123456789abcdefghijklmnopqrstuvwxyz"; + const char *large_digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + int i; + long long x; + + /* FIXME + the float version of number is direcly copy of number + */ + + digits = (type & LARGE) ? large_digits : small_digits; + if (type & LEFT) + type &= ~ZEROPAD; + if (base < 2 || base > 36) + return 0; + c = (type & ZEROPAD) ? '0' : ' '; + sign = 0; + if (type & SIGN) { + if (num < 0) { + sign = '-'; + num = -num; + size--; + } else if (type & PLUS) { + sign = '+'; + size--; + } else if (type & SPACE) { + sign = ' '; + size--; + } + } + if (type & SPECIAL) { + if (base == 16) + size -= 2; + else if (base == 8) + size--; + } + i = 0; + if (num == 0) + tmp[i++] = '0'; + else while (num != 0) + { + x = num; + tmp[i++] = digits[do_div(&x,base)]; + num=x; + } + if (i > precision) + precision = i; + size -= precision; + if (!(type&(ZEROPAD+LEFT))) { + while(size-->0) { + if (buf <= end) + *buf = ' '; + ++buf; + } + } + if (sign) { + if (buf <= end) + *buf = sign; + ++buf; + } + if (type & SPECIAL) { + if (base==8) { + if (buf <= end) + *buf = '0'; + ++buf; + } else if (base==16) { + if (buf <= end) + *buf = '0'; + ++buf; + if (buf <= end) + *buf = digits[33]; + ++buf; + } + } + if (!(type & LEFT)) { + while (size-- > 0) { + if (buf <= end) + *buf = c; + ++buf; + } + } + while (i < precision--) { + if (buf <= end) + *buf = '0'; + ++buf; + } + while (i-- > 0) { + if (buf <= end) + *buf = tmp[i]; + ++buf; + } + while (size-- > 0) { + if (buf <= end) + *buf = ' '; + ++buf; + } + return buf; +} + +static char* +string(char* buf, char* end, const char* s, int len, int field_width, int precision, int flags) +{ + int i; + char c; + + c = (flags & ZEROPAD) ? '0' : ' '; + + if (s == NULL) + { + s = ""; + len = 6; + } + else + { + if (len == -1) + { + len = 0; + while ((unsigned int)len < (unsigned int)precision && s[len]) + len++; + } + else + { + if ((unsigned int)len > (unsigned int)precision) + len = precision; + } + } + if (!(flags & LEFT)) + while (len < field_width--) + { + if (buf <= end) + *buf = c; + ++buf; + } + for (i = 0; i < len; ++i) + { + if (buf <= end) + *buf = *s++; + ++buf; + } + while (len < field_width--) + { + if (buf <= end) + *buf = ' '; + ++buf; + } + return buf; +} + +static char* +stringw(char* buf, char* end, const wchar_t* sw, int len, int field_width, int precision, int flags) +{ + int i; + char c; + + c = (flags & ZEROPAD) ? '0' : ' '; + + if (sw == NULL) + { + sw = L""; + len = 6; + } + else + { + if (len == -1) + { + len = 0; + while ((unsigned int)len < (unsigned int)precision && sw[len]) + len++; + } + else + { + if ((unsigned int)len > (unsigned int)precision) + len = precision; + } + } + if (!(flags & LEFT)) + while (len < field_width--) + { + if (buf <= end) + *buf = c; + buf++; + } + for (i = 0; i < len; ++i) + { + if (buf <= end) + *buf = (unsigned char)(*sw++); + buf++; + } + while (len < field_width--) + { + if (buf <= end) + *buf = ' '; + buf++; + } + return buf; +} + /* * @implemented */ -int -lnx_sprintf(_TCHAR *str, const _TCHAR *fmt, ...) +int __cdecl lnx_vsnprintf(char *buf, size_t cnt, const char *fmt, va_list args) { - va_list arg; - int done; + int len; + unsigned long long num; + double _double; - va_start (arg, fmt); - done = lnx__vstprintf (str, fmt, arg); - va_end (arg); - return done; + int base; + char *str, *end; + const char *s; + const wchar_t *sw; + + int flags; /* flags to number() */ + + int field_width; /* width of output field */ + int precision; /* min. # of digits for integers; max + number of chars for from string */ + int qualifier; /* 'h', 'l', 'L', 'I' or 'w' for integer fields */ + + /* clear the string buffer with zero so we do not need NULL terment it at end */ + + str = buf; + end = buf + cnt - 1; + if (end < buf - 1) { + end = ((char *) -1); + cnt = end - buf + 1; + } + + for ( ; *fmt ; ++fmt) { + if (*fmt != '%') { + if (str <= end) + *str = *fmt; + ++str; + continue; + } + + /* process flags */ + flags = 0; + repeat: + ++fmt; /* this also skips first '%' */ + switch (*fmt) { + case '-': flags |= LEFT; goto repeat; + case '+': flags |= PLUS; goto repeat; + case ' ': flags |= SPACE; goto repeat; + case '#': flags |= SPECIAL; goto repeat; + case '0': flags |= ZEROPAD; goto repeat; + } + + /* get field width */ + field_width = -1; + if (isdigit(*fmt)) + field_width = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) { + field_width = -field_width; + flags |= LEFT; + } + } + + /* get the precision */ + precision = -1; + if (*fmt == '.') { + ++fmt; + if (isdigit(*fmt)) + precision = skip_atoi(&fmt); + else if (*fmt == '*') { + ++fmt; + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) + precision = 0; + } + + /* get the conversion qualifier */ + qualifier = -1; + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'w') { + qualifier = *fmt; + ++fmt; + } else if (*fmt == 'I' && *(fmt+1) == '6' && *(fmt+2) == '4') { + qualifier = *fmt; + fmt += 3; + } else if (*fmt == 'I' && *(fmt+1) == '3' && *(fmt+2) == '2') { + qualifier = 'l'; + fmt += 3; + } else if (*fmt == 'F' && *(fmt+1) == 'p') { + fmt += 1; + flags |= REMOVEHEX; + } + + /* default base */ + base = 10; + + switch (*fmt) { + case 'c': /* finished */ + if (qualifier == 'l' || qualifier == 'w') { + wchar_t sw1[2]; + /* print unicode string */ + sw1[0] = (wchar_t) va_arg(args, int); + sw1[1] = 0; + str = stringw(str, end, (wchar_t *)&sw1, -1, field_width, precision, flags); + } else { + char s1[2]; + /* print ascii string */ + s1[0] = ( unsigned char) va_arg(args, int); + s1[1] = 0; + str = string(str, end, (char *)&s1, -1, field_width, precision, flags); + } + continue; + + case 'C': /* finished */ + if (!(flags & LEFT)) + while (--field_width > 0) { + if (str <= end) + *str = ' '; + ++str; + } + if (qualifier == 'h') { + if (str <= end) + *str = (unsigned char) va_arg(args, int); + ++str; + } else { + if (str <= end) + *str = (unsigned char)(wchar_t) va_arg(args, int); + ++str; + } + while (--field_width > 0) { + if (str <= end) + *str = ' '; + ++str; + } + continue; + + case 's': /* finished */ + if (qualifier == 'l' || qualifier == 'w') { + /* print unicode string */ + sw = va_arg(args, wchar_t *); + str = stringw(str, end, sw, -1, field_width, precision, flags); + } else { + /* print ascii string */ + s = va_arg(args, char *); + str = string(str, end, s, -1, field_width, precision, flags); + } + continue; + + case 'S': + if (qualifier == 'h') { + /* print ascii string */ + s = va_arg(args, char *); + str = string(str, end, s, -1, field_width, precision, flags); + } else { + /* print unicode string */ + sw = va_arg(args, wchar_t *); + str = stringw(str, end, sw, -1, field_width, precision, flags); + } + continue; + + case 'Z': + if (qualifier == 'w') { + /* print counted unicode string */ + PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING); + if ((pus == NULL) || (pus->Buffer == NULL)) { + sw = NULL; + len = -1; + } else { + sw = pus->Buffer; + len = pus->Length / sizeof(WCHAR); + } + str = stringw(str, end, sw, len, field_width, precision, flags); + } else { + /* print counted ascii string */ + PANSI_STRING pus = va_arg(args, PANSI_STRING); + if ((pus == NULL) || (pus->Buffer == NULL)) { + s = NULL; + len = -1; + } else { + s = pus->Buffer; + len = pus->Length; + } + str = string(str, end, s, len, field_width, precision, flags); + } + continue; + + case 'p': + if ((flags & LARGE) == 0) + flags |= LARGE; + + if (field_width == -1) { + field_width = 2 * sizeof(void *); + flags |= ZEROPAD; + } + str = number(str, end, + (unsigned long) va_arg(args, void *), 16, + field_width, precision, flags); + continue; + + case 'n': + /* FIXME: What does C99 say about the overflow case here? */ + if (qualifier == 'l') { + long * ip = va_arg(args, long *); + *ip = (str - buf); + } else { + int * ip = va_arg(args, int *); + *ip = (str - buf); + } + continue; + + /* float number formats - set up the flags and "break" */ + case 'e': + case 'E': + case 'f': + case 'g': + case 'G': + _double = (double)va_arg(args, double); + if ( _isnan(_double) ) { + s = "Nan"; + len = 3; + while ( len > 0 ) { + if (str <= end) + *str = *s++; + ++str; + len --; + } + } else if ( _isinf(_double) < 0 ) { + s = "-Inf"; + len = 4; + while ( len > 0 ) { + if (str <= end) + *str = *s++; + ++str; + len --; + } + } else if ( _isinf(_double) > 0 ) { + s = "+Inf"; + len = 4; + while ( len > 0 ) { + if (str <= end) + *str = *s++; + ++str; + len --; + } + } else { + if ( precision == -1 ) + precision = 6; + str = numberf(str, end, (int)_double, base, field_width, precision, flags); + } + + continue; + + + /* integer number formats - set up the flags and "break" */ + case 'o': + base = 8; + break; + + case 'b': + base = 2; + break; + + case 'X': + flags |= LARGE; + case 'x': + base = 16; + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + break; + + default: + if (*fmt) { + if (str <= end) + *str = *fmt; + ++str; + } else + --fmt; + continue; + } + + if (qualifier == 'I') + num = va_arg(args, unsigned long long); + else if (qualifier == 'l') { + if (flags & SIGN) + num = va_arg(args, long); + else + num = va_arg(args, unsigned long); + } + else if (qualifier == 'h') { + if (flags & SIGN) + num = va_arg(args, int); + else + num = va_arg(args, unsigned int); + } + else { + if (flags & SIGN) + num = va_arg(args, int); + else + num = va_arg(args, unsigned int); + } + str = number(str, end, num, base, field_width, precision, flags); + } + if (str <= end) + *str = '\0'; + else if (cnt > 0) + /* don't write out a null byte if the buf size is zero */ + *end = '\0'; + return str-buf; } + +/* + * @implemented + */ +int lnx_sprintf(char * buf, const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=lnx_vsnprintf(buf,MAXLONG,fmt,args); + va_end(args); + return i; +} + +#if 0 +/* + * @implemented + */ +int _snprintf(char * buf, size_t cnt, const char *fmt, ...) +{ + va_list args; + int i; + + va_start(args, fmt); + i=_vsnprintf(buf,cnt,fmt,args); + va_end(args); + return i; +} + + +/* + * @implemented + */ +int __cdecl vsprintf(char *buf, const char *fmt, va_list args) +{ + return _vsnprintf(buf,MAXLONG,fmt,args); +} +#endif +/* EOF */ diff --git a/reactos/lib/sdk/crt/stdio/lnx_vfprintf.c b/reactos/lib/sdk/crt/stdio/lnx_vfprintf.c deleted file mode 100644 index c2a288496d6..00000000000 --- a/reactos/lib/sdk/crt/stdio/lnx_vfprintf.c +++ /dev/null @@ -1,874 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ -#include - -extern int __mb_cur_max; -int __vfprintf(FILE*, const char*, va_list); - -/* - * @implemented - */ -int lnx_vfprintf(FILE* f, const char* fmt, va_list ap) -{ - int len; - char localbuf[BUFSIZ]; - -#if 0 - __fileno_lock(_fileno(f)); -#endif - if (f->_flag & _IONBF) { - f->_flag &= ~_IONBF; - f->_ptr = f->_base = localbuf; - f->_bufsiz = f->_cnt = BUFSIZ; - len = __vfprintf(f, fmt, ap); - (void)fflush(f); - f->_flag |= _IONBF; - f->_base = NULL; - f->_bufsiz = 0; - f->_cnt = 0; - } else { - len = __vfprintf(f,fmt, ap); - } -#if 0 - __fileno_unlock(_fileno(f)); -#endif - return (ferror(f) ? EOF : len); -} - - -/* - * linux/lib/vsprintf.c - * - * Copyright (C) 1991, 1992 Linus Torvalds - */ - -/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ -/* - * Wirzenius wrote this portably, Torvalds fucked it up :-) - */ - -/* - * Appropiated for the reactos kernel, March 1998 -- David Welch - */ - -#include - -#include -#include -#include -#include - - -#define ZEROPAD 1 /* pad with zero */ -#define SIGN 2 /* unsigned/signed long */ -#define PLUS 4 /* show plus */ -#define SPACE 8 /* space if plus */ -#define LEFT 16 /* left justified */ -#define SPECIAL 32 /* 0x */ -#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ -#define ZEROTRUNC 128 /* truncate zero 's */ - - -static int skip_atoi(const char **s) -{ - int i=0; - - while (isdigit(**s)) - i = i*10 + *((*s)++) - '0'; - return i; -} - - -static int do_div(LONGLONG *n,int base) -{ - int __res = ((ULONGLONG) *n) % (unsigned) base; - *n = ((ULONGLONG) *n) / (unsigned) base; - return __res; -} - - -static int number(FILE * f, LONGLONG num, int base, int size, int precision ,int type) -{ - char c,sign,tmp[66]; - const char *digits="0123456789abcdefghijklmnopqrstuvwxyz"; - int i, done = 0; - - if (type & LARGE) - digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - if (type & LEFT) - type &= ~ZEROPAD; - if (base < 2 || base > 36) - return done; - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if (num < 0) { - sign = '-'; - num = -num; - size--; - } else if (type & PLUS) { - sign = '+'; - size--; - } else if (type & SPACE) { - sign = ' '; - size--; - } - } - if (type & SPECIAL) { - if (base == 16) - size -= 2; - else if (base == 8) - size--; - } - i = 0; - if (num == 0) - tmp[i++]='0'; - else while (num != 0) - tmp[i++] = digits[do_div(&num,base)]; - if (i > precision) - precision = i; - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putc(' ',f) == EOF) - return -1; - done++; - } - if (sign) - { - if (putc(sign,f) == EOF) - return -1; - done++; - } - if (type & SPECIAL) { - if (base==8) { - if (putc('0',f) == EOF) - return -1; - done++; - } - else if (base==16) { - if (putc('0', f) == EOF) - return -1; - done++; - if (putc(digits[33],f) == EOF) - return -1; - done++; - } - } - if (!(type & LEFT)) - while (size-- > 0) - { - if (putc(c,f) == EOF) - return -1; - done++; - } - while (i < precision--) - { - if (putc('0', f) == EOF) - return -1; - done++; - } - while (i-- > 0) - { - if (putc(tmp[i],f) == EOF) - return -1; - done++; - } - while (size-- > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - return done; -} - - -static int numberf(FILE * f, double __n, char exp_sign, int size, int precision, int type) -{ - double exponent = 0.0; - double e; - long ie; - - //int x; - char *buf, *tmp; - int i = 0; - int j = 0; - //int k = 0; - - double frac, intr; - double p; - char sign; - char c; - char ro = 0; - int result, done = 0; - - union - { - double* __n; - double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == L'g' || exp_sign == L'G' || exp_sign == L'e' || exp_sign == L'E' ) - { - if ( 0 == n.n->mantissal && 0 == n.n->mantissah && 0 == n.n->exponent ) - { - ie = 0; - } - else - { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff); - } - - exponent = ie/3.321928; - } - - - if ( exp_sign == 'g' || exp_sign == 'G' ) { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - else - exp_sign = 'f'; - } - - if ( exp_sign == 'e' || exp_sign == 'E' ) { - frac = modf(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = numberf(f,__n/pow(10.0L,e),'f',size-4, precision, type); - if (result < 0) - return -1; - done += result; - if (putc( exp_sign,f) == EOF) - return -1; - done++; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = number(f,ie, 10,2, 2,type ); - if (result < 0) - return -1; - done += result; - return done; - } - - if ( exp_sign == 'f' ) { - buf = alloca(4096); - if (type & LEFT) { - type &= ~ZEROPAD; - } - - c = (type & ZEROPAD) ? '0' : ' '; - sign = 0; - if (type & SIGN) { - if (__n < 0) { - sign = '-'; - __n = fabs(__n); - size--; - } else if (type & PLUS) { - sign = '+'; - size--; - } else if (type & SPACE) { - sign = ' '; - size--; - } - } - - frac = modf(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - - if ( precision > 0 ) { - //frac = modfl(__n,&intr); - i = precision-1; - while ( i >= 0 ) { - frac*=10.0L; - frac = modf(frac, &p); - buf[i] = (int)p + '0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) { - ro = 1; - } - - if ( precision >= 1 || type & SPECIAL) { - buf[i++] = '.'; - size--; - } - } - - if ( intr == 0.0 ) { - buf[i++] = '0'; - size--; - } - else { - while ( intr > 0.0 ) { - p = intr; - intr/=10.0L; - modf(intr, &intr); - - p -= 10.0*intr; - - buf[i++] = (int)p + '0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1) { - if ( buf[j] >= '0' && buf[j] <= '8' ) { - buf[j]++; - ro = 0; - } - else if ( buf[j] == '9' ) { - buf[j] = '0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = '1'; - - buf[i] = 0; - - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putc(' ',f) == EOF) - return -1; - done++; - } - if (sign) - { - if (putc( sign,f) == EOF) - return -1; - done++; - } - - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putc(' ',f) == EOF) - return -1; - done++; - } - if (type & SPECIAL) { - } - - if (!(type & LEFT)) - while (size-- > 0) - { - if (putc(c,f) == EOF) - return -1; - done++; - } - - tmp = buf; - - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) { - j = 0; - while ( j < i && *tmp == L'0' ) { - tmp++; - i--; - } - if ( j < i && *tmp == L'.' ) { - tmp++; - i--; - } - } - - -// else -// while (i < precision--) -// putc('0', f); - while (i-- > 0) - { - if (putc(tmp[i],f) == EOF) - return -1; - done++; - } - while (size-- > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - } - return done; -} - - - - -static int string(FILE *f, const char* s, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (s == NULL) - { - s = ""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && s[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - for (i = 0; i < len; ++i) - { - if (putc(*s++, f) == EOF) - return -1; - done++; - } - while (len < field_width--) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - return done; -} - -static int stringw(FILE *f, const wchar_t* sw, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - char * mb; - if (sw == NULL) - { - sw = L""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && sw[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - mb = malloc(MB_CUR_MAX * sizeof(char)); - if(!mb) - return -1; - for (i = 0; i < len; ++i) - { - int mbcount, j; - mbcount = wctomb(mb, *sw++); - if (mbcount <= 0) - { - break; - } - for (j = 0; j < mbcount; j++) - { - if (putc(mb[j], f) == EOF) - { - free(mb); - return -1; - } - done++; - } - } - while (len < field_width--) - { - if (putc(' ', f) == EOF) - { - free(mb); - return -1; - } - done++; - } - free(mb); - return done; -} - -int __vfprintf(FILE *f, const char *fmt, va_list args) -{ - int len; - ULONGLONG num; - int base; - double _double; - const char *s; - const wchar_t *sw; - int result, done = 0; - - int flags; /* flags to number() */ - - int field_width; /* width of output field */ - int precision; /* min. # of digits for integers; max - number of chars for from string */ - int qualifier = 0; /* 'h', 'l', 'L' or 'I64' for integer fields */ - - for (; *fmt ; ++fmt) { - if (*fmt != '%') { - if (putc(*fmt,f) == EOF) - return -1; - done++; - continue; - } - - /* process flags */ - flags = 0; - repeat: - ++fmt; /* this also skips first '%' */ - switch (*fmt) { - case '-': flags |= LEFT; goto repeat; - case '+': flags |= PLUS; goto repeat; - case ' ': flags |= SPACE; goto repeat; - case '#': flags |= SPECIAL; goto repeat; - case '0': flags |= ZEROPAD; goto repeat; - } - - /* get field width */ - field_width = -1; - if (isdigit(*fmt)) - field_width = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - field_width = va_arg(args, int); - if (field_width < 0) { - field_width = -field_width; - flags |= LEFT; - } - } - - /* get the precision */ - precision = -1; - if (*fmt == '.') { - ++fmt; - if (isdigit(*fmt)) - precision = skip_atoi(&fmt); - else if (*fmt == '*') { - ++fmt; - /* it's the next argument */ - precision = va_arg(args, int); - } - if (precision < 0) - precision = 0; - } - - /* get the conversion qualifier */ - qualifier = 0; - // %Z can be just stand alone or as size_t qualifier - if ( *fmt == 'Z' ) { - qualifier = *fmt; - switch ( *(fmt+1)) { - case 'o': - case 'b': - case 'X': - case 'x': - case 'd': - case 'i': - case 'u': - ++fmt; - break; - default: - break; - } - } else if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L' || *fmt == 'w') { - qualifier = *fmt; - ++fmt; - } else if (*fmt == 'I' && *(fmt+1) == '6' && *(fmt+2) == '4') { - qualifier = *fmt; - fmt += 3; - } - - // go fine with ll instead of L - if ( *fmt == 'l' ) { - ++fmt; - qualifier = 'L'; - } - - /* default base */ - base = 10; - - switch (*fmt) { - case 'c': - if (!(flags & LEFT)) - while (--field_width > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - if (qualifier == 'l' || qualifier == 'w') - { - if (putc((unsigned char)(wchar_t) va_arg(args, int), f) == EOF) - return -1; - done++; - } - else - { - if (putc((unsigned char) va_arg(args, int), f) == EOF) - return -1; - done++; - } - while (--field_width > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - continue; - - case 'C': - if (!(flags & LEFT)) - while (--field_width > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - if (qualifier == 'h') - { - if (putc((unsigned char) va_arg(args, int), f) == EOF) - return -1; - done++; - } - else - { - if (putc((unsigned char)(wchar_t) va_arg(args, int), f) == EOF) - return -1; - done++; - } - while (--field_width > 0) - { - if (putc(' ', f) == EOF) - return -1; - done++; - } - continue; - - case 's': - if (qualifier == 'l' || qualifier == 'w') { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } else { - /* print ascii string */ - s = va_arg(args, char *); - result = string(f, s, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case 'S': - if (qualifier == 'h') { - /* print ascii string */ - s = va_arg(args, char *); - result = string(f, s, -1, field_width, precision, flags); - } else { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case 'Z': - if (qualifier == 'w') { - /* print counted unicode string */ - PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING); - if ((pus == NULL) || (pus->Buffer == NULL)) { - sw = NULL; - len = -1; - } else { - sw = pus->Buffer; - len = pus->Length / sizeof(WCHAR); - } - result = stringw(f, sw, len, field_width, precision, flags); - } else { - /* print counted ascii string */ - PANSI_STRING pas = va_arg(args, PANSI_STRING); - if ((pas == NULL) || (pas->Buffer == NULL)) { - s = NULL; - len = -1; - } else { - s = pas->Buffer; - len = pas->Length; - } - result = string(f, s, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case 'e': - case 'E': - case 'f': - case 'g': - case 'G': - _double = (double)va_arg(args, double); - - if ( _isnan(_double) ) { - s = "Nan"; - len = 3; - while ( len > 0 ) { - if (putc(*s++,f) == EOF) - return -1; - done++; - len --; - } - } else if ( _isinf(_double) < 0 ) { - s = "-Inf"; - len = 4; - while ( len > 0 ) { - if (putc(*s++,f) == EOF) - return -1; - done++; - len --; - } - } else if ( _isinf(_double) > 0 ) { - s = "+Inf"; - len = 4; - while ( len > 0 ) { - if (putc(*s++,f) == EOF) - return -1; - done++; - len --; - } - } else { - if ( precision == -1 ) - precision = 6; - result = numberf(f,_double,*fmt,field_width,precision,flags); - if (result < 0) - return -1; - done += result; - } - continue; - - case 'p': - if (field_width == -1) { - field_width = 2*sizeof(void *); - flags |= ZEROPAD; - } - result = number(f, - (unsigned long) va_arg(args, void *), 16, - field_width, precision, flags); - if (result < 0) - return -1; - done += result; - continue; - - case 'n': - if (qualifier == 'l') { - long * ip = va_arg(args, long *); - *ip = 0; - } else { - int * ip = va_arg(args, int *); - *ip = 0; - } - continue; - - /* integer number formats - set up the flags and "break" */ - case 'o': - base = 8; - break; - - case 'b': - base = 2; - break; - - case 'X': - flags |= LARGE; - case 'x': - base = 16; - break; - - case 'd': - case 'i': - flags |= SIGN; - case 'u': - break; - - default: - if (*fmt != '%') - { - if (putc('%', f) == EOF) - return -1; - done++; - } - if (*fmt) - { - if (putc(*fmt, f) == EOF) - return -1; - done++; - } - else - --fmt; - continue; - } - - if (qualifier == 'I') - num = va_arg(args, ULONGLONG); - else if (qualifier == 'l') { - if (flags & SIGN) - num = va_arg(args, long); - else - num = va_arg(args, unsigned long); - } - else if (qualifier == 'h') { - if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - } - else if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - result = number(f, num, base, field_width, precision, flags); - if (result < 0) - return -1; - done += result; - } - //putc('\0',f); - return done; -} - -/* EOF */ diff --git a/reactos/lib/sdk/crt/stdio/lnx_vfwprint.c b/reactos/lib/sdk/crt/stdio/lnx_vfwprint.c deleted file mode 100644 index c6a494dd1f6..00000000000 --- a/reactos/lib/sdk/crt/stdio/lnx_vfwprint.c +++ /dev/null @@ -1,847 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ - -#include - - -int -__vfwprintf(FILE *fp, const wchar_t *fmt0, va_list argp); - - -/* - * @implemented - */ -int -lnx_vfwprintf(FILE *f, const wchar_t *fmt, va_list ap) -{ - int len; - wchar_t localbuf[BUFSIZ]; - -#if 0 - __fileno_lock(_fileno(f)); -#endif - if (f->_flag & _IONBF) { - f->_flag &= ~_IONBF; - f->_ptr = f->_base = (char *)localbuf; - f->_bufsiz = BUFSIZ; - len = __vfwprintf(f,fmt,ap); - (void)fflush(f); - f->_flag |= _IONBF; - f->_base = NULL; - f->_bufsiz = 0; - f->_cnt = 0; - } else - len = __vfwprintf(f,fmt,ap); -#if 0 - __fileno_unlock(_fileno(f)); -#endif - return (ferror(f) ? EOF : len); -} - - - -/* - * linux/lib/vsprintf.c - * - * Copyright (C) 1991, 1992 Linus Torvalds - */ - -/* vsprintf.c -- Lars Wirzenius & Linus Torvalds. */ -/* - * Wirzenius wrote this portably, Torvalds fucked it up :-) - */ - -/* - * Appropiated for the reactos kernel, March 1998 -- David Welch - */ - -#include -#include - -#define ZEROPAD 1 /* pad with zero */ -#define SIGN 2 /* unsigned/signed long */ -#define PLUS 4 /* show plus */ -#define SPACE 8 /* space if plus */ -#define LEFT 16 /* left justified */ -#define SPECIAL 32 /* 0x */ -#define LARGE 64 /* use 'ABCDEF' instead of 'abcdef' */ -#define ZEROTRUNC 128 /* truncate zero 's */ - - -static int skip_wtoi(const wchar_t **s) -{ - int i=0; - - while (iswdigit(**s)) - i = i*10 + *((*s)++) - L'0'; - return i; -} - - -static int do_div(LONGLONG *n,int base) -{ - int __res = ((ULONGLONG) *n) % (unsigned) base; - *n = ((ULONGLONG) *n) / (unsigned) base; - return __res; -} - - -static int number(FILE * f, LONGLONG num, int base, int size, int precision ,int type) -{ - wchar_t c,sign,tmp[66]; - const wchar_t *digits=L"0123456789abcdefghijklmnopqrstuvwxyz"; - int i, done = 0; - - if (type & LARGE) - digits = L"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - if (type & LEFT) - type &= ~ZEROPAD; - if (base < 2 || base > 36) - return done; - c = (type & ZEROPAD) ? L'0' : L' '; - sign = 0; - if (type & SIGN) { - if (num < 0) { - sign = L'-'; - num = -num; - size--; - } else if (type & PLUS) { - sign = L'+'; - size--; - } else if (type & SPACE) { - sign = L' '; - size--; - } - } - if (type & SPECIAL) { - if (base == 16) - size -= 2; - else if (base == 8) - size--; - } - i = 0; - if (num == 0) - tmp[i++]=L'0'; - else while (num != 0) - tmp[i++] = digits[do_div(&num,base)]; - if (i > precision) - precision = i; - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putwc(L' ',f) == WEOF) - return -1; - done++; - } - - if (sign) - { - if (putwc(sign,f) == WEOF) - return -1; - done++; - } - if (type & SPECIAL) { - if (base==8) { - if (putwc(L'0',f) == WEOF) - return -1; - done++; - } - else if (base==16) { - if (putwc(L'0', f) == WEOF) - return -1; - done++; - if (putwc(digits[33],f) == WEOF) - return -1; - done++; - } - } - if (!(type & LEFT)) - while (size-- > 0) - { - if (putwc(c,f) == WEOF) - return -1; - done++; - } - while (i < precision--) - { - if (putwc(L'0', f) == WEOF) - return -1; - done++; - } - while (i-- > 0) - { - if (putwc(tmp[i],f) == WEOF) - return -1; - done++; - } - while (size-- > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - return done; -} - - -static int numberf(FILE * f, double __n, wchar_t exp_sign, int size, int precision, int type) -{ - double exponent = 0.0; - double e; - long ie; - - //int x; - char *buf, *tmp; - int i = 0; - int j = 0; - //int k = 0; - - double frac, intr; - double p; - wchar_t sign; - wchar_t c; - char ro = 0; - int result, done = 0; - - union - { - double* __n; - double_t* n; - } n; - - n.__n = &__n; - - if ( exp_sign == L'g' || exp_sign == L'G' || exp_sign == L'e' || exp_sign == L'E' ) - { - if ( 0 == n.n->mantissal && 0 == n.n->mantissah && 0 == n.n->exponent ) - { - ie = 0; - } - else - { - ie = ((unsigned int)n.n->exponent - (unsigned int)0x3ff); - } - - exponent = ie/3.321928; - } - - - if ( exp_sign == L'g' || exp_sign == L'G' ) { - type |= ZEROTRUNC; - if ( exponent < -4 || fabs(exponent) >= precision ) - exp_sign -= 2; // g -> e and G -> E - else - exp_sign = 'f'; - } - - if ( exp_sign == L'e' || exp_sign == L'E' ) { - frac = modf(exponent,&e); - if ( frac > 0.5 ) - e++; - else if ( frac < -0.5 ) - e--; - - result = numberf(f,__n/pow(10.0L,e),L'f',size-4, precision, type); - if (result < 0) - return -1; - done += result; - if (putwc( exp_sign,f) == WEOF) - return -1; - done++; - size--; - ie = (long)e; - type = LEFT | PLUS; - if ( ie < 0 ) - type |= SIGN; - - result = number(f,ie, 10,2, 2,type ); - if (result < 0) - return -1; - done += result; - return done; - } - - if ( exp_sign == 'f' ) { - buf = alloca(4096); - if (type & LEFT) { - type &= ~ZEROPAD; - } - - c = (type & ZEROPAD) ? L'0' : L' '; - sign = 0; - if (type & SIGN) { - if (__n < 0) { - sign = L'-'; - __n = fabs(__n); - size--; - } else if (type & PLUS) { - sign = L'+'; - size--; - } else if (type & SPACE) { - sign = L' '; - size--; - } - } - - frac = modf(__n,&intr); - - // # flags forces a . and prevents trucation of trailing zero's - - if ( precision > 0 ) { - //frac = modfl(__n,&intr); - i = precision-1; - while ( i >= 0 ) { - frac*=10.0L; - frac = modf(frac, &p); - buf[i] = (int)p + L'0'; - i--; - } - i = precision; - size -= precision; - - ro = 0; - if ( frac > 0.5 ) { - ro = 1; - } - - if ( precision >= 1 || type & SPECIAL) { - buf[i++] = '.'; - size--; - } - } - - if ( intr == 0.0 ) { - buf[i++] = L'0'; - size--; - } - else { - while ( intr > 0.0 ) { - p = intr; - intr/=10.0L; - modf(intr, &intr); - - p -= 10.0*intr; - - buf[i++] = (int)p + L'0'; - size--; - } - } - - j = 0; - while ( j < i && ro == 1 ) { - if ( buf[j] >= L'0' && buf[j] <= L'8' ) { - buf[j]++; - ro = 0; - } - else if ( buf[j] == L'9' ) { - buf[j] = L'0'; - } - j++; - } - if ( ro == 1 ) - buf[i++] = L'1'; - - buf[i] = 0; - - size -= precision; - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putwc(L' ',f) == WEOF) - return -1; - done++; - } - if (sign) - { - if (putwc( sign,f) == WEOF) - return -1; - done++; - } - - if (!(type&(ZEROPAD+LEFT))) - while(size-->0) - { - if (putwc(L' ',f) == WEOF) - return -1; - done++; - } - if (type & SPECIAL) { - } - - if (!(type & LEFT)) - while (size-- > 0) - { - if (putwc(c,f) == WEOF) - return -1; - done++; - } - - tmp = buf; - if ( type & ZEROTRUNC && ((type & SPECIAL) != SPECIAL) ) { - j = 0; - while ( j < i && *tmp == L'0' ) { - tmp++; - i--; - } - if ( j < i && *tmp == L'.' ) { - tmp++; - i--; - } - } -// else -// while (i < precision--) -// putwc(L'0', f); - while (i-- > 0) - { - if (putwc(tmp[i],f) == WEOF) - return -1; - done++; - } - while (size-- > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - } - return done; -} - - - -static int string(FILE *f, const char* s, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (s == NULL) - { - s = ""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && s[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - for (i = 0; i < len; ++i) - { - if (putwc(*s++, f) == WEOF) - return -1; - done++; - } - while (len < field_width--) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - return done; -} - -static int stringw(FILE *f, const wchar_t* sw, int len, int field_width, int precision, int flags) -{ - int i, done = 0; - if (sw == NULL) - { - sw = L""; - len = 6; - } - else - { - if (len == -1) - { - len = 0; - while ((unsigned int)len < (unsigned int)precision && sw[len]) - len++; - } - else - { - if ((unsigned int)len > (unsigned int)precision) - len = precision; - } - } - if (!(flags & LEFT)) - while (len < field_width--) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - for (i = 0; i < len; ++i) - { - if (putwc(*sw++, f) == WEOF) - return -1; - done++; - } - while (len < field_width--) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - return done; -} - -int __vfwprintf(FILE *f, const wchar_t *fmt, va_list args) -{ - int len = 0; - ULONGLONG num; - int base; - double _double; - const char *s; - const wchar_t* sw; - int result, done = 0; - - int flags; /* flags to number() */ - - int field_width; /* width of output field */ - int precision; /* min. # of digits for integers; max - number of chars for from string */ - int qualifier = 0; /* 'h', 'l', 'L' or 'I64' for integer fields */ - - for (; *fmt ; ++fmt) { - if (*fmt != L'%') { - if (putwc(*fmt,f) == WEOF) - return -1; - done++; - continue; - } - - /* process flags */ - flags = 0; - repeat: - ++fmt; /* this also skips first '%' */ - switch (*fmt) { - case L'-': flags |= LEFT; goto repeat; - case L'+': flags |= PLUS; goto repeat; - case L' ': flags |= SPACE; goto repeat; - case L'#': flags |= SPECIAL; goto repeat; - case L'0': flags |= ZEROPAD; goto repeat; - } - - /* get field width */ - field_width = -1; - if (isxdigit(*fmt)) - field_width = skip_wtoi(&fmt); - else if (*fmt == L'*') { - ++fmt; - /* it's the next argument */ - field_width = va_arg(args, int); - if (field_width < 0) { - field_width = -field_width; - flags |= LEFT; - } - } - - /* get the precision */ - precision = -1; - if (*fmt == L'.') { - ++fmt; - if (iswdigit(*fmt)) - precision = skip_wtoi(&fmt); - else if (*fmt == L'*') { - ++fmt; - /* it's the next argument */ - precision = va_arg(args, int); - } - if (precision < 0) - precision = 0; - } - - /* get the conversion qualifier */ - qualifier=0; - // %Z can be just stand alone or as size_t qualifier - if ( *fmt == 'Z' ) { - qualifier = *fmt; - switch ( *(fmt+1)) { - case L'o': - case L'b': - case L'X': - case L'x': - case L'd': - case L'i': - case L'u': - ++fmt; - break; - default: - break; - } - } else if (*fmt == L'h' || *fmt == L'l' || *fmt == L'L' || *fmt == L'w') { - qualifier = *fmt; - ++fmt; - } else if (*fmt == L'I' && *(fmt+1) == L'6' && *(fmt+2) == L'4') { - qualifier = *fmt; - fmt += 3; - } - - // go fine with ll instead of L - if ( *fmt == L'l' ) { - ++fmt; - qualifier = L'L'; - } - - /* default base */ - base = 10; - - switch (*fmt) { - case L'c': /* finished */ - if (!(flags & LEFT)) - while (--field_width > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - if (qualifier == L'h') - { - if (putwc((wchar_t) va_arg(args, int), f) == WEOF) - return -1; - } - else - { - if (putwc((wchar_t) va_arg(args, int), f) == WEOF) - return -1; - } - done++; - while (--field_width > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - continue; - - case L'C': /* finished */ - if (!(flags & LEFT)) - while (--field_width > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - if (qualifier == L'l' || qualifier == L'w') - { - if (putwc((unsigned char) va_arg(args, int), f) == WEOF) - return -1; - } - else - { - if (putwc((unsigned char) va_arg(args, int), f) == WEOF) - return -1; - } - done++; - while (--field_width > 0) - { - if (putwc(L' ', f) == WEOF) - return -1; - done++; - } - continue; - - case L's': /* finished */ - if (qualifier == L'h') { - /* print ascii string */ - s = va_arg(args, char *); - result = string(f, s, -1, field_width, precision, flags); - } else { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case L'S': - if (qualifier == L'l' || qualifier == L'w') { - /* print unicode string */ - sw = va_arg(args, wchar_t *); - result = stringw(f, sw, -1, field_width, precision, flags); - } else { - /* print ascii string */ - s = va_arg(args, char *); - result = string(f, s, -1, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case L'Z': /* finished */ - if (qualifier == L'w') { - /* print counted unicode string */ - PUNICODE_STRING pus = va_arg(args, PUNICODE_STRING); - if ((pus == NULL) || (pus->Buffer)) { - sw = NULL; - len = -1; - } else { - sw = pus->Buffer; - } - result = stringw(f, sw, len, field_width, precision, flags); - } else { - /* print counted ascii string */ - PANSI_STRING pus = va_arg(args, PANSI_STRING); - if ((pus == NULL) || (pus->Buffer)) { - s = NULL; - len = -1; - } else { - s = pus->Buffer; - len = pus->Length; - } - result = string(f, s, len, field_width, precision, flags); - } - if (result < 0) - return -1; - done += result; - continue; - - case L'e': /* finished */ - case L'E': - case L'f': - case L'g': - case L'G': - _double = (double)va_arg(args, double); - - if ( _isnan(_double) ) { - sw = L"Nan"; - len = 3; - while ( len > 0 ) { - if (putwc(*sw++,f) == WEOF) - return -1; - done++; - len --; - } - } else if ( _isinf(_double) < 0 ) { - sw = L"-Inf"; - len = 4; - while ( len > 0 ) { - if (putwc(*sw++,f) == WEOF) - return -1; - done++; - len --; - } - } else if ( _isinf(_double) > 0 ) { - sw = L"+Inf"; - len = 4; - while ( len > 0 ) { - if (putwc(*sw++,f) == WEOF) - return -1; - done++; - len --; - } - } else { - if ( precision == -1 ) - precision = 6; - result = numberf(f,_double,*fmt,field_width,precision,flags); - if (result < 0) - return -1; - done += result; - } - continue; - - case L'p': - if (field_width == -1) { - field_width = 2*sizeof(void *); - flags |= ZEROPAD; - } - result = number(f, - (unsigned long) va_arg(args, void *), 16, - field_width, precision, flags); - if (result < 0) - return -1; - done += result; - continue; - - case L'n': - if (qualifier == L'l') { - long * ip = va_arg(args, long *); - *ip = 0; - } else { - int * ip = va_arg(args, int *); - *ip = 0; - } - continue; - - /* integer number formats - set up the flags and "break" */ - case L'o': - base = 8; - break; - - case L'b': - base = 2; - break; - - case L'X': - flags |= LARGE; - case L'x': - base = 16; - break; - - case L'd': - case L'i': - flags |= SIGN; - case L'u': - break; - - default: - if (*fmt != L'%') - { - if (putwc(L'%', f) == WEOF) - return -1; - done++; - } - if (*fmt) - { - if (putwc(*fmt, f) == WEOF) - return -1; - done++; - } - else - --fmt; - continue; - } - - if (qualifier == L'I') - num = va_arg(args, ULONGLONG); - else if (qualifier == L'l') { - if (flags & SIGN) - num = va_arg(args, long); - else - num = va_arg(args, unsigned long); - } - else if (qualifier == L'h') { - if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - } - else if (flags & SIGN) - num = va_arg(args, int); - else - num = va_arg(args, unsigned int); - result = number(f, num, base, field_width, precision, flags); - if (result < 0) - return -1; - done += result; - } - //putwc(L'\0',f); - return done; -} - -/* EOF */ diff --git a/reactos/lib/sdk/crt/stdio/lnx_vsprintf.c b/reactos/lib/sdk/crt/stdio/lnx_vsprintf.c deleted file mode 100644 index 32fda2185ff..00000000000 --- a/reactos/lib/sdk/crt/stdio/lnx_vsprintf.c +++ /dev/null @@ -1,41 +0,0 @@ -/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */ -#include -#include - -/* - * @implemented - */ -int -lnx__vstprintf(_TCHAR *str, const _TCHAR *fmt, va_list ap) -{ - FILE f = {0}; - int len; - - f._flag = _IOWRT|_IOSTRG|_IOBINARY; - f._ptr = (char*)str; - f._cnt = INT_MAX; - f._file = -1; - len = lnx_vftprintf(&f,fmt, ap); - *(_TCHAR*)f._ptr = 0; - return len; -} - - -/* - * @implemented - */ -int -lnx__vsntprintf(_TCHAR *str, size_t maxlen, const _TCHAR *fmt, va_list ap) -{ - FILE f = {0}; - int len; - - f._flag = _IOWRT|_IOSTRG|_IOBINARY; - f._ptr = (char*)str; - f._cnt = maxlen * sizeof(_TCHAR); - f._file = -1; - len = lnx_vftprintf(&f,fmt, ap); - // what if the buffer is full ?? - *(_TCHAR *)f._ptr = 0; - return len; -} diff --git a/reactos/lib/sdk/crt/stdio/lnx_vswprintf.c b/reactos/lib/sdk/crt/stdio/lnx_vswprintf.c deleted file mode 100644 index 184d8ee6615..00000000000 --- a/reactos/lib/sdk/crt/stdio/lnx_vswprintf.c +++ /dev/null @@ -1,4 +0,0 @@ -#define UNICODE -#define _UNICODE - -#include "lnx_vsprintf.c" From 985409eda4b3484719ac52f71584c9dfc9ed861e Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 14:30:35 +0000 Subject: [PATCH 283/304] - Fix a (comment) typo svn path=/trunk/; revision=35305 --- reactos/ntoskrnl/ke/thrdobj.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ke/thrdobj.c b/reactos/ntoskrnl/ke/thrdobj.c index 0651740fbd5..09915390b85 100644 --- a/reactos/ntoskrnl/ke/thrdobj.c +++ b/reactos/ntoskrnl/ke/thrdobj.c @@ -858,7 +858,7 @@ KeInitializeThread(IN PKPROCESS Process, IN PVOID Teb, IN PVOID KernelStack) { - /* Initailize and start the thread on success */ + /* Initialize and start the thread on success */ if (NT_SUCCESS(KeInitThread(Thread, KernelStack, SystemRoutine, From d36e61f36c3cf6501d4b6c344bec6edf0c1a66f0 Mon Sep 17 00:00:00 2001 From: Jeffrey Morlan Date: Wed, 13 Aug 2008 15:17:51 +0000 Subject: [PATCH 284/304] cmd_start: - Allow space between /D and directory. - Allow /W as a synonym for /WAIT. - Give an error message on invalid switches. - Clean up the function a bit. svn path=/trunk/; revision=35307 --- reactos/base/shell/cmd/start.c | 135 ++++++++------------------------- 1 file changed, 31 insertions(+), 104 deletions(-) diff --git a/reactos/base/shell/cmd/start.c b/reactos/base/shell/cmd/start.c index 9e98fffaccb..5532c542268 100644 --- a/reactos/base/shell/cmd/start.c +++ b/reactos/base/shell/cmd/start.c @@ -48,10 +48,9 @@ static void StripQuotes(TCHAR *in) INT cmd_start (LPTSTR First, LPTSTR Rest) { TCHAR szFullName[CMDLINE_LENGTH]; - TCHAR *rest = NULL; + TCHAR rest[CMDLINE_LENGTH]; TCHAR *param = NULL; TCHAR *dot; - TCHAR RestWithoutArgs[CMDLINE_LENGTH]; INT size; LPTSTR comspec; BOOL bWait = FALSE; @@ -90,6 +89,12 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) else if (_totupper(*option) == _T('D')) { lpDirectory = option + 1; + if (!*lpDirectory) + { + while (_istspace(*Rest)) + Rest++; + lpDirectory = GetParameter(&Rest); + } StripQuotes(lpDirectory); } else if (!_tcsicmp(option, _T("MIN"))) @@ -124,10 +129,16 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) { Priority = BELOW_NORMAL_PRIORITY_CLASS; } - else if (!_tcsicmp(option, _T("WAIT"))) + else if (!_tcsicmp(option, _T("W")) || + !_tcsicmp(option, _T("WAIT"))) { bWait = TRUE; } + else + { + ConErrResPrintf(STRING_TYPE_ERROR1, option); + return 0; + } } else { @@ -136,7 +147,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) break; } } - _tcscpy(RestWithoutArgs, Rest); + _tcscpy(rest, Rest); /* get comspec */ comspec = cmd_alloc ( MAX_PATH * sizeof(TCHAR)); @@ -149,10 +160,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) size = GetEnvironmentVariable (_T("COMSPEC"), comspec, MAX_PATH); if(GetLastError() == ERROR_ENVVAR_NOT_FOUND) { - RestWithoutArgs[0] = _T('c'); - RestWithoutArgs[1] = _T('m'); - RestWithoutArgs[2] = _T('d'); - RestWithoutArgs[3] = _T('\0'); + _tcscpy(comspec, _T("cmd")); } else { @@ -169,80 +177,31 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) nErrorLevel = 0; - if(!_tcslen(RestWithoutArgs)) + if(!*rest) { - _tcscpy(RestWithoutArgs,_T("\"")); - _tcscat(RestWithoutArgs,comspec); - _tcscat(RestWithoutArgs,_T("\"")); + _tcscpy(rest,_T("\"")); + _tcscat(rest,comspec); + _tcscat(rest,_T("\"")); } - rest = cmd_alloc ( (_tcslen(RestWithoutArgs) + 1) * sizeof(TCHAR)); - if (rest == NULL) - { - if(comspec != NULL) - cmd_free(comspec); - error_out_of_memory(); - return 1; - } - - param = cmd_alloc ( (_tcslen(RestWithoutArgs) + 1) * sizeof(TCHAR)); - if (param == NULL) - { - if(comspec != NULL) - cmd_free(comspec); - cmd_free(rest); - error_out_of_memory(); - return 1; - } - - param[0] = _T('\0'); - - - _tcscpy(rest,RestWithoutArgs); - /* Parsing the command that gets called by start, and it's parameters */ - if(!_tcschr(rest,_T('\"'))) { - INT count = _tcslen(rest); - - /* find the end of the command and start of the args */ - for(i = 0; i < count; i++) - { - if(rest[i] == _T(' ')) - { - - _tcscpy(param,&rest[i+1]); - rest[i] = _T('\0'); - break; - } - } - } - else - { - INT count = _tcslen(rest); BOOL bInside = FALSE; /* find the end of the command and put the arguments in param */ - for(i = 0; i < count; i++) + for(i = 0; rest[i]; i++) { if(rest[i] == _T('\"')) bInside = !bInside; if((rest[i] == _T(' ')) && !bInside) { - _tcscpy(param,&rest[i+1]); + param = &rest[i+1]; rest[i] = _T('\0'); break; } } - i = 0; /* remove any slashes */ - while(i < count) - { - if(rest[i] == _T('\"')) - memmove(&rest[i],&rest[i + 1], _tcslen(&rest[i]) * sizeof(TCHAR)); - else - i++; - } + StripQuotes(rest); } /* check for a drive change */ @@ -258,13 +217,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) if (szPath[0] != (TCHAR)_totupper (*rest)) ConErrResPuts (STRING_FREE_ERROR1); - if (rest != NULL) - cmd_free(rest); - - if (param != NULL) - cmd_free(param); - if (comspec != NULL) - cmd_free(comspec); + cmd_free(comspec); return 0; } @@ -274,14 +227,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) { error_bad_command (); - if (rest != NULL) - cmd_free(rest); - - if (param != NULL) - cmd_free(param); - - if (comspec != NULL) - cmd_free(comspec); + cmd_free(comspec); return 1; } @@ -291,25 +237,13 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) if (dot && (!_tcsicmp (dot, _T(".bat")) || !_tcsicmp (dot, _T(".cmd")))) { bBat = TRUE; - memset(szFullCmdLine,0,CMDLINE_LENGTH * sizeof(TCHAR)); - - - _tcscpy(szFullCmdLine,comspec); - - memcpy(&szFullCmdLine[_tcslen(szFullCmdLine)],_T("\" /K \""), 6 * sizeof(TCHAR)); - memcpy(&szFullCmdLine[_tcslen(szFullCmdLine)], szFullName, _tcslen(szFullName) * sizeof(TCHAR)); - memcpy(&szFullCmdLine[1], &szFullCmdLine[0], _tcslen(szFullCmdLine) * sizeof(TCHAR)); - szFullCmdLine[0] = _T('\"'); - szFullCmdLine[_tcslen(szFullCmdLine)] = _T('\"'); - } - + _stprintf(szFullCmdLine, _T("\"%s\" /K \"%s\""), comspec, szFullName); TRACE ("[BATCH: %s %s]\n", debugstr_aw(szFullName), debugstr_aw(rest)); - - + } + else + { TRACE ("[EXEC: %s %s]\n", debugstr_aw(szFullName), debugstr_aw(rest)); /* build command line for CreateProcess() */ - if (bBat == FALSE) - { _tcscpy (szFullCmdLine, rest); if( param != NULL ) { @@ -317,7 +251,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) _tcscat(szFullCmdLine, _T(" ") ); _tcscat (szFullCmdLine, param); } - } + } /* fill startup info */ memset (&stui, 0, sizeof (STARTUPINFO)); @@ -359,14 +293,7 @@ INT cmd_start (LPTSTR First, LPTSTR Rest) } - if (rest != NULL) - cmd_free(rest); - - if (param != NULL) - cmd_free(param); - - if (comspec != NULL) - cmd_free(comspec); + cmd_free(comspec); return 0; } From 6c420630c93bed60d5f063a13c6dee3476b0e41d Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 17:00:49 +0000 Subject: [PATCH 285/304] - "Sync" to the next thread's initial stack in KiSwapThread. This fixes an invalid page fault (faulting while interrupts are disabled) during context switching, where we access the next thread's initial stack before performing the address space switch. Many thanks to Alex for his help with this bug! - Fix stack size calculations in KeAttachProcess and KeStackAttachProcess (thanks to Alex for pointing this out) svn path=/trunk/; revision=35308 --- reactos/ntoskrnl/ke/procobj.c | 4 ++-- reactos/ntoskrnl/ke/thrdschd.c | 4 ++++ 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/procobj.c b/reactos/ntoskrnl/ke/procobj.c index 114554b1fb1..64a25d4a951 100644 --- a/reactos/ntoskrnl/ke/procobj.c +++ b/reactos/ntoskrnl/ke/procobj.c @@ -451,7 +451,7 @@ KeAttachProcess(IN PKPROCESS Process) MiSyncThreadProcessViews(Process, (PVOID)Thread->StackLimit, Thread->LargeStack ? - KERNEL_STACK_SIZE : KERNEL_LARGE_STACK_SIZE); + KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); /* Check if we're already in that process */ @@ -581,7 +581,7 @@ KeStackAttachProcess(IN PKPROCESS Process, MiSyncThreadProcessViews(Process, (PVOID)Thread->StackLimit, Thread->LargeStack ? - KERNEL_STACK_SIZE : KERNEL_LARGE_STACK_SIZE); + KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); /* Crash system if DPC is being executed! */ diff --git a/reactos/ntoskrnl/ke/thrdschd.c b/reactos/ntoskrnl/ke/thrdschd.c index 4fb0040704d..f50199160f8 100644 --- a/reactos/ntoskrnl/ke/thrdschd.c +++ b/reactos/ntoskrnl/ke/thrdschd.c @@ -347,6 +347,10 @@ KiSwapThread(IN PKTHREAD CurrentThread, MiSyncThreadProcessViews(PsGetCurrentProcess(), ((PETHREAD)NextThread)->ThreadsProcess, sizeof(EPROCESS)); + MiSyncThreadProcessViews(PsGetCurrentProcess(), + (PVOID)((PETHREAD)NextThread)->Tcb.StackLimit, + NextThread->LargeStack ? + KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); /* Swap contexts */ ApcState = KiSwapContext(CurrentThread, NextThread); From bfd08e980bd8207a2a08b7f1af33fc34e673e18b Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 17:24:22 +0000 Subject: [PATCH 286/304] - Remove KiRawTicks -- this was previously a ros-specific kernel export, but is now unused - Fix a comment typo svn path=/trunk/; revision=35309 --- reactos/ntoskrnl/ke/clock.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/clock.c b/reactos/ntoskrnl/ke/clock.c index ee4255f9eaa..71b46c60c0d 100644 --- a/reactos/ntoskrnl/ke/clock.c +++ b/reactos/ntoskrnl/ke/clock.c @@ -17,7 +17,6 @@ LARGE_INTEGER KeBootTime; ULONGLONG KeBootTimeBias; volatile KSYSTEM_TIME KeTickCount = {0}; -volatile ULONG KiRawTicks = 0; ULONG KeMaximumIncrement; ULONG KeMinimumIncrement; ULONG KeTimeAdjustment; @@ -95,7 +94,7 @@ KeSetSystemTime(IN PLARGE_INTEGER NewTime, Timer = CONTAINING_RECORD(NextEntry, KTIMER, TimerListEntry); NextEntry = NextEntry->Flink; - /* Is is absolute? */ + /* Is it absolute? */ if (Timer->Header.Absolute) { /* Remove it from the timer list */ From e82f1c91a709696cce44615771c0a37bbe7656dc Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 18:00:23 +0000 Subject: [PATCH 287/304] - Fix MiSyncThreadProcessViews in KeInitThread too as requested by Alex svn path=/trunk/; revision=35310 --- reactos/ntoskrnl/ke/thrdobj.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/reactos/ntoskrnl/ke/thrdobj.c b/reactos/ntoskrnl/ke/thrdobj.c index 09915390b85..ca0996069fc 100644 --- a/reactos/ntoskrnl/ke/thrdobj.c +++ b/reactos/ntoskrnl/ke/thrdobj.c @@ -813,7 +813,8 @@ KeInitThread(IN OUT PKTHREAD Thread, /* Make sure that we are in the right page directory */ MiSyncThreadProcessViews(Process, (PVOID)Thread->StackLimit, - KERNEL_STACK_SIZE); + Thread->LargeStack ? + KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); /* Enter SEH to avoid crashes due to user mode */ From d7c849722ae7a7892fa5b19adfb09c7471cef146 Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Wed, 13 Aug 2008 18:25:01 +0000 Subject: [PATCH 288/304] Polish Shell32 Update by Olaf Siejka Bug 3655: IDS_PROPERTIES Translation by Victor Martinez Calvo Bug 3642: Italian resource file update by Paolo Devoti Bug 3651: msconfig french translation (base/applications/msconfig) Bug 3652: French translation for Access.cpl (dll/cpl/access) Bug 3653: translation of regsvr32/Fr.rc (base/system/regsvr32/) svn path=/trunk/; revision=35311 --- .../base/applications/msconfig/lang/fr-FR.rc | 2 +- .../base/applications/regedit/lang/it-IT.rc | 2 +- reactos/base/setup/reactos/lang/it-IT.rc | 127 +++++++++++++++++- reactos/base/system/regsvr32/lang/fr-FR.rc | 6 +- reactos/dll/cpl/access/lang/fr-FR.rc | 2 +- reactos/dll/cpl/intl/lang/it-IT.rc | 4 +- reactos/dll/win32/msgina/lang/it-IT.rc | 4 +- reactos/dll/win32/shell32/lang/bg-BG.rc | 8 +- reactos/dll/win32/shell32/lang/cs-CZ.rc | 8 +- reactos/dll/win32/shell32/lang/el-GR.rc | 8 +- reactos/dll/win32/shell32/lang/en-GB.rc | 4 +- reactos/dll/win32/shell32/lang/es-ES.rc | 11 +- reactos/dll/win32/shell32/lang/fi-FI.rc | 8 +- reactos/dll/win32/shell32/lang/fr-FR.rc | 8 +- reactos/dll/win32/shell32/lang/hu-HU.rc | 8 +- reactos/dll/win32/shell32/lang/it-IT.rc | 8 +- reactos/dll/win32/shell32/lang/ja-JP.rc | 8 +- reactos/dll/win32/shell32/lang/no-NO.rc | 8 +- reactos/dll/win32/shell32/lang/pl-PL.rc | 41 +++--- reactos/dll/win32/shell32/lang/pt-BR.rc | 8 +- reactos/dll/win32/shell32/lang/sk-SK.rc | 8 +- reactos/dll/win32/shell32/lang/tr-TR.rc | 8 +- reactos/dll/win32/shell32/lang/uk-UA.rc | 8 +- reactos/dll/win32/shell32/lang/zh-CN.rc | 8 +- 24 files changed, 216 insertions(+), 99 deletions(-) diff --git a/reactos/base/applications/msconfig/lang/fr-FR.rc b/reactos/base/applications/msconfig/lang/fr-FR.rc index 05aa845c0cd..e116455ce87 100644 --- a/reactos/base/applications/msconfig/lang/fr-FR.rc +++ b/reactos/base/applications/msconfig/lang/fr-FR.rc @@ -156,7 +156,7 @@ BEGIN IDS_TOOLS_REGEDIT_CMD "regedit.exe" IDS_TOOLS_SYSDM_NAME "Proprits systme" - IDS_TOOLS_SYSDM_DESCR "Affiche/modifie des information propos de l'ordinateur." + IDS_TOOLS_SYSDM_DESCR "Affiche/modifie des informations propos de l'ordinateur." IDS_TOOLS_SYSDM_CMD "control.exe" IDS_TOOLS_SYSDM_PARAM "sysdm.cpl" diff --git a/reactos/base/applications/regedit/lang/it-IT.rc b/reactos/base/applications/regedit/lang/it-IT.rc index 7d8378d7281..544c45de42e 100644 --- a/reactos/base/applications/regedit/lang/it-IT.rc +++ b/reactos/base/applications/regedit/lang/it-IT.rc @@ -86,7 +86,7 @@ BEGIN MENUITEM "Valore stringa &espandibile", ID_EDIT_NEW_EXPANDABLESTRINGVALUE END MENUITEM SEPARATOR - MENUITEM "&Permissions...", ID_EDIT_PERMISSIONS + MENUITEM "&Permessi...", ID_EDIT_PERMISSIONS MENUITEM SEPARATOR MENUITEM "&Elimina\tDel", ID_EDIT_DELETE MENUITEM "&Rinomina", ID_EDIT_RENAME diff --git a/reactos/base/setup/reactos/lang/it-IT.rc b/reactos/base/setup/reactos/lang/it-IT.rc index 75d7d61c819..d0c3a5c821b 100644 --- a/reactos/base/setup/reactos/lang/it-IT.rc +++ b/reactos/base/setup/reactos/lang/it-IT.rc @@ -1,12 +1,127 @@ -/* $Id$ */ - LANGUAGE LANG_ITALIAN, SUBLANG_NEUTRAL -/* String Tables */ -STRINGTABLE DISCARDABLE +IDD_STARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" BEGIN - IDS_CAPTION "Installazione di ReactOS" - IDS_TEXT "Non possibile installare direttamente ReactOS da questo CD!\n\nPer installare ReactOS, riavvia il computer da questo CD." + LTEXT "Benvenuto al wizard di installazione di ReactOS.", IDC_STARTTITLE, 115, 8, 195, 24 + LTEXT "Non ancora possibile installare ReactOS direttamente da questo CD! "\ + "E' necessario riavviare il computer da questo CD per procedere "\ + "alla instalazione di ReactOS.", IDC_STATIC, 115, 40, 195, 100 + LTEXT "Cliccare Fine per uscire.", IDC_STATIC, 115, 169, 195, 17 END +IDD_LANGSELPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "IDB_LOGO", IDB_ROSLOGO, "Static", WS_CHILD | WS_VISIBLE | SS_OWNERDRAW, 18, 0, 290, 99 + CONTROL "Lingua per l'installazione:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 109, 106, 11 + CONTROL "", IDC_LANGUAGES, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 107, 176, 142 + CONTROL "Tastiera o metodo di input:", IDC_STATIC, "Static", WS_CHILD | WS_VISIBLE | WS_GROUP | SS_RIGHT, 20, 142, 106, 11 + CONTROL "", IDC_KEYLAYOUT, "ComboBox", WS_VSCROLL | WS_TABSTOP | CBS_DROPDOWNLIST, 132, 141, 176, 81 + LTEXT "Cliccare Avanti per selezionare il tipo di installazione.", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_TYPEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Tipo di installazione", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + CONTROL "Installa ReactOS", IDC_INSTALL, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 20, 15, 277, 10 + CONTROL "Ripara o aggiorna una installazione precedente di ReactOS", IDC_SETUP, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 20, 30, 277, 10 + LTEXT "Cliccare Avanti per impostare i dispositivi.", IDC_STATIC, 10, 180 ,297, 10 +END + +IDD_DEVICEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Impostazione dei dispositivi", IDC_STATIC, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "Computer:", IDC_STATIC, 20,15, 80, 10 + CONTROL "", IDC_COMPUTER, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 15, 150, 80 + LTEXT "Display:", IDC_STATIC, 20,35, 80, 10 + CONTROL "", IDC_DISPLAY, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 35, 150, 80 + LTEXT "Tastiera:", IDC_STATIC, 20,55, 80, 10 + CONTROL "", IDC_KEYBOARD, "ComboBox", WS_TABSTOP | CBS_DROPDOWNLIST , 100, 55, 150, 80 + LTEXT "Cliccare Avanti per scegliere dove effettuare l'installazione.", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_DRIVEPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Partizione per l'installazione di ReactOS", IDC_STATIC, "Button", BS_GROUPBOX, 10,1,298,176 + LISTBOX IDC_PARTITION, 20,12,278,142,LBS_HASSTRINGS | WS_VSCROLL + PUSHBUTTON "&Crea", IDC_PARTCREATE, 20,155,50,15 + PUSHBUTTON "&Rimuovi", IDC_PARTDELETE, 76,155,50,15 + PUSHBUTTON "&Opzioni avanzate...", IDC_PARTMOREOPTS, 218,155,80,15 + LTEXT "Cliccare Avanti per iniziare l'installazione.", IDC_STATIC, 10, 180 ,277, 20 +END + +IDD_BOOTOPTIONS DIALOGEX DISCARDABLE 0, 0, 305, 105 +STYLE WS_VISIBLE|WS_CAPTION|WS_SYSMENU|WS_THICKFRAME +CAPTION "Impostazioni avanzate delle partizioni" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Cartella di installazione", IDC_STATIC, "Button", BS_GROUPBOX, 4,1,298,30 + EDITTEXT IDC_PATH, 10,11,278,13, WS_VISIBLE + + CONTROL "Installazione del Boot loader", IDC_STATIC, "Button", BS_GROUPBOX, 4,36,298,41 + + CONTROL "Installazione del Boot loader sul disco fisso (MBR)", IDC_INSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP, 10,46,278,11 + CONTROL "Non installare il Boot loader", IDC_NOINSTFREELDR, "Button", BS_AUTORADIOBUTTON | WS_TABSTOP | WS_DISABLED , 10,57,278,11 +END + +IDD_PROCESSPAGE DIALOGEX 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Azione di installazione", IDC_ACTION, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "File da installare...", IDC_ACTIVITY, 20, 50, 277, 10 + LTEXT "test.txt", IDC_ITEM, 30, 80, 257, 10 + CONTROL "", IDC_PROCESSPROGRESS, "msctls_progress32", + PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 +END + + +IDD_RESTARTPAGE DIALOGEX DISCARDABLE 0, 0, 317, 193 +STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU +CAPTION "Completamento della installazione di ReactOS" +FONT 8, "MS Shell Dlg" +BEGIN + CONTROL "Completamento della prima fase della installazione di ReactOS", IDC_FINISHTITLE, "Button", BS_GROUPBOX, 10,0,297,172 + LTEXT "La prima fase stata completata in modo regolare.", IDC_STATIC, 20, 50, 277, 10 + + LTEXT "Quando verr premuto fine il computer si riavvier.", IDC_STATIC, 20, 80, 277, 10 + CONTROL "", IDC_RESTART_PROGRESS, "msctls_progress32", PBS_SMOOTH | WS_CHILD | WS_VISIBLE | WS_BORDER, 20, 120, 277, 8 + LTEXT "Se presente rimuovere il CD dal lettore e per riavviare "\ + "il computer cliccare Fine.", IDC_STATIC, 10, 180, 297, 20 +END + + +STRINGTABLE +BEGIN + IDS_LANGTITLE "Selezione della lingua" + IDS_LANGSUBTITLE "Scegliere la lingua per la installazione e per il sistema finale." + IDS_TYPETITLE "Benvenuti alla installazione di ReactOS" + IDS_TYPESUBTITLE "Scegliere il tipo di installazione." + IDS_DEVICETITLE "Impostazione dei dispositivi di base" + IDS_DEVICESUBTITLE "Impostazione di monitor e tastiera." + IDS_DRIVETITLE "Impostazione della partizione e della cartella per la installazione" + IDS_DRIVESUBTITLE "Preparazione di partizione, cartella di sistema e Boot loader." + IDS_PROCESSTITLE "Preparazione della partizione, copia dei file e configurazione del sistema" + IDS_PROCESSSUBTITLE "Creazione e formattazione della partizione, copia dei file, installazione del Boot loader" + IDS_RESTARTTITLE "Prima fase della installazione completata" + IDS_RESTARTSUBTITLE "La prima fase della installazione stata completata, riavviare il computer per procedere alla seconda fase" + IDS_ABORTSETUP "ReactOS non installato completamente sul computer. Se interropete l'installazione ora sar necessario eseguire l'installazione di nuovo. Volete procedere?" + IDS_ABORTSETUP2 "Volete interrompere l'installazione?" +END + /* EOF */ diff --git a/reactos/base/system/regsvr32/lang/fr-FR.rc b/reactos/base/system/regsvr32/lang/fr-FR.rc index c75e69c42cf..c0f38daab3c 100644 --- a/reactos/base/system/regsvr32/lang/fr-FR.rc +++ b/reactos/base/system/regsvr32/lang/fr-FR.rc @@ -12,13 +12,13 @@ STRINGTABLE DISCARDABLE BEGIN IDS_UsageMessage, "%s\n\nUtilisation : regsvr32 [/u] [/s] [/c] [/n] [/i[:lignedecommande]] nomDLL\n\ -/u - Serveur non enregistr\n\ +/u - Dsenregistrement du serveur\n\ /s - Silence; ne pas afficher les messages\n\ /c - Sortie sur la console\n\ /i - Installe la DLL avec des options dans la [:lignedecommande] ; si /u est prsent, cela provoque la dsinstallation de la DLL\n\ -/n - Ne pas faire d'appel au serveur d'enregistrement ; cette option doit tre utilis avec l'option /i" +/n - Ne pas faire d'appel au serveur d'enregistrement ; cette option doit tre utilise avec l'option /i" -IDS_NoDllSpecified, "Pas de DLL indiqu." +IDS_NoDllSpecified, "Aucune indication de nom de DLL." IDS_InvalidFlag, "Option non reconnue : %s" diff --git a/reactos/dll/cpl/access/lang/fr-FR.rc b/reactos/dll/cpl/access/lang/fr-FR.rc index 85f90982050..d1cc15e2f74 100644 --- a/reactos/dll/cpl/access/lang/fr-FR.rc +++ b/reactos/dll/cpl/access/lang/fr-FR.rc @@ -19,7 +19,7 @@ BEGIN PUSHBUTTON "P&aramtres",IDC_FILTER_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(13)+2,PROPSHEETPADDING(15),14 GROUPBOX "Touches bascules",-1,PROPSHEETPADDING(1),LABELLINE(16)+3,PROPSHEETWIDTH-PROPSHEETPADDING(2),LABELLINE(6)+PROPSHEETPADDING(1) - LTEXT "Utilisez les touches &bascules si vous voulez entendre un son mis chaques fois que vous appuyez sur Verr. maj, Verr. num, et Arrt dfil.",-1,PROPSHEETPADDING(2),LABELLINE(18)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) + LTEXT "Utilisez les touches &bascules si vous voulez entendre un son mis chaque fois que vous appuyez sur Verr. maj, Verr. num, et Arrt dfil.",-1,PROPSHEETPADDING(2),LABELLINE(18)-3,PROPSHEETWIDTH-PROPSHEETPADDING(4),LABELLINE(3) AUTOCHECKBOX "Utiliser les touches bascules",IDC_TOGGLE_BOX,PROPSHEETPADDING(2),LABELLINE(20)+2,PROPSHEETWIDTH-PROPSHEETPADDING(20),14 PUSHBUTTON "Para&mtres",IDC_TOGGLE_BUTTON,PROPSHEETWIDTH-PROPSHEETPADDING(17),LABELLINE(20)+2,PROPSHEETPADDING(15),14 diff --git a/reactos/dll/cpl/intl/lang/it-IT.rc b/reactos/dll/cpl/intl/lang/it-IT.rc index 16530949681..45505030009 100644 --- a/reactos/dll/cpl/intl/lang/it-IT.rc +++ b/reactos/dll/cpl/intl/lang/it-IT.rc @@ -15,7 +15,7 @@ BEGIN LTEXT "Esempi", -1, 14, 73, 70, 10 LTEXT "Numero:", -1, 16, 86, 48, 10 LTEXT "Valuta:", -1, 16, 101, 48, 10 - LTEXT "Ota:", -1, 16, 116, 48, 10 + LTEXT "Ora:", -1, 16, 116, 48, 10 LTEXT "Data breve:", -1, 16, 131, 48, 10 LTEXT "Data estesa:", -1, 16, 146, 48, 10 EDITTEXT IDC_NUMSAMPLE_EDIT, 89, 86, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP @@ -23,7 +23,7 @@ BEGIN EDITTEXT IDC_TIMESAMPLE_EDIT, 89, 116, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP EDITTEXT IDC_SHORTTIMESAMPLE_EDIT, 89, 131, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP EDITTEXT IDC_FULLTIMESAMPLE_EDIT, 89, 146, 140, 12, ES_READONLY | WS_CHILD | WS_VISIBLE | WS_GROUP - GROUPBOX "Ubicazione geografica", -1, 5, 172, 234, 55 + GROUPBOX "Posizione geografica", -1, 5, 172, 234, 55 LTEXT "Per ottenere informazioni locali, come notizie e previsioni meteo, selezionare la localit corrente:", -1, 14, 184, 210, 24 COMBOBOX IDC_LOCATION_COMBO, 14, 207, 217, 160, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_VSCROLL | WS_TABSTOP | CBS_SORT END diff --git a/reactos/dll/win32/msgina/lang/it-IT.rc b/reactos/dll/win32/msgina/lang/it-IT.rc index 85bb0465a15..7763a98af87 100644 --- a/reactos/dll/win32/msgina/lang/it-IT.rc +++ b/reactos/dll/win32/msgina/lang/it-IT.rc @@ -57,8 +57,8 @@ STRINGTABLE BEGIN IDS_LOGGEDOUTSAS "Benvenuti!" IDS_LOCKEDSAS "Il computer al momento bloccato." - IDS_PRESSCTRLALTDELETE "Premere Ctrl+Alt+Canc per accedre." + IDS_PRESSCTRLALTDELETE "Premere Ctrl+Alt+Canc per accedere." IDS_ASKFORUSER "Nome utente: " IDS_ASKFORPASSWORD "Password: " - IDS_FORCELOGOFF "Questo terminer la sessione dell'utente attuale e verranno persi tutti i dati non salvati. Volete procedere?" + IDS_FORCELOGOFF "Verr terminata la sessione dell'utente attuale e tutti i dati non salvati verranno persi. Volete procedere?" END diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 04559a3bcce..e0536e4eecd 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -622,10 +622,10 @@ BEGIN IDS_SELECT "" IDS_OPEN "" IDS_CREATELINK " &" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&" + IDS_DELETE "&" + IDS_PROPERTIES "&" + IDS_CUT "&" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ." diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 3025f566797..b155829b62a 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -621,10 +621,10 @@ BEGIN IDS_SELECT "Vybrat" IDS_OPEN "Otevt" IDS_CREATELINK "Vytvoit zstupc&e" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Koprovat" + IDS_DELETE "O&dstranit" + IDS_PROPERTIES "&Vlastnosti" + IDS_CUT "Vyj&mout" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nelze vytvoit novou sloku, protoe pstup byl odepen." diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 02de93e08f5..51237188c4e 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "" IDS_OPEN "" IDS_CREATELINK " &" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&" + IDS_DELETE "&" + IDS_PROPERTIES "&" + IDS_CUT "&" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ." diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 43fbdd065d0..8faffd08e49 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" - IDS_COPY "Copy" + IDS_COPY "&Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_CUT "C&ut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index b189d7368b8..8bba7b15655 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -2,6 +2,7 @@ * Copyright 1998 Juergen Schmied * Copyright 2003,2004 Jos Manuel Ferrer Ortiz * Actualizado Javier Remacha 2008 + * ACtualizado Victor Martinez 2008 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -621,11 +622,11 @@ BEGIN IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" IDS_CREATELINK "C&rear acceso directo" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" - IDS_RESTORE "Restore" + IDS_COPY "&Copiar" + IDS_DELETE "&Eliminar" + IDS_PROPERTIES "&Propiedades" + IDS_CUT "C&ortar" + IDS_RESTORE "Restaurar" IDS_CREATEFOLDER_DENIED "No se puede crear nueva carpeta: Permiso denegado." IDS_CREATEFOLDER_CAPTION "Error durante la creacin de una nueva carpeta" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 79d4b67ad55..33c0b24eee5 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "Valitse" IDS_OPEN "Avaa" IDS_CREATELINK "Lu&o Linkki" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Kopioi" + IDS_DELETE "&Poista" + IDS_PROPERTIES "&Ominaisuudet" + IDS_CUT "&Leikkaa" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Uutta kansiota ei voitu luoda: Oikeudet eivt riit." diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index c1669c644a5..ac7c1f99969 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -623,10 +623,10 @@ BEGIN IDS_SELECT "Slectionner" IDS_OPEN "Ouvrir" IDS_CREATELINK "Crer un &lien" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Copier" + IDS_DELETE "&Supprimer" + IDS_PROPERTIES "&Proprits" + IDS_CUT "C&ouper" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossible de crer le nouveau dossier : permission refuse." diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 98c7b0478ae..1b163980cd6 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -622,10 +622,10 @@ BEGIN IDS_SELECT "Kivlaszt" IDS_OPEN "Megnyit" IDS_CREATELINK "Parancsikon ltrehozsa" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "Msols" + IDS_DELETE "Trls" + IDS_PROPERTIES "Tulajdonsgok" + IDS_CUT "Kivgs" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nem hozhat ltre j mappa: Nincs hozz engedlyed." diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 7ce075013de..57256e89de5 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -620,10 +620,10 @@ BEGIN IDS_SELECT "Selezione" IDS_OPEN "Apri" IDS_CREATELINK "&Crea Collegamento" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Copia" + IDS_DELETE "&Cancella" + IDS_PROPERTIES "&Propriet" + IDS_CUT "&Taglia" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossibile creare la cartella: Accesso negato." diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index cea66e1b418..db99c821323 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "I" IDS_OPEN "J" IDS_CREATELINK "V[gJbg̍쐬(&L)" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "Rs[(&C)" + IDS_DELETE "폜(&D)" + IDS_PROPERTIES "vpeB(&P)" + IDS_CUT "؂(&U)" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "VtH_쐬ł܂ł: ANZX܂B" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index 4957a925a9a..fcfd210aa3a 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -598,10 +598,10 @@ BEGIN IDS_SELECT "Velg" IDS_OPEN "pne" IDS_CREATELINK "&Opprett snarvei" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Kopier" + IDS_DELETE "&Slett" + IDS_PROPERTIES "Egenska&per" + IDS_CUT "Klipp &ut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet." diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index de7515ee26c..568857d01d9 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -16,7 +16,8 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * - * translation updated by Caemyr - Olaf Siejka (Jan,Mar,Apr,Jul 2008) + * ReactOS shell32 fork translation updated by Caemyr - + * - Olaf Siejka (Jan,Mar,Apr,Jul, Aug 2008) * Use ReactOS forum PM or IRC to contact me * http://www.reactos.org * IRC: irc.freenode.net #reactos-pl; @@ -371,7 +372,7 @@ BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 LTEXT "Wybierz program, ktrego chcesz uy do otwarcia tego pliku:", -1, 44, 12, 211, 10 LTEXT "Plik: ", 14001, 44, 25, 188, 10 - GROUPBOX "&Programs", -1, 7, 42, 249, 187 + GROUPBOX "&Programy", -1, 7, 42, 249, 187 LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE AUTOCHECKBOX "&Zawsze uywaj danego programu do otwierania tego typu plikw", 14003, 20, 193, 225, 10 PUSHBUTTON "&Przegldaj", 14004, 198, 207, 50, 14 @@ -598,17 +599,17 @@ BEGIN IDS_SHV_COLUMN9 "Komentarz" IDS_SHV_COLUMN10 "Waciciel" IDS_SHV_COLUMN11 "Grupa" - IDS_SHV_COLUMN12 "Filename" - IDS_SHV_COLUMN13 "Category" - IDS_SHV_COLUMN_DELFROM "Lokacja oryginalna" + IDS_SHV_COLUMN12 "Nazwa pliku" + IDS_SHV_COLUMN13 "Kategoria" + IDS_SHV_COLUMN_DELFROM "Lokalizacja oryginalna" IDS_SHV_COLUMN_DELDATE "Data usunicia" - IDS_SHV_COLUMN_FONTTYPE "Fonttype" - IDS_SHV_COLUMN_WORKGROUP "Workgroup" - IDS_SHV_NETWORKLOCATION "Network Location" - IDS_SHV_COLUMN_DOCUMENTS "Documents" - IDS_SHV_COLUMN_STATUS "Status" - IDS_SHV_COLUMN_COMMENTS "Comments" - IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_FONTTYPE "Czcionka" + IDS_SHV_COLUMN_WORKGROUP "Grupa Robocza" + IDS_SHV_NETWORKLOCATION "Lokalizacja Sieciowa" + IDS_SHV_COLUMN_DOCUMENTS "Dokumenty" + IDS_SHV_COLUMN_STATUS "Stan" + IDS_SHV_COLUMN_COMMENTS "Komentarze" + IDS_SHV_COLUMN_LOCATION "Lokalizacja" IDS_SHV_COLUMN_MODEL "Model" /* special folders */ @@ -625,11 +626,11 @@ BEGIN IDS_SELECT "Zaznacz" IDS_OPEN "Otwrz" IDS_CREATELINK "Utwrz &Skrt" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" - IDS_RESTORE "Restore" + IDS_COPY "Kopiuj" + IDS_DELETE "Usu" + IDS_PROPERTIES "Waciwoci" + IDS_CUT "Wytnij" + IDS_RESTORE "Przywr" IDS_CREATEFOLDER_DENIED "Nie mog utworzy nowego katalogu: Brak dostpu." IDS_CREATEFOLDER_CAPTION "Bd przy tworzeniu nowego katalogu." @@ -732,7 +733,7 @@ BEGIN IDS_PREVIEW_VERB "Podgld" IDS_FILE_FOLDER "%u Plikw, %u Katalogw" - IDS_PRINTERS "Printers" - IDS_FONTS "Fonts" - IDS_INSTALLNEWFONT "Install New Font..." + IDS_PRINTERS "Drukarki" + IDS_FONTS "Czcionki" + IDS_INSTALLNEWFONT "Zainstaluj Now Czcionk..." END diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index 5d5d90f56cd..3d72cb852f6 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -621,10 +621,10 @@ BEGIN IDS_SELECT "Selecionar" IDS_OPEN "Abrir" IDS_CREATELINK "Criar a&talho" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Copiar" + IDS_DELETE "E&xcluir" + IDS_PROPERTIES "Propriedades" + IDS_CUT "C&ortar" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "No pode criar nova pasta: Permisso negada." diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 952b6560f20..c06435af488 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -625,10 +625,10 @@ BEGIN IDS_SELECT "Vybra" IDS_OPEN "Otvori" IDS_CREATELINK "Vytvori o&dkaz" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Koprova" + IDS_DELETE "&Odstrni" + IDS_PROPERTIES "Vl&astnosti" + IDS_CUT "&Vystrihn" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nie je mon vytvori nov prieinok: Prstup zamietnut." diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index ffdb21deb57..6d59d4bdbab 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "Se" IDS_OPEN "A" IDS_CREATELINK "Ksayol O&lutur" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "K&opyala" + IDS_DELETE "&Sil" + IDS_PROPERTIES "&zellikler" + IDS_CUT "&Kes" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Yeni dizin oluturulamyor: Eriim engellendi." diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 16b73392063..7cd74b07568 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -620,10 +620,10 @@ BEGIN IDS_SELECT "&" IDS_OPEN "³&" IDS_CREATELINK " &" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&" + IDS_DELETE "&" + IDS_PROPERTIES "&" + IDS_CUT "&" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ³ ." diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 1b8efdf8cb9..9e575d4d49b 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -608,10 +608,10 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "ݷʽ(&L)" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "(&C)" + IDS_DELETE "ɾ(&D)" + IDS_PROPERTIES "(&P)" + IDS_CUT "(&U)" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." From 7f262f6c063d1b82c834bcfc970ac63456355eb2 Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Wed, 13 Aug 2008 18:48:51 +0000 Subject: [PATCH 289/304] Bug 3649: Slovak update by Mario Kacmar Bug 3631: Norwegian Update by Lars Martin Hambro svn path=/trunk/; revision=35312 --- .../base/applications/msconfig/lang/no-NO.rc | 46 ++++---- reactos/base/applications/mstsc/lang/no-NO.rc | 4 +- .../network/ipconfig/lang/no-NO.rc | 40 +++---- reactos/base/system/format/lang/sk-SK.rc | 53 ++++----- reactos/dll/cpl/console/lang/no-NO.rc | 44 ++++---- reactos/dll/win32/devmgr/lang/no-NO.rc | 104 +++++++++--------- reactos/dll/win32/shlwapi/shlwapi_No.rc | 4 +- reactos/dll/win32/syssetup/lang/no-NO.rc | 22 ++-- .../win32/csrss/win32csr/lang/no-NO.rc | 47 ++++++++ 9 files changed, 206 insertions(+), 158 deletions(-) create mode 100644 reactos/subsystems/win32/csrss/win32csr/lang/no-NO.rc diff --git a/reactos/base/applications/msconfig/lang/no-NO.rc b/reactos/base/applications/msconfig/lang/no-NO.rc index f888b4d62f7..0229bcfd6c2 100644 --- a/reactos/base/applications/msconfig/lang/no-NO.rc +++ b/reactos/base/applications/msconfig/lang/no-NO.rc @@ -4,7 +4,7 @@ IDD_MSCONFIG_DIALOG DIALOGEX DISCARDABLE 0, 0, 378, 220 STYLE DS_SHELLFONT | DS_CENTER | WS_MINIMIZEBOX | WS_POPUP | WS_CLIPSIBLINGS | WS_CLIPCHILDREN | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME -CAPTION "System configuration program" +CAPTION "Systemkonfigurasjon" FONT 8, "MS Shell Dlg" BEGIN CONTROL "kategori1",IDC_TAB,"SysTabControl32",WS_TABSTOP,2,2,374,195 @@ -28,18 +28,18 @@ STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN CONTROL "", 237, "SysTreeView32", TVS_HASBUTTONS | TVS_HASLINES | TVS_LINESATROOT | TVS_EDITLABELS | TVS_SHOWSELALWAYS | WS_CHILD | WS_VISIBLE | WS_BORDER | WS_TABSTOP, 2, 1, 280, 148 - PUSHBUTTON "Move &Up", IDC_BTN_SYSTEM_UP, 290, 5, 66, 14 - PUSHBUTTON "Move &Down", IDC_BTN_SYSTEM_DOWN, 290, 25, 66, 14 + PUSHBUTTON "Flytt &opp", IDC_BTN_SYSTEM_UP, 290, 5, 66, 14 + PUSHBUTTON "Flytt &ned", IDC_BTN_SYSTEM_DOWN, 290, 25, 66, 14 - PUSHBUTTON "&Enable", IDC_BTN_SYSTEM_ENABLE, 290, 50, 66, 14 - PUSHBUTTON "D&isable", IDC_BTN_SYSTEM_DISABLE, 290, 70, 66, 14 + PUSHBUTTON "&Aktiver", IDC_BTN_SYSTEM_ENABLE, 290, 50, 66, 14 + PUSHBUTTON "D&eaktiver", IDC_BTN_SYSTEM_DISABLE, 290, 70, 66, 14 - PUSHBUTTON "&Find", IDC_BTN_SYSTEM_FIND, 290, 95, 66, 14 - PUSHBUTTON "&New", IDC_BTN_SYSTEM_NEW, 290, 115, 66, 14 - PUSHBUTTON "Edi&t", IDC_BTN_SYSTEM_EDIT, 290, 135, 66, 14 + PUSHBUTTON "&Finn", IDC_BTN_SYSTEM_FIND, 290, 95, 66, 14 + PUSHBUTTON "&Ny", IDC_BTN_SYSTEM_NEW, 290, 115, 66, 14 + PUSHBUTTON "Re&diger", IDC_BTN_SYSTEM_EDIT, 290, 135, 66, 14 - PUSHBUTTON "Ena&ble All", IDC_BTN_SYSTEM_ACTIVATE, 123, 155, 66, 14 - PUSHBUTTON "Disable A&ll",IDC_BTN_SYSTEM_DEACTIVATE, 195, 155, 66, 14 + PUSHBUTTON "A&ktiver Alt", IDC_BTN_SYSTEM_ACTIVATE, 123, 155, 66, 14 + PUSHBUTTON "Dektiver A<",IDC_BTN_SYSTEM_DEACTIVATE, 195, 155, 66, 14 END IDD_TOOLS_PAGE DIALOGEX DISCARDABLE 0, 0, 362, 175 @@ -83,11 +83,11 @@ BEGIN PUSHBUTTON "Flytt &Opp", IDC_BTN_MOVE_UP_BOOT_OPTION, 190, 65, 70, 12 PUSHBUTTON "Flytt &Ned", IDC_BTN_MOVE_DOWN_BOOT_OPTION, 280, 65, 70, 12 GROUPBOX "Oppstarts alternativer", -1, 10, 80, 250, 90,0,WS_EX_TRANSPARENT - CHECKBOX "/SA&FEBOOT", IDC_CBX_SAFE_BOOT, 15, 90, 50, 10 - CHECKBOX "/&NOGUIBOOT", IDC_CBX_NO_GUI_BOOT, 15, 105, 55, 10 - CHECKBOX "/&BOOTLOG", IDC_CBX_BOOT_LOG, 15, 120, 50, 10 - CHECKBOX "/BAS&EVIDEO", IDC_CBX_BASE_VIDEO, 15, 135, 55, 10 - CHECKBOX "/S&OS", IDC_CBX_SOS, 15, 150, 50, 10 + CHECKBOX "/Sik&ker oppstart", IDC_CBX_SAFE_BOOT, 15, 90, 50, 10 + CHECKBOX "/&Ingen grafisk oppstart", IDC_CBX_NO_GUI_BOOT, 15, 105, 55, 10 + CHECKBOX "/&Oppstart logg", IDC_CBX_BOOT_LOG, 15, 120, 50, 10 + CHECKBOX "/Enkel& grafikk", IDC_CBX_BASE_VIDEO, 15, 135, 55, 10 + CHECKBOX "/H&jelp", IDC_CBX_SOS, 15, 150, 50, 10 PUSHBUTTON "Av&anserte alternativer...", IDC_BTN_ADVANCED_OPTIONS, 100, 150, 70, 12 LTEXT "&Tidsavbrudd:", -1, 280, 91, 30, 10 EDITTEXT IDC_TXT_BOOT_TIMEOUT, 310, 90, 25, 12, ES_LEFT @@ -98,21 +98,21 @@ IDD_FREELDR_ADVANCED_PAGE DIALOGEX DISCARDABLE 0, 0, 175, 175 STYLE DS_SHELLFONT | DS_CONTROL | WS_CHILD | WS_CLIPCHILDREN FONT 8, "MS Shell Dlg" BEGIN - CHECKBOX "/&MAXMEM=", IDC_CBX_MAX_MEM, 10, 10, 50, 10 + CHECKBOX "/&Maksimalt minnestrrelse:=", IDC_CBX_MAX_MEM, 10, 10, 50, 10 EDITTEXT IDC_TXT_MAX_MEM, 80, 10, 60, 12 CONTROL "",IDC_SCR_MAX_MEM, "msctls_updown32", 0x50000000, 140, 10, 11, 11 - CHECKBOX "/&NUMPROC=", IDC_CBX_NUM_PROC, 10, 25, 50, 10 + CHECKBOX "/&Antall prosessorer:=", IDC_CBX_NUM_PROC, 10, 25, 50, 10 COMBOBOX IDC_DRP_NUM_PROC, 80, 25, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP - CHECKBOX "/&PCILOCK", IDC_CBX_PCI_LOCK, 10, 40, 50, 10 + CHECKBOX "/&PCI ls", IDC_CBX_PCI_LOCK, 10, 40, 50, 10 CHECKBOX "/P&ROFIL", IDC_CBX_PROFILE, 10, 55, 50, 10 CHECKBOX "/&IRQ", IDC_CBX_IRQ, 10, 70, 40, 12 EDITTEXT IDC_TXT_IRQ, 80, 70, 60, 12, ES_LEFT - CHECKBOX "/&DEBUG", IDC_CBX_DEBUG, 10, 85, 40, 10 - CHECKBOX "/D&EBUGPORT", IDC_CBX_DEBUG_PORT, 20, 100, 60, 10 + CHECKBOX "/&Globale feilskingsinnstillinger", IDC_CBX_DEBUG, 10, 85, 40, 10 + CHECKBOX "/F&eilskingsport:", IDC_CBX_DEBUG_PORT, 20, 100, 60, 10 COMBOBOX IDC_DRP_DEBUG_PORT, 80, 100, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP - CHECKBOX "/&BAUDRATE", IDC_CBX_BAUD_RATE, 20, 115, 50, 10 + CHECKBOX "/&Overfringshastighet", IDC_CBX_BAUD_RATE, 20, 115, 50, 10 COMBOBOX IDC_DRP_DRP_BAUD_RATE, 80, 115, 60, 10, CBS_DROPDOWNLIST | CBS_SORT | WS_CHILD | WS_VISIBLE | WS_TABSTOP - CHECKBOX "/&CHANNEL", IDC_CBX_CHANNEL, 20, 130, 50, 10 + CHECKBOX "/&Kanal", IDC_CBX_CHANNEL, 20, 130, 50, 10 EDITTEXT IDC_TXT_CHANNEL, 80, 130, 60, 12, ES_LEFT CONTROL "",IDC_SCR_CHANNEL, "msctls_updown32", 0x50000000, 140, 130, 11, 11 PUSHBUTTON "Ok", IDC_OK, 20, 160, 50, 12 @@ -121,7 +121,7 @@ END STRINGTABLE DISCARDABLE BEGIN - IDS_MSCONFIG "System konfigurasjon program" + IDS_MSCONFIG "Systemkonfigurasjon" IDS_TAB_GENERAL "Generelt" IDS_TAB_SYSTEM "SYSTEM.INI" IDS_TAB_FREELDR "FREELDR.INI" diff --git a/reactos/base/applications/mstsc/lang/no-NO.rc b/reactos/base/applications/mstsc/lang/no-NO.rc index 7ea7beb6e91..21f0caf4a37 100644 --- a/reactos/base/applications/mstsc/lang/no-NO.rc +++ b/reactos/base/applications/mstsc/lang/no-NO.rc @@ -38,7 +38,7 @@ END IDD_CONNECTDIALOG DIALOGEX 0, 0, 260, 262 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU -CAPTION "Remote Desktop Connection" +CAPTION "Tilkobling til eksternt skrivebord" FONT 8, "MS Shell Dlg", 400, 0, 0x1 BEGIN DEFPUSHBUTTON "Koble til",IDOK,147,245,50,14 @@ -59,5 +59,5 @@ BEGIN IDS_FULLSCREEN "Full skjerm" IDS_BROWSESERVER "" IDS_HEADERTEXT1 "Eksternt skrivebord" - IDS_HEADERTEXT2 "Koble til" + IDS_HEADERTEXT2 "Tilkobling" END diff --git a/reactos/base/applications/network/ipconfig/lang/no-NO.rc b/reactos/base/applications/network/ipconfig/lang/no-NO.rc index 20320b5e0d6..a1d7947bc17 100644 --- a/reactos/base/applications/network/ipconfig/lang/no-NO.rc +++ b/reactos/base/applications/network/ipconfig/lang/no-NO.rc @@ -25,33 +25,33 @@ BEGIN /* Please keep the spacing/formatting as per En.rc when translating */ IDS_USAGE "\nUSAGE:\n \ - ipconfig [/? | /all | /renew [adapter] | /release [adapter] |\n \ + ipconfig [/? | /all | /renew [kort] | /release [kort] |\n \ /flushdns | /displaydns | /registerdns |\n \ - /showclassid adapter |\n \ - /setclassid adapter [classid] ]\n \ + /showclassid kort |\n \ + /setclassid kort [classid] ]\n \ \n \ - where\n \ - adapter Connection name\n \ - (wildcard characters * and ? allowed, see examples)\n \ + der\n \ + kort Tilkoblingsnavn\n \ + (jokertegnene * og ? er tillatt, se eksemplene)\n \ \n \ Eksempler:\n \ - /? Vis denne hjelp meldingen\n \ - /all Vis detaljert informasjon.\n \ - /release Release the IP address for the specified adapter.\n \ + /? Viser denne hjelpe meldingen\n \ + /all Viser detaljert informasjon.\n \ + /release Frigir IP addressen for det angitte kortet.\n \ /renew Forny alle IP addresser for alle valgte kort.\n \ - /flushdns Purges the DNS Resolver cache.\n \ - /registerdns Refreshes all DHCP leases and re-registers DNS names.\n \ - /displaydns Display the contents of the DNS Resolver Cache.\n \ - /showclassid Displays all the dhcp class IDs allowed for adapter.\n \ - /setclassid Modifies the dhcp class id.\n \ + /flushdns Tmmer DNS Resolver-bufferen.\n \ + /registerdns Oppdaterer alle DHCP leieavtaler og registerer DNS navn p nytt.\n \ + /displaydns Viser innhold av DNS Resolver-bufferen.\n \ + /showclassid Viser alle klasse IDene for DHCP som er tillatt for kortet.\n \ + /setclassid Endrer klasse-IDene for DHCP.\n \ \n \ - The default is to display only the IP address, subnet mask and\n \ - default gateway for each adapter bound to TCP/IP.\n \ + Standardverdien er bare vise IP-addressen, nettverksmasken og + standard gatewayen for hver kort knyttet til TCP/IP.\n \ \n \ - For Release and Renew, if no adapter name is specified, then the IP address\n \ - leases for all adapters bound to TCP/IP will be released or renewed.\n \ + For Release og Renew, hvis ingen kortnavn er angitt, vil IP addressen\n \ + for alle kort knyttet til TCP/IP frigis eller fornyes hvis det ikke angis et kortnavn.\n \ \n \ - For Setclassid, if no ClassId is specified, then the ClassId is removed.\n \ + For Setclassid, fjernes ClassId hvis det ikke angis en ClassId.\n \ \n \ Examples:\n \ > ipconfig ... Vis informasjon.\n \ @@ -60,6 +60,6 @@ BEGIN > ipconfig /renew EL* ... Forny alle kort med navn som\n \ begynner med EL\n \ > ipconfig /release *Til* ... Frigi alle samsvarende tilkoblinger,\n \ - for eksempel ""Lokal tilkobling 1"" or\n \ + for eksempel ""Lokal tilkobling 1"" eller\n \ ""Lokaltilkobling 2""\n" END diff --git a/reactos/base/system/format/lang/sk-SK.rc b/reactos/base/system/format/lang/sk-SK.rc index 9d5f75561ba..bc6a926fd44 100644 --- a/reactos/base/system/format/lang/sk-SK.rc +++ b/reactos/base/system/format/lang/sk-SK.rc @@ -1,5 +1,6 @@ -/* TRANSLATOR: Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) - * DATE OF TR: 15-02-2008 +/* TRANSLATOR : Mrio Kamr /Mario Kacmar/ aka Kario (kario@szm.sk) + * DATE OF TR.: 07-08-2008 + * LAST CHANGE: 08-08-2008 */ #include "resource.h" @@ -7,13 +8,13 @@ LANGUAGE LANG_SLOVAK, SUBLANG_DEFAULT STRINGTABLE DISCARDABLE BEGIN -/* menovka zvzku = volume label, drive = jednotka */ -STRING_HELP, "Pouitie: %S jednotka: [-FS:systm sborov] [-V:menovka] [-Q] [-A:vekos] [-C]\n\n\ - [jednotka:] Specifies the drive to format.\n\ - -FS:systm sborov Specifies the type of file system (%s).\n\ - -V:menovka Specifies volume label.\n\ - -Q Performs a quick format.\n\ - -A:vekos Overrides the default allocation unit size. Default settings\n\ +/* menovka zvzku = volume label, drive = jednotka */ +STRING_HELP, "Pouitie: %S jednotka: [-FS:systm sborov] [-V:menovka] [-Q] [-A:vekos] [-C]\n\n\ + [jednotka:] Uruje jednotku k naformtovaniu.\n\ + -FS:systm sborov Uruje typ sborovho systmu (%s).\n\ + -V:menovka Uruje menovku zvzku.\n\ + -Q Vykonva rchle formtovanie.\n\ + -A:vekos Overrides the default allocation unit size. Default settings\n\ are strongly recommended for general use\n\ NTFS supports 512, 1024, 2048, 4096, 8192, 16K, 32K, 64K.\n\ FAT supports 8192, 16K, 32K, 64K, 128K, 256K.\n\ @@ -22,31 +23,31 @@ STRING_HELP, "Pou -C Files created on the new volume will be compressed by\n\ default.\n\n" -STRING_COMPLETE "Dokonen na %lu percent.\r" +STRING_COMPLETE "Dokonen na %lu percent.\r" -STRING_FORMAT_FAIL "FormatEx was unable to complete successfully.\n\n" +STRING_FORMAT_FAIL "FormatEx nebol schopn spene skoni.\n\n" -STRING_NO_SUPPORT "Opercia nie je podporovan" +STRING_NO_SUPPORT "Opercia nie je podporovan" STRING_FMIFS_FAIL "Could not located FMIFS entry points.\n\n" -STRING_UNKNOW_ARG "Neznmy argument: %S\n" +STRING_UNKNOW_ARG "Neznmy argument: %S\n" -STRING_DRIVE_PARM "Chba nevyhnutn parameter jednotky.\n\n" +STRING_DRIVE_PARM "Chba nevyhnutn parameter jednotky.\n\n" STRING_ERROR_DRIVE_TYPE "Could not get drive type" -STRING_INSERT_DISK "Vlote nov disketu do jednotky %C:\na potom stlate ENTER..." +STRING_INSERT_DISK "Vlote nov disketu do jednotky %C:\na potom stlate ENTER..." STRING_NO_VOLUME "Could not query volume" STRING_NO_VOLUME_SIZE "Could not query volume size" -STRING_FILESYSTEM "Typ systmu sborov je %S.\n" +STRING_FILESYSTEM "Typ systmu sborov je %S.\n" -STRING_LABEL_NAME_EDIT "Vlote sasn menovku zvzku pre jednotku %C: " +STRING_LABEL_NAME_EDIT "Vlote sasn menovku zvzku pre jednotku %C: " -STRING_ERROR_LABEL "Bola zadan nesprvna menovka zvzku pre tto jednotku.\n" +STRING_ERROR_LABEL "Bola zadan nesprvna menovka zvzku pre tto jednotku.\n" STRING_YN_FORMAT "\nWARNING, ALL DATA ON NON_REMOVABLE DISK\n\ DRIVE %C: WILL BE LOST!\nProceed with Format (A/N)? " @@ -55,19 +56,19 @@ STRING_YES_NO_FAQ "AN" STRING_VERIFYING "Overovanie" -STRING_FAST_FMT "Rchle formtovanie" +STRING_FAST_FMT "Rchle formtovanie" -STRING_CREATE_FSYS "Vytvram truktru sborovho systmu.\n" +STRING_CREATE_FSYS "Vytvram truktru sborovho systmu.\n" -STRING_FMT_COMPLETE "Formtovanie dokonen.\n" +STRING_FMT_COMPLETE "Formtovanie dokonen.\n" -STRING_VOL_COMPRESS "Zvzok nepodporuje kompresiu.\n" +STRING_VOL_COMPRESS "Zvzok nepodporuje kompresiu.\n" -STRING_ENTER_LABEL "Menovka zvzku (11 znakov, ak nechcete zada tak iba Enter)? " +STRING_ENTER_LABEL "Menovka zvzku (11 znakov, ak nechcete zada, stlate ENTER)? " -STRING_NO_LABEL "Zvzok sa ned pomenova" +STRING_NO_LABEL "Zvzok sa ned pomenova" -STRING_FREE_SPACE "\nCelkov diskov miesto: %I64d bajtov.\nDostupn miesto na disku: %I64d bajtov.\n" +STRING_FREE_SPACE "\nCelkov diskov miesto: %I64d bajtov.\nDostupn miesto na disku: %I64d bajtov.\n" -STRING_SERIAL_NUMBER "\nSriov slo zvzku je %04X-%04X\n" +STRING_SERIAL_NUMBER "\nSriov slo zvzku je %04X-%04X\n" END diff --git a/reactos/dll/cpl/console/lang/no-NO.rc b/reactos/dll/cpl/console/lang/no-NO.rc index a79b244ddd1..8c1bddd8dd9 100644 --- a/reactos/dll/cpl/console/lang/no-NO.rc +++ b/reactos/dll/cpl/console/lang/no-NO.rc @@ -16,24 +16,24 @@ STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION CAPTION "Valg" FONT 8, "MS Shell Dlg" BEGIN - GROUPBOX "Cursor Size", -1, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP + GROUPBOX "Markrstrrelse", -1, 7, 7, 120, 70, WS_CHILD | WS_VISIBLE | WS_GROUP CONTROL "&Sm", IDC_RADIO_SMALL_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 20, 90, 10 CONTROL "&Middels", IDC_RADIO_MEDIUM_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 40, 90, 10 CONTROL "&Store", IDC_RADIO_LARGE_CURSOR, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 15, 60, 90, 10 GROUPBOX "Skjerminnstillinger", -1, 133, 7, 112, 70, WS_CHILD | WS_VISIBLE | WS_GROUP - CONTROL "&Window", IDC_RADIO_DISPLAY_WINDOW, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 20, 70, 10 + CONTROL "&Vindu", IDC_RADIO_DISPLAY_WINDOW, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 20, 70, 10 CONTROL "F&ull skjerm", IDC_RADIO_DISPLAY_FULL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 142, 40, 70, 10 GROUPBOX "Kommando historie", -1, 7, 84, 120, 77, WS_CHILD | WS_VISIBLE | WS_GROUP - LTEXT "&Buffer Strrelse:", -1, 14, 101, 70, 12 + LTEXT "&Bufferstrrelse:", -1, 14, 101, 70, 12 EDITTEXT IDC_EDIT_BUFFER_SIZE, 90, 97, 30, 15, ES_RIGHT | WS_GROUP CONTROL "", IDC_UPDOWN_BUFFER_SIZE, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 97, 12, 15 - LTEXT "&Number of Buffers:", -1, 14, 124, 70, 12 + LTEXT "&Antall buffere:", -1, 14, 124, 70, 12 EDITTEXT IDC_EDIT_NUM_BUFFER, 90, 120, 30, 15, ES_RIGHT | WS_GROUP CONTROL "", IDC_UPDOWN_NUM_BUFFER, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 119, 120, 12, 15 - CHECKBOX "&Discard Old Duplicates", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 + CHECKBOX "&Fjern gamle duplikater", IDC_CHECK_DISCARD_DUPLICATES, 12, 140, 110, 15 GROUPBOX "Rediger valg", -1, 133, 85, 112, 77, BS_GROUPBOX | WS_CHILD | WS_VISIBLE | WS_GROUP - CHECKBOX "&QuickEdit Mode", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP - CHECKBOX "&Insert Mode", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "&Hurtigredigeringsmodus", IDC_CHECK_QUICK_EDIT, 140, 97, 102, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP + CHECKBOX "&Innsettingsmodus", IDC_CHECK_INSERT_MODE, 140, 113, 76, 15, WS_CHILD | WS_VISIBLE | WS_TABSTOP END IDD_PROPPAGEFONT DIALOGEX 0, 0, 253, 220 @@ -46,11 +46,11 @@ BEGIN CONTROL "", IDC_STATIC_FONT_WINDOW_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 10, 20, 163, 74 LISTBOX IDC_LBOX_FONTS, 181, 20, 55, 80, LBS_DISABLENOSCROLL | WS_VSCROLL LTEXT "&Skrift:", -1, 10, 105, 33, 10 - CHECKBOX "&Bold fonts", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 + CHECKBOX "&Fet skrift", IDC_CHECK_BOLD_FONTS, 56, 105, 60, 10 LISTBOX IDC_LBOX_TYPE, 10, 120, 110, 40, LBS_DISABLENOSCROLL | WS_VSCROLL GROUPBOX "", IDC_GROUPBOX_FONT_NAME, 6, 156, 241, 50 CONTROL "", IDC_STATIC_SELECT_FONT_PREVIEW, "Static", SS_OWNERDRAW | SS_SUNKEN, 16, 165, 95, 35 - LTEXT "Each character is:", -1, 124, 166, 75, 10 + LTEXT "Hver tegn er:", -1, 124, 166, 75, 10 LTEXT "Skjerm piksel bred\nskjerm piksel hy", -1, 136, 180, 101, 20 LTEXT "", IDC_FONT_SIZE_X, 120, 180, 10, 10 LTEXT "", IDC_FONT_SIZE_Y, 120, 188, 10, 10 @@ -58,12 +58,12 @@ END IDD_PROPPAGELAYOUT DIALOGEX 0, 0, 253, 220 STYLE DS_SHELLFONT | WS_CHILD | WS_CAPTION -CAPTION "Layout" +CAPTION "Oppsett" FONT 8, "MS Shell Dlg" BEGIN LTEXT "Vindu forhndsvisning:", -1, 8, 6, 95, 10 CONTROL "", IDC_STATIC_LAYOUT_WINDOW_PREVIEW, "Static", SS_SUNKEN | SS_OWNERDRAW, 8, 16, 115, 70 - GROUPBOX "Screen Buffer Size", -1, 130, 12, 115, 50 + GROUPBOX "Strrelse p skjermbuffer", -1, 130, 12, 115, 50 LTEXT "&Bredde:", -1, 140, 28, 40, 10 LTEXT "&Hyde:", -1, 140, 46, 39, 10 EDITTEXT IDC_EDIT_SCREEN_BUFFER_WIDTH, 203, 25, 35, 14, ES_RIGHT | WS_GROUP @@ -77,14 +77,14 @@ BEGIN CONTROL "", IDC_UPDOWN_WINDOW_SIZE_WIDTH, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 75, 13, 14 EDITTEXT IDC_EDIT_WINDOW_SIZE_HEIGHT, 203, 92, 35, 14, ES_RIGHT | WS_GROUP CONTROL "", IDC_UPDOWN_WINDOW_SIZE_HEIGHT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 92, 13, 14 - GROUPBOX "Window Position", -1, 130, 116, 115, 64 + GROUPBOX "Vindusplassering", -1, 130, 116, 115, 64 LTEXT "&Venstre:", -1, 140, 132, 38, 10 LTEXT "&Topp:", -1, 140, 149, 40, 10 EDITTEXT IDC_EDIT_WINDOW_POS_LEFT, 203, 128, 35, 14, ES_RIGHT | WS_GROUP CONTROL "", IDC_UPDOWN_WINDOW_POS_LEFT, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 128, 13, 14 EDITTEXT IDC_EDIT_WINDOW_POS_TOP, 203, 146, 35, 14, ES_RIGHT | WS_GROUP CONTROL "", IDC_UPDOWN_WINDOW_POS_TOP, UPDOWN_CLASS, UDS_NOTHOUSANDS | UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 238, 146, 13, 14 - CHECKBOX "Let system &position window", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 + CHECKBOX "Automatisk &vindusplassering", IDC_CHECK_SYSTEM_POS_WINDOW, 137, 165, 104, 10 END IDD_PROPPAGECOLORS DIALOGEX 0, 0, 253, 220 @@ -94,9 +94,9 @@ FONT 8, "MS Shell Dlg" BEGIN CONTROL "Skjerm &tekst", IDC_RADIO_SCREEN_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 12, 112, 10 CONTROL "Skjerm &bakgrunn", IDC_RADIO_SCREEN_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 30, 112, 10 - CONTROL "&Popup Text", IDC_RADIO_POPUP_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 48, 112, 10 - CONTROL "Pop&up Background", IDC_RADIO_POPUP_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 67, 112, 10 - GROUPBOX "Selected Color Values", -1, 129, 7, 118, 73 + CONTROL "&Hurtigmenytekst", IDC_RADIO_POPUP_TEXT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 48, 112, 10 + CONTROL "Hurtig&menybakgrunn", IDC_RADIO_POPUP_BACKGROUND, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 10, 67, 112, 10 + GROUPBOX "Valgte fargeverdier", -1, 129, 7, 118, 73 LTEXT "&Rd:", -1, 140, 25, 48, 10 EDITTEXT IDC_EDIT_COLOR_RED, 210, 22, 30, 14, ES_RIGHT | WS_GROUP CONTROL "", IDC_UPDOWN_COLOR_RED, UPDOWN_CLASS, UDS_SETBUDDYINT | UDS_ALIGNRIGHT | UDS_AUTOBUDDY | UDS_ARROWKEYS | WS_BORDER | WS_GROUP, 240, 22, 12, 14 @@ -122,19 +122,19 @@ BEGIN CONTROL "", IDC_STATIC_COLOR14, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 199, 90, 12, 12 CONTROL "", IDC_STATIC_COLOR15, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 213, 90, 12, 12 CONTROL "", IDC_STATIC_COLOR16, "Static", SS_NOTIFY | SS_SUNKEN | SS_OWNERDRAW, 227, 90, 12, 12 - GROUPBOX "Selected Screen Colors", -1, 7, 111, 240, 40 + GROUPBOX "Valgte skjermfarger", -1, 7, 111, 240, 40 CONTROL "", IDC_STATIC_SCREEN_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 124, 224, 20 - GROUPBOX "Selected Popup Colors", -1, 7, 162, 240, 40 + GROUPBOX "Valgte hurtigmenyfarger", -1, 7, 162, 240, 40 CONTROL "", IDC_STATIC_POPUP_COLOR, "Static", SS_OWNERDRAW | SS_SUNKEN, 15, 176, 224, 20 END IDD_APPLYOPTIONS DIALOGEX 0, 0, 220, 79 STYLE DS_SHELLFONT | WS_POPUP | WS_CAPTION -CAPTION "Apply Properties" +CAPTION "Godta innstillinger" FONT 8, "MS Shell Dlg" BEGIN - CONTROL "&Apply Properties to current window only", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 - CONTROL "&Save Properties for future windows with same title", IDC_RADIO_APPLY_ALL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 31, 207, 10 + CONTROL "&Godta innstillinger for bare nvrende vindu", IDC_RADIO_APPLY_CURRENT, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 12, 207, 10 + CONTROL "&Godta innstillinger for fremtidlige vinduer med samme navn", IDC_RADIO_APPLY_ALL, "Button", BS_AUTORADIOBUTTON | WS_CHILD | WS_VISIBLE | WS_TABSTOP, 12, 31, 207, 10 PUSHBUTTON "OK", IDOK, 58, 58, 50, 14, WS_VISIBLE PUSHBUTTON "Avbryt", IDCANCEL, 114, 58, 50, 14, WS_VISIBLE END @@ -142,7 +142,7 @@ END STRINGTABLE BEGIN IDS_CPLNAME "Konsoll" - IDS_CPLDESCRIPTION "Configures console properties." + IDS_CPLDESCRIPTION "Konfigurere Konsoll innstillinger." IDS_APPLY_SHORTCUT_ALL "Modify &shortcut that started this window" IDS_SCREEN_TEXT "C:\ReactOS> dir\nSYSTEM 10-01-99 5:00\nSYSTEM32 10-01-99 5:00" IDS_RASTERFONTS "Raster Fonts" diff --git a/reactos/dll/win32/devmgr/lang/no-NO.rc b/reactos/dll/win32/devmgr/lang/no-NO.rc index 899ea070755..77efbccaaf0 100644 --- a/reactos/dll/win32/devmgr/lang/no-NO.rc +++ b/reactos/dll/win32/devmgr/lang/no-NO.rc @@ -20,7 +20,7 @@ BEGIN IDS_DEVONPARENT "p %1" IDS_TROUBLESHOOTDEV "&Feilsking..." IDS_ENABLEDEV "A&ktiver enhet" - IDS_REINSTALLDRV "Re&install Driver" + IDS_REINSTALLDRV "Installere driver p nytt" IDS_PROPERTIES "E&genskaper" IDS_UPDATEDRV "O&ppdater driveren..." IDS_REBOOT "Restart &datamaskinen..." @@ -34,61 +34,61 @@ STRINGTABLE BEGIN IDS_DEV_NO_PROBLEM "Denne enheten fungerer som den skal." IDS_DEV_NOT_CONFIGURED "Denne enheten er ikke riktig konfigurert." - IDS_DEV_DEVLOADER_FAILED "ReactOS could not load the driver for this device because the computer is reporting two $1 bus types." - IDS_DEV_DEVLOADER_FAILED2 "The $1 device loader(s) for this device could not load the device driver." - IDS_DEV_OUT_OF_MEMORY "The driver for this device may be bad, or your system may be running low on memory or other resources." - IDS_DEV_ENTRY_IS_WRONG_TYPE "This device is not working properly because one of its drivers may be bad, or your registry may be bad." - IDS_DEV_LACKED_ARBITRATOR "The driver for this device requested a resource that ReactOS does not know how to handle." - IDS_DEV_BOOT_CONFIG_CONFLICT "Another device is using the resources this device needs." - IDS_DEV_FAILED_FILTER "The drivers for this device need to be reinstalled." - IDS_DEV_DEVLOADER_NOT_FOUND "This device is not working properly because ReactOS cannot load the file $1 that loads the drivers for the device." - IDS_DEV_DEVLOADER_NOT_FOUND2 "This device is not working properly because the file $1 that loads the drivers for this device is bad." - IDS_DEV_DEVLOADER_NOT_FOUND3 "Device failure: Try changing the driver for this device. If that doesn\'t work, see your hardware documentation." - IDS_DEV_INVALID_DATA "This device is not working properly because the BIOS in your computer is reporting the resources for the device incorrectly." - IDS_DEV_INVALID_DATA2 "This device is not working properly because the BIOS in the device is reporting the resources for the device incorrectly. " - IDS_DEV_FAILED_START "This device is either not present, not working properly, or does not have all the drivers installed." - IDS_DEV_LIAR "ReactOS stopped responding while attempting to start this device, and therefore will never attempt to start this device again." - IDS_DEV_NORMAL_CONFLICT "This device cannot find any free $1 resources to use." - IDS_DEV_NOT_VERIFIED "This device is either not present, not working properly, or does not have all the drivers installed." - IDS_DEV_NEED_RESTART "This device cannot work properly until you restart your computer." - IDS_DEV_REENUMERATION "This device is causing a resource conflict." - IDS_DEV_PARTIAL_LOG_CONF "ReactOS could not identify all the resources this device uses." - IDS_DEV_UNKNOWN_RESOURCE "The driver information file $1 is telling this child device to use a resource that the parent device does not have or recognize." - IDS_DEV_REINSTALL "The drivers for this device need to be reinstalled." + IDS_DEV_DEVLOADER_FAILED "ReactOS kunne ikke laste driver for denne enheten fordi datamaskinen rapporterer to $1 buss typer." + IDS_DEV_DEVLOADER_FAILED2 "$1 enhetslaster(e) for denne enheten kunne ikke laste enhetsdriveren." + IDS_DEV_OUT_OF_MEMORY "Driveren for denne enheten kan vre drlig, eller s kan systemet ditt ha for lite minne eller ha for andre resusser." + IDS_DEV_ENTRY_IS_WRONG_TYPE "Denne enheten virker ikke fordi en av driverene kan vre drlig, eller at ditt register kan vre drlig." + IDS_DEV_LACKED_ARBITRATOR "Driveren for denne enheter trenger en ressurs som ReactOS ikke vet hvordan skal brukes." + IDS_DEV_BOOT_CONFIG_CONFLICT "En annen enhet bruker ressurs som denne enheten trenger bruke." + IDS_DEV_FAILED_FILTER "Driveren for denne enheten trenger bli installert p nytt." + IDS_DEV_DEVLOADER_NOT_FOUND "Denne enheten fungerer ikke som den skal fordi ReactOS kan ikke laste filen $1 som laster driveren for denne enheten." + IDS_DEV_DEVLOADER_NOT_FOUND2 "Denne enheten fungerer ikke som den skal fordi filen $1 som laster driveren for denne enheten er drlig." + IDS_DEV_DEVLOADER_NOT_FOUND3 "Enhet mislykket: Prv bytt driveren for denne enheten. Hvis dette ikke virker, se p din maskinvare dokumentasjon." + IDS_DEV_INVALID_DATA "Denne enheten fungerer ikke som den skal fordi BIOS p din datamaskin rapporterer at ressursen for denne enheten er feil." + IDS_DEV_INVALID_DATA2 "Denne enheten fungerer ikke som den skal fordi BIOS p enheten rapporterer at ressursen for denne enheten er feil. " + IDS_DEV_FAILED_START "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller s har den ikke de driverene som trengs." + IDS_DEV_LIAR "ReactOS har stoppet reaksjon mens attempting for starte denne enheten, og derfor vil den aldri forske starte denne enheten igjen." + IDS_DEV_NORMAL_CONFLICT "Denne enheten kan ikke finne noen ledige $1 ressurser for kunne brukes." + IDS_DEV_NOT_VERIFIED "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller s har den ikke alle driverene som trengs." + IDS_DEV_NEED_RESTART "Denne enheten vil ikke fungere som den skal fr du startet datamaskinen p nytt." + IDS_DEV_REENUMERATION "Denne enheten har krasjet p grunn av en ressurs konflikt." + IDS_DEV_PARTIAL_LOG_CONF "ReactOS kunne ikke finne alle ressurser som denne enheten bruker." + IDS_DEV_UNKNOWN_RESOURCE "Driver informasjon filen $1 forteller at denne barne enheten, for bruke en ressurs som denne foreldre enheten ikke har eller kjenne igjen." + IDS_DEV_REINSTALL "Driveren for denne enheten trenger bli installert p nytt." IDS_DEV_REGISTRY "Det kan vre noe feil med registeret." IDS_DEV_WILL_BE_REMOVED "ReactOS fjerner denne enheten." IDS_DEV_DISABLED "Denne enheten er ikke startet." IDS_DEV_DISABLED2 "Denne enheten er deaktivert." - IDS_DEV_DEVLOADER_NOT_READY "The loaders for this device cannot load the required drivers." - IDS_DEV_DEVLOADER_NOT_READY2 "This display adapter is functioning correctly." - IDS_DEV_DEVLOADER_NOT_READY3 "The loaders for this device cannot load the required drivers." - IDS_DEV_DEVICE_NOT_THERE "This device is either not present, not working properly, or does not have all the drivers installed." - IDS_DEV_MOVED "ReactOS is in the process of setting up this device." - IDS_DEV_TOO_EARLY "ReactOS is in the process of setting up this device." - IDS_DEV_NO_VALID_LOG_CONF "ReactOS can\'t specify the resources for this device." - IDS_DEV_FAILED_INSTALL "The drivers for this device are not installed." - IDS_DEV_HARDWARE_DISABLED "This device is disabled because the BIOS for the device did not give it any resources." - IDS_DEV_CANT_SHARE_IRQ "This device is using an Interrupt Request (IRQ) resource that is in use by another device and cannot be shared.\nYou must change the conflicting setting or remove the real-mode driver causing the conflict." - IDS_DEV_FAILED_ADD "This device is not working properly because $1 is not working properly." - IDS_DEV_DISABLED_SERVICE "ReactOS cannot install the drivers for this device because it cannot access the drive or network location that has the setup files on it." - IDS_DEV_TRANSLATION_FAILED "This device isn\'t responding to its driver." - IDS_DEV_NO_SOFTCONFIG "ReactOS cannot determine the settings for this device. Consult the documentation that came with this device and use the Resource tab to set the configuration." - IDS_DEV_BIOS_TABLE "Your computer\'s system firmware does not include enough information to properly configure and use this device. \nTo use this device, contact your computer manufacturer to obtain a firmware or BIOS update." - IDS_DEV_IRQ_TRANSLATION_FAILED "This device is requesting a PCI interrupt but is configured for an ISA interrupt (or vice versa). \nPlease use the computer\'s system setup program to reconfigure the interrupt for this device." - IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS cannot initialize the device driver for this hardware." - IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS cannot load the device driver for this hardware because a previous instance of the device driver is still in memory." - IDS_DEV_DRIVER_FAILED_LOAD "ReactOS cannot load the device driver for this hardware. The driver may be corrupted or missing." - IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS cannot access this hardware because its service key information in the registry is missing or recorded incorrectly." - IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS successfully loaded the device driver for this hardware but cannot find the hardware device." - IDS_DEV_DUPLICATE_DEVICE "ReactOS cannot load the device driver for this hardware because there is a duplicate device already running in the system." - IDS_DEV_FAILED_POST_START "ReactOS has stopped this device because it has reported problems." - IDS_DEV_HALTED "An application or service has shut down this hardware device." - IDS_DEV_PHANTOM "Currently, this hardware device is not connected to the computer." - IDS_DEV_SYSTEM_SHUTDOWN "ReactOS cannot gain access to this hardware device because the operating system is in the process of shutting down." - IDS_DEV_HELD_FOR_EJECT "ReactOS cannot use this hardware device because it has been prepared for safe removal, but it has not been removed from the computer" - IDS_DEV_DRIVER_BLOCKED "The software for this device has been blocked from starting because it is known to have problems with ReactOS. Contact the hardware vendor for a new driver." - IDS_DEV_REGISTRY_TOO_LARGE "ReactOS cannot start new hardware devices because the system hive is too large (exceeds the Registry Size Limit)." - IDS_DEV_SETPROPERTIES_FAILED "ReactOS wasn\'t able to change the settings of this device." + IDS_DEV_DEVLOADER_NOT_READY "Oppstartlasteren for denne enheten kan ikke laste de ndvendige filene." + IDS_DEV_DEVLOADER_NOT_READY2 "Dette skjermkortet fungerer som det skal." + IDS_DEV_DEVLOADER_NOT_READY3 "Oppstartlasteren for denne enheten kan ikke laste de ndvendige driverene." + IDS_DEV_DEVICE_NOT_THERE "Denne enheten er heller ikke valgt, eller vil ikke fungere riktig, eller s har den ikke alle driverene som trengs." + IDS_DEV_MOVED "ReactOS starter prosessen for setter opp denne enheten." + IDS_DEV_TOO_EARLY "ReactOS er i prosessen for setter opp denne enheten." + IDS_DEV_NO_VALID_LOG_CONF "ReactOS kan\ ikke spesifisere ressursen for denne enheten." + IDS_DEV_FAILED_INSTALL "Driveren for denne enheten er ikke installert." + IDS_DEV_HARDWARE_DISABLED "Denne enheten er deaktivert fordi BIOS for enheten gir ikke andre ressurser." + IDS_DEV_CANT_SHARE_IRQ "Denne enheten bruker en Interrupt Request (IRQ) ressurs som er i bruk av en annen enhet og kan ikke bli delt.\nDu m endre konflikt innstillingen eller fjerne ekte-modus driver som forrsaker konflikten." + IDS_DEV_FAILED_ADD "Denne enheten vil ikke fungere som den skal fordi $1 vil ikke fungere som den skal." + IDS_DEV_DISABLED_SERVICE "ReactOS kan ikke installere driveren for denne enheten, fordi den fr ikke tilgang til driveren eller nettverks plasseringen som har installering filen." + IDS_DEV_TRANSLATION_FAILED "Denne enheten vil\ ikke svare p grunn av driveren." + IDS_DEV_NO_SOFTCONFIG "ReactOS kan ikke oppdage innstillingene for denne enheten. Ta hensyn til dokumentasjon som kommer med denne enheten og bruker ressursen tab for sette konfigurasjonen." + IDS_DEV_BIOS_TABLE "Din datamaskin\ system firmware flger ikke med nok informasjon til riktig konfigurere og bruke denne enheten. \nFor bruke denne enheten, kontakt din datamaskin fabrikant for f en firmware eller BIOS oppdatering." + IDS_DEV_IRQ_TRANSLATION_FAILED "Denne enheten trenger en PCI interrupt men den er konfigurert for en ISA interrupt (eller vice versa). \nVennligst bruk datamaskinens\'s system installering program for rekonfigurere interrupt for denne enheten." + IDS_DEV_FAILED_DRIVER_ENTRY "ReactOS kan ikke initialise enhetsdriveren for denne maskinvaren." + IDS_DEV_DRIVER_FAILED_PRIOR_UNLOAD "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren fordi en forrige tilfelle av enhetsdriveren er fremdeles i minnet." + IDS_DEV_DRIVER_FAILED_LOAD "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren. Driveren kan vre korrupt eller mangler." + IDS_DEV_DRIVER_SERVICE_KEY_INVALID "ReactOS kan ikke f tilgang til denne maskinvaren fordi dens tjeneste nkkel informasjon i registret mangler eller er uriktig." + IDS_DEV_LEGACY_SERVICE_NO_DEVICES "ReactOS har fullfrt laste denne enhetsdriverne for for maskinvare men kan ikke finne maskinvare enheten." + IDS_DEV_DUPLICATE_DEVICE "ReactOS kan ikke laste enhetsdriveren for denne maskinvaren fordi det er en duplikat enhet som allerede kjrer p systemet." + IDS_DEV_FAILED_POST_START "ReactOS har stoppet denne enheten fordi det har rapportert problemer." + IDS_DEV_HALTED "Et program eller tjeneste har sltt av denne maskinvare enheten." + IDS_DEV_PHANTOM "Nvrende, denne maskinvare enheten er ikke koblet til datamaskinen." + IDS_DEV_SYSTEM_SHUTDOWN "ReactOS kan ikke f tilgang til denne maskinvare enheten fordi operativssystemet er i prosessen for sls av." + IDS_DEV_HELD_FOR_EJECT "ReactOS kan ikke bruke denne maskinvare enheten fordi den har blitt forbredt p sikker fjerning, men har ikke blitt fjernet fra datamaskinen" + IDS_DEV_DRIVER_BLOCKED "Programvaren for denne enheten har blitt blokket fra starte fordi det et kjent for ha problemer med ReactOS. Kontact maskinvare produsenten for nye drivere." + IDS_DEV_REGISTRY_TOO_LARGE "ReactOS kan ikke starte ny maskinvare enhet fordi system filen er for stor (Endre Registet strrelse begrensning)." + IDS_DEV_SETPROPERTIES_FAILED "ReactOS var ikke tilgjengelig for endre innstillinger for denne enheten." END IDD_HARDWARE DIALOGEX DISCARDABLE 0, 0, 300, 400 diff --git a/reactos/dll/win32/shlwapi/shlwapi_No.rc b/reactos/dll/win32/shlwapi/shlwapi_No.rc index 4df42c87dd0..37a39899e88 100644 --- a/reactos/dll/win32/shlwapi/shlwapi_No.rc +++ b/reactos/dll/win32/shlwapi/shlwapi_No.rc @@ -37,7 +37,7 @@ FONT 8, "MS Shell Dlg" STRINGTABLE DISCARDABLE { IDS_BYTES_FORMAT "%ld byte" - IDS_TIME_INTERVAL_HOURS " hr" + IDS_TIME_INTERVAL_HOURS " t" IDS_TIME_INTERVAL_MINUTES " min" - IDS_TIME_INTERVAL_SECONDS " sec" + IDS_TIME_INTERVAL_SECONDS " sek" } diff --git a/reactos/dll/win32/syssetup/lang/no-NO.rc b/reactos/dll/win32/syssetup/lang/no-NO.rc index 9b8e21b6750..43d45c87457 100644 --- a/reactos/dll/win32/syssetup/lang/no-NO.rc +++ b/reactos/dll/win32/syssetup/lang/no-NO.rc @@ -203,33 +203,33 @@ BEGIN IDS_CMT_CALC "Start Kalkulator" IDS_CMT_CMD "pne command prompt" IDS_CMT_EXPLORER "Start Explorer" - IDS_CMT_NOTEPAD "Start Tekst Editor" - IDS_CMT_REGEDIT "Start Register Editor" - IDS_CMT_WORDPAD "Start Dokument Editor" + IDS_CMT_NOTEPAD "Start Tekstredigering" + IDS_CMT_REGEDIT "Start Registerredigering" + IDS_CMT_WORDPAD "Start Dokument redigering" IDS_CMT_SCREENSHOT "Ta skjermbilde" IDS_CMT_DEVMGMT "Start Enhetsbehandler" IDS_CMT_SERVMAN "Start Tjenestebehandler" - IDS_CMT_RDESKTOP "Launch Remote Desktop" + IDS_CMT_RDESKTOP "Start Ekstern skrivebord" END STRINGTABLE BEGIN IDS_GAMES "Spill" - IDS_CMT_SOLITAIRE "Solitaire" - IDS_CMT_WINEMINE "WineMine" + IDS_CMT_SOLITAIRE "Kabal" + IDS_CMT_WINEMINE "Minnesveiper" END STRINGTABLE BEGIN - IDS_SYS_TOOLS "System Tools" - IDS_CMT_CHARMAP "CharMap" - IDS_CMT_KBSWITCH "Keyboard Layout Switcher" + IDS_SYS_TOOLS "System verkty" + IDS_CMT_CHARMAP "Tegnkart" + IDS_CMT_KBSWITCH "Endre tastatur valg" END STRINGTABLE BEGIN - IDS_SYS_ACCESSIBILITY "Accessibility" - IDS_CMT_MAGNIFY "Magnify" + IDS_SYS_ACCESSIBILITY "Tilgjengelighet" + IDS_CMT_MAGNIFY "Forstrrelse" END STRINGTABLE diff --git a/reactos/subsystems/win32/csrss/win32csr/lang/no-NO.rc b/reactos/subsystems/win32/csrss/win32csr/lang/no-NO.rc new file mode 100644 index 00000000000..a0ba9c5a5f4 --- /dev/null +++ b/reactos/subsystems/win32/csrss/win32csr/lang/no-NO.rc @@ -0,0 +1,47 @@ +LANGUAGE LANG_NORWEGIAN, SUBLANG_NEUTRAL + +IDD_END_NOW DIALOGEX DISCARDABLE 0, 0, 200, 95 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avslutt program - " +FONT 8, "MS Shell Dlg" +BEGIN + LTEXT "Avslutt Program... Vennligst vent",IDC_STATIC,7,7,186,11 + CONTROL "Progress",IDC_PROGRESS,"msctls_progress32",WS_BORDER, + 7,20,186,13 + LTEXT "Hvis du velger avslutte programmet yeblikkelig, vil du miste alt data som ikke er lagret. For avslutte programmet n, Trykk p Avslutt n.", + IDC_STATIC,7,40,186,26 + DEFPUSHBUTTON "&Avslutt n",IDC_END_NOW,150,71,43,17 +END + +IDD_NOT_RESPONDING DIALOGEX DISCARDABLE 0, 0, 192, 122 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Avslutt program - " +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Avbryt",IDCANCEL,142,98,43,17 + PUSHBUTTON "&Avslutt n",IDC_END_NOW,78,98,43,17 + LTEXT "Programmet svarer ikke",IDC_STATIC,7,7,178,8 + LTEXT "For returnere til ReactOS for sjekke statusen p programmet, trykk p avbryt", + IDC_STATIC,7,26,178,16 + LTEXT "Hvis du velger avslutte programmet yeblikkelig, vil du miste alt data som ikke er lagret. For avslutte programmet n, Trykk p Avslutt n", + IDC_STATIC,7,53,178,26 +END +STRINGTABLE +BEGIN + IDS_EDIT "Rediger" + IDS_MARK "Merk" + IDS_COPY "Kopier\tEnter" + IDS_PASTE "Lim inn" + IDS_SELECTALL "Velg alt" + IDS_SCROLL "Rull" + IDS_FIND "Finn..." + IDS_DEFAULTS "Standard" + IDS_PROPERTIES "Egenskaper" + IDS_SCROLLHERE "Rull her" + IDS_SCROLLTOP "Rull til toppen" + IDS_SCROLLBOTTOM "Rull knapp" + IDS_SCROLLPAGE_UP "Side opp" + IDS_SCROLLPAGE_DOWN "Side ned" + IDS_SCROLLUP "Rull opp" + IDS_SCROLLDOWN "Rull ned" +END From 1a5e7629d5c7d912cc5fa057620b36b7efd502bd Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Wed, 13 Aug 2008 20:12:04 +0000 Subject: [PATCH 290/304] ... YES... NEVER COMMIT when you are awake WAAAY too long. svn path=/trunk/; revision=35313 --- reactos/base/applications/network/ipconfig/lang/no-NO.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/base/applications/network/ipconfig/lang/no-NO.rc b/reactos/base/applications/network/ipconfig/lang/no-NO.rc index a1d7947bc17..df361e608b9 100644 --- a/reactos/base/applications/network/ipconfig/lang/no-NO.rc +++ b/reactos/base/applications/network/ipconfig/lang/no-NO.rc @@ -45,7 +45,7 @@ BEGIN /showclassid Viser alle klasse IDene for DHCP som er tillatt for kortet.\n \ /setclassid Endrer klasse-IDene for DHCP.\n \ \n \ - Standardverdien er bare vise IP-addressen, nettverksmasken og + Standardverdien er bare vise IP-addressen, nettverksmasken og\n \ standard gatewayen for hver kort knyttet til TCP/IP.\n \ \n \ For Release og Renew, hvis ingen kortnavn er angitt, vil IP addressen\n \ From cd6ac84cfe3b92d747563b226fd5792d815dbd18 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 20:12:24 +0000 Subject: [PATCH 291/304] - Apply the same Mm sync hacks in NtYieldExecution as is done in KiSwapThread svn path=/trunk/; revision=35314 --- reactos/ntoskrnl/ke/thrdschd.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/reactos/ntoskrnl/ke/thrdschd.c b/reactos/ntoskrnl/ke/thrdschd.c index f50199160f8..ad70de338f6 100644 --- a/reactos/ntoskrnl/ke/thrdschd.c +++ b/reactos/ntoskrnl/ke/thrdschd.c @@ -719,6 +719,15 @@ NtYieldExecution(VOID) /* Sanity check */ ASSERT(OldIrql <= DISPATCH_LEVEL); + /* REACTOS Mm Hack of Doom */ + MiSyncThreadProcessViews(PsGetCurrentProcess(), + ((PETHREAD)NextThread)->ThreadsProcess, + sizeof(EPROCESS)); + MiSyncThreadProcessViews(PsGetCurrentProcess(), + (PVOID)((PETHREAD)NextThread)->Tcb.StackLimit, + NextThread->LargeStack ? + KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); + /* Swap to new thread */ KiSwapContext(Thread, NextThread); Status = STATUS_SUCCESS; @@ -735,5 +744,3 @@ NtYieldExecution(VOID) KeLowerIrql(OldIrql); return Status; } - - From 6c373a935c54a1129abb00f234b7ff80d02595a7 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Wed, 13 Aug 2008 20:30:22 +0000 Subject: [PATCH 292/304] - Remove INIT_FUNCTION from exported functions svn path=/trunk/; revision=35315 --- reactos/ntoskrnl/ke/config.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/reactos/ntoskrnl/ke/config.c b/reactos/ntoskrnl/ke/config.c index 67f374f3d06..01807226548 100644 --- a/reactos/ntoskrnl/ke/config.c +++ b/reactos/ntoskrnl/ke/config.c @@ -19,7 +19,6 @@ */ PCONFIGURATION_COMPONENT_DATA NTAPI -INIT_FUNCTION KeFindConfigurationEntry(IN PCONFIGURATION_COMPONENT_DATA Child, IN CONFIGURATION_CLASS Class, IN CONFIGURATION_TYPE Type, @@ -38,7 +37,6 @@ KeFindConfigurationEntry(IN PCONFIGURATION_COMPONENT_DATA Child, */ PCONFIGURATION_COMPONENT_DATA NTAPI -INIT_FUNCTION KeFindConfigurationNextEntry(IN PCONFIGURATION_COMPONENT_DATA Child, IN CONFIGURATION_CLASS Class, IN CONFIGURATION_TYPE Type, @@ -123,4 +121,3 @@ KeFindConfigurationNextEntry(IN PCONFIGURATION_COMPONENT_DATA Child, /* If we got here, nothign was found */ return NULL; } - From feccdafeb8c3bb93d62fef5991e5e73a4881fb75 Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Wed, 13 Aug 2008 20:41:10 +0000 Subject: [PATCH 293/304] Revert part of my last commit. I will investigate in it when I had some sleep svn path=/trunk/; revision=35316 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 8 ++--- reactos/dll/win32/shell32/lang/cs-CZ.rc | 8 ++--- reactos/dll/win32/shell32/lang/el-GR.rc | 8 ++--- reactos/dll/win32/shell32/lang/en-GB.rc | 4 +-- reactos/dll/win32/shell32/lang/es-ES.rc | 11 +++---- reactos/dll/win32/shell32/lang/fi-FI.rc | 8 ++--- reactos/dll/win32/shell32/lang/fr-FR.rc | 8 ++--- reactos/dll/win32/shell32/lang/hu-HU.rc | 8 ++--- reactos/dll/win32/shell32/lang/it-IT.rc | 8 ++--- reactos/dll/win32/shell32/lang/ja-JP.rc | 8 ++--- reactos/dll/win32/shell32/lang/no-NO.rc | 8 ++--- reactos/dll/win32/shell32/lang/pl-PL.rc | 41 ++++++++++++------------- reactos/dll/win32/shell32/lang/pt-BR.rc | 8 ++--- reactos/dll/win32/shell32/lang/sk-SK.rc | 8 ++--- reactos/dll/win32/shell32/lang/tr-TR.rc | 8 ++--- reactos/dll/win32/shell32/lang/uk-UA.rc | 8 ++--- reactos/dll/win32/shell32/lang/zh-CN.rc | 8 ++--- 17 files changed, 83 insertions(+), 85 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index e0536e4eecd..04559a3bcce 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -622,10 +622,10 @@ BEGIN IDS_SELECT "" IDS_OPEN "" IDS_CREATELINK " &" - IDS_COPY "&" - IDS_DELETE "&" - IDS_PROPERTIES "&" - IDS_CUT "&" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ." diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index b155829b62a..3025f566797 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -621,10 +621,10 @@ BEGIN IDS_SELECT "Vybrat" IDS_OPEN "Otevt" IDS_CREATELINK "Vytvoit zstupc&e" - IDS_COPY "&Koprovat" - IDS_DELETE "O&dstranit" - IDS_PROPERTIES "&Vlastnosti" - IDS_CUT "Vyj&mout" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nelze vytvoit novou sloku, protoe pstup byl odepen." diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 51237188c4e..02de93e08f5 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "" IDS_OPEN "" IDS_CREATELINK " &" - IDS_COPY "&" - IDS_DELETE "&" - IDS_PROPERTIES "&" - IDS_CUT "&" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ." diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 8faffd08e49..43fbdd065d0 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" - IDS_COPY "&Copy" + IDS_COPY "Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" - IDS_CUT "C&ut" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index 8bba7b15655..b189d7368b8 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -2,7 +2,6 @@ * Copyright 1998 Juergen Schmied * Copyright 2003,2004 Jos Manuel Ferrer Ortiz * Actualizado Javier Remacha 2008 - * ACtualizado Victor Martinez 2008 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -622,11 +621,11 @@ BEGIN IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" IDS_CREATELINK "C&rear acceso directo" - IDS_COPY "&Copiar" - IDS_DELETE "&Eliminar" - IDS_PROPERTIES "&Propiedades" - IDS_CUT "C&ortar" - IDS_RESTORE "Restaurar" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "No se puede crear nueva carpeta: Permiso denegado." IDS_CREATEFOLDER_CAPTION "Error durante la creacin de una nueva carpeta" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 33c0b24eee5..79d4b67ad55 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "Valitse" IDS_OPEN "Avaa" IDS_CREATELINK "Lu&o Linkki" - IDS_COPY "&Kopioi" - IDS_DELETE "&Poista" - IDS_PROPERTIES "&Ominaisuudet" - IDS_CUT "&Leikkaa" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Uutta kansiota ei voitu luoda: Oikeudet eivt riit." diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index ac7c1f99969..c1669c644a5 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -623,10 +623,10 @@ BEGIN IDS_SELECT "Slectionner" IDS_OPEN "Ouvrir" IDS_CREATELINK "Crer un &lien" - IDS_COPY "&Copier" - IDS_DELETE "&Supprimer" - IDS_PROPERTIES "&Proprits" - IDS_CUT "C&ouper" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossible de crer le nouveau dossier : permission refuse." diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 1b163980cd6..98c7b0478ae 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -622,10 +622,10 @@ BEGIN IDS_SELECT "Kivlaszt" IDS_OPEN "Megnyit" IDS_CREATELINK "Parancsikon ltrehozsa" - IDS_COPY "Msols" - IDS_DELETE "Trls" - IDS_PROPERTIES "Tulajdonsgok" - IDS_CUT "Kivgs" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nem hozhat ltre j mappa: Nincs hozz engedlyed." diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 57256e89de5..7ce075013de 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -620,10 +620,10 @@ BEGIN IDS_SELECT "Selezione" IDS_OPEN "Apri" IDS_CREATELINK "&Crea Collegamento" - IDS_COPY "&Copia" - IDS_DELETE "&Cancella" - IDS_PROPERTIES "&Propriet" - IDS_CUT "&Taglia" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossibile creare la cartella: Accesso negato." diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index db99c821323..cea66e1b418 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "I" IDS_OPEN "J" IDS_CREATELINK "V[gJbg̍쐬(&L)" - IDS_COPY "Rs[(&C)" - IDS_DELETE "폜(&D)" - IDS_PROPERTIES "vpeB(&P)" - IDS_CUT "؂(&U)" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "VtH_쐬ł܂ł: ANZX܂B" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index fcfd210aa3a..4957a925a9a 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -598,10 +598,10 @@ BEGIN IDS_SELECT "Velg" IDS_OPEN "pne" IDS_CREATELINK "&Opprett snarvei" - IDS_COPY "&Kopier" - IDS_DELETE "&Slett" - IDS_PROPERTIES "Egenska&per" - IDS_CUT "Klipp &ut" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet." diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index 568857d01d9..de7515ee26c 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -16,8 +16,7 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * - * ReactOS shell32 fork translation updated by Caemyr - - * - Olaf Siejka (Jan,Mar,Apr,Jul, Aug 2008) + * translation updated by Caemyr - Olaf Siejka (Jan,Mar,Apr,Jul 2008) * Use ReactOS forum PM or IRC to contact me * http://www.reactos.org * IRC: irc.freenode.net #reactos-pl; @@ -372,7 +371,7 @@ BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 LTEXT "Wybierz program, ktrego chcesz uy do otwarcia tego pliku:", -1, 44, 12, 211, 10 LTEXT "Plik: ", 14001, 44, 25, 188, 10 - GROUPBOX "&Programy", -1, 7, 42, 249, 187 + GROUPBOX "&Programs", -1, 7, 42, 249, 187 LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE AUTOCHECKBOX "&Zawsze uywaj danego programu do otwierania tego typu plikw", 14003, 20, 193, 225, 10 PUSHBUTTON "&Przegldaj", 14004, 198, 207, 50, 14 @@ -599,17 +598,17 @@ BEGIN IDS_SHV_COLUMN9 "Komentarz" IDS_SHV_COLUMN10 "Waciciel" IDS_SHV_COLUMN11 "Grupa" - IDS_SHV_COLUMN12 "Nazwa pliku" - IDS_SHV_COLUMN13 "Kategoria" - IDS_SHV_COLUMN_DELFROM "Lokalizacja oryginalna" + IDS_SHV_COLUMN12 "Filename" + IDS_SHV_COLUMN13 "Category" + IDS_SHV_COLUMN_DELFROM "Lokacja oryginalna" IDS_SHV_COLUMN_DELDATE "Data usunicia" - IDS_SHV_COLUMN_FONTTYPE "Czcionka" - IDS_SHV_COLUMN_WORKGROUP "Grupa Robocza" - IDS_SHV_NETWORKLOCATION "Lokalizacja Sieciowa" - IDS_SHV_COLUMN_DOCUMENTS "Dokumenty" - IDS_SHV_COLUMN_STATUS "Stan" - IDS_SHV_COLUMN_COMMENTS "Komentarze" - IDS_SHV_COLUMN_LOCATION "Lokalizacja" + IDS_SHV_COLUMN_FONTTYPE "Fonttype" + IDS_SHV_COLUMN_WORKGROUP "Workgroup" + IDS_SHV_NETWORKLOCATION "Network Location" + IDS_SHV_COLUMN_DOCUMENTS "Documents" + IDS_SHV_COLUMN_STATUS "Status" + IDS_SHV_COLUMN_COMMENTS "Comments" + IDS_SHV_COLUMN_LOCATION "Location" IDS_SHV_COLUMN_MODEL "Model" /* special folders */ @@ -626,11 +625,11 @@ BEGIN IDS_SELECT "Zaznacz" IDS_OPEN "Otwrz" IDS_CREATELINK "Utwrz &Skrt" - IDS_COPY "Kopiuj" - IDS_DELETE "Usu" - IDS_PROPERTIES "Waciwoci" - IDS_CUT "Wytnij" - IDS_RESTORE "Przywr" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" + IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nie mog utworzy nowego katalogu: Brak dostpu." IDS_CREATEFOLDER_CAPTION "Bd przy tworzeniu nowego katalogu." @@ -733,7 +732,7 @@ BEGIN IDS_PREVIEW_VERB "Podgld" IDS_FILE_FOLDER "%u Plikw, %u Katalogw" - IDS_PRINTERS "Drukarki" - IDS_FONTS "Czcionki" - IDS_INSTALLNEWFONT "Zainstaluj Now Czcionk..." + IDS_PRINTERS "Printers" + IDS_FONTS "Fonts" + IDS_INSTALLNEWFONT "Install New Font..." END diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index 3d72cb852f6..5d5d90f56cd 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -621,10 +621,10 @@ BEGIN IDS_SELECT "Selecionar" IDS_OPEN "Abrir" IDS_CREATELINK "Criar a&talho" - IDS_COPY "&Copiar" - IDS_DELETE "E&xcluir" - IDS_PROPERTIES "Propriedades" - IDS_CUT "C&ortar" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "No pode criar nova pasta: Permisso negada." diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index c06435af488..952b6560f20 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -625,10 +625,10 @@ BEGIN IDS_SELECT "Vybra" IDS_OPEN "Otvori" IDS_CREATELINK "Vytvori o&dkaz" - IDS_COPY "&Koprova" - IDS_DELETE "&Odstrni" - IDS_PROPERTIES "Vl&astnosti" - IDS_CUT "&Vystrihn" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nie je mon vytvori nov prieinok: Prstup zamietnut." diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index 6d59d4bdbab..ffdb21deb57 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -619,10 +619,10 @@ BEGIN IDS_SELECT "Se" IDS_OPEN "A" IDS_CREATELINK "Ksayol O&lutur" - IDS_COPY "K&opyala" - IDS_DELETE "&Sil" - IDS_PROPERTIES "&zellikler" - IDS_CUT "&Kes" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Yeni dizin oluturulamyor: Eriim engellendi." diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 7cd74b07568..16b73392063 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -620,10 +620,10 @@ BEGIN IDS_SELECT "&" IDS_OPEN "³&" IDS_CREATELINK " &" - IDS_COPY "&" - IDS_DELETE "&" - IDS_PROPERTIES "&" - IDS_CUT "&" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ³ ." diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 9e575d4d49b..1b8efdf8cb9 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -608,10 +608,10 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "ݷʽ(&L)" - IDS_COPY "(&C)" - IDS_DELETE "ɾ(&D)" - IDS_PROPERTIES "(&P)" - IDS_CUT "(&U)" + IDS_COPY "Copy" + IDS_DELETE "Delete" + IDS_PROPERTIES "Properties" + IDS_CUT "Cut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." From 76ff523af58cac833be171a08e15f10ffe6ec972 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Wed, 13 Aug 2008 20:44:20 +0000 Subject: [PATCH 294/304] Merge aicom-network-fixes up to 35306. svn path=/trunk/; revision=35317 --- reactos/boot/bootdata/txtsetup.sif | 4 +-- reactos/drivers/network/afd/afd/connect.c | 38 ++++++++++++++--------- reactos/drivers/network/afd/afd/listen.c | 10 ++++-- reactos/drivers/network/afd/afd/lock.c | 4 +++ reactos/drivers/network/afd/afd/main.c | 9 ++++-- reactos/drivers/network/afd/afd/read.c | 12 ++++--- reactos/drivers/network/afd/afd/tdi.c | 20 ++++-------- reactos/drivers/network/afd/afd/tdiconn.c | 17 +++++++--- reactos/drivers/network/afd/afd/write.c | 36 ++++++++++++++------- 9 files changed, 92 insertions(+), 58 deletions(-) diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index 1c1bcf39602..433a34313fd 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -49,8 +49,8 @@ Cabinet=reactos.cab [SetupData] DefaultPath = \ReactOS -OsLoadOptions = "/NOGUIBOOT /NODEBUG" -DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1" +OsLoadOptions = "/NOGUIBOOT /NODEBUG /DEBUGPORT=COM1 /KDSERIAL" +DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1 /KDSERIAL" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=SCREEN" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=BOCHS" diff --git a/reactos/drivers/network/afd/afd/connect.c b/reactos/drivers/network/afd/afd/connect.c index 9db0240de8c..77d9f0aa94a 100644 --- a/reactos/drivers/network/afd/afd/connect.c +++ b/reactos/drivers/network/afd/afd/connect.c @@ -33,26 +33,32 @@ NTSTATUS WarmSocketForConnection( PAFD_FCB FCB ) { } NTSTATUS MakeSocketIntoConnection( PAFD_FCB FCB ) { - NTSTATUS Status = STATUS_NO_MEMORY; + NTSTATUS Status; /* Allocate the receive area and start receiving */ FCB->Recv.Window = ExAllocatePool( NonPagedPool, FCB->Recv.Size ); + + if( !FCB->Recv.Window ) return STATUS_NO_MEMORY; + FCB->Send.Window = ExAllocatePool( NonPagedPool, FCB->Send.Size ); + if( !FCB->Send.Window ) { + ExFreePool( FCB->Recv.Window ); + return STATUS_NO_MEMORY; + } + FCB->State = SOCKET_STATE_CONNECTED; - if( FCB->Recv.Window ) { - Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest, - FCB->Connection.Object, - TDI_RECEIVE_NORMAL, - FCB->Recv.Window, - FCB->Recv.Size, - &FCB->ReceiveIrp.Iosb, - ReceiveComplete, - FCB ); - } + Status = TdiReceive( &FCB->ReceiveIrp.InFlightRequest, + FCB->Connection.Object, + TDI_RECEIVE_NORMAL, + FCB->Recv.Window, + FCB->Recv.Size, + &FCB->ReceiveIrp.Iosb, + ReceiveComplete, + FCB ); return Status; } @@ -102,8 +108,9 @@ static NTSTATUS NTAPI StreamSocketConnectComplete if( NT_SUCCESS(Status) ) { Status = MakeSocketIntoConnection( FCB ); - if( FCB->Send.Window && - !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) { + if( !NT_SUCCESS(Status) ) return Status; + + if( !IsListEmpty( &FCB->PendingIrpList[FUNCTION_SEND] ) ) { NextIrpEntry = RemoveHeadList(&FCB->PendingIrpList[FUNCTION_SEND]); NextIrp = CONTAINING_RECORD(NextIrpEntry, IRP, Tail.Overlay.ListEntry); @@ -158,7 +165,7 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, case SOCKET_STATE_CONNECTING: return LeaveIrpUntilLater( FCB, Irp, FUNCTION_CONNECT ); - case SOCKET_STATE_CREATED: { + case SOCKET_STATE_CREATED: FCB->LocalAddress = TaCopyTransportAddress( &ConnectReq->RemoteAddress ); @@ -182,7 +189,8 @@ AfdStreamSocketConnect(PDEVICE_OBJECT DeviceObject, PIRP Irp, } else return UnlockAndMaybeComplete ( FCB, STATUS_NO_MEMORY, Irp, 0, NULL ); - } /* Drop through to SOCKET_STATE_BOUND */ + + /* Drop through to SOCKET_STATE_BOUND */ case SOCKET_STATE_BOUND: FCB->RemoteAddress = diff --git a/reactos/drivers/network/afd/afd/listen.c b/reactos/drivers/network/afd/afd/listen.c index edf1e502868..63d4b359f30 100644 --- a/reactos/drivers/network/afd/afd/listen.c +++ b/reactos/drivers/network/afd/afd/listen.c @@ -142,6 +142,8 @@ static NTSTATUS NTAPI ListenComplete ListEntry ) ); } + if( FCB->ListenIrp.ConnectionCallInfo ) ExFreePool( FCB->ListenIrp.ConnectionCallInfo ); + if( FCB->ListenIrp.ConnectionReturnInfo ) ExFreePool( FCB->ListenIrp.ConnectionReturnInfo ); FCB->NeedsNewListen = TRUE; /* Trigger a select return if appropriate */ @@ -182,10 +184,12 @@ NTSTATUS AfdListenSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, Status = WarmSocketForConnection( FCB ); - FCB->State = SOCKET_STATE_LISTENING; - AFD_DbgPrint(MID_TRACE,("Status from warmsocket %x\n", Status)); + if( !NT_SUCCESS(Status) ) return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); + + FCB->State = SOCKET_STATE_LISTENING; + TdiBuildNullConnectionInfo ( &FCB->ListenIrp.ConnectionCallInfo, FCB->LocalAddress->Address[0].AddressType ); @@ -275,7 +279,7 @@ NTSTATUS AfdAccept( PDEVICE_OBJECT DeviceObject, PIRP Irp, &FCB->ListenIrp.Iosb, ListenComplete, FCB ); - } + } else return UnlockAndMaybeComplete( FCB, Status, Irp, 0, NULL ); FCB->NeedsNewListen = FALSE; } diff --git a/reactos/drivers/network/afd/afd/lock.c b/reactos/drivers/network/afd/afd/lock.c index 4036a9c9ee0..43f0633614c 100644 --- a/reactos/drivers/network/afd/afd/lock.c +++ b/reactos/drivers/network/afd/afd/lock.c @@ -112,14 +112,18 @@ VOID UnlockBuffers( PAFD_WSABUF Buf, UINT Count, BOOL Address ) { PAFD_MAPBUF Map = (PAFD_MAPBUF)(Buf + Count + Lock); UINT i; + if( !Buf ) return; + for( i = 0; i < Count + Lock; i++ ) { if( Map[i].Mdl ) { MmUnlockPages( Map[i].Mdl ); IoFreeMdl( Map[i].Mdl ); + Map[i].Mdl = NULL; } } ExFreePool( Buf ); + Buf = NULL; } /* Produce a kernel-land handle array with handles replaced by object diff --git a/reactos/drivers/network/afd/afd/main.c b/reactos/drivers/network/afd/afd/main.c index 51116743c7b..a689ce56098 100644 --- a/reactos/drivers/network/afd/afd/main.c +++ b/reactos/drivers/network/afd/afd/main.c @@ -114,9 +114,6 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, FCB->TdiDeviceName.MaximumLength = FCB->TdiDeviceName.Length; FCB->TdiDeviceName.Buffer = ExAllocatePool( NonPagedPool, FCB->TdiDeviceName.Length ); - RtlCopyMemory( FCB->TdiDeviceName.Buffer, - ConnectInfo->TransportName, - FCB->TdiDeviceName.Length ); if( !FCB->TdiDeviceName.Buffer ) { ExFreePool(FCB); @@ -126,6 +123,10 @@ AfdCreateSocket(PDEVICE_OBJECT DeviceObject, PIRP Irp, return STATUS_NO_MEMORY; } + RtlCopyMemory( FCB->TdiDeviceName.Buffer, + ConnectInfo->TransportName, + FCB->TdiDeviceName.Length ); + AFD_DbgPrint(MID_TRACE,("Success: %s %wZ\n", EaInfo->EaName, &FCB->TdiDeviceName)); } else { @@ -207,6 +208,8 @@ VOID DestroySocket( PAFD_FCB FCB ) { ExFreePool( FCB->AddressFrom ); if( FCB->LocalAddress ) ExFreePool( FCB->LocalAddress ); + if( FCB->RemoteAddress ) + ExFreePool( FCB->RemoteAddress ); ExFreePool(FCB->TdiDeviceName.Buffer); diff --git a/reactos/drivers/network/afd/afd/read.c b/reactos/drivers/network/afd/afd/read.c index e9efcb8708a..05f723ba9c2 100644 --- a/reactos/drivers/network/afd/afd/read.c +++ b/reactos/drivers/network/afd/afd/read.c @@ -574,14 +574,14 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, AFD_DbgPrint(MID_TRACE,("Recv flags %x\n", RecvReq->AfdFlags)); RecvReq->BufferArray = LockBuffers( RecvReq->BufferArray, - RecvReq->BufferCount, + RecvReq->BufferCount, RecvReq->Address, RecvReq->AddressLength, TRUE, TRUE ); if( !RecvReq->BufferArray ) { /* access violation in userspace */ - return UnlockAndMaybeComplete - ( FCB, STATUS_ACCESS_VIOLATION, Irp, 0, NULL ); + return UnlockAndMaybeComplete + ( FCB, STATUS_ACCESS_VIOLATION, Irp, 0, NULL ); } if( !IsListEmpty( &FCB->DatagramList ) ) { @@ -602,8 +602,10 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PollReeval( FCB->DeviceExt, FCB->FileObject ); + UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE ); + return UnlockAndMaybeComplete - ( FCB, Status, Irp, RecvReq->BufferArray[0].len, NULL ); + ( FCB, Status, Irp, Irp->IoStatus.Information, NULL ); } else { Status = SatisfyPacketRecvRequest ( FCB, Irp, DatagramRecv, @@ -616,6 +618,8 @@ AfdPacketSocketReadData(PDEVICE_OBJECT DeviceObject, PIRP Irp, PollReeval( FCB->DeviceExt, FCB->FileObject ); + UnlockBuffers( RecvReq->BufferArray, RecvReq->BufferCount, TRUE ); + return UnlockAndMaybeComplete ( FCB, Status, Irp, Irp->IoStatus.Information, NULL ); } diff --git a/reactos/drivers/network/afd/afd/tdi.c b/reactos/drivers/network/afd/afd/tdi.c index 925a07277fe..a80452d2284 100644 --- a/reactos/drivers/network/afd/afd/tdi.c +++ b/reactos/drivers/network/afd/afd/tdi.c @@ -864,17 +864,12 @@ NTSTATUS TdiSend MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); *Irp = NULL; - Status = STATUS_INSUFFICIENT_RESOURCES; + _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; - if( !NT_SUCCESS(Status) ) { - IoFreeIrp(*Irp); - *Irp = NULL; - return Status; - } - AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl)); TdiBuildSend(*Irp, /* I/O Request Packet */ @@ -952,17 +947,12 @@ NTSTATUS TdiReceive( AFD_DbgPrint(MIN_TRACE, ("probe and lock done\n")); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); *Irp = NULL; - Status = STATUS_INSUFFICIENT_RESOURCES; + _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); } _SEH_END; - if( !NT_SUCCESS(Status) ) { - IoFreeIrp(*Irp); - *Irp = NULL; - return Status; - } - AFD_DbgPrint(MID_TRACE,("AFD>>> Got an MDL: %x\n", Mdl)); TdiBuildReceive(*Irp, /* I/O Request Packet */ @@ -1055,6 +1045,7 @@ NTSTATUS TdiReceiveDatagram( MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); *Irp = NULL; _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); @@ -1153,6 +1144,7 @@ NTSTATUS TdiSendDatagram( MmProbeAndLockPages(Mdl, KernelMode, IoModifyAccess); } _SEH_HANDLE { AFD_DbgPrint(MIN_TRACE, ("MmProbeAndLockPages() failed.\n")); + IoFreeMdl(Mdl); IoFreeIrp(*Irp); *Irp = NULL; _SEH_YIELD(return STATUS_INSUFFICIENT_RESOURCES); diff --git a/reactos/drivers/network/afd/afd/tdiconn.c b/reactos/drivers/network/afd/afd/tdiconn.c index 97dafd491ab..392adc8c885 100644 --- a/reactos/drivers/network/afd/afd/tdiconn.c +++ b/reactos/drivers/network/afd/afd/tdiconn.c @@ -8,6 +8,7 @@ * 20040708 Created */ #include +#include #include "debug.h" #include "tdiconn.h" @@ -126,9 +127,11 @@ NTSTATUS TdiBuildNullConnectionInfo Status = TdiBuildNullConnectionInfoInPlace( ConnInfo, Type ); - if (!NT_SUCCESS(Status)) + if (!NT_SUCCESS(Status)) { ExFreePool( ConnInfo ); - else + *ConnectionInfo = NULL; + return Status; + } else *ConnectionInfo = ConnInfo; ConnInfo->RemoteAddress = (PTA_ADDRESS)&ConnInfo[1]; @@ -144,9 +147,13 @@ TdiBuildConnectionInfoInPlace PTRANSPORT_ADDRESS Address ) { NTSTATUS Status = STATUS_SUCCESS; - RtlCopyMemory( ConnectionInfo->RemoteAddress, - Address, - ConnectionInfo->RemoteAddressLength ); + _SEH_TRY { + RtlCopyMemory( ConnectionInfo->RemoteAddress, + Address, + ConnectionInfo->RemoteAddressLength ); + } _SEH_HANDLE { + Status = _SEH_GetExceptionCode(); + } _SEH_END; return Status; } diff --git a/reactos/drivers/network/afd/afd/write.c b/reactos/drivers/network/afd/afd/write.c index ac3dffde831..c2341e66faf 100644 --- a/reactos/drivers/network/afd/afd/write.c +++ b/reactos/drivers/network/afd/afd/write.c @@ -226,23 +226,30 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, NULL, NULL, FALSE, FALSE ); + if( !SendReq->BufferArray ) { + return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION, + Irp, 0, NULL ); + } + TdiBuildConnectionInfo( &TargetAddress, FCB->RemoteAddress ); - SocketCalloutEnter( FCB ); + if( TargetAddress ) { + SocketCalloutEnter( FCB ); - Status = TdiSendDatagram - ( &FCB->SendIrp.InFlightRequest, - FCB->AddressFile.Object, - SendReq->BufferArray[0].buf, - SendReq->BufferArray[0].len, - TargetAddress, - &FCB->SendIrp.Iosb, - PacketSocketSendComplete, - FCB ); + Status = TdiSendDatagram + ( &FCB->SendIrp.InFlightRequest, + FCB->AddressFile.Object, + SendReq->BufferArray[0].buf, + SendReq->BufferArray[0].len, + TargetAddress, + &FCB->SendIrp.Iosb, + PacketSocketSendComplete, + FCB ); - SocketCalloutLeave( FCB ); + SocketCalloutLeave( FCB ); - ExFreePool( TargetAddress ); + ExFreePool( TargetAddress ); + } else Status = STATUS_NO_MEMORY; if( Status == STATUS_PENDING ) Status = STATUS_SUCCESS; @@ -278,6 +285,11 @@ AfdConnectedSocketWriteData(PDEVICE_OBJECT DeviceObject, PIRP Irp, NULL, NULL, FALSE, FALSE ); + if( !SendReq->BufferArray ) { + return UnlockAndMaybeComplete( FCB, STATUS_ACCESS_VIOLATION, + Irp, 0, NULL ); + } + AFD_DbgPrint(MID_TRACE,("FCB->Send.BytesUsed = %d\n", FCB->Send.BytesUsed)); From 5f696de7d64c5dd94f8aed578a7ba22c545c2707 Mon Sep 17 00:00:00 2001 From: Art Yerkes Date: Wed, 13 Aug 2008 20:51:35 +0000 Subject: [PATCH 295/304] Revert unintended change. svn path=/trunk/; revision=35318 --- reactos/boot/bootdata/txtsetup.sif | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/reactos/boot/bootdata/txtsetup.sif b/reactos/boot/bootdata/txtsetup.sif index 433a34313fd..1c1bcf39602 100644 --- a/reactos/boot/bootdata/txtsetup.sif +++ b/reactos/boot/bootdata/txtsetup.sif @@ -49,8 +49,8 @@ Cabinet=reactos.cab [SetupData] DefaultPath = \ReactOS -OsLoadOptions = "/NOGUIBOOT /NODEBUG /DEBUGPORT=COM1 /KDSERIAL" -DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1 /KDSERIAL" +OsLoadOptions = "/NOGUIBOOT /NODEBUG" +DbgOsLoadOptions = "/NOGUIBOOT /DEBUGPORT=COM1" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=SCREEN" ;OsLoadOptions = "/NOGUIBOOT /DEBUGPORT=BOCHS" From 0ae6a9811cf77bbf9a060c3d62bc3fb6ad91f49a Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 13 Aug 2008 21:29:29 +0000 Subject: [PATCH 296/304] * Implement SHFormatDrive using fmifs api (format drive dialog in explorer) svn path=/trunk/; revision=35319 --- reactos/dll/win32/shell32/drive.c | 576 +++++++++++++++++++++++- reactos/dll/win32/shell32/lang/bg-BG.rc | 2 + reactos/dll/win32/shell32/lang/ca-ES.rc | 2 + reactos/dll/win32/shell32/lang/cs-CZ.rc | 2 + reactos/dll/win32/shell32/lang/da-DK.rc | 2 + reactos/dll/win32/shell32/lang/de-DE.rc | 4 +- reactos/dll/win32/shell32/lang/el-GR.rc | 2 + reactos/dll/win32/shell32/lang/en-GB.rc | 2 + reactos/dll/win32/shell32/lang/en-US.rc | 2 + reactos/dll/win32/shell32/lang/es-ES.rc | 2 + reactos/dll/win32/shell32/lang/fi-FI.rc | 2 + reactos/dll/win32/shell32/lang/fr-FR.rc | 2 + reactos/dll/win32/shell32/lang/hu-HU.rc | 2 + reactos/dll/win32/shell32/lang/it-IT.rc | 2 + reactos/dll/win32/shell32/lang/ja-JP.rc | 2 + reactos/dll/win32/shell32/lang/ko-KR.rc | 2 + reactos/dll/win32/shell32/lang/nl-NL.rc | 2 + reactos/dll/win32/shell32/lang/no-NO.rc | 2 + reactos/dll/win32/shell32/lang/pl-PL.rc | 2 + reactos/dll/win32/shell32/lang/pt-BR.rc | 2 + reactos/dll/win32/shell32/lang/pt-PT.rc | 2 + reactos/dll/win32/shell32/lang/ru-RU.rc | 2 + reactos/dll/win32/shell32/lang/sk-SK.rc | 2 + reactos/dll/win32/shell32/lang/sl-SI.rc | 2 + reactos/dll/win32/shell32/lang/sv-SE.rc | 2 + reactos/dll/win32/shell32/lang/tr-TR.rc | 2 + reactos/dll/win32/shell32/lang/uk-UA.rc | 2 + reactos/dll/win32/shell32/lang/zh-CN.rc | 2 + reactos/dll/win32/shell32/lang/zh-TW.rc | 3 + reactos/dll/win32/shell32/shellord.c | 7 - reactos/dll/win32/shell32/shresdef.h | 1 + 31 files changed, 618 insertions(+), 25 deletions(-) diff --git a/reactos/dll/win32/shell32/drive.c b/reactos/dll/win32/shell32/drive.c index 2956c270818..d99dc5db18e 100644 --- a/reactos/dll/win32/shell32/drive.c +++ b/reactos/dll/win32/shell32/drive.c @@ -26,29 +26,27 @@ #define ConvertUlongToLargeInteger RtlConvertUlongToLargeInteger #define LargeIntegerSubtract RtlLargeIntegerSubtract #define MAX_PROPERTY_SHEET_PAGE 32 + +#define WIN32_NO_STATUS +#define NTOS_MODE_USER +#define UNICODE +#define _UNICODE +#include +#include + #include #include #include -#include "winerror.h" -#include "windef.h" -#include "winbase.h" -#include "winreg.h" -#include "wingdi.h" -#include "winuser.h" -#include "commdlg.h" #include "wine/debug.h" - -#include "shellapi.h" -#include -#include "shlobj.h" -#include "shell32_main.h" #include "shresdef.h" -#include "undocshell.h" + +#include +#include #include #include #include -#include #include +#include WINE_DEFAULT_DEBUG_CHANNEL(shell); @@ -59,14 +57,64 @@ typedef enum HWPD_MAX = HWPD_LARGELIST } HWPAGE_DISPLAYMODE, *PHWPAGE_DISPLAYMODE; +typedef +BOOLEAN +(NTAPI *INITIALIZE_FMIFS)( + IN PVOID hinstDll, + IN DWORD dwReason, + IN PVOID reserved +); +typedef +BOOLEAN +(NTAPI *QUERY_AVAILABLEFSFORMAT)( + IN DWORD Index, + IN OUT PWCHAR FileSystem, + OUT UCHAR* Major, + OUT UCHAR* Minor, + OUT BOOLEAN* LastestVersion +); +typedef +BOOLEAN +(NTAPI *ENABLEVOLUMECOMPRESSION)( + IN PWCHAR DriveRoot, + IN USHORT Compression +); + +typedef +VOID +(NTAPI *FORMAT_EX)( + IN PWCHAR DriveRoot, + IN FMIFS_MEDIA_FLAG MediaFlag, + IN PWCHAR Format, + IN PWCHAR Label, + IN BOOLEAN QuickFormat, + IN ULONG ClusterSize, + IN PFMIFSCALLBACK Callback +); + + +typedef struct +{ + WCHAR Drive; + UINT Options; + HMODULE hLibrary; + QUERY_AVAILABLEFSFORMAT QueryAvailableFileSystemFormat; + FORMAT_EX FormatEx; + ENABLEVOLUMECOMPRESSION EnableVolumeCompression; + UINT Result; +}FORMAT_DRIVE_CONTEXT, *PFORMAT_DRIVE_CONTEXT; + HWND WINAPI DeviceCreateHardwarePageEx(HWND hWndParent, LPGUID lpGuids, UINT uNumberOfGuids, HWPAGE_DISPLAYMODE DisplayMode); +HPROPSHEETPAGE SH_CreatePropertySheetPage(LPSTR resname, DLGPROC dlgproc, LPARAM lParam, LPWSTR szTitle); + #define DRIVE_PROPERTY_PAGES (3) +extern HINSTANCE shell32_hInstance; static LARGE_INTEGER @@ -201,11 +249,11 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive) Result = GetFreeBytesShare(TotalNumberOfFreeBytes, TotalNumberOfBytes); /* set free bytes percentage */ - sprintfW(szResult, L"%02d%%", Result.QuadPart); + swprintf(szResult, L"%02d%%", Result.QuadPart); SendDlgItemMessageW(hwndDlg, 14007, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); /* store used share amount */ Result = LargeIntegerSubtract(ConvertUlongToLargeInteger(100), Result); - sprintfW(szResult, L"%02d%%", Result.QuadPart); + swprintf(szResult, L"%02d%%", Result.QuadPart); SendDlgItemMessageW(hwndDlg, 14005, WM_SETTEXT, (WPARAM)0, (LPARAM)szResult); if (LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, szBuffer, sizeof(szBuffer) / sizeof(WCHAR))) SendDlgItemMessageW(hwndDlg, 14002, WM_SETTEXT, (WPARAM)0, (LPARAM)szBuffer); @@ -214,7 +262,7 @@ InitializeGeneralDriveDialog(HWND hwndDlg, WCHAR * szDrive) } /* set drive description */ SendDlgItemMessageW(hwndDlg, 14010, WM_GETTEXT, (WPARAM)50, (LPARAM)szFormat); - sprintfW(szBuffer, szFormat, szDrive); + swprintf(szBuffer, szFormat, szDrive); SendDlgItemMessageW(hwndDlg, 14010, WM_SETTEXT, (WPARAM)NULL, (LPARAM)szBuffer); } @@ -493,3 +541,497 @@ SH_ShowDriveProperties(WCHAR * drive) else return TRUE; } + + + + + +VOID +InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szFs[100] = {0}; + WCHAR szDrive[3] = { L'C', '\\', 0 }; + INT iSelIndex; + ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; + DWORD ClusterSize; + LRESULT lIndex; + HWND hDlgCtrl; + + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + iSelIndex = SendMessage(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + return; + + if (SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFs) == CB_ERR) + return; + + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + szDrive[0] = pContext->Drive; + + if (!GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) + return; + + if (!wcsicmp(szFs, L"FAT16")) + { + if (TotalNumberOfBytes.QuadPart <= (16 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes.QuadPart <= (32 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes.QuadPart <= (64 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes.QuadPart <= (128 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes.QuadPart <= (256 * 1024 * 1024)) + ClusterSize = 4096; + else if (TotalNumberOfBytes.QuadPart <= (512 * 1024 * 1024)) + ClusterSize = 8192; + else if (TotalNumberOfBytes.QuadPart <= (1024 * 1024 * 1024)) + ClusterSize = 16384; + else if (TotalNumberOfBytes.QuadPart <= (2048LL * 1024LL * 1024LL)) + ClusterSize = 32768; + else if (TotalNumberOfBytes.QuadPart <= (4096LL * 1024LL * 1024LL)) + ClusterSize = 8192; + else + { + TRACE("FAT16 is not supported on hdd larger than 4G current %lu\n", TotalNumberOfBytes.QuadPart); + SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); + return; + } + + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + } + } + else if (!wcsicmp(szFs, L"FAT32")) + { + if (TotalNumberOfBytes.QuadPart <=(64 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes.QuadPart <= (128 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes.QuadPart <= (256 * 1024 * 1024)) + ClusterSize = 2048; + else if (TotalNumberOfBytes.QuadPart <= (8192LL * 1024LL * 1024LL)) + ClusterSize = 2048; + else if (TotalNumberOfBytes.QuadPart <= (16384LL * 1024LL * 1024LL)) + ClusterSize = 8192; + else if (TotalNumberOfBytes.QuadPart <= (32768LL * 1024LL * 1024LL)) + ClusterSize = 16384; + else + { + TRACE("FAT32 is not supported on hdd larger than 32G current %lu\n", TotalNumberOfBytes.QuadPart); + SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); + return; + } + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + } + } + else if (!wcsicmp(szFs, L"NTFS")) + { + if (TotalNumberOfBytes.QuadPart <=(512 * 1024 * 1024)) + ClusterSize = 512; + else if (TotalNumberOfBytes.QuadPart <= (1024 * 1024 * 1024)) + ClusterSize = 1024; + else if (TotalNumberOfBytes.QuadPart <= (2048LL * 1024LL * 1024LL)) + ClusterSize = 2048; + else + ClusterSize = 2048; + + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; + SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + } + ClusterSize = 512; + for (lIndex = 0; lIndex < 4; lIndex++) + { + TotalNumberOfBytes.QuadPart = ClusterSize; + if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); + if (lIndex != CB_ERR) + SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + } + ClusterSize *= 2; + } + } +} + +VOID +InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szText[120]; + WCHAR szDrive[3] = { L'C', '\\', 0 }; + WCHAR szFs[30] = {0}; + INT Length, TempLength; + DWORD dwSerial, dwMaxComp, dwFileSys; + ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; + DWORD dwIndex, dwDefault; + UCHAR uMinor, uMajor; + BOOLEAN Latest; + HWND hDlgCtrl; + + Length = GetWindowTextW(hwndDlg, szText, sizeof(szText)/sizeof(WCHAR)); + szDrive[0] = pContext->Drive; + if (GetVolumeInformationW(szDrive, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2, &dwSerial, &dwMaxComp, &dwFileSys, szFs, sizeof(szFs)/sizeof(WCHAR))) + { + szText[Length] = L' '; + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + TempLength = wcslen(&szText[Length+1]); + if (!TempLength) + { + /* load default volume label */ + TempLength = LoadStringW(shell32_hInstance, IDS_DRIVE_FIXED, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2); + } + else + { + /* set volume label */ + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + SendDlgItemMessageW(hwndDlg, 28679, WM_SETTEXT, 0, (LPARAM)&szText[Length+1]); + } + Length += TempLength + 1; + } + if (Length + 4 < (sizeof(szText)/sizeof(WCHAR))) + { + szText[Length] = L' '; + szText[Length+1] = L'('; + szText[Length+2] = szDrive[0]; + szText[Length+3] = L')'; + Length +=4; + } + + if (Length < (sizeof(szText)/sizeof(WCHAR))) + szText[Length] = L'\0'; + else + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + + /* set window text */ + SetWindowTextW(hwndDlg, szText); + + if (GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) + { + if (StrFormatByteSizeW(TotalNumberOfBytes.QuadPart, szText, sizeof(szText)/sizeof(WCHAR))) + { + /* add drive capacity */ + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + SendDlgItemMessageW(hwndDlg, 28673, LB_ADDSTRING, 0, (LPARAM)szText); + } + } + + if (pContext->Options & SHFMT_OPT_FULL) + { + /* check quick format button */ + SendDlgItemMessageW(hwndDlg, 28674, BM_SETCHECK, BST_CHECKED, 0); + } + + /* enumerate all available filesystems */ + dwIndex = 0; + dwDefault = 0; + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + while(pContext->QueryAvailableFileSystemFormat(dwIndex, szText, &uMajor, &uMinor, &Latest)) + { + szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; + if (!wcsicmp(szText, szFs)) + dwDefault = dwIndex; + + SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szText); + dwIndex++; + } + + if (!dwIndex) + { + ERR("no filesystem providers\n"); + return; + } + + /* select default filesys */ + SendMessageW(hDlgCtrl, CB_SETCURSEL, dwIndex, 0); + /* setup cluster combo */ + InsertDefaultClusterSizeForFs(hwndDlg, pContext); + /* hide progress control */ + ShowWindow(GetDlgItem(hwndDlg, 28678), SW_HIDE); +} + +HWND FormatDrvDialog = NULL; +BOOLEAN bSuccess = FALSE; + + +BOOLEAN +NTAPI +FormatExCB( + IN CALLBACKCOMMAND Command, + IN ULONG SubAction, + IN PVOID ActionInfo) +{ + PDWORD Progress; + PBOOLEAN pSuccess; + switch(Command) + { + case PROGRESS: + Progress = (PDWORD)ActionInfo; + SendDlgItemMessageW(FormatDrvDialog, 28678, PBM_SETPOS, (WPARAM)*Progress, 0); + break; + case DONE: + pSuccess = (PBOOLEAN)ActionInfo; + bSuccess = (*pSuccess); + break; + + case VOLUMEINUSE: + case INSUFFICIENTRIGHTS: + case FSNOTSUPPORTED: + case CLUSTERSIZETOOSMALL: + bSuccess = FALSE; + FIXME("\n"); + break; + + default: + break; + } + + return TRUE; +} + + + + + +VOID +FormatDrive(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) +{ + WCHAR szDrive[3] = { L'C', '\\', 0 }; + WCHAR szFileSys[40] = {0}; + WCHAR szLabel[40] = {0}; + INT iSelIndex; + UINT Length; + HWND hDlgCtrl; + BOOL QuickFormat; + DWORD ClusterSize; + + /* set volume path */ + szDrive[0] = pContext->Drive; + + /* get filesystem */ + hDlgCtrl = GetDlgItem(hwndDlg, 28677); + iSelIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + { + FIXME("\n"); + return; + } + Length = SendMessageW(hDlgCtrl, CB_GETLBTEXTLEN, iSelIndex, 0); + if (Length == CB_ERR || Length + 1> sizeof(szFileSys)/sizeof(WCHAR)) + { + FIXME("\n"); + return; + } + + /* retrieve the file system */ + SendMessageW(hDlgCtrl, CB_GETLBTEXT, iSelIndex, (LPARAM)szFileSys); + szFileSys[(sizeof(szFileSys)/sizeof(WCHAR))-1] = L'\0'; + + /* retrieve the volume label */ + hDlgCtrl = GetWindow(hwndDlg, 28679); + Length = SendMessageW(hDlgCtrl, WM_GETTEXTLENGTH, 0, 0); + if (Length + 1 > sizeof(szLabel)/sizeof(WCHAR)) + { + FIXME("\n"); + return; + } + SendMessageW(hDlgCtrl, WM_GETTEXT, sizeof(szLabel)/sizeof(WCHAR), (LPARAM)szLabel); + szLabel[(sizeof(szLabel)/sizeof(WCHAR))-1] = L'\0'; + + /* check for quickformat */ + if (SendDlgItemMessageW(hwndDlg, 28674, BM_GETCHECK, 0, 0) == BST_CHECKED) + QuickFormat = TRUE; + else + QuickFormat = FALSE; + + /* get the cluster size */ + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + iSelIndex = SendMessageW(hDlgCtrl, CB_GETCURSEL, 0, 0); + if (iSelIndex == CB_ERR) + { + FIXME("\n"); + return; + } + ClusterSize = SendMessageW(hDlgCtrl, CB_GETITEMDATA, iSelIndex, 0); + if (ClusterSize == CB_ERR) + { + FIXME("\n"); + return; + } + + hDlgCtrl = GetDlgItem(hwndDlg, 28680); + ShowWindow(hDlgCtrl, SW_SHOW); + SendMessageW(hDlgCtrl, PBM_SETRANGE, 0, MAKELPARAM(0, 100)); + bSuccess = FALSE; + + /* FIXME + * will cause display problems + * when performing more than one format + */ + FormatDrvDialog = hwndDlg; + + pContext->FormatEx(szDrive, + FMIFS_HARDDISK, /* FIXME */ + szFileSys, + szLabel, + QuickFormat, + ClusterSize, + FormatExCB); + + ShowWindow(hDlgCtrl, SW_HIDE); + FormatDrvDialog = NULL; + if (!bSuccess) + { + pContext->Result = SHFMT_ERROR; + } + else if (QuickFormat) + { + pContext->Result = SHFMT_OPT_FULL; + } + else + { + pContext->Result = FALSE; + } +} + + +BOOL +CALLBACK +FormatDriveDlg(HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) +{ + PFORMAT_DRIVE_CONTEXT pContext; + + switch(uMsg) + { + case WM_INITDIALOG: + InitializeFormatDriveDlg(hwndDlg, (PFORMAT_DRIVE_CONTEXT)lParam); + SetWindowLongPtr(hwndDlg, DWLP_USER, (LONG_PTR)lParam); + return TRUE; + case WM_COMMAND: + switch(LOWORD(wParam)) + { + case IDOK: + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + FormatDrive(hwndDlg, pContext); + break; + case IDCANCEL: + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + EndDialog(hwndDlg, pContext->Result); + break; + case 28677: // filesystem combo + if (HIWORD(wParam) == CBN_SELENDOK) + { + pContext = (PFORMAT_DRIVE_CONTEXT)GetWindowLongPtr(hwndDlg, DWLP_USER); + InsertDefaultClusterSizeForFs(hwndDlg, pContext); + } + break; + } + } + return FALSE; +} + + +BOOL +InitializeFmifsLibrary(PFORMAT_DRIVE_CONTEXT pContext) +{ + INITIALIZE_FMIFS InitFmifs; + BOOLEAN ret; + HMODULE hLibrary; + + hLibrary = pContext->hLibrary = LoadLibraryW(L"fmifs.dll"); + if(!hLibrary) + { + ERR("failed to load fmifs.dll\n"); + return FALSE; + } + + InitFmifs = (INITIALIZE_FMIFS)GetProcAddress(hLibrary, "InitializeFmIfs"); + if (!InitFmifs) + { + ERR("InitializeFmIfs export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + ret = (*InitFmifs)(NULL, DLL_PROCESS_ATTACH, NULL); + if (!ret) + { + ERR("fmifs failed to initialize\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->QueryAvailableFileSystemFormat = (QUERY_AVAILABLEFSFORMAT)GetProcAddress(hLibrary, "QueryAvailableFileSystemFormat"); + if (!pContext->QueryAvailableFileSystemFormat) + { + ERR("QueryAvailableFileSystemFormat export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->FormatEx = (FORMAT_EX) GetProcAddress(hLibrary, "FormatEx"); + if (!pContext->FormatEx) + { + ERR("FormatEx export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + pContext->EnableVolumeCompression = (ENABLEVOLUMECOMPRESSION) GetProcAddress(hLibrary, "EnableVolumeCompression"); + if (!pContext->FormatEx) + { + ERR("EnableVolumeCompression export is missing\n"); + FreeLibrary(hLibrary); + return FALSE; + } + + return TRUE; +} + +/************************************************************************* + * SHFormatDrive (SHELL32.@) + */ + +DWORD +WINAPI +SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options) +{ + FORMAT_DRIVE_CONTEXT Context; + int result; + + TRACE("%p, 0x%08x, 0x%08x, 0x%08x - stub\n", hwnd, drive, fmtID, options); + + if (!InitializeFmifsLibrary(&Context)) + { + ERR("failed to initialize fmifs\n"); + return SHFMT_NOFORMAT; + } + + Context.Drive = drive; + Context.Options = options; + + result = DialogBoxParamW(shell32_hInstance, L"FORMAT_DLG", hwnd, FormatDriveDlg, (LPARAM)&Context); + + FreeLibrary(Context.hLibrary); + return result; +} + + diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 04559a3bcce..66a6d758282 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -732,6 +732,8 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 00ad51d1f3b..19df4c6e730 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 3025f566797..0154a4333c0 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -730,4 +730,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index f5bbbbf8466..72859695f09 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index e17b7e6cdf7..2cf24a9c6a1 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -547,7 +547,7 @@ END FORMAT_DLG DIALOGEX 50, 50, 184, 218 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION -CAPTION "Formatieren" +CAPTION "Formatieren von" FONT 8, "MS Shell Dlg" BEGIN DEFPUSHBUTTON "&Starten", IDOK, 53, 198, 60, 14 @@ -731,4 +731,6 @@ BEGIN IDS_PRINTERS "Drucker" IDS_FONTS "Schriftarten" IDS_INSTALLNEWFONT "Neue Schriftart installieren..." + + IDS_DEFAULT_CLUSTER_SIZE "Standardgre" END diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 02de93e08f5..d08a7e35fd2 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 43fbdd065d0..7d58457488f 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index 4f8da838aea..94085ca31ff 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -730,4 +730,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index b189d7368b8..061003bcb35 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -731,4 +731,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 79d4b67ad55..43d4b14b282 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index c1669c644a5..c0d4dbd4f10 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -733,4 +733,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 98c7b0478ae..7e461cd6b25 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -732,4 +732,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 7ce075013de..3c670f08fe7 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -730,4 +730,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index cea66e1b418..7b4ae867026 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + END diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index f5f4e083911..5be19887818 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index cf8906d1b7e..01649ac2d46 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index 4957a925a9a..fe696946354 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -707,4 +707,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index de7515ee26c..38ab73e9bdc 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -735,4 +735,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index 5d5d90f56cd..4ae9493f992 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -731,4 +731,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index c9136ef224b..3b2ce37ba7c 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -731,4 +731,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 3c70d2b1f7b..5484bda8a42 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -727,4 +727,6 @@ BEGIN IDS_PRINTERS "" IDS_FONTS "" IDS_INSTALLNEWFONT " ..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 952b6560f20..8e269daaa8f 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -735,4 +735,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index c03e3bec75b..34669dde1d3 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 9ef056ee401..c7c8507b8cf 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index ffdb21deb57..1b7c826c39b 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -729,4 +729,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 16b73392063..54ce9eec179 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -730,4 +730,6 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 1b8efdf8cb9..f7b85c316f3 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -717,5 +717,7 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index 766c9d99d3d..b100a443a6f 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -730,6 +730,9 @@ BEGIN IDS_PRINTERS "Printers" IDS_FONTS "Fonts" IDS_INSTALLNEWFONT "Install New Font..." + + IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" + END #pragma code_page(default) diff --git a/reactos/dll/win32/shell32/shellord.c b/reactos/dll/win32/shell32/shellord.c index e43907f2b33..f3811d54c46 100644 --- a/reactos/dll/win32/shell32/shellord.c +++ b/reactos/dll/win32/shell32/shellord.c @@ -2057,13 +2057,6 @@ HRESULT WINAPI SHEmptyRecycleBinW(HWND hwnd, LPCWSTR pszRootPath, DWORD dwFlags) return S_OK; } -DWORD WINAPI SHFormatDrive(HWND hwnd, UINT drive, UINT fmtID, UINT options) -{ - FIXME("%p, 0x%08x, 0x%08x, 0x%08x - stub\n", hwnd, drive, fmtID, options); - - return SHFMT_NOFORMAT; -} - HRESULT WINAPI SHQueryRecycleBinA(LPCSTR pszRootPath, LPSHQUERYRBINFO pSHQueryRBInfo) { LPWSTR szRootPathW = NULL; diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index 25f4a3a4eba..41f346cdc46 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -160,6 +160,7 @@ #define IDS_SHV_COLUMN_MODEL 322 #define IDS_CUT 323 #define IDS_RESTORE 324 +#define IDS_DEFAULT_CLUSTER_SIZE 325 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 From 33938183afc7c0a1638814ba6747e6dc5dce95af Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Wed, 13 Aug 2008 22:56:02 +0000 Subject: [PATCH 297/304] * Fix multiple bugs in SHFormatDrive dialog * It now correcly calls FormatEx but the fmifs.dll is not yet in usable shape :( svn path=/trunk/; revision=35321 --- reactos/dll/win32/shell32/drive.c | 33 +++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/reactos/dll/win32/shell32/drive.c b/reactos/dll/win32/shell32/drive.c index d99dc5db18e..5bc61a30268 100644 --- a/reactos/dll/win32/shell32/drive.c +++ b/reactos/dll/win32/shell32/drive.c @@ -550,7 +550,7 @@ VOID InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) { WCHAR szFs[100] = {0}; - WCHAR szDrive[3] = { L'C', '\\', 0 }; + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; INT iSelIndex; ULARGE_INTEGER FreeBytesAvailableUser, TotalNumberOfBytes; DWORD ClusterSize; @@ -566,12 +566,13 @@ InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) return; szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; - szDrive[0] = pContext->Drive; + szDrive[0] = pContext->Drive + 'A'; if (!GetDiskFreeSpaceExW(szDrive, &FreeBytesAvailableUser, &TotalNumberOfBytes, NULL)) return; - if (!wcsicmp(szFs, L"FAT16")) + if (!wcsicmp(szFs, L"FAT16") || + !wcsicmp(szFs, L"FAT")) //REACTOS HACK { if (TotalNumberOfBytes.QuadPart <= (16 * 1024 * 1024)) ClusterSize = 2048; @@ -597,7 +598,6 @@ InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); return; } - if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) { hDlgCtrl = GetDlgItem(hwndDlg, 28680); @@ -606,6 +606,7 @@ InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); if (lIndex != CB_ERR) SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); } } else if (!wcsicmp(szFs, L"FAT32")) @@ -628,6 +629,7 @@ InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) SendMessageW(hDlgCtrl, CB_DELETESTRING, iSelIndex, 0); return; } + if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) { hDlgCtrl = GetDlgItem(hwndDlg, 28680); @@ -636,6 +638,7 @@ InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); if (lIndex != CB_ERR) SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); } } else if (!wcsicmp(szFs, L"NTFS")) @@ -649,14 +652,15 @@ InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) else ClusterSize = 2048; + hDlgCtrl = GetDlgItem(hwndDlg, 28680); if (LoadStringW(shell32_hInstance, IDS_DEFAULT_CLUSTER_SIZE, szFs, sizeof(szFs)/sizeof(WCHAR))) { - hDlgCtrl = GetDlgItem(hwndDlg, 28680); szFs[(sizeof(szFs)/sizeof(WCHAR))-1] = L'\0'; SendMessageW(hDlgCtrl, CB_RESETCONTENT, 0, 0); lIndex = SendMessageW(hDlgCtrl, CB_ADDSTRING, 0, (LPARAM)szFs); if (lIndex != CB_ERR) SendMessageW(hDlgCtrl, CB_SETITEMDATA, lIndex, (LPARAM)ClusterSize); + SendMessageW(hDlgCtrl, CB_SETCURSEL, 0, 0); } ClusterSize = 512; for (lIndex = 0; lIndex < 4; lIndex++) @@ -671,13 +675,19 @@ InsertDefaultClusterSizeForFs(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) ClusterSize *= 2; } } + else + { + FIXME("unknown fs\n"); + SendDlgItemMessageW(hwndDlg, 28680, CB_RESETCONTENT, iSelIndex, 0); + return; + } } VOID InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) { WCHAR szText[120]; - WCHAR szDrive[3] = { L'C', '\\', 0 }; + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; WCHAR szFs[30] = {0}; INT Length, TempLength; DWORD dwSerial, dwMaxComp, dwFileSys; @@ -688,7 +698,7 @@ InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) HWND hDlgCtrl; Length = GetWindowTextW(hwndDlg, szText, sizeof(szText)/sizeof(WCHAR)); - szDrive[0] = pContext->Drive; + szDrive[0] = pContext->Drive + L'A'; if (GetVolumeInformationW(szDrive, &szText[Length+1], (sizeof(szText)/sizeof(WCHAR))- Length - 2, &dwSerial, &dwMaxComp, &dwFileSys, szFs, sizeof(szFs)/sizeof(WCHAR))) { szText[Length] = L' '; @@ -707,6 +717,7 @@ InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) } Length += TempLength + 1; } + if (Length + 4 < (sizeof(szText)/sizeof(WCHAR))) { szText[Length] = L' '; @@ -730,7 +741,8 @@ InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) { /* add drive capacity */ szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; - SendDlgItemMessageW(hwndDlg, 28673, LB_ADDSTRING, 0, (LPARAM)szText); + SendDlgItemMessageW(hwndDlg, 28673, CB_ADDSTRING, 0, (LPARAM)szText); + SendDlgItemMessageW(hwndDlg, 28673, CB_SETCURSEL, 0, (LPARAM)0); } } @@ -744,6 +756,7 @@ InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) dwIndex = 0; dwDefault = 0; hDlgCtrl = GetDlgItem(hwndDlg, 28677); + while(pContext->QueryAvailableFileSystemFormat(dwIndex, szText, &uMajor, &uMinor, &Latest)) { szText[(sizeof(szText)/sizeof(WCHAR))-1] = L'\0'; @@ -761,7 +774,7 @@ InitializeFormatDriveDlg(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) } /* select default filesys */ - SendMessageW(hDlgCtrl, CB_SETCURSEL, dwIndex, 0); + SendMessageW(hDlgCtrl, CB_SETCURSEL, dwDefault, 0); /* setup cluster combo */ InsertDefaultClusterSizeForFs(hwndDlg, pContext); /* hide progress control */ @@ -814,7 +827,7 @@ FormatExCB( VOID FormatDrive(HWND hwndDlg, PFORMAT_DRIVE_CONTEXT pContext) { - WCHAR szDrive[3] = { L'C', '\\', 0 }; + WCHAR szDrive[4] = { L'C', ':', '\\', 0 }; WCHAR szFileSys[40] = {0}; WCHAR szLabel[40] = {0}; INT iSelIndex; From 19897c21e23a5280243d0ff7fc8c3bb803dcddb8 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 14 Aug 2008 08:41:59 +0000 Subject: [PATCH 298/304] * Implement administrative tools shell folder svn path=/trunk/; revision=35327 --- reactos/dll/win32/shell32/classes.c | 5 + reactos/dll/win32/shell32/lang/bg-BG.rc | 1 + reactos/dll/win32/shell32/lang/ca-ES.rc | 1 + reactos/dll/win32/shell32/lang/cs-CZ.rc | 1 + reactos/dll/win32/shell32/lang/da-DK.rc | 1 + reactos/dll/win32/shell32/lang/de-DE.rc | 1 + reactos/dll/win32/shell32/lang/el-GR.rc | 1 + reactos/dll/win32/shell32/lang/en-GB.rc | 1 + reactos/dll/win32/shell32/lang/en-US.rc | 1 + reactos/dll/win32/shell32/lang/es-ES.rc | 1 + reactos/dll/win32/shell32/lang/fi-FI.rc | 1 + reactos/dll/win32/shell32/lang/fr-FR.rc | 1 + reactos/dll/win32/shell32/lang/hu-HU.rc | 1 + reactos/dll/win32/shell32/lang/it-IT.rc | 1 + reactos/dll/win32/shell32/lang/ja-JP.rc | 1 + reactos/dll/win32/shell32/lang/ko-KR.rc | 1 + reactos/dll/win32/shell32/lang/nl-NL.rc | 1 + reactos/dll/win32/shell32/lang/no-NO.rc | 1 + reactos/dll/win32/shell32/lang/pl-PL.rc | 1 + reactos/dll/win32/shell32/lang/pt-BR.rc | 1 + reactos/dll/win32/shell32/lang/pt-PT.rc | 1 + reactos/dll/win32/shell32/lang/ru-RU.rc | 1 + reactos/dll/win32/shell32/lang/sk-SK.rc | 1 + reactos/dll/win32/shell32/lang/sl-SI.rc | 1 + reactos/dll/win32/shell32/lang/sv-SE.rc | 1 + reactos/dll/win32/shell32/lang/tr-TR.rc | 1 + reactos/dll/win32/shell32/lang/uk-UA.rc | 1 + reactos/dll/win32/shell32/lang/zh-CN.rc | 1 + reactos/dll/win32/shell32/lang/zh-TW.rc | 1 + reactos/dll/win32/shell32/pidl.c | 18 + reactos/dll/win32/shell32/pidl.h | 2 + reactos/dll/win32/shell32/regsvr.c | 20 +- reactos/dll/win32/shell32/shell32.rbuild | 1 + reactos/dll/win32/shell32/shell32_main.h | 1 + reactos/dll/win32/shell32/shellole.c | 1 + reactos/dll/win32/shell32/shfldr_admintools.c | 780 ++++++++++++++++++ reactos/dll/win32/shell32/shresdef.h | 2 + 37 files changed, 857 insertions(+), 1 deletion(-) create mode 100644 reactos/dll/win32/shell32/shfldr_admintools.c diff --git a/reactos/dll/win32/shell32/classes.c b/reactos/dll/win32/shell32/classes.c index 7d0332aa0f0..9b85d4efa2e 100644 --- a/reactos/dll/win32/shell32/classes.c +++ b/reactos/dll/win32/shell32/classes.c @@ -386,6 +386,11 @@ BOOL HCR_GetClassNameW(REFIID riid, LPWSTR szDest, DWORD len) if(LoadStringW(shell32_hInstance, IDS_CONTROLPANEL, szDest, buflen)) ret = TRUE; } + else if (IsEqualIID(riid, &CLSID_AdminFolderShortcut)) + { + if(LoadStringW(shell32_hInstance, IDS_ADMINISTRATIVETOOLS, szDest, buflen)) + ret = TRUE; + } } TRACE("-- %s\n", debugstr_w(szDest)); diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 66a6d758282..3345a8a63f9 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -613,6 +613,7 @@ BEGIN IDS_MYCOMPUTER " " IDS_RECYCLEBIN_FOLDER_NAME "" IDS_CONTROLPANEL " " + IDS_ADMINISTRATIVETOOLS "Administrative Tools" // context menus IDS_VIEW_LARGE "& " diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 19df4c6e730..832775a43c0 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 0154a4333c0..9a7ed02db61 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -612,6 +612,7 @@ BEGIN IDS_MYCOMPUTER "Tento pota" IDS_RECYCLEBIN_FOLDER_NAME "Ko" IDS_CONTROLPANEL "Ovldac panely" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Vedle sebe" diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index 72859695f09..c2fd211c356 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index 2cf24a9c6a1..9027cc248c2 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -613,6 +613,7 @@ BEGIN IDS_MYCOMPUTER "Arbeitsplatz" IDS_RECYCLEBIN_FOLDER_NAME "Papierkorb" IDS_CONTROLPANEL "Systemsteuerung" + IDS_ADMINISTRATIVETOOLS "Verwaltung" /* context menus */ IDS_VIEW_LARGE "&Groe Symbole" diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index d08a7e35fd2..c8e03be7d76 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER " " IDS_RECYCLEBIN_FOLDER_NAME " " IDS_CONTROLPANEL " " + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "& " diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 7d58457488f..6a68804f03d 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Recycle Bin" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index 94085ca31ff..7f8087edf90 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -611,6 +611,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index 061003bcb35..a2c1b86d3d8 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -612,6 +612,7 @@ BEGIN IDS_MYCOMPUTER "Mi PC" IDS_RECYCLEBIN_FOLDER_NAME "Papelera de reciclaje" IDS_CONTROLPANEL "Panel de control" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Iconos &grandes" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 43d4b14b282..1f9677c07af 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "Oma Tietokone" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Suuret Kuvakkeet" diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index c0d4dbd4f10..7c282cc32a2 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -614,6 +614,7 @@ BEGIN IDS_MYCOMPUTER "Poste de travail" IDS_RECYCLEBIN_FOLDER_NAME "Corbeille" IDS_CONTROLPANEL "Panneau de configuration" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Grandes icnes" diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 7e461cd6b25..72ceea503a7 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -613,6 +613,7 @@ BEGIN IDS_MYCOMPUTER "Szmtgp" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Nagy kpek" diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index 3c670f08fe7..aa6f62c945b 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -611,6 +611,7 @@ BEGIN IDS_MYCOMPUTER "Risorse del Computer" IDS_RECYCLEBIN_FOLDER_NAME "Cestino" IDS_CONTROLPANEL "Pannello di controllo" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Icone Grandi" diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index 7b4ae867026..7ec722b9ec7 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "}C Rs[^" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "傫ACR(&G)" diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index 5be19887818..cfcdde67acb 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 01649ac2d46..260be8d3ac9 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index fe696946354..0461f468880 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -589,6 +589,7 @@ BEGIN IDS_MYCOMPUTER "Min datamaskin" IDS_RECYCLEBIN_FOLDER_NAME "Papirkurv" IDS_CONTROLPANEL "Kontrollpanel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Store ikoner" diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index 38ab73e9bdc..d9a19d857da 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -616,6 +616,7 @@ BEGIN IDS_MYCOMPUTER "Mj komputer" IDS_RECYCLEBIN_FOLDER_NAME "Kosz" IDS_CONTROLPANEL "Panel Sterowania" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Due Ikony" diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index 4ae9493f992..c4d23bc4b8a 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -612,6 +612,7 @@ BEGIN IDS_MYCOMPUTER "Meu computador" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "cones &grandes" diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 3b2ce37ba7c..97c961207fd 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -612,6 +612,7 @@ BEGIN IDS_MYCOMPUTER "O Meu Computador" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "cones &grandes" diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index 5484bda8a42..b8ee36e5b5e 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -609,6 +609,7 @@ BEGIN IDS_MYCOMPUTER " " IDS_RECYCLEBIN_FOLDER_NAME "" IDS_CONTROLPANEL " " + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "& " diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 8e269daaa8f..0c9e77ba696 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -616,6 +616,7 @@ BEGIN IDS_MYCOMPUTER "Tento pota" IDS_RECYCLEBIN_FOLDER_NAME "K" IDS_CONTROLPANEL "Ovldac panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "&Vek ikony" diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index 34669dde1d3..e3bb38cc1f0 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index c7c8507b8cf..4fa86925d83 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index 1b7c826c39b..911e56d86c5 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -610,6 +610,7 @@ BEGIN IDS_MYCOMPUTER "Bilgisayarm" IDS_RECYCLEBIN_FOLDER_NAME "p" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "B&yk Simgeler" diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 54ce9eec179..389d3e1d9a6 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -611,6 +611,7 @@ BEGIN IDS_MYCOMPUTER "̳ '" IDS_RECYCLEBIN_FOLDER_NAME "" IDS_CONTROLPANEL " " + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "& " diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index f7b85c316f3..2f6ccddf09e 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -599,6 +599,7 @@ BEGIN IDS_MYCOMPUTER "ҵĵ" IDS_RECYCLEBIN_FOLDER_NAME "վ" IDS_CONTROLPANEL "" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "ͼ(&G)" diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index b100a443a6f..ef4b1b53d1b 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -611,6 +611,7 @@ BEGIN IDS_MYCOMPUTER "My Computer" IDS_RECYCLEBIN_FOLDER_NAME "Trash" IDS_CONTROLPANEL "Control Panel" + IDS_ADMINISTRATIVETOOLS "Administrative Tools" /* context menus */ IDS_VIEW_LARGE "Lar&ge Icons" diff --git a/reactos/dll/win32/shell32/pidl.c b/reactos/dll/win32/shell32/pidl.c index 1b44e614db9..452e85695e7 100644 --- a/reactos/dll/win32/shell32/pidl.c +++ b/reactos/dll/win32/shell32/pidl.c @@ -1402,6 +1402,12 @@ LPITEMIDLIST _ILCreateBitBucket(void) return _ILCreateGuid(PT_GUID, &CLSID_RecycleBin); } +LPITEMIDLIST _ILCreateAdminTools(void) +{ + TRACE("()\n"); + return _ILCreateGuid(PT_GUID, &CLSID_AdminFolderShortcut); +} + LPITEMIDLIST _ILCreateGuid(PIDLTYPE type, REFIID guid) { LPITEMIDLIST pidlOut; @@ -1657,6 +1663,18 @@ BOOL _ILIsBitBucket(LPCITEMIDLIST pidl) return FALSE; } +BOOL _ILIsAdminTools(LPCITEMIDLIST pidl) +{ + REFIID iid = _ILGetGUIDPointer(pidl); + + TRACE("(%p)\n",pidl); + + if (iid) + return IsEqualIID(iid, &CLSID_AdminFolderShortcut); + else + return FALSE; +} + BOOL _ILIsSpecialFolder (LPCITEMIDLIST pidl) { LPPIDLDATA lpPData = _ILGetDataPointer(pidl); diff --git a/reactos/dll/win32/shell32/pidl.h b/reactos/dll/win32/shell32/pidl.h index 858432e143c..eee285e16a5 100644 --- a/reactos/dll/win32/shell32/pidl.h +++ b/reactos/dll/win32/shell32/pidl.h @@ -236,6 +236,7 @@ BOOL _ILIsMyComputer (LPCITEMIDLIST pidl); BOOL _ILIsMyDocuments (LPCITEMIDLIST pidl); BOOL _ILIsControlPanel (LPCITEMIDLIST pidl); BOOL _ILIsBitBucket (LPCITEMIDLIST pidl); +BOOL _ILIsAdminTools (LPCITEMIDLIST pidl); BOOL _ILIsNetHood (LPCITEMIDLIST pidl); BOOL _ILIsDrive (LPCITEMIDLIST pidl); BOOL _ILIsFolder (LPCITEMIDLIST pidl); @@ -285,6 +286,7 @@ LPITEMIDLIST _ILCreateControlPanel (void); LPITEMIDLIST _ILCreatePrinters (void); LPITEMIDLIST _ILCreateNetwork (void); LPITEMIDLIST _ILCreateNetHood (void); +LPITEMIDLIST _ILCreateAdminTools (void); LPITEMIDLIST _ILCreateFont (void); LPITEMIDLIST _ILCreateBitBucket (void); LPITEMIDLIST _ILCreateDrive (LPCWSTR); diff --git a/reactos/dll/win32/shell32/regsvr.c b/reactos/dll/win32/shell32/regsvr.c index c0e98656849..c127059a5ec 100644 --- a/reactos/dll/win32/shell32/regsvr.c +++ b/reactos/dll/win32/shell32/regsvr.c @@ -646,6 +646,19 @@ static struct regsvr_coclass const coclass_list[] = { NULL, IDI_SHELL_FONTS_FOLDER }, + { &CLSID_AdminFolderShortcut, + "Administrative Tools", + IDS_ADMINISTRATIVETOOLS, + NULL, + "shell32.dll", + "Apartment", + SHELLFOLDER_ATTRIBUTES, + SFGAO_FOLDER, + 0, + NULL, + NULL, + IDI_SHELL_ADMINTOOLS //FIXME + }, { &CLSID_Shortcut, "Shortcut", 0, @@ -758,7 +771,7 @@ static const WCHAR wszFolderOptions[] = { 'F','o','l','d','e','r',' ','O','p','t static const WCHAR wszNethoodFolder[] = { 'N','e','t','h','o','o','d',' ','f','o','l','d','e','r',0}; static const WCHAR wszPrinters[] = { 'P','r','i','n','t','e','r','s',0 }; static const WCHAR wszFonts[] = { 'F','o','n','t','s',0 }; - +static const WCHAR wszAdminTools[] = { 'A','d','m','i','n','T','o','o','l','s',0 }; const GUID CLSID_FolderOptions = { 0x6DFD7C5C, 0x2451, 0x11d3, {0xa2,0x99,0x00,0xC0,0x4F,0x8e,0xf6,0xaf} }; static struct regsvr_namespace const namespace_extensions_list[] = { @@ -804,6 +817,11 @@ static struct regsvr_namespace const namespace_extensions_list[] = { wszControlPanel, wszPrinters }, + { + &CLSID_AdminFolderShortcut, + wszControlPanel, + wszAdminTools + }, { NULL } }; diff --git a/reactos/dll/win32/shell32/shell32.rbuild b/reactos/dll/win32/shell32/shell32.rbuild index b3de9c6068e..991848772af 100644 --- a/reactos/dll/win32/shell32/shell32.rbuild +++ b/reactos/dll/win32/shell32/shell32.rbuild @@ -57,6 +57,7 @@ shfldr_mycomp.c shfldr_mydocuments.c shfldr_printers.c + shfldr_admintools.c shlexec.c shlfileop.c shlfolder.c diff --git a/reactos/dll/win32/shell32/shell32_main.h b/reactos/dll/win32/shell32/shell32_main.h index 0ea0a394020..ec01b3b5a69 100644 --- a/reactos/dll/win32/shell32/shell32_main.h +++ b/reactos/dll/win32/shell32/shell32_main.h @@ -96,6 +96,7 @@ HRESULT WINAPI ISF_Printers_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOI HRESULT WINAPI ISF_MyDocuments_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI ISF_NetworkPlaces_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI ISF_Fonts_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); +HRESULT WINAPI ISF_AdminTools_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI IDropTargetHelper_Constructor (IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); HRESULT WINAPI IFileSystemBindData_Constructor(const WIN32_FIND_DATAW *pfd, LPBC *ppV); HRESULT WINAPI IControlPanel_Constructor(IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv); diff --git a/reactos/dll/win32/shell32/shellole.c b/reactos/dll/win32/shell32/shellole.c index 389de77f1a2..c4e7de7f977 100644 --- a/reactos/dll/win32/shell32/shellole.c +++ b/reactos/dll/win32/shell32/shellole.c @@ -78,6 +78,7 @@ static const struct { {&CLSID_NetworkPlaces, &ISF_NetworkPlaces_Constructor}, {&CLSID_FontsFolderShortcut, &ISF_Fonts_Constructor}, {&CLSID_Printers, &ISF_Printers_Constructor}, + {&CLSID_AdminFolderShortcut, &ISF_AdminTools_Constructor}, {&CLSID_RecycleBin, &RecycleBin_Constructor}, {&CLSID_OpenWith, &SHEOW_Constructor}, {&dummy1, &INewItem_Constructor}, diff --git a/reactos/dll/win32/shell32/shfldr_admintools.c b/reactos/dll/win32/shell32/shfldr_admintools.c new file mode 100644 index 00000000000..bc67dd2b020 --- /dev/null +++ b/reactos/dll/win32/shell32/shfldr_admintools.c @@ -0,0 +1,780 @@ +/* + * Virtual Admin Tools Folder + * + * Copyright 2008 Johannes Anderwald + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "config.h" +#include "wine/port.h" + +#include +#include +#include +#include + +#define COBJMACROS +#define NONAMELESSUNION +#define NONAMELESSSTRUCT + +#include "winerror.h" +#include "windef.h" +#include "winbase.h" +#include "winreg.h" +#include "wingdi.h" +#include "winuser.h" +#include "winspool.h" + +#include "ole2.h" +#include "shlguid.h" + +#include "enumidlist.h" +#include "pidl.h" +#include "undocshell.h" +#include "shell32_main.h" +#include "shresdef.h" +#include "shlwapi.h" +#include "shellfolder.h" +#include "wine/debug.h" +#include "debughlp.h" +#include "shfldr.h" +#include "shresdef.h" + +WINE_DEFAULT_DEBUG_CHANNEL (shell); + +/* List shortcuts of + * CSIDL_COMMON_ADMINTOOLS + * Note: CSIDL_ADMINTOOLS is ignored, tested with Window XP SP3+ + */ + +/*********************************************************************** + * AdminTools folder implementation + */ + +typedef struct { + IShellFolder2Vtbl *lpVtbl; + IPersistFolder2Vtbl *lpVtblPersistFolder2; + + LONG ref; + + CLSID *pclsid; + + LPITEMIDLIST pidlRoot; /* absolute pidl */ + LPWSTR szTarget; + + int dwAttributes; /* attributes returned by GetAttributesOf FIXME: use it */ +} IGenericSFImpl; + +static const shvheader AdminToolsSFHeader[] = { + {IDS_SHV_COLUMN8, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 15}, + {IDS_SHV_COLUMN2, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN3, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10}, + {IDS_SHV_COLUMN4, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 12} +}; + +#define COLUMN_NAME 0 +#define COLUMN_SIZE 1 +#define COLUMN_TYPE 2 +#define COLUMN_DATE 3 + +#define AdminToolsHELLVIEWCOLUMNS (4) + + +#define _IPersistFolder2_Offset ((int)(&(((IGenericSFImpl*)0)->lpVtblPersistFolder2))) +#define _ICOM_THIS_From_IPersistFolder2(class, name) class* This = (class*)(((char*)name)-_IPersistFolder2_Offset); + +#define _IUnknown_(This) (IShellFolder*)&(This->lpVtbl) +#define _IShellFolder_(This) (IShellFolder*)&(This->lpVtbl) + +#define _IPersist_(This) (IPersist*)&(This->lpVtblPersistFolder2) +#define _IPersistFolder_(This) (IPersistFolder*)&(This->lpVtblPersistFolder2) +#define _IPersistFolder2_(This) (IPersistFolder2*)&(This->lpVtblPersistFolder2) + +/************************************************************************** + * ISF_AdminTools_fnQueryInterface + * + * NOTE does not support IPersist/IPersistFolder + */ +static HRESULT WINAPI ISF_AdminTools_fnQueryInterface( + IShellFolder2 * iface, REFIID riid, LPVOID * ppvObj) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(%s,%p)\n", This, shdebugstr_guid (riid), ppvObj); + + *ppvObj = NULL; + + if (IsEqualIID (riid, &IID_IUnknown) || + IsEqualIID (riid, &IID_IShellFolder) || + IsEqualIID (riid, &IID_IShellFolder2)) + { + *ppvObj = This; + } + + else if (IsEqualIID (riid, &IID_IPersist) || + IsEqualIID (riid, &IID_IPersistFolder) || + IsEqualIID (riid, &IID_IPersistFolder2)) + { + *ppvObj = _IPersistFolder2_ (This); + } + + if (*ppvObj) + { + IUnknown_AddRef ((IUnknown *) (*ppvObj)); + TRACE ("-- Interface: (%p)->(%p)\n", ppvObj, *ppvObj); + return S_OK; + } + TRACE ("-- Interface: E_NOINTERFACE\n"); + return E_NOINTERFACE; +} + +static ULONG WINAPI ISF_AdminTools_fnAddRef (IShellFolder2 * iface) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + ULONG refCount = InterlockedIncrement(&This->ref); + + TRACE ("(%p)->(count=%lu)\n", This, refCount - 1); + + return refCount; +} + +static ULONG WINAPI ISF_AdminTools_fnRelease (IShellFolder2 * iface) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + ULONG refCount = InterlockedDecrement(&This->ref); + + TRACE ("(%p)->(count=%lu)\n", This, refCount + 1); + + if (!refCount) + { + TRACE ("-- destroying IShellFolder(%p)\n", This); + if (This->pidlRoot) + SHFree (This->pidlRoot); + LocalFree ((HLOCAL) This); + return 0; + } + return refCount; +} + +/************************************************************************** + * ISF_AdminTools_fnParseDisplayName + * + */ +static HRESULT WINAPI ISF_AdminTools_fnParseDisplayName (IShellFolder2 * iface, + HWND hwndOwner, LPBC pbc, LPOLESTR lpszDisplayName, + DWORD * pchEaten, LPITEMIDLIST * ppidl, DWORD * pdwAttributes) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE("(%p)->(HWND=%p,%p,%p=%s,%p,pidl=%p,%p)\n", + This, hwndOwner, pbc, lpszDisplayName, debugstr_w(lpszDisplayName), + pchEaten, ppidl, pdwAttributes); + + *ppidl = 0; + if (pchEaten) + *pchEaten = 0; + + return E_NOTIMPL; +} + +/************************************************************************** + * CreateAdminToolsEnumList() + */ +static BOOL CreateAdminToolsEnumList(IEnumIDList *list, IGenericSFImpl *This, DWORD dwFlags) +{ + TRACE("(%p)->(flags=0x%08x)\n", list, dwFlags); + /* enumerate the elements in %windir%\desktop */ + return CreateFolderEnumList(list, This->szTarget, dwFlags); +} + +/************************************************************************** + * ISF_AdminTools_fnEnumObjects + */ +static HRESULT WINAPI ISF_AdminTools_fnEnumObjects (IShellFolder2 * iface, + HWND hwndOwner, DWORD dwFlags, LPENUMIDLIST * ppEnumIDList) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(HWND=%p flags=0x%08lx pplist=%p)\n", + This, hwndOwner, dwFlags, ppEnumIDList); + + if(!ppEnumIDList) return E_OUTOFMEMORY; + *ppEnumIDList = IEnumIDList_Constructor(); + if (*ppEnumIDList) + CreateAdminToolsEnumList(*ppEnumIDList, This, dwFlags); + + TRACE ("-- (%p)->(new ID List: %p)\n", This, *ppEnumIDList); + + return (*ppEnumIDList) ? S_OK : E_OUTOFMEMORY; +} + +/************************************************************************** + * ISF_AdminTools_fnBindToObject + */ +static HRESULT WINAPI ISF_AdminTools_fnBindToObject (IShellFolder2 * iface, + LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(pidl=%p,%p,%s,%p)\n", This, + pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + + return SHELL32_BindToChild (This->pidlRoot, NULL, pidl, riid, ppvOut); +} + +/************************************************************************** + * ISF_AdminTools_fnBindToStorage + */ +static HRESULT WINAPI ISF_AdminTools_fnBindToStorage (IShellFolder2 * iface, + LPCITEMIDLIST pidl, LPBC pbcReserved, REFIID riid, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)->(pidl=%p,%p,%s,%p) stub\n", + This, pidl, pbcReserved, shdebugstr_guid (riid), ppvOut); + + *ppvOut = NULL; + return E_NOTIMPL; +} + +/************************************************************************** + * ISF_AdminTools_fnCompareIDs + */ +static HRESULT WINAPI ISF_AdminTools_fnCompareIDs (IShellFolder2 * iface, + LPARAM lParam, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + int nReturn; + + TRACE ("(%p)->(0x%08lx,pidl1=%p,pidl2=%p)\n", This, lParam, pidl1, pidl2); + nReturn = SHELL32_CompareIDs (_IShellFolder_ (This), lParam, pidl1, pidl2); + TRACE ("-- %i\n", nReturn); + return nReturn; +} + +/************************************************************************** + * ISF_AdminTools_fnCreateViewObject + */ +static HRESULT WINAPI ISF_AdminTools_fnCreateViewObject (IShellFolder2 * iface, + HWND hwndOwner, REFIID riid, LPVOID * ppvOut) +{ + + LPSHELLVIEW pShellView; + HRESULT hr = E_INVALIDARG; + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + TRACE ("(%p)->(hwnd=%p,%s,%p)\n", This, + hwndOwner, shdebugstr_guid (riid), ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IDropTarget)) + { + WARN ("IDropTarget not implemented\n"); + hr = E_NOTIMPL; + } + else if (IsEqualIID (riid, &IID_IShellView)) + { + pShellView = IShellView_Constructor ((IShellFolder *) iface); + if (pShellView) + { + hr = IShellView_QueryInterface (pShellView, riid, ppvOut); + IShellView_Release (pShellView); + } + } + TRACE ("-- (%p)->(interface=%p)\n", This, ppvOut); + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetAttributesOf + */ +static HRESULT WINAPI ISF_AdminTools_fnGetAttributesOf (IShellFolder2 * iface, + UINT cidl, LPCITEMIDLIST * apidl, DWORD * rgfInOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + HRESULT hr = S_OK; + static const DWORD dwAdminToolsAttributes = + SFGAO_STORAGE | SFGAO_HASPROPSHEET | SFGAO_STORAGEANCESTOR | + SFGAO_FILESYSANCESTOR | SFGAO_FOLDER | SFGAO_FILESYSTEM; + + TRACE ("(%p)->(cidl=%d apidl=%p mask=%p (0x%08x))\n", + This, cidl, apidl, rgfInOut, rgfInOut ? *rgfInOut : 0); + + if (!rgfInOut) + return E_INVALIDARG; + if (cidl && !apidl) + return E_INVALIDARG; + + if (*rgfInOut == 0) + *rgfInOut = ~0; + + if(cidl == 0) { + *rgfInOut &= dwAdminToolsAttributes; + } else { + while (cidl > 0 && *apidl) { + pdump (*apidl); + if (_ILIsAdminTools(*apidl)) { + *rgfInOut &= dwAdminToolsAttributes; + } else { + SHELL32_GetItemAttributes (_IShellFolder_ (This), *apidl, rgfInOut); + } + apidl++; + cidl--; + } + } + /* make sure SFGAO_VALIDATE is cleared, some apps depend on that */ + *rgfInOut &= ~SFGAO_VALIDATE; + + TRACE ("-- result=0x%08x\n", *rgfInOut); + + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetUIObjectOf + * + * PARAMETERS + * HWND hwndOwner, //[in ] Parent window for any output + * UINT cidl, //[in ] array size + * LPCITEMIDLIST* apidl, //[in ] simple pidl array + * REFIID riid, //[in ] Requested Interface + * UINT* prgfInOut, //[ ] reserved + * LPVOID* ppvObject) //[out] Resulting Interface + * + */ +static HRESULT WINAPI ISF_AdminTools_fnGetUIObjectOf (IShellFolder2 * iface, + HWND hwndOwner, UINT cidl, LPCITEMIDLIST * apidl, + REFIID riid, UINT * prgfInOut, LPVOID * ppvOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + LPITEMIDLIST pidl; + IUnknown *pObj = NULL; + HRESULT hr = E_INVALIDARG; + + TRACE ("(%p)->(%p,%u,apidl=%p,%s,%p,%p)\n", + This, hwndOwner, cidl, apidl, shdebugstr_guid (riid), prgfInOut, ppvOut); + + if (!ppvOut) + return hr; + + *ppvOut = NULL; + + if (IsEqualIID (riid, &IID_IContextMenu)) + { + hr = CDefFolderMenu_Create2(This->pidlRoot, hwndOwner, cidl, apidl, (IShellFolder*)iface, NULL, 0, NULL, (IContextMenu**)&pObj); + } + else if (IsEqualIID (riid, &IID_IDataObject) && (cidl >= 1)) + { + pObj = (LPUNKNOWN) IDataObject_Constructor( hwndOwner, + This->pidlRoot, apidl, cidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconA) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconA_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IExtractIconW) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + pObj = (LPUNKNOWN) IExtractIconW_Constructor (pidl); + SHFree (pidl); + hr = S_OK; + } + else if (IsEqualIID (riid, &IID_IDropTarget) && (cidl >= 1)) + { + hr = IShellFolder_QueryInterface (iface, + &IID_IDropTarget, (LPVOID *) & pObj); + } + else if ((IsEqualIID(riid,&IID_IShellLinkW) || + IsEqualIID(riid,&IID_IShellLinkA)) && (cidl == 1)) + { + pidl = ILCombine (This->pidlRoot, apidl[0]); + hr = IShellLink_ConstructFromFile(NULL, riid, pidl, (LPVOID*)&pObj); + SHFree (pidl); + } + else + hr = E_NOINTERFACE; + + if (SUCCEEDED(hr) && !pObj) + hr = E_OUTOFMEMORY; + + *ppvOut = pObj; + TRACE ("(%p)->hr=0x%08x\n", This, hr); + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnGetDisplayNameOf + * + */ +static HRESULT WINAPI ISF_AdminTools_fnGetDisplayNameOf (IShellFolder2 * iface, + LPCITEMIDLIST pidl, DWORD dwFlags, LPSTRRET strRet) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + HRESULT hr = S_OK; + LPWSTR pszPath; + + TRACE ("(%p)->(pidl=%p,0x%08x,%p)\n", This, pidl, dwFlags, strRet); + pdump (pidl); + + if (!strRet) + return E_INVALIDARG; + + pszPath = CoTaskMemAlloc((MAX_PATH +1) * sizeof(WCHAR)); + if (!pszPath) + return E_OUTOFMEMORY; + + ZeroMemory(pszPath, (MAX_PATH +1) * sizeof(WCHAR)); + + if (_ILIsAdminTools (pidl)) + { + if ((GET_SHGDN_RELATION (dwFlags) == SHGDN_NORMAL) && + (GET_SHGDN_FOR (dwFlags) & SHGDN_FORPARSING)) + strcpyW(pszPath, This->szTarget); + else + HCR_GetClassNameW(&CLSID_AdminFolderShortcut, pszPath, MAX_PATH); + } + else if (_ILIsPidlSimple(pidl)) + { + _ILSimpleGetTextW(pidl, pszPath, MAX_PATH); + } + else if (_ILIsSpecialFolder(pidl)) + { + BOOL bSimplePidl = _ILIsPidlSimple(pidl); + + if (bSimplePidl) + { + _ILSimpleGetTextW(pidl, pszPath, MAX_PATH); + } + else + { + FIXME("special pidl\n"); + } + + if ((dwFlags & SHGDN_FORPARSING) && !bSimplePidl) + { + int len = 0; + + strcpyW(pszPath, This->szTarget); + PathAddBackslashW(pszPath); + len = lstrlenW(pszPath); + + if (!SUCCEEDED(SHELL32_GetDisplayNameOfChild(iface, pidl, dwFlags | SHGDN_INFOLDER, pszPath + len, MAX_PATH + 1 - len))) + { + CoTaskMemFree(pszPath); + return E_OUTOFMEMORY; + } + + } + } + + if (SUCCEEDED(hr)) + { + strRet->uType = STRRET_WSTR; + strRet->u.pOleStr = pszPath; + } + else + CoTaskMemFree(pszPath); + + TRACE ("-- (%p)->(%s,0x%08x)\n", This, debugstr_w(strRet->u.pOleStr), hr); + return hr; +} + +/************************************************************************** + * ISF_AdminTools_fnSetNameOf + * Changes the name of a file object or subfolder, possibly changing its item + * identifier in the process. + * + * PARAMETERS + * HWND hwndOwner, //[in ] Owner window for output + * LPCITEMIDLIST pidl, //[in ] simple pidl of item to change + * LPCOLESTR lpszName, //[in ] the items new display name + * DWORD dwFlags, //[in ] SHGNO formatting flags + * LPITEMIDLIST* ppidlOut) //[out] simple pidl returned + */ +static HRESULT WINAPI ISF_AdminTools_fnSetNameOf (IShellFolder2 * iface, + HWND hwndOwner, LPCITEMIDLIST pidl, /* simple pidl */ + LPCOLESTR lpName, DWORD dwFlags, LPITEMIDLIST * pPidlOut) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)->(%p,pidl=%p,%s,%lu,%p)\n", This, hwndOwner, pidl, + debugstr_w (lpName), dwFlags, pPidlOut); + + return E_FAIL; +} + +static HRESULT WINAPI ISF_AdminTools_fnGetDefaultSearchGUID(IShellFolder2 *iface, + GUID * pguid) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_AdminTools_fnEnumSearches (IShellFolder2 *iface, + IEnumExtraSearch ** ppenum) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p)\n", This); + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_AdminTools_fnGetDefaultColumn (IShellFolder2 * iface, + DWORD dwRes, ULONG * pSort, ULONG * pDisplay) +{ + if (pSort) + *pSort = 0; + if (pDisplay) + *pDisplay = 0; + + return S_OK; +} +static HRESULT WINAPI ISF_AdminTools_fnGetDefaultColumnState ( + IShellFolder2 * iface, UINT iColumn, DWORD * pcsFlags) +{ + if (!pcsFlags || iColumn >= AdminToolsHELLVIEWCOLUMNS) + return E_INVALIDARG; + *pcsFlags = AdminToolsSFHeader[iColumn].pcsFlags; + return S_OK; + +} + +static HRESULT WINAPI ISF_AdminTools_fnGetDetailsEx (IShellFolder2 * iface, + LPCITEMIDLIST pidl, const SHCOLUMNID * pscid, VARIANT * pv) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p): stub\n", This); + + return E_NOTIMPL; +} + +static HRESULT WINAPI ISF_AdminTools_fnGetDetailsOf (IShellFolder2 * iface, + LPCITEMIDLIST pidl, UINT iColumn, SHELLDETAILS * psd) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + WCHAR buffer[MAX_PATH] = {0}; + HRESULT hr = E_FAIL; + + TRACE("(%p)->(%p %i %p): stub\n", This, pidl, iColumn, psd); + + if (iColumn >= AdminToolsHELLVIEWCOLUMNS) + return E_FAIL; + + psd->fmt = AdminToolsSFHeader[iColumn].fmt; + psd->cxChar = AdminToolsSFHeader[iColumn].cxChar; + if (pidl == NULL) + { + psd->str.uType = STRRET_WSTR; + if (LoadStringW(shell32_hInstance, AdminToolsSFHeader[iColumn].colnameid, buffer, MAX_PATH)) + hr = SHStrDupW(buffer, &psd->str.u.pOleStr); + + return hr; + } + + psd->str.uType = STRRET_CSTR; + switch (iColumn) + { + case COLUMN_NAME: + psd->str.uType = STRRET_WSTR; + hr = IShellFolder_GetDisplayNameOf(iface, pidl, + SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str); + break; + case COLUMN_SIZE: + _ILGetFileSize (pidl, psd->str.u.cStr, MAX_PATH); + break; + case COLUMN_TYPE: + _ILGetFileType (pidl, psd->str.u.cStr, MAX_PATH); + break; + case COLUMN_DATE: + _ILGetFileDate (pidl, psd->str.u.cStr, MAX_PATH); + break; + } + + return hr; +} + +static HRESULT WINAPI ISF_AdminTools_fnMapColumnToSCID ( + IShellFolder2 * iface, UINT column, SHCOLUMNID * pscid) +{ + IGenericSFImpl *This = (IGenericSFImpl *)iface; + FIXME ("(%p): stub\n", This); + return E_NOTIMPL; +} + +static IShellFolder2Vtbl vt_ShellFolder2 = +{ + ISF_AdminTools_fnQueryInterface, + ISF_AdminTools_fnAddRef, + ISF_AdminTools_fnRelease, + ISF_AdminTools_fnParseDisplayName, + ISF_AdminTools_fnEnumObjects, + ISF_AdminTools_fnBindToObject, + ISF_AdminTools_fnBindToStorage, + ISF_AdminTools_fnCompareIDs, + ISF_AdminTools_fnCreateViewObject, + ISF_AdminTools_fnGetAttributesOf, + ISF_AdminTools_fnGetUIObjectOf, + ISF_AdminTools_fnGetDisplayNameOf, + ISF_AdminTools_fnSetNameOf, + /* ShellFolder2 */ + ISF_AdminTools_fnGetDefaultSearchGUID, + ISF_AdminTools_fnEnumSearches, + ISF_AdminTools_fnGetDefaultColumn, + ISF_AdminTools_fnGetDefaultColumnState, + ISF_AdminTools_fnGetDetailsEx, + ISF_AdminTools_fnGetDetailsOf, + ISF_AdminTools_fnMapColumnToSCID +}; + +/************************************************************************ + * IPF_AdminTools_QueryInterface + */ +static HRESULT WINAPI IPF_AdminTools_QueryInterface ( + IPersistFolder2 * iface, REFIID iid, LPVOID * ppvObj) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)\n", This); + + return IUnknown_QueryInterface (_IUnknown_ (This), iid, ppvObj); +} + +/************************************************************************ + * IPF_AdminTools_AddRef + */ +static ULONG WINAPI IPF_AdminTools_AddRef (IPersistFolder2 * iface) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(count=%lu)\n", This, This->ref); + + return IUnknown_AddRef (_IUnknown_ (This)); +} + +/************************************************************************ + * IPF_AdminTools_Release + */ +static ULONG WINAPI IPF_AdminTools_Release (IPersistFolder2 * iface) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(count=%lu)\n", This, This->ref); + + return IUnknown_Release (_IUnknown_ (This)); +} + +/************************************************************************ + * IPF_AdminTools_GetClassID + */ +static HRESULT WINAPI IPF_AdminTools_GetClassID ( + IPersistFolder2 * iface, CLSID * lpClassId) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)\n", This); + + memcpy(lpClassId, &CLSID_AdminFolderShortcut, sizeof(CLSID)); + + return S_OK; +} + +/************************************************************************ + * IPF_AdminTools_Initialize + * + */ +static HRESULT WINAPI IPF_AdminTools_Initialize ( + IPersistFolder2 * iface, LPCITEMIDLIST pidl) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + FIXME ("(%p)->(%p): stub\n", This, pidl); + return E_NOTIMPL; +} + +/************************************************************************** + * IPF_AdminTools_fnGetCurFolder + */ +static HRESULT WINAPI IPF_AdminTools_GetCurFolder ( + IPersistFolder2 * iface, LPITEMIDLIST * pidl) +{ + _ICOM_THIS_From_IPersistFolder2 (IGenericSFImpl, iface); + + TRACE ("(%p)->(%p)\n", This, pidl); + + *pidl = ILClone (This->pidlRoot); + return S_OK; +} + +static IPersistFolder2Vtbl vt_PersistFolder2 = +{ + IPF_AdminTools_QueryInterface, + IPF_AdminTools_AddRef, + IPF_AdminTools_Release, + IPF_AdminTools_GetClassID, + IPF_AdminTools_Initialize, + IPF_AdminTools_GetCurFolder +}; + +/************************************************************************** + * ISF_AdminTools_Constructor + */ +HRESULT WINAPI ISF_AdminTools_Constructor ( + IUnknown * pUnkOuter, REFIID riid, LPVOID * ppv) +{ + IGenericSFImpl *sf; + HRESULT hr; + + TRACE ("unkOut=%p %s\n", pUnkOuter, shdebugstr_guid (riid)); + + if (pUnkOuter) + return CLASS_E_NOAGGREGATION; + + sf = HeapAlloc( GetProcessHeap(), 0, sizeof(*sf) ); + if (!sf) + return E_OUTOFMEMORY; + + sf->szTarget = HeapAlloc( GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR) ); + if (!sf->szTarget) + { + HeapFree(GetProcessHeap(), 0, sf); + return E_OUTOFMEMORY; + } + if (!SHGetSpecialFolderPathW(NULL, sf->szTarget, CSIDL_COMMON_ADMINTOOLS, FALSE)) + { + HeapFree(GetProcessHeap(), 0, sf->szTarget); + HeapFree(GetProcessHeap(), 0, sf); + } + + sf->ref = 1; + sf->lpVtbl = &vt_ShellFolder2; + sf->lpVtblPersistFolder2 = &vt_PersistFolder2; + sf->pidlRoot = _ILCreateAdminTools(); /* my qualified pidl */ + + hr = IUnknown_QueryInterface( _IUnknown_(sf), riid, ppv ); + IUnknown_Release( _IUnknown_(sf) ); + + TRACE ("--(%p)\n", *ppv); + return hr; +} diff --git a/reactos/dll/win32/shell32/shresdef.h b/reactos/dll/win32/shell32/shresdef.h index 41f346cdc46..3a06fe0abcd 100644 --- a/reactos/dll/win32/shell32/shresdef.h +++ b/reactos/dll/win32/shell32/shresdef.h @@ -161,6 +161,7 @@ #define IDS_CUT 323 #define IDS_RESTORE 324 #define IDS_DEFAULT_CLUSTER_SIZE 325 +#define IDS_ADMINISTRATIVETOOLS 326 /* Note: this string is referenced from the registry */ #define IDS_RECYCLEBIN_FOLDER_NAME 8964 @@ -236,6 +237,7 @@ #define IDI_SHELL_CONFIRM_DELETE 161 #define IDI_SHELL_MY_DOCUMENTS 235 #define IDI_SHELL_CONTROL_PANEL1 330 +#define IDI_SHELL_ADMINTOOLS 328 /* AVI resources, windows shell32 has 14 of them: 150-152 and 160-170 FIXME: Need to add them, but for now just let them use the same: searching.avi From 7b82780771f21e8317b347e9e93e8386914e59ff Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 14 Aug 2008 08:52:34 +0000 Subject: [PATCH 299/304] * Fix the build :) svn path=/trunk/; revision=35328 --- reactos/include/psdk/shlguid.h | 1 + 1 file changed, 1 insertion(+) diff --git a/reactos/include/psdk/shlguid.h b/reactos/include/psdk/shlguid.h index 55cf01b36d7..49060f374dc 100644 --- a/reactos/include/psdk/shlguid.h +++ b/reactos/include/psdk/shlguid.h @@ -117,6 +117,7 @@ DEFINE_GUID(CLSID_Printers, 0x2227A280, 0x3AEA, 0x1069, 0xA2, 0xDE, 0x08, 0x00, DEFINE_GUID(CLSID_MyDocuments, 0x450d8fba, 0xad25, 0x11d0, 0x98, 0xa8, 0x08, 0x00, 0x36, 0x1b, 0x11, 0x03); DEFINE_GUID(CLSID_FolderShortcut, 0x0AFACED1, 0xE828, 0x11D1, 0x91, 0x87, 0xB5, 0x32, 0xF1, 0xE9, 0x57, 0x5D); DEFINE_GUID(CLSID_FontsFolderShortcut, 0xD20EA4E1, 0x3957, 0x11D2, 0xA4, 0x0B, 0x0C, 0x50, 0x20, 0x52, 0x41,0x52); +DEFINE_GUID(CLSID_AdminFolderShortcut, 0xD20EA4E1, 0x3957, 0x11D2, 0xA4, 0x0B, 0x0C, 0x50, 0x20, 0x52, 0x41, 0x53); DEFINE_GUID(IID_IQueryAssociations, 0xc46ca590, 0x3c3f, 0x11d2, 0xbe, 0xe6, 0x00, 0x00, 0xf8, 0x05, 0xca, 0x57); DEFINE_GUID(CLSID_DragDropHelper, 0x4657278a, 0x411b, 0x11d2, 0x83, 0x9a, 0x00, 0xc0, 0x4f, 0xd9, 0x18, 0xd0); From f8857961fd8815f935bc7d1cc702300931f81072 Mon Sep 17 00:00:00 2001 From: Andrew Munger Date: Thu, 14 Aug 2008 09:28:06 +0000 Subject: [PATCH 300/304] Update the font installbase, this "fixes" the livecd. Tested bootcd, livecd, and make install. svn path=/trunk/; revision=35329 --- reactos/media/fonts/fonts.rbuild | 106 +++++++++++++++---------------- 1 file changed, 53 insertions(+), 53 deletions(-) diff --git a/reactos/media/fonts/fonts.rbuild b/reactos/media/fonts/fonts.rbuild index 534c142ce77..ccc9d2c7e0a 100644 --- a/reactos/media/fonts/fonts.rbuild +++ b/reactos/media/fonts/fonts.rbuild @@ -1,57 +1,57 @@ - DejaVuSans.ttf - DejaVuSans-Bold.ttf - DejaVuSans-BoldOblique.ttf - DejaVuSansCondensed.ttf - DejaVuSansCondensed-Bold.ttf - DejaVuSansCondensed-BoldOblique.ttf - DejaVuSansCondensed-Oblique.ttf - DejaVuSans-ExtraLight.ttf - DejaVuSansMono.ttf - DejaVuSansMono-Bold.ttf - DejaVuSansMono-BoldOblique.ttf - DejaVuSansMono-Oblique.ttf - DejaVuSans-Oblique.ttf - DejaVuSerif.ttf - DejaVuSerif-Bold.ttf - DejaVuSerif-BoldItalic.ttf - DejaVuSerifCondensed.ttf - DejaVuSerifCondensed-Bold.ttf - DejaVuSerifCondensed-BoldItalic.ttf - DejaVuSerifCondensed-Italic.ttf - DejaVuSerif-Italic.ttf - c0419bt_.ttf - c0582bt_.ttf - c0583bt_.ttf - c0611bt_.ttf - c0632bt_.ttf - c0633bt_.ttf - c0648bt_.ttf - c0649bt_.ttf - cour.ttf - courb.ttf - courbi.ttf - helb____.ttf - LiberationMono-Bold.ttf - LiberationMono-BoldItalic.ttf - LiberationMono-Italic.ttf - LiberationMono-Regular.ttf - LiberationSans-Bold.ttf - LiberationSans-BoldItalic.ttf - LiberationSans-Italic.ttf - LiberationSans-Regular.ttf - LiberationSerif-Bold.ttf - LiberationSerif-BoldItalic.ttf - LiberationSerif-Italic.ttf - LiberationSerif-Regular.ttf - Marlett.ttf - tahoma.ttf - tahomabd.ttf - timr____.ttf - UTB_____.ttf - UTBI____.ttf - UTI_____.ttf - UTRG____.ttf + DejaVuSans.ttf + DejaVuSans-Bold.ttf + DejaVuSans-BoldOblique.ttf + DejaVuSansCondensed.ttf + DejaVuSansCondensed-Bold.ttf + DejaVuSansCondensed-BoldOblique.ttf + DejaVuSansCondensed-Oblique.ttf + DejaVuSans-ExtraLight.ttf + DejaVuSansMono.ttf + DejaVuSansMono-Bold.ttf + DejaVuSansMono-BoldOblique.ttf + DejaVuSansMono-Oblique.ttf + DejaVuSans-Oblique.ttf + DejaVuSerif.ttf + DejaVuSerif-Bold.ttf + DejaVuSerif-BoldItalic.ttf + DejaVuSerifCondensed.ttf + DejaVuSerifCondensed-Bold.ttf + DejaVuSerifCondensed-BoldItalic.ttf + DejaVuSerifCondensed-Italic.ttf + DejaVuSerif-Italic.ttf + c0419bt_.ttf + c0582bt_.ttf + c0583bt_.ttf + c0611bt_.ttf + c0632bt_.ttf + c0633bt_.ttf + c0648bt_.ttf + c0649bt_.ttf + cour.ttf + courb.ttf + courbi.ttf + helb____.ttf + LiberationMono-Bold.ttf + LiberationMono-BoldItalic.ttf + LiberationMono-Italic.ttf + LiberationMono-Regular.ttf + LiberationSans-Bold.ttf + LiberationSans-BoldItalic.ttf + LiberationSans-Italic.ttf + LiberationSans-Regular.ttf + LiberationSerif-Bold.ttf + LiberationSerif-BoldItalic.ttf + LiberationSerif-Italic.ttf + LiberationSerif-Regular.ttf + Marlett.ttf + tahoma.ttf + tahomabd.ttf + timr____.ttf + UTB_____.ttf + UTBI____.ttf + UTI_____.ttf + UTRG____.ttf From 85e9dd424db3b832a421831c0a36049dd73fb429 Mon Sep 17 00:00:00 2001 From: Andrew Munger Date: Thu, 14 Aug 2008 09:29:49 +0000 Subject: [PATCH 301/304] Update the Fonts folder path. svn path=/trunk/; revision=35330 --- reactos/dll/win32/userenv/setup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/reactos/dll/win32/userenv/setup.c b/reactos/dll/win32/userenv/setup.c index 291063976cf..7397fd612aa 100644 --- a/reactos/dll/win32/userenv/setup.c +++ b/reactos/dll/win32/userenv/setup.c @@ -305,7 +305,7 @@ InitializeProfiles (VOID) /* Set 'Fonts' folder path */ GetWindowsDirectoryW(szBuffer, MAX_PATH); - wcscat(szBuffer, L"\\media\\fonts"); + wcscat(szBuffer, L"\\fonts"); dwLength = (wcslen(szBuffer) + 1) * sizeof(WCHAR); Error = RegSetValueExW(hKey, From 117369c011d90b6899b93f8a15e967be0449c9a5 Mon Sep 17 00:00:00 2001 From: Johannes Anderwald Date: Thu, 14 Aug 2008 10:33:20 +0000 Subject: [PATCH 302/304] * Implement Chkdsk dialog resources svn path=/trunk/; revision=35331 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/ca-ES.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/cs-CZ.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/da-DK.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/de-DE.rc | 15 +++++++++++++++ reactos/dll/win32/shell32/lang/el-GR.rc | 15 +++++++++++++++ reactos/dll/win32/shell32/lang/en-GB.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/en-US.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/es-ES.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/fi-FI.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/fr-FR.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/hu-HU.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/it-IT.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/ja-JP.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/ko-KR.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/nl-NL.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/no-NO.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/pl-PL.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/pt-BR.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/pt-PT.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/ru-RU.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/sk-SK.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/sl-SI.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/sv-SE.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/tr-TR.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/uk-UA.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/zh-CN.rc | 14 ++++++++++++++ reactos/dll/win32/shell32/lang/zh-TW.rc | 14 ++++++++++++++ 28 files changed, 394 insertions(+) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 3345a8a63f9..31c61e2c29a 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -566,6 +566,20 @@ BEGIN AUTOCHECKBOX "& ", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/ca-ES.rc b/reactos/dll/win32/shell32/lang/ca-ES.rc index 832775a43c0..7a93e48c92b 100644 --- a/reactos/dll/win32/shell32/lang/ca-ES.rc +++ b/reactos/dll/win32/shell32/lang/ca-ES.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index 9a7ed02db61..b0c36b2d93f 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -566,6 +566,20 @@ BEGIN AUTOCHECKBOX "&Aktivovat kompresi", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Zmnit ikonu" diff --git a/reactos/dll/win32/shell32/lang/da-DK.rc b/reactos/dll/win32/shell32/lang/da-DK.rc index c2fd211c356..fb665bdf8dc 100644 --- a/reactos/dll/win32/shell32/lang/da-DK.rc +++ b/reactos/dll/win32/shell32/lang/da-DK.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/de-DE.rc b/reactos/dll/win32/shell32/lang/de-DE.rc index 9027cc248c2..ae8fab4a46c 100644 --- a/reactos/dll/win32/shell32/lang/de-DE.rc +++ b/reactos/dll/win32/shell32/lang/de-DE.rc @@ -566,6 +566,21 @@ BEGIN AUTOCHECKBOX "&Komprimierung aktivieren", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "berprfen des Datentrgers" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "&Starten", IDOK, 53, 100, 60, 14 + GROUPBOX "Optionen fr die Datentrgerprfung", -1, 7, 6, 179, 50 + PUSHBUTTON "S&chlieen", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "&Dateisystemfehler automatisch korrigieren", 14000, 16, 15, 165, 10 + AUTOCHECKBOX "&Fehlerhafte Sektoren suchen/wiederherstellen", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 0, 7, 60, 179, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Anderes Symbol" diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index c8e03be7d76..8a2ae704e5e 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -564,6 +564,21 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index 6a68804f03d..c6bebcd4d98 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/en-US.rc b/reactos/dll/win32/shell32/lang/en-US.rc index 7f8087edf90..2b2cf1a4770 100644 --- a/reactos/dll/win32/shell32/lang/en-US.rc +++ b/reactos/dll/win32/shell32/lang/en-US.rc @@ -565,6 +565,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index a2c1b86d3d8..34548a1a8b6 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -566,6 +566,20 @@ BEGIN AUTOCHECKBOX "&Habilitar compresin", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Cambiar Icono" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index 1f9677c07af..b2888c7477a 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 7c282cc32a2..8207fe5327b 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -568,6 +568,20 @@ BEGIN AUTOCHECKBOX "Activer la compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Changer l'icne" diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 72ceea503a7..3f462237813 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -567,6 +567,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index aa6f62c945b..c29185d97f5 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -565,6 +565,20 @@ BEGIN AUTOCHECKBOX "Abilita la &Compressione", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Cambia icona" diff --git a/reactos/dll/win32/shell32/lang/ja-JP.rc b/reactos/dll/win32/shell32/lang/ja-JP.rc index 7ec722b9ec7..3aa95f8ef99 100644 --- a/reactos/dll/win32/shell32/lang/ja-JP.rc +++ b/reactos/dll/win32/shell32/lang/ja-JP.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/ko-KR.rc b/reactos/dll/win32/shell32/lang/ko-KR.rc index cfcdde67acb..eae30075385 100644 --- a/reactos/dll/win32/shell32/lang/ko-KR.rc +++ b/reactos/dll/win32/shell32/lang/ko-KR.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/nl-NL.rc b/reactos/dll/win32/shell32/lang/nl-NL.rc index 260be8d3ac9..9a3aef600af 100644 --- a/reactos/dll/win32/shell32/lang/nl-NL.rc +++ b/reactos/dll/win32/shell32/lang/nl-NL.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index 0461f468880..f19bbd7d7c2 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -543,6 +543,20 @@ BEGIN AUTOCHECKBOX "&Utfr komprimering", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Endre Ikon" diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index d9a19d857da..b9704cd4a58 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -570,6 +570,20 @@ BEGIN AUTOCHECKBOX "&Wcz kompresj", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Zmiana Ikony" diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index c4d23bc4b8a..cf833f01e9a 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -566,6 +566,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/pt-PT.rc b/reactos/dll/win32/shell32/lang/pt-PT.rc index 97c961207fd..cc6c78f9a42 100644 --- a/reactos/dll/win32/shell32/lang/pt-PT.rc +++ b/reactos/dll/win32/shell32/lang/pt-PT.rc @@ -566,6 +566,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/ru-RU.rc b/reactos/dll/win32/shell32/lang/ru-RU.rc index b8ee36e5b5e..5da6844743f 100644 --- a/reactos/dll/win32/shell32/lang/ru-RU.rc +++ b/reactos/dll/win32/shell32/lang/ru-RU.rc @@ -563,6 +563,20 @@ BEGIN AUTOCHECKBOX "& ", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 0c9e77ba696..094c025bcaf 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -570,6 +570,20 @@ BEGIN AUTOCHECKBOX "Z&apn kompresiu", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Zmena ikony" diff --git a/reactos/dll/win32/shell32/lang/sl-SI.rc b/reactos/dll/win32/shell32/lang/sl-SI.rc index e3bb38cc1f0..9ce5ceb6723 100644 --- a/reactos/dll/win32/shell32/lang/sl-SI.rc +++ b/reactos/dll/win32/shell32/lang/sl-SI.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/sv-SE.rc b/reactos/dll/win32/shell32/lang/sv-SE.rc index 4fa86925d83..b5edf7351f2 100644 --- a/reactos/dll/win32/shell32/lang/sv-SE.rc +++ b/reactos/dll/win32/shell32/lang/sv-SE.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index 911e56d86c5..e8651af44f9 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -564,6 +564,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 389d3e1d9a6..3881d1bd68b 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -565,6 +565,20 @@ BEGIN AUTOCHECKBOX "& ", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION " " diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index 2f6ccddf09e..c58b6ff269e 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -553,6 +553,20 @@ BEGIN AUTOCHECKBOX "ѹ(&E)", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "ͼ" diff --git a/reactos/dll/win32/shell32/lang/zh-TW.rc b/reactos/dll/win32/shell32/lang/zh-TW.rc index ef4b1b53d1b..e76c86a85ec 100644 --- a/reactos/dll/win32/shell32/lang/zh-TW.rc +++ b/reactos/dll/win32/shell32/lang/zh-TW.rc @@ -565,6 +565,20 @@ BEGIN AUTOCHECKBOX "&Enable Compression", 28675, 16, 152, 155, 10 END +CHKDSK_DLG DIALOGEX 50, 50, 194, 120 +STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION +CAPTION "Check Disk" +FONT 8, "MS Shell Dlg" +BEGIN + DEFPUSHBUTTON "Start", IDOK, 53, 100, 60, 14 + GROUPBOX "Check disk options", -1, 7, 6, 179, 50 + PUSHBUTTON "Cancel", IDCANCEL, 118, 100, 60, 14 + AUTOCHECKBOX "Automatically fix file system errors", 14000, 16, 15, 155, 10 + AUTOCHECKBOX "&Scan for and attempt recovery of bad sectors", 14001, 16, 30, 165, 10 + CONTROL "", 14002, "MSCTLS_PROGRESS32", 16, 7, 60, 170, 8 + LTEXT "", 14003, 60, 80, 170, 10 +END + IDD_PICK_ICON_DIALOG DIALOGEX 0, 0, 237, 204 STYLE DS_SHELLFONT | DS_MODALFRAME | DS_CONTEXTHELP | WS_POPUPWINDOW | WS_VISIBLE | WS_CAPTION CAPTION "Change Icon" From 0a4815bc46dfceb4d31701199cd2edea5fb44a85 Mon Sep 17 00:00:00 2001 From: Daniel Reimer Date: Thu, 14 Aug 2008 11:58:11 +0000 Subject: [PATCH 303/304] Reapply the translations except the Japanese one. Thx to Olaf Siejka for finding the guilty one. svn path=/trunk/; revision=35332 --- reactos/dll/win32/shell32/lang/bg-BG.rc | 8 ++--- reactos/dll/win32/shell32/lang/cs-CZ.rc | 8 ++--- reactos/dll/win32/shell32/lang/el-GR.rc | 8 ++--- reactos/dll/win32/shell32/lang/en-GB.rc | 4 +-- reactos/dll/win32/shell32/lang/es-ES.rc | 11 ++++--- reactos/dll/win32/shell32/lang/fi-FI.rc | 8 ++--- reactos/dll/win32/shell32/lang/fr-FR.rc | 8 ++--- reactos/dll/win32/shell32/lang/hu-HU.rc | 8 ++--- reactos/dll/win32/shell32/lang/it-IT.rc | 8 ++--- reactos/dll/win32/shell32/lang/no-NO.rc | 8 ++--- reactos/dll/win32/shell32/lang/pl-PL.rc | 41 +++++++++++++------------ reactos/dll/win32/shell32/lang/pt-BR.rc | 8 ++--- reactos/dll/win32/shell32/lang/sk-SK.rc | 8 ++--- reactos/dll/win32/shell32/lang/tr-TR.rc | 8 ++--- reactos/dll/win32/shell32/lang/uk-UA.rc | 8 ++--- reactos/dll/win32/shell32/lang/zh-CN.rc | 8 ++--- 16 files changed, 81 insertions(+), 79 deletions(-) diff --git a/reactos/dll/win32/shell32/lang/bg-BG.rc b/reactos/dll/win32/shell32/lang/bg-BG.rc index 31c61e2c29a..e8281537cf5 100644 --- a/reactos/dll/win32/shell32/lang/bg-BG.rc +++ b/reactos/dll/win32/shell32/lang/bg-BG.rc @@ -637,10 +637,10 @@ BEGIN IDS_SELECT "" IDS_OPEN "" IDS_CREATELINK " &" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&" + IDS_DELETE "&" + IDS_PROPERTIES "&" + IDS_CUT "&" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ." diff --git a/reactos/dll/win32/shell32/lang/cs-CZ.rc b/reactos/dll/win32/shell32/lang/cs-CZ.rc index b0c36b2d93f..49b5605cccf 100644 --- a/reactos/dll/win32/shell32/lang/cs-CZ.rc +++ b/reactos/dll/win32/shell32/lang/cs-CZ.rc @@ -636,10 +636,10 @@ BEGIN IDS_SELECT "Vybrat" IDS_OPEN "Otevt" IDS_CREATELINK "Vytvoit zstupc&e" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Koprovat" + IDS_DELETE "O&dstranit" + IDS_PROPERTIES "&Vlastnosti" + IDS_CUT "Vyj&mout" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nelze vytvoit novou sloku, protoe pstup byl odepen." diff --git a/reactos/dll/win32/shell32/lang/el-GR.rc b/reactos/dll/win32/shell32/lang/el-GR.rc index 8a2ae704e5e..f2ac5f9ac87 100644 --- a/reactos/dll/win32/shell32/lang/el-GR.rc +++ b/reactos/dll/win32/shell32/lang/el-GR.rc @@ -635,10 +635,10 @@ BEGIN IDS_SELECT "" IDS_OPEN "" IDS_CREATELINK " &" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&" + IDS_DELETE "&" + IDS_PROPERTIES "&" + IDS_CUT "&" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ." diff --git a/reactos/dll/win32/shell32/lang/en-GB.rc b/reactos/dll/win32/shell32/lang/en-GB.rc index c6bebcd4d98..65d588245ad 100644 --- a/reactos/dll/win32/shell32/lang/en-GB.rc +++ b/reactos/dll/win32/shell32/lang/en-GB.rc @@ -634,10 +634,10 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "Create &Link" - IDS_COPY "Copy" + IDS_COPY "&Copy" IDS_DELETE "Delete" IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_CUT "C&ut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." diff --git a/reactos/dll/win32/shell32/lang/es-ES.rc b/reactos/dll/win32/shell32/lang/es-ES.rc index 34548a1a8b6..cfbeea723e6 100644 --- a/reactos/dll/win32/shell32/lang/es-ES.rc +++ b/reactos/dll/win32/shell32/lang/es-ES.rc @@ -2,6 +2,7 @@ * Copyright 1998 Juergen Schmied * Copyright 2003,2004 Jos Manuel Ferrer Ortiz * Actualizado Javier Remacha 2008 + * ACtualizado Victor Martinez 2008 * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -636,11 +637,11 @@ BEGIN IDS_SELECT "Seleccionar" IDS_OPEN "Abrir" IDS_CREATELINK "C&rear acceso directo" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" - IDS_RESTORE "Restore" + IDS_COPY "&Copiar" + IDS_DELETE "&Eliminar" + IDS_PROPERTIES "&Propiedades" + IDS_CUT "C&ortar" + IDS_RESTORE "Restaurar" IDS_CREATEFOLDER_DENIED "No se puede crear nueva carpeta: Permiso denegado." IDS_CREATEFOLDER_CAPTION "Error durante la creacin de una nueva carpeta" diff --git a/reactos/dll/win32/shell32/lang/fi-FI.rc b/reactos/dll/win32/shell32/lang/fi-FI.rc index b2888c7477a..a845f945013 100644 --- a/reactos/dll/win32/shell32/lang/fi-FI.rc +++ b/reactos/dll/win32/shell32/lang/fi-FI.rc @@ -634,10 +634,10 @@ BEGIN IDS_SELECT "Valitse" IDS_OPEN "Avaa" IDS_CREATELINK "Lu&o Linkki" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Kopioi" + IDS_DELETE "&Poista" + IDS_PROPERTIES "&Ominaisuudet" + IDS_CUT "&Leikkaa" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Uutta kansiota ei voitu luoda: Oikeudet eivt riit." diff --git a/reactos/dll/win32/shell32/lang/fr-FR.rc b/reactos/dll/win32/shell32/lang/fr-FR.rc index 8207fe5327b..764fac64741 100644 --- a/reactos/dll/win32/shell32/lang/fr-FR.rc +++ b/reactos/dll/win32/shell32/lang/fr-FR.rc @@ -638,10 +638,10 @@ BEGIN IDS_SELECT "Slectionner" IDS_OPEN "Ouvrir" IDS_CREATELINK "Crer un &lien" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Copier" + IDS_DELETE "&Supprimer" + IDS_PROPERTIES "&Proprits" + IDS_CUT "C&ouper" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossible de crer le nouveau dossier : permission refuse." diff --git a/reactos/dll/win32/shell32/lang/hu-HU.rc b/reactos/dll/win32/shell32/lang/hu-HU.rc index 3f462237813..99a511153d9 100644 --- a/reactos/dll/win32/shell32/lang/hu-HU.rc +++ b/reactos/dll/win32/shell32/lang/hu-HU.rc @@ -637,10 +637,10 @@ BEGIN IDS_SELECT "Kivlaszt" IDS_OPEN "Megnyit" IDS_CREATELINK "Parancsikon ltrehozsa" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "Msols" + IDS_DELETE "Trls" + IDS_PROPERTIES "Tulajdonsgok" + IDS_CUT "Kivgs" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nem hozhat ltre j mappa: Nincs hozz engedlyed." diff --git a/reactos/dll/win32/shell32/lang/it-IT.rc b/reactos/dll/win32/shell32/lang/it-IT.rc index c29185d97f5..e0e7033d547 100644 --- a/reactos/dll/win32/shell32/lang/it-IT.rc +++ b/reactos/dll/win32/shell32/lang/it-IT.rc @@ -635,10 +635,10 @@ BEGIN IDS_SELECT "Selezione" IDS_OPEN "Apri" IDS_CREATELINK "&Crea Collegamento" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Copia" + IDS_DELETE "&Cancella" + IDS_PROPERTIES "&Propriet" + IDS_CUT "&Taglia" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Impossibile creare la cartella: Accesso negato." diff --git a/reactos/dll/win32/shell32/lang/no-NO.rc b/reactos/dll/win32/shell32/lang/no-NO.rc index f19bbd7d7c2..7d71a5a0058 100644 --- a/reactos/dll/win32/shell32/lang/no-NO.rc +++ b/reactos/dll/win32/shell32/lang/no-NO.rc @@ -613,10 +613,10 @@ BEGIN IDS_SELECT "Velg" IDS_OPEN "pne" IDS_CREATELINK "&Opprett snarvei" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Kopier" + IDS_DELETE "&Slett" + IDS_PROPERTIES "Egenska&per" + IDS_CUT "Klipp &ut" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Kunne ikke opprette ny mappe: tilgang nektet." diff --git a/reactos/dll/win32/shell32/lang/pl-PL.rc b/reactos/dll/win32/shell32/lang/pl-PL.rc index b9704cd4a58..2dd997f9dab 100644 --- a/reactos/dll/win32/shell32/lang/pl-PL.rc +++ b/reactos/dll/win32/shell32/lang/pl-PL.rc @@ -16,7 +16,8 @@ * License along with this library; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA * - * translation updated by Caemyr - Olaf Siejka (Jan,Mar,Apr,Jul 2008) + * ReactOS shell32 fork translation updated by Caemyr - + * - Olaf Siejka (Jan,Mar,Apr,Jul, Aug 2008) * Use ReactOS forum PM or IRC to contact me * http://www.reactos.org * IRC: irc.freenode.net #reactos-pl; @@ -371,7 +372,7 @@ BEGIN ICON IDI_SHELL_OPEN_WITH, -1, 8, 12, 21, 20 LTEXT "Wybierz program, ktrego chcesz uy do otwarcia tego pliku:", -1, 44, 12, 211, 10 LTEXT "Plik: ", 14001, 44, 25, 188, 10 - GROUPBOX "&Programs", -1, 7, 42, 249, 187 + GROUPBOX "&Programy", -1, 7, 42, 249, 187 LISTBOX 14002, 16 ,57, 230, 130, LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_NOINTEGRALHEIGHT | WS_VSCROLL | WS_TABSTOP, WS_EX_STATICEDGE AUTOCHECKBOX "&Zawsze uywaj danego programu do otwierania tego typu plikw", 14003, 20, 193, 225, 10 PUSHBUTTON "&Przegldaj", 14004, 198, 207, 50, 14 @@ -612,17 +613,17 @@ BEGIN IDS_SHV_COLUMN9 "Komentarz" IDS_SHV_COLUMN10 "Waciciel" IDS_SHV_COLUMN11 "Grupa" - IDS_SHV_COLUMN12 "Filename" - IDS_SHV_COLUMN13 "Category" - IDS_SHV_COLUMN_DELFROM "Lokacja oryginalna" + IDS_SHV_COLUMN12 "Nazwa pliku" + IDS_SHV_COLUMN13 "Kategoria" + IDS_SHV_COLUMN_DELFROM "Lokalizacja oryginalna" IDS_SHV_COLUMN_DELDATE "Data usunicia" - IDS_SHV_COLUMN_FONTTYPE "Fonttype" - IDS_SHV_COLUMN_WORKGROUP "Workgroup" - IDS_SHV_NETWORKLOCATION "Network Location" - IDS_SHV_COLUMN_DOCUMENTS "Documents" - IDS_SHV_COLUMN_STATUS "Status" - IDS_SHV_COLUMN_COMMENTS "Comments" - IDS_SHV_COLUMN_LOCATION "Location" + IDS_SHV_COLUMN_FONTTYPE "Czcionka" + IDS_SHV_COLUMN_WORKGROUP "Grupa Robocza" + IDS_SHV_NETWORKLOCATION "Lokalizacja Sieciowa" + IDS_SHV_COLUMN_DOCUMENTS "Dokumenty" + IDS_SHV_COLUMN_STATUS "Stan" + IDS_SHV_COLUMN_COMMENTS "Komentarze" + IDS_SHV_COLUMN_LOCATION "Lokalizacja" IDS_SHV_COLUMN_MODEL "Model" /* special folders */ @@ -640,11 +641,11 @@ BEGIN IDS_SELECT "Zaznacz" IDS_OPEN "Otwrz" IDS_CREATELINK "Utwrz &Skrt" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" - IDS_RESTORE "Restore" + IDS_COPY "Kopiuj" + IDS_DELETE "Usu" + IDS_PROPERTIES "Waciwoci" + IDS_CUT "Wytnij" + IDS_RESTORE "Przywr" IDS_CREATEFOLDER_DENIED "Nie mog utworzy nowego katalogu: Brak dostpu." IDS_CREATEFOLDER_CAPTION "Bd przy tworzeniu nowego katalogu." @@ -747,9 +748,9 @@ BEGIN IDS_PREVIEW_VERB "Podgld" IDS_FILE_FOLDER "%u Plikw, %u Katalogw" - IDS_PRINTERS "Printers" - IDS_FONTS "Fonts" - IDS_INSTALLNEWFONT "Install New Font..." + IDS_PRINTERS "Drukarki" + IDS_FONTS "Czcionki" + IDS_INSTALLNEWFONT "Zainstaluj Now Czcionk..." IDS_DEFAULT_CLUSTER_SIZE "Default allocation size" END diff --git a/reactos/dll/win32/shell32/lang/pt-BR.rc b/reactos/dll/win32/shell32/lang/pt-BR.rc index cf833f01e9a..da7a4a4f932 100644 --- a/reactos/dll/win32/shell32/lang/pt-BR.rc +++ b/reactos/dll/win32/shell32/lang/pt-BR.rc @@ -636,10 +636,10 @@ BEGIN IDS_SELECT "Selecionar" IDS_OPEN "Abrir" IDS_CREATELINK "Criar a&talho" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Copiar" + IDS_DELETE "E&xcluir" + IDS_PROPERTIES "Propriedades" + IDS_CUT "C&ortar" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "No pode criar nova pasta: Permisso negada." diff --git a/reactos/dll/win32/shell32/lang/sk-SK.rc b/reactos/dll/win32/shell32/lang/sk-SK.rc index 094c025bcaf..d8ebb75e35f 100644 --- a/reactos/dll/win32/shell32/lang/sk-SK.rc +++ b/reactos/dll/win32/shell32/lang/sk-SK.rc @@ -640,10 +640,10 @@ BEGIN IDS_SELECT "Vybra" IDS_OPEN "Otvori" IDS_CREATELINK "Vytvori o&dkaz" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&Koprova" + IDS_DELETE "&Odstrni" + IDS_PROPERTIES "Vl&astnosti" + IDS_CUT "&Vystrihn" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Nie je mon vytvori nov prieinok: Prstup zamietnut." diff --git a/reactos/dll/win32/shell32/lang/tr-TR.rc b/reactos/dll/win32/shell32/lang/tr-TR.rc index e8651af44f9..3c0c50e5b12 100644 --- a/reactos/dll/win32/shell32/lang/tr-TR.rc +++ b/reactos/dll/win32/shell32/lang/tr-TR.rc @@ -634,10 +634,10 @@ BEGIN IDS_SELECT "Se" IDS_OPEN "A" IDS_CREATELINK "Ksayol O&lutur" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "K&opyala" + IDS_DELETE "&Sil" + IDS_PROPERTIES "&zellikler" + IDS_CUT "&Kes" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Yeni dizin oluturulamyor: Eriim engellendi." diff --git a/reactos/dll/win32/shell32/lang/uk-UA.rc b/reactos/dll/win32/shell32/lang/uk-UA.rc index 3881d1bd68b..f1fd47c86f6 100644 --- a/reactos/dll/win32/shell32/lang/uk-UA.rc +++ b/reactos/dll/win32/shell32/lang/uk-UA.rc @@ -635,10 +635,10 @@ BEGIN IDS_SELECT "&" IDS_OPEN "³&" IDS_CREATELINK " &" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "&" + IDS_DELETE "&" + IDS_PROPERTIES "&" + IDS_CUT "&" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED " : ³ ." diff --git a/reactos/dll/win32/shell32/lang/zh-CN.rc b/reactos/dll/win32/shell32/lang/zh-CN.rc index c58b6ff269e..e67b019a999 100644 --- a/reactos/dll/win32/shell32/lang/zh-CN.rc +++ b/reactos/dll/win32/shell32/lang/zh-CN.rc @@ -623,10 +623,10 @@ BEGIN IDS_SELECT "Select" IDS_OPEN "Open" IDS_CREATELINK "ݷʽ(&L)" - IDS_COPY "Copy" - IDS_DELETE "Delete" - IDS_PROPERTIES "Properties" - IDS_CUT "Cut" + IDS_COPY "(&C)" + IDS_DELETE "ɾ(&D)" + IDS_PROPERTIES "(&P)" + IDS_CUT "(&U)" IDS_RESTORE "Restore" IDS_CREATEFOLDER_DENIED "Unable to create new Folder: Permission denied." From ed3f4764733c5cb20b17b476b0c5baa1df4e3943 Mon Sep 17 00:00:00 2001 From: Stefan Ginsberg Date: Thu, 14 Aug 2008 12:42:57 +0000 Subject: [PATCH 304/304] - Rework MiSyncThreadProcessViews - Perform the Mm hack-sync in KiIdleLoop before switching context (thanks to Aleksey for writing this!) svn path=/trunk/; revision=35333 --- reactos/ntoskrnl/include/internal/mm.h | 14 +++++--------- reactos/ntoskrnl/ke/i386/ctxswitch.S | 4 ++++ reactos/ntoskrnl/ke/procobj.c | 16 ++++------------ reactos/ntoskrnl/ke/thrdobj.c | 8 ++------ reactos/ntoskrnl/ke/thrdschd.c | 16 ++-------------- reactos/ntoskrnl/mm/mm.c | 14 ++++++++++++++ 6 files changed, 31 insertions(+), 41 deletions(-) diff --git a/reactos/ntoskrnl/include/internal/mm.h b/reactos/ntoskrnl/include/internal/mm.h index 49b336ca92c..502135124d8 100644 --- a/reactos/ntoskrnl/include/internal/mm.h +++ b/reactos/ntoskrnl/include/internal/mm.h @@ -1552,16 +1552,12 @@ MmCheckSystemImage( IN BOOLEAN PurgeSection ); -FORCEINLINE +/* ReactOS Mm Hack */ VOID -NTAPI -MiSyncThreadProcessViews(IN PVOID Process, - IN PVOID Address, - IN ULONG Size) -{ - MmUpdatePageDir((PEPROCESS)Process, Address, Size); -} - +FASTCALL +MiSyncThreadProcessViews( + IN PKTHREAD NextThread +); extern PMM_AVL_TABLE MmKernelAddressSpace; diff --git a/reactos/ntoskrnl/ke/i386/ctxswitch.S b/reactos/ntoskrnl/ke/i386/ctxswitch.S index 152122722a2..3cff2d27a1c 100644 --- a/reactos/ntoskrnl/ke/i386/ctxswitch.S +++ b/reactos/ntoskrnl/ke/i386/ctxswitch.S @@ -736,6 +736,10 @@ CheckNext: #endif SwapContext: + /* ReactOS Mm Hack */ + mov ecx, esi + call @MiSyncThreadProcessViews@4 + /* Swap context at APC_LEVEL */ mov ecx, APC_LEVEL call @KiSwapContextInternal@0 diff --git a/reactos/ntoskrnl/ke/procobj.c b/reactos/ntoskrnl/ke/procobj.c index 64a25d4a951..e456824d133 100644 --- a/reactos/ntoskrnl/ke/procobj.c +++ b/reactos/ntoskrnl/ke/procobj.c @@ -447,12 +447,8 @@ KeAttachProcess(IN PKPROCESS Process) ASSERT_PROCESS(Process); ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL); - /* Make sure that we are in the right page directory */ - MiSyncThreadProcessViews(Process, - (PVOID)Thread->StackLimit, - Thread->LargeStack ? - KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); - MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); + /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ + MiSyncThreadProcessViews(Thread); /* Check if we're already in that process */ if (Thread->ApcState.Process == Process) return; @@ -577,12 +573,8 @@ KeStackAttachProcess(IN PKPROCESS Process, ASSERT_PROCESS(Process); ASSERT_IRQL_LESS_OR_EQUAL(DISPATCH_LEVEL); - /* Make sure that we are in the right page directory */ - MiSyncThreadProcessViews(Process, - (PVOID)Thread->StackLimit, - Thread->LargeStack ? - KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); - MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); + /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ + MiSyncThreadProcessViews(Thread); /* Crash system if DPC is being executed! */ if (KeIsExecutingDpc()) diff --git a/reactos/ntoskrnl/ke/thrdobj.c b/reactos/ntoskrnl/ke/thrdobj.c index ca0996069fc..dccfe9c4a80 100644 --- a/reactos/ntoskrnl/ke/thrdobj.c +++ b/reactos/ntoskrnl/ke/thrdobj.c @@ -810,12 +810,8 @@ KeInitThread(IN OUT PKTHREAD Thread, Thread->StackLimit = (ULONG_PTR)KernelStack - KERNEL_STACK_SIZE; Thread->KernelStackResident = TRUE; - /* Make sure that we are in the right page directory */ - MiSyncThreadProcessViews(Process, - (PVOID)Thread->StackLimit, - Thread->LargeStack ? - KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); - MiSyncThreadProcessViews(Process, Thread, sizeof(ETHREAD)); + /* Make sure that we are in the right page directory (ReactOS Mm Hack) */ + MiSyncThreadProcessViews(Thread); /* Enter SEH to avoid crashes due to user mode */ Status = STATUS_SUCCESS; diff --git a/reactos/ntoskrnl/ke/thrdschd.c b/reactos/ntoskrnl/ke/thrdschd.c index ad70de338f6..15a2d9f61a2 100644 --- a/reactos/ntoskrnl/ke/thrdschd.c +++ b/reactos/ntoskrnl/ke/thrdschd.c @@ -344,13 +344,7 @@ KiSwapThread(IN PKTHREAD CurrentThread, WaitIrql = CurrentThread->WaitIrql; /* REACTOS Mm Hack of Doom */ - MiSyncThreadProcessViews(PsGetCurrentProcess(), - ((PETHREAD)NextThread)->ThreadsProcess, - sizeof(EPROCESS)); - MiSyncThreadProcessViews(PsGetCurrentProcess(), - (PVOID)((PETHREAD)NextThread)->Tcb.StackLimit, - NextThread->LargeStack ? - KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); + MiSyncThreadProcessViews(NextThread); /* Swap contexts */ ApcState = KiSwapContext(CurrentThread, NextThread); @@ -720,13 +714,7 @@ NtYieldExecution(VOID) ASSERT(OldIrql <= DISPATCH_LEVEL); /* REACTOS Mm Hack of Doom */ - MiSyncThreadProcessViews(PsGetCurrentProcess(), - ((PETHREAD)NextThread)->ThreadsProcess, - sizeof(EPROCESS)); - MiSyncThreadProcessViews(PsGetCurrentProcess(), - (PVOID)((PETHREAD)NextThread)->Tcb.StackLimit, - NextThread->LargeStack ? - KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); + MiSyncThreadProcessViews(NextThread); /* Swap to new thread */ KiSwapContext(Thread, NextThread); diff --git a/reactos/ntoskrnl/mm/mm.c b/reactos/ntoskrnl/mm/mm.c index 1480c00d729..948d855eb70 100644 --- a/reactos/ntoskrnl/mm/mm.c +++ b/reactos/ntoskrnl/mm/mm.c @@ -24,6 +24,20 @@ MM_STATS MmStats; /* FUNCTIONS ****************************************************************/ +VOID +FASTCALL +MiSyncThreadProcessViews(IN PKTHREAD NextThread) +{ + /* Hack Sync because Mm is broken */ + MmUpdatePageDir(PsGetCurrentProcess(), + ((PETHREAD)NextThread)->ThreadsProcess, + sizeof(EPROCESS)); + MmUpdatePageDir(PsGetCurrentProcess(), + (PVOID)((PETHREAD)NextThread)->Tcb.StackLimit, + NextThread->LargeStack ? + KERNEL_LARGE_STACK_SIZE : KERNEL_STACK_SIZE); +} + /* * @implemented */