From 51aa122e2d006ef1e4101940b16d127dbba57dff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Herm=C3=A8s=20B=C3=A9lusca-Ma=C3=AFto?= Date: Fri, 4 Jan 2013 13:36:15 +0000 Subject: [PATCH] Sync with trunk r58113. svn path=/branches/ros-csrss/; revision=58114 --- base/applications/rapps/rapps/mpc.txt | 2 +- base/applications/regedit/childwnd.c | 28 +- base/applications/regedit/edit.c | 24 +- base/applications/regedit/error.c | 23 +- base/applications/regedit/find.c | 12 +- base/applications/regedit/framewnd.c | 4 +- base/applications/regedit/listview.c | 8 +- base/applications/regedit/regproc.c | 21 +- base/applications/regedit/settings.c | 74 +- base/applications/regedit/treeview.c | 34 +- base/applications/taskmgr/lang/fr-FR.rc | 2 +- boot/freeldr/freeldr/arch/i386/i386bug.c | 8 - boot/freeldr/freeldr/debug.c | 10 + .../freeldr/include/arch/pc/x86common.h | 1 + boot/freeldr/freeldr/include/debug.h | 15 + boot/freeldr/freeldr/include/mm.h | 7 + boot/freeldr/freeldr/mm/meminit.c | 46 + dll/cpl/usrmgr/users.c | 14 +- dll/win32/kernel32/client/path.c | 3 +- dll/win32/kernel32/client/proc.c | 2 +- dll/win32/kernel32/client/thread.c | 15 +- dll/win32/netapi32/user.c | 641 ++++++++-- dll/win32/samlib/samlib.c | 52 +- dll/win32/samsrv/samrpc.c | 326 ++++- dll/win32/shell32/lang/bg-BG.rc | 2 +- dll/win32/shell32/lang/ca-ES.rc | 2 +- dll/win32/shell32/lang/cs-CZ.rc | 2 +- dll/win32/shell32/lang/el-GR.rc | 2 +- dll/win32/shell32/lang/fi-FI.rc | 2 +- dll/win32/shell32/lang/fr-FR.rc | 2 +- dll/win32/shell32/lang/hu-HU.rc | 2 +- dll/win32/shell32/lang/it-IT.rc | 2 +- dll/win32/shell32/lang/ja-JP.rc | 2 +- dll/win32/shell32/lang/ko-KR.rc | 2 +- dll/win32/shell32/lang/nl-NL.rc | 2 +- dll/win32/shell32/lang/pl-PL.rc | 2 +- dll/win32/shell32/lang/pt-BR.rc | 2 +- dll/win32/shell32/lang/pt-PT.rc | 2 +- dll/win32/shell32/lang/ru-RU.rc | 2 +- dll/win32/shell32/lang/sl-SI.rc | 2 +- dll/win32/shell32/lang/sv-SE.rc | 2 +- dll/win32/shell32/lang/zh-CN.rc | 2 +- dll/win32/shell32/lang/zh-TW.rc | 2 +- dll/win32/shell32/shell32.spec | 402 +++--- dll/win32/syssetup/wizard.c | 1 + drivers/bus/pcix/device.c | 6 +- drivers/bus/pcix/enum.c | 25 +- drivers/bus/pcix/fdo.c | 26 +- drivers/bus/pcix/init.c | 4 +- drivers/bus/pcix/intrface/agpintrf.c | 3 +- drivers/bus/pcix/intrface/busintrf.c | 3 +- drivers/bus/pcix/intrface/cardbus.c | 17 +- drivers/bus/pcix/intrface/devhere.c | 3 +- drivers/bus/pcix/intrface/lddintrf.c | 3 +- drivers/bus/pcix/intrface/locintrf.c | 3 +- drivers/bus/pcix/intrface/pmeintf.c | 3 +- drivers/bus/pcix/intrface/routintf.c | 3 +- drivers/bus/pcix/pci/config.c | 2 +- drivers/bus/pcix/pci/ppbridge.c | 2 +- drivers/bus/pcix/pcivrify.c | 2 +- drivers/bus/pcix/pdo.c | 26 +- drivers/bus/pcix/power.c | 3 +- drivers/bus/pcix/utils.c | 5 +- drivers/ksfilter/ks/device.c | 10 +- drivers/ksfilter/ks/irp.c | 63 +- drivers/ksfilter/ks/ksfunc.h | 3 +- drivers/storage/class/ramdisk/ramdisk.c | 69 +- drivers/usb/usbhub/fdo.c | 2 +- hal/halx86/acpi/halpnpdd.c | 2 +- hal/halx86/generic/bios.c | 2 + hal/halx86/generic/misc.c | 2 +- hal/halx86/generic/spinlock.c | 6 +- hal/halx86/legacy/bus/cmosbus.c | 4 +- hal/halx86/legacy/bus/pcibus.c | 9 +- hal/halx86/legacy/halpnpdd.c | 2 +- include/ddk/ntsam.h | 92 +- include/reactos/idl/sam.idl | 2 +- include/reactos/ks386.inc | 947 --------------- include/reactos/ksamd64.inc | 1074 ----------------- include/reactos/libs/pseh/pseh3.h | 22 +- lib/cmlib/hivecell.c | 2 +- ntoskrnl/cache/cachesub.c | 2 +- ntoskrnl/cache/copysup.c | 8 +- ntoskrnl/cache/fssup.c | 2 +- ntoskrnl/cache/logsup.c | 8 +- ntoskrnl/include/internal/i386/ke.h | 4 +- ntoskrnl/io/iomgr/irp.c | 5 +- ntoskrnl/io/pnpmgr/pnpmgr.c | 2 +- ntoskrnl/kd/kdmain.c | 3 +- ntoskrnl/kd64/amd64/kdx64.c | 8 +- ntoskrnl/kd64/arm/kdarm.c | 24 +- ntoskrnl/ke/bug.c | 1 + ntoskrnl/ke/dpc.c | 1 + ntoskrnl/ke/i386/context.c | 3 +- ntoskrnl/ke/i386/traphdlr.c | 13 +- ntoskrnl/mm/ARM3/arm/init.c | 2 +- ntoskrnl/mm/ARM3/largepag.c | 2 +- ntoskrnl/mm/ARM3/mminit.c | 2 +- ntoskrnl/mm/ARM3/pagfault.c | 11 +- ntoskrnl/mm/ARM3/pool.c | 2 + ntoskrnl/mm/ARM3/procsup.c | 7 +- ntoskrnl/mm/ARM3/section.c | 5 +- ntoskrnl/mm/ARM3/sysldr.c | 17 +- ntoskrnl/mm/ARM3/virtual.c | 31 +- ntoskrnl/mm/arm/page.c | 38 +- ntoskrnl/mm/arm/stubs.c | 22 +- ntoskrnl/po/povolume.c | 4 +- win32ss/gdi/eng/alphablend.c | 15 +- win32ss/gdi/eng/bitblt.c | 154 ++- win32ss/gdi/eng/clip.c | 61 +- win32ss/gdi/eng/copybits.c | 15 +- win32ss/gdi/eng/debug.c | 12 +- win32ss/gdi/eng/device.c | 44 +- win32ss/gdi/eng/driverobj.c | 17 +- win32ss/gdi/eng/engbrush.c | 20 +- win32ss/gdi/eng/engevent.c | 34 +- win32ss/gdi/eng/engmisc.c | 9 +- win32ss/gdi/eng/error.c | 2 +- win32ss/gdi/eng/float.c | 6 +- win32ss/gdi/eng/gradient.c | 22 +- win32ss/gdi/eng/inteng.h | 2 +- win32ss/gdi/eng/ldevobj.c | 10 +- win32ss/gdi/eng/lineto.c | 19 +- win32ss/gdi/eng/mapping.c | 46 +- win32ss/gdi/eng/math.c | 80 +- win32ss/gdi/eng/pdevobj.c | 56 +- win32ss/gdi/eng/surface.c | 59 +- win32ss/gdi/eng/xlateobj.c | 43 +- win32ss/gdi/gdi32/objects/region.c | 13 +- win32ss/gdi/ntgdi/dc.h | 37 +- win32ss/gdi/ntgdi/dclife.c | 5 +- win32ss/gdi/ntgdi/dcobjs.c | 128 +- win32ss/gdi/ntgdi/dcstate.c | 4 +- win32ss/gdi/ntgdi/dibobj.c | 2 +- win32ss/gdi/ntgdi/font.c | 54 - win32ss/gdi/ntgdi/gdibatch.c | 36 +- win32ss/gdi/ntgdi/gdifloat.h | 9 + win32ss/gdi/ntgdi/text.h | 7 +- win32ss/user/ntuser/object.h | 23 - 139 files changed, 2344 insertions(+), 3192 deletions(-) delete mode 100644 include/reactos/ks386.inc delete mode 100644 include/reactos/ksamd64.inc diff --git a/base/applications/rapps/rapps/mpc.txt b/base/applications/rapps/rapps/mpc.txt index 22958be4be7..43298ad9176 100644 --- a/base/applications/rapps/rapps/mpc.txt +++ b/base/applications/rapps/rapps/mpc.txt @@ -8,7 +8,7 @@ Description = A media player. Size = 7.0MB Category = 1 URLSite = http://mpc-hc.sourceforge.net/ -URLDownload = http://heanet.dl.sourceforge.netproject/mpc-hc/MPC%20HomeCinema%20-%20Win32/MPC-HC_v1.6.5.6366_x86/MPC-HC.1.6.5.6366.x86.exe +URLDownload = http://heanet.dl.sourceforge.net/project/mpc-hc/MPC%20HomeCinema%20-%20Win32/MPC-HC_v1.6.5.6366_x86/MPC-HC.1.6.5.6366.x86.exe CDPath = none [Section.0407] diff --git a/base/applications/regedit/childwnd.c b/base/applications/regedit/childwnd.c index d8b40e718ed..a55310a95b1 100644 --- a/base/applications/regedit/childwnd.c +++ b/base/applications/regedit/childwnd.c @@ -236,16 +236,16 @@ static void SuggestKeys(HKEY hRootKey, LPCWSTR pszKeyPath, LPWSTR pszSuggestions { /* Sanity check this key; it cannot be empty, nor can it be a * loop back */ - if ((szBuffer[0] != L'\0') && wcsicmp(szBuffer, pszKeyPath)) + if ((szBuffer[0] != L'\0') && _wcsicmp(szBuffer, pszKeyPath)) { if (RegOpenKeyW(hRootKey, szBuffer, &hOtherKey) == ERROR_SUCCESS) { - wcsncpy(pszSuggestions, L"HKCR\\", (int) iSuggestionsLength); + lstrcpynW(pszSuggestions, L"HKCR\\", (int) iSuggestionsLength); i = wcslen(pszSuggestions); pszSuggestions += i; iSuggestionsLength -= i; - wcsncpy(pszSuggestions, szBuffer, (int) iSuggestionsLength); + lstrcpynW(pszSuggestions, szBuffer, (int) iSuggestionsLength); i = MIN(wcslen(pszSuggestions) + 1, iSuggestionsLength); pszSuggestions += i; iSuggestionsLength -= i; @@ -266,12 +266,12 @@ static void SuggestKeys(HKEY hRootKey, LPCWSTR pszKeyPath, LPWSTR pszSuggestions if (QueryStringValue(hSubKey, L"CLSID", NULL, szBuffer, COUNT_OF(szBuffer)) == ERROR_SUCCESS) { - wcsncpy(pszSuggestions, L"HKCR\\CLSID\\", (int)iSuggestionsLength); + lstrcpynW(pszSuggestions, L"HKCR\\CLSID\\", (int)iSuggestionsLength); i = wcslen(pszSuggestions); pszSuggestions += i; iSuggestionsLength -= i; - wcsncpy(pszSuggestions, szBuffer, (int)iSuggestionsLength); + lstrcpynW(pszSuggestions, szBuffer, (int)iSuggestionsLength); i = MIN(wcslen(pszSuggestions) + 1, iSuggestionsLength); pszSuggestions += i; iSuggestionsLength -= i; @@ -286,7 +286,7 @@ LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar { WNDPROC oldwndproc; static WCHAR s_szNode[256]; - oldwndproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwnd, GWL_USERDATA); + oldwndproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwnd, GWLP_USERDATA); switch (uMsg) { @@ -300,7 +300,7 @@ LRESULT CALLBACK AddressBarProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lPar default: break; } - return CallWindowProc(oldwndproc, hwnd, uMsg, wParam, lParam); + return CallWindowProcW(oldwndproc, hwnd, uMsg, wParam, lParam); } static VOID @@ -333,8 +333,8 @@ UpdateAddress(HTREEITEM hItem, HKEY hRootKey, LPCWSTR pszPath) EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_LOADHIVE, MF_BYCOMMAND | MF_GRAYED); EnableMenuItem(GetSubMenu(hMenuFrame,0), ID_REGISTRY_UNLOADHIVE, MF_BYCOMMAND | MF_GRAYED); /* compare the strings to see if we should enable/disable the "Load Hive" menus accordingly */ - if (!(wcsicmp(rootName, L"HKEY_LOCAL_MACHINE") && - wcsicmp(rootName, L"HKEY_USERS"))) + if (!(_wcsicmp(rootName, L"HKEY_LOCAL_MACHINE") && + _wcsicmp(rootName, L"HKEY_USERS"))) { /* * enable the unload menu item if at the root, otherwise @@ -406,9 +406,9 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa 0); } /* Subclass the AddressBar */ - oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWL_WNDPROC); - SetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWL_USERDATA, (DWORD_PTR)oldproc); - SetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWL_WNDPROC, (DWORD_PTR)AddressBarProc); + oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWLP_WNDPROC); + SetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWLP_USERDATA, (DWORD_PTR)oldproc); + SetWindowLongPtr(g_pChildWnd->hAddressBarWnd, GWLP_WNDPROC, (DWORD_PTR)AddressBarProc); break; } case WM_COMMAND: @@ -660,8 +660,8 @@ LRESULT CALLBACK ChildWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lPa { TVHITTESTINFO hti; HMENU hContextMenu; - TVITEM item; - MENUITEMINFO mii; + TVITEMW item; + MENUITEMINFOW mii; WCHAR resource[256]; WCHAR buffer[256]; LPWSTR s; diff --git a/base/applications/regedit/edit.c b/base/applications/regedit/edit.c index 4ff2ec94844..3ec9e1448bc 100644 --- a/base/applications/regedit/edit.c +++ b/base/applications/regedit/edit.c @@ -230,7 +230,7 @@ LRESULT CALLBACK DwordEditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPAR { WNDPROC oldwndproc; - oldwndproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwnd, GWL_USERDATA); + oldwndproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwnd, GWLP_USERDATA); switch (uMsg) { @@ -263,7 +263,7 @@ LRESULT CALLBACK DwordEditSubclassProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPAR } } - return CallWindowProc(oldwndproc, hwnd, uMsg, wParam, lParam); + return CallWindowProcW(oldwndproc, hwnd, uMsg, wParam, lParam); } @@ -285,9 +285,9 @@ INT_PTR CALLBACK modify_dword_dlgproc(HWND hwndDlg, UINT uMsg, WPARAM wParam, LP /* subclass the edit control */ hwndValue = GetDlgItem(hwndDlg, IDC_VALUE_DATA); - oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwndValue, GWL_WNDPROC); - SetWindowLongPtr(hwndValue, GWL_USERDATA, (DWORD_PTR)oldproc); - SetWindowLongPtr(hwndValue, GWL_WNDPROC, (DWORD_PTR)DwordEditSubclassProc); + oldproc = (WNDPROC)(LONG_PTR)GetWindowLongPtr(hwndValue, GWLP_WNDPROC); + SetWindowLongPtr(hwndValue, GWLP_USERDATA, (DWORD_PTR)oldproc); + SetWindowLongPtr(hwndValue, GWLP_WNDPROC, (DWORD_PTR)DwordEditSubclassProc); if (editValueName && wcscmp(editValueName, L"")) { @@ -665,7 +665,7 @@ ParseResources(HWND hwnd) HWND hwndLV; WCHAR buffer[80]; - LVITEM item; + LVITEMW item; INT iItem; pFullDescriptor = &resourceValueData->List[fullResourceIndex]; @@ -866,7 +866,7 @@ OnResourceNotify(HWND hwndDlg, NMHDR *phdr) if (lpnmlv->iItem != -1) { PCM_PARTIAL_RESOURCE_DESCRIPTOR pDescriptor; - LVITEM item; + LVITEMW item; item.mask = LVIF_PARAM; item.iItem = lpnmlv->iItem; @@ -968,7 +968,7 @@ static VOID AddFullResourcesToList(HWND hwnd) { PCM_FULL_RESOURCE_DESCRIPTOR pFullDescriptor; WCHAR buffer[80]; - LVITEM item; + LVITEMW item; ULONG i; INT iItem; @@ -1344,7 +1344,7 @@ static LONG CopyKey(HKEY hDestKey, LPCWSTR lpDestSubKey, HKEY hSrcKey, LPCWSTR l } /* create the destination subkey */ - lResult = RegCreateKeyExW(hDestKey, lpDestSubKey, 0, NULL, 0, KEY_WRITE, NULL, + lResult = RegCreateKeyExW(hDestKey, lpDestSubKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hDestSubKey, &dwDisposition); if (lResult) goto done; @@ -1399,6 +1399,12 @@ static LONG MoveKey(HKEY hDestKey, LPCWSTR lpDestSubKey, HKEY hSrcKey, LPCWSTR l if (!lpSrcSubKey) return ERROR_INVALID_FUNCTION; + if (_wcsicmp(lpDestSubKey, lpSrcSubKey) == 0) + { + /* Destination name equals source name */ + return ERROR_SUCCESS; + } + lResult = CopyKey(hDestKey, lpDestSubKey, hSrcKey, lpSrcSubKey); if (lResult == ERROR_SUCCESS) SHDeleteKey(hSrcKey, lpSrcSubKey); diff --git a/base/applications/regedit/error.c b/base/applications/regedit/error.c index 631359154df..1999ac6b2b1 100644 --- a/base/applications/regedit/error.c +++ b/base/applications/regedit/error.c @@ -40,7 +40,7 @@ int ErrorMessageBox(HWND hWnd, LPCWSTR lpTitle, DWORD dwErrorCode, ...) va_end(args); - iRet = MessageBoxW(hWnd, (Status && lpMsgBuf ? lpMsgBuf : L"Error displaying error message.\n"), lpTitle, MB_OK | MB_ICONERROR); + iRet = MessageBoxW(hWnd, (Status && lpMsgBuf ? lpMsgBuf : L"Error displaying error message."), lpTitle, MB_OK | MB_ICONERROR); if (lpMsgBuf) LocalFree(lpMsgBuf); @@ -52,22 +52,25 @@ int InfoMessageBox(HWND hWnd, UINT uType, LPCWSTR lpTitle, LPCWSTR lpMessage, .. { int iRet = 0; LPWSTR lpMsgBuf = NULL; - DWORD Status = 0; va_list args = NULL; va_start(args, lpMessage); - Status = FormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_STRING, - lpMessage, - 0, - 0, - (LPWSTR)&lpMsgBuf, - 0, - &args); + if (lpMessage) + { + SIZE_T strLen = _vscwprintf(lpMessage, args); + + /* Create a buffer on the heap and zero it out (LPTR) */ + lpMsgBuf = (LPWSTR)LocalAlloc(LPTR, (strLen + 1) * sizeof(WCHAR)); + if (lpMsgBuf) + { + _vsnwprintf(lpMsgBuf, strLen, lpMessage, args); + } + } va_end(args); - iRet = MessageBoxW(hWnd, (Status && lpMsgBuf ? lpMsgBuf : L"Error displaying error message.\n"), lpTitle, uType); + iRet = MessageBoxW(hWnd, (lpMessage && lpMsgBuf ? lpMsgBuf : L"Error displaying info message."), lpTitle, uType); if (lpMsgBuf) LocalFree(lpMsgBuf); diff --git a/base/applications/regedit/find.c b/base/applications/regedit/find.c index 0a15204a924..3c3e7d4cc0c 100644 --- a/base/applications/regedit/find.c +++ b/base/applications/regedit/find.c @@ -77,7 +77,7 @@ static BOOL CompareName(LPCWSTR pszName1, LPCWSTR pszName2) if (s_dwFlags & RSF_MATCHCASE) return wcscmp(pszName1, pszName2) == 0; else - return wcsicmp(pszName1, pszName2) == 0; + return _wcsicmp(pszName1, pszName2) == 0; } else { @@ -130,7 +130,7 @@ int compare(const void *x, const void *y) { const LPCWSTR *a = (const LPCWSTR *)x; const LPCWSTR *b = (const LPCWSTR *)y; - return wcsicmp(*a, *b); + return _wcsicmp(*a, *b); } BOOL RegFindRecurse( @@ -198,7 +198,7 @@ BOOL RegFindRecurse( if (DoEvents()) goto err; - if (!fPast && wcsicmp(ppszNames[i], pszValueName) == 0) + if (!fPast && _wcsicmp(ppszNames[i], pszValueName) == 0) { fPast = TRUE; continue; @@ -390,7 +390,7 @@ BOOL RegFindWalk( } else { - wcsncpy(szKeyName, pch + 1, MAX_PATH); + lstrcpynW(szKeyName, pch + 1, MAX_PATH); *pch = 0; lResult = RegOpenKeyExW(hBaseKey, szSubKey, 0, KEY_ALL_ACCESS, &hSubKey); @@ -434,7 +434,7 @@ BOOL RegFindWalk( if (DoEvents()) goto err; - if (!fPast && wcsicmp(ppszNames[i], szKeyName) == 0) + if (!fPast && _wcsicmp(ppszNames[i], szKeyName) == 0) { fPast = TRUE; continue; @@ -586,7 +586,7 @@ static void SetFindFlags(DWORD dwFlags) DWORD dwDisposition; DWORD dwData; - if (RegCreateKeyExW(HKEY_CURRENT_USER, g_szGeneralRegKey, 0, NULL, 0, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) + if (RegCreateKeyExW(HKEY_CURRENT_USER, g_szGeneralRegKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition) == ERROR_SUCCESS) { dwData = (dwFlags >> 0) & 0x0000FFFF; RegSetValueExW(hKey, s_szFindFlags, 0, REG_DWORD, (const BYTE *) &dwData, sizeof(dwData)); diff --git a/base/applications/regedit/framewnd.c b/base/applications/regedit/framewnd.c index 19b8a8e4bfb..d94534abb0a 100644 --- a/base/applications/regedit/framewnd.c +++ b/base/applications/regedit/framewnd.c @@ -453,7 +453,7 @@ static BOOL ImportRegistryFile(HWND hWnd) { /* Look at the extension of the file to determine its type */ if (ofn.nFileExtension >= 1 && - wcsicmp(ofn.lpstrFile + ofn.nFileExtension, L"reg") == 0) /* REGEDIT4 or Windows Registry Editor Version 5.00 */ + _wcsicmp(ofn.lpstrFile + ofn.nFileExtension, L"reg") == 0) /* REGEDIT4 or Windows Registry Editor Version 5.00 */ { /* Open the file */ FILE* fp = _wfopen(ofn.lpstrFile, L"r"); @@ -1249,7 +1249,7 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) if ((LOWORD(wParam) >= ID_FAVORITES_MIN) && (LOWORD(wParam) <= ID_FAVORITES_MAX)) { HMENU hMenu; - MENUITEMINFO mii; + MENUITEMINFOW mii; WCHAR szFavorite[512]; hMenu = GetSubMenu(GetMenu(hWnd), FAVORITES_MENU_POSITION); diff --git a/base/applications/regedit/listview.c b/base/applications/regedit/listview.c index 2d7970a33c6..958c50f1550 100644 --- a/base/applications/regedit/listview.c +++ b/base/applications/regedit/listview.c @@ -56,7 +56,7 @@ static const int column_alignment[MAX_LIST_COLUMNS] = { LVCFMT_LEFT, LVCFMT_LEFT LPCWSTR GetValueName(HWND hwndLV, int iStartAt) { int item; - LVITEM LVItem; + LVITEMW LVItem; PLINE_INFO lineinfo; /* @@ -108,7 +108,7 @@ VOID SetValueName(HWND hwndLV, LPCWSTR pszValueName) BOOL IsDefaultValue(HWND hwndLV, int i) { PLINE_INFO lineinfo; - LVITEM Item; + LVITEMW Item; Item.mask = LVIF_PARAM; Item.iItem = i; @@ -126,7 +126,7 @@ BOOL IsDefaultValue(HWND hwndLV, int i) static void AddEntryToList(HWND hwndLV, LPWSTR Name, DWORD dwValType, void* ValBuf, DWORD dwCount, int Position, BOOL ValExists) { PLINE_INFO linfo; - LVITEM item; + LVITEMW item; int index; linfo = (PLINE_INFO)HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(LINE_INFO) + dwCount); @@ -654,7 +654,7 @@ fail: void DestroyListView(HWND hwndLV) { INT count, i; - LVITEM item; + LVITEMW item; count = ListView_GetItemCount(hwndLV); for (i = 0; i < count; i++) diff --git a/base/applications/regedit/regproc.c b/base/applications/regedit/regproc.c index 69604e8e897..5ca08506c48 100644 --- a/base/applications/regedit/regproc.c +++ b/base/applications/regedit/regproc.c @@ -458,17 +458,16 @@ static LONG openKeyW(WCHAR* stdInput) if (!parseKeyName(stdInput, &keyClass, &keyPath)) return ERROR_INVALID_PARAMETER; - res = RegCreateKeyExW( - keyClass, /* Class */ - keyPath, /* Sub Key */ - 0, /* MUST BE 0 */ - NULL, /* object type */ - REG_OPTION_NON_VOLATILE, /* option, REG_OPTION_NON_VOLATILE ... */ - KEY_ALL_ACCESS, /* access mask, KEY_ALL_ACCESS */ - NULL, /* security attribute */ - ¤tKeyHandle, /* result */ - &dwDisp); /* disposition, REG_CREATED_NEW_KEY or - REG_OPENED_EXISTING_KEY */ + res = RegCreateKeyExW(keyClass, /* Class */ + keyPath, /* Sub Key */ + 0, /* MUST BE 0 */ + NULL, /* object type */ + REG_OPTION_NON_VOLATILE, /* option, REG_OPTION_NON_VOLATILE ... */ + KEY_ALL_ACCESS, /* access mask, KEY_ALL_ACCESS */ + NULL, /* security attribute */ + ¤tKeyHandle, /* result */ + &dwDisp); /* disposition, REG_CREATED_NEW_KEY or + REG_OPENED_EXISTING_KEY */ if (res == ERROR_SUCCESS) currentKeyName = GetMultiByteString(stdInput); diff --git a/base/applications/regedit/settings.c b/base/applications/regedit/settings.c index 1d562ac1bab..10a1e552ab1 100644 --- a/base/applications/regedit/settings.c +++ b/base/applications/regedit/settings.c @@ -116,49 +116,45 @@ extern void SaveSettings(void) if (RegCreateKeyW(HKEY_CURRENT_USER, g_szGeneralRegKey, &hKey) == ERROR_SUCCESS) { - if (RegOpenKeyW(HKEY_CURRENT_USER, g_szGeneralRegKey, &hKey) == ERROR_SUCCESS) + RegistryBinaryConfig tConfig; + DWORD iBufferSize = sizeof(tConfig); + WCHAR szBuffer[MAX_PATH]; + LPCWSTR keyPath, rootName; + HKEY hRootKey; + + /* Save key position */ + keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey); + if (keyPath) { - RegistryBinaryConfig tConfig; - DWORD iBufferSize = sizeof(tConfig); - WCHAR szBuffer[MAX_PATH]; - LPCWSTR keyPath, rootName; - HKEY hRootKey; + rootName = get_root_key_name(hRootKey); - /* Save key position */ - keyPath = GetItemPath(g_pChildWnd->hTreeWnd, 0, &hRootKey); - if (keyPath) - { - rootName = get_root_key_name(hRootKey); + /* Load "My Computer" string and complete it */ + LoadStringW(hInst, IDS_MY_COMPUTER, szBuffer, COUNT_OF(szBuffer)); + wcscat(szBuffer, L"\\"); wcscat(szBuffer, rootName); + wcscat(szBuffer, L"\\"); wcscat(szBuffer, keyPath); - /* Load "My Computer" string and complete it */ - LoadStringW(hInst, IDS_MY_COMPUTER, szBuffer, COUNT_OF(szBuffer)); - wcscat(szBuffer, L"\\"); wcscat(szBuffer, rootName); - wcscat(szBuffer, L"\\"); wcscat(szBuffer, keyPath); - - RegSetValueExW(hKey, L"LastKey", 0, REG_SZ, (LPBYTE)szBuffer, (DWORD)wcslen(szBuffer) * sizeof(WCHAR)); - } - - /* Get statusbar settings */ - tConfig.StatusBarVisible = ((GetMenuState(GetSubMenu(hMenuFrame, ID_VIEW_MENU), ID_VIEW_STATUSBAR, MF_BYCOMMAND) & MF_CHECKED) ? 1 : 0); - - /* Get splitter position */ - tConfig.TreeViewSize = g_pChildWnd->nSplitPos; - - /* Get list view column width*/ - tConfig.NameColumnSize = ListView_GetColumnWidth(g_pChildWnd->hListWnd, 0); - tConfig.TypeColumnSize = ListView_GetColumnWidth(g_pChildWnd->hListWnd, 1); - tConfig.DataColumnSize = ListView_GetColumnWidth(g_pChildWnd->hListWnd, 2); - - /* Get program window settings */ - tConfig.tPlacement.length = sizeof(WINDOWPLACEMENT); - GetWindowPlacement(hFrameWnd , &tConfig.tPlacement); - - /* Save all the data */ - RegSetValueExW(hKey, L"View", 0, REG_BINARY, (LPBYTE)&tConfig, iBufferSize); - - RegCloseKey(hKey); + RegSetValueExW(hKey, L"LastKey", 0, REG_SZ, (LPBYTE)szBuffer, (DWORD)wcslen(szBuffer) * sizeof(WCHAR)); } + + /* Get statusbar settings */ + tConfig.StatusBarVisible = ((GetMenuState(GetSubMenu(hMenuFrame, ID_VIEW_MENU), ID_VIEW_STATUSBAR, MF_BYCOMMAND) & MF_CHECKED) ? 1 : 0); + + /* Get splitter position */ + tConfig.TreeViewSize = g_pChildWnd->nSplitPos; + + /* Get list view column width*/ + tConfig.NameColumnSize = ListView_GetColumnWidth(g_pChildWnd->hListWnd, 0); + tConfig.TypeColumnSize = ListView_GetColumnWidth(g_pChildWnd->hListWnd, 1); + tConfig.DataColumnSize = ListView_GetColumnWidth(g_pChildWnd->hListWnd, 2); + + /* Get program window settings */ + tConfig.tPlacement.length = sizeof(WINDOWPLACEMENT); + GetWindowPlacement(hFrameWnd , &tConfig.tPlacement); + + /* Save all the data */ + RegSetValueExW(hKey, L"View", 0, REG_BINARY, (LPBYTE)&tConfig, iBufferSize); + + RegCloseKey(hKey); } } - /* EOF */ diff --git a/base/applications/regedit/treeview.c b/base/applications/regedit/treeview.c index cd06e7b5238..f27299c9671 100644 --- a/base/applications/regedit/treeview.c +++ b/base/applications/regedit/treeview.c @@ -34,7 +34,7 @@ static LPWSTR pathBuffer; static BOOL get_item_path(HWND hwndTV, HTREEITEM hItem, HKEY* phKey, LPWSTR* pKeyPath, int* pPathLen, int* pMaxLen) { - TVITEM item; + TVITEMW item; size_t maxLen, len; LPWSTR newStr; @@ -109,8 +109,8 @@ BOOL DeleteNode(HWND hwndTV, HTREEITEM hItem) /* Add an entry to the tree. Only give hKey for root nodes (HKEY_ constants) */ static HTREEITEM AddEntryToTree(HWND hwndTV, HTREEITEM hParent, LPWSTR label, HKEY hKey, DWORD dwChildren) { - TVITEM tvi; - TVINSERTSTRUCT tvins; + TVITEMW tvi; + TVINSERTSTRUCTW tvins; if (hKey) { @@ -140,7 +140,7 @@ BOOL RefreshTreeItem(HWND hwndTV, HTREEITEM hItem) LPCWSTR KeyPath; DWORD dwCount, dwIndex, dwMaxSubKeyLen; LPWSTR Name = NULL; - TVITEM tvItem; + TVITEMW tvItem; LPWSTR pszNodes = NULL; BOOL bSuccess = FALSE; LPWSTR s; @@ -332,7 +332,7 @@ HTREEITEM InsertNode(HWND hwndTV, HTREEITEM hItem, LPWSTR name) { WCHAR buf[MAX_NEW_KEY_LEN]; HTREEITEM hNewItem = 0; - TVITEMEX item; + TVITEMEXW item; /* Default to the current selection */ if (!hItem) @@ -390,8 +390,8 @@ HWND StartKeyRename(HWND hwndTV) static BOOL InitTreeViewItems(HWND hwndTV, LPWSTR pHostName) { - TVITEM tvi; - TVINSERTSTRUCT tvins; + TVITEMW tvi; + TVINSERTSTRUCTW tvins; HTREEITEM hRoot; tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_CHILDREN | TVIF_PARAM; @@ -593,7 +593,7 @@ BOOL CreateNewKey(HWND hwndTV, HTREEITEM hItem) do { wsprintf(szNewKey, szNewKeyFormat, iIndex++); - nResult = RegCreateKeyExW(hKey, szNewKey, 0, NULL, 0, KEY_WRITE, NULL, &hNewKey, &dwDisposition); + nResult = RegCreateKeyExW(hKey, szNewKey, 0, NULL, REG_OPTION_NON_VOLATILE, KEY_WRITE, NULL, &hNewKey, &dwDisposition); if (hNewKey && dwDisposition == REG_OPENED_EXISTING_KEY) { RegCloseKey(hNewKey); @@ -664,7 +664,7 @@ BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath) WCHAR szPathPart[128]; WCHAR szBuffer[128]; LPCWSTR s; - TVITEM tvi; + TVITEMW tvi; /* Load "My Computer" string... */ LoadStringW(hInst, IDS_MY_COMPUTER, szBuffer, COUNT_OF(szBuffer)); @@ -683,22 +683,22 @@ BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath) while(keyPath[0]) { s = wcschr(keyPath, L'\\'); - wcsncpy(szPathPart, keyPath, s ? s - keyPath + 1 : wcslen(keyPath) + 1); + lstrcpynW(szPathPart, keyPath, s ? s - keyPath + 1 : wcslen(keyPath) + 1); /* Special case for root to expand root key abbreviations */ if (hItem == hRoot) { - if (!wcsicmp(szPathPart, L"HKCR")) + if (!_wcsicmp(szPathPart, L"HKCR")) wcscpy(szPathPart, L"HKEY_CLASSES_ROOT"); - else if (!wcsicmp(szPathPart, L"HKCU")) + else if (!_wcsicmp(szPathPart, L"HKCU")) wcscpy(szPathPart, L"HKEY_CURRENT_USER"); - else if (!wcsicmp(szPathPart, L"HKLM")) + else if (!_wcsicmp(szPathPart, L"HKLM")) wcscpy(szPathPart, L"HKEY_LOCAL_MACHINE"); - else if (!wcsicmp(szPathPart, L"HKU")) + else if (!_wcsicmp(szPathPart, L"HKU")) wcscpy(szPathPart, L"HKEY_USERS"); - else if (!wcsicmp(szPathPart, L"HKCC")) + else if (!_wcsicmp(szPathPart, L"HKCC")) wcscpy(szPathPart, L"HKEY_CURRENT_CONFIG"); - else if (!wcsicmp(szPathPart, L"HKDD")) + else if (!_wcsicmp(szPathPart, L"HKDD")) wcscpy(szPathPart, L"HKEY_DYN_DATA"); } @@ -713,7 +713,7 @@ BOOL SelectNode(HWND hwndTV, LPCWSTR keyPath) (void)TreeView_GetItem(hwndTV, &tvi); - if (!wcsicmp(szBuffer, szPathPart)) + if (!_wcsicmp(szBuffer, szPathPart)) break; } diff --git a/base/applications/taskmgr/lang/fr-FR.rc b/base/applications/taskmgr/lang/fr-FR.rc index 3a71738ea4c..1c70373d317 100644 --- a/base/applications/taskmgr/lang/fr-FR.rc +++ b/base/applications/taskmgr/lang/fr-FR.rc @@ -513,7 +513,7 @@ STRINGTABLE DISCARDABLE BEGIN IDS_APP_TITLE "Gestionnaire des tâches" IDC_TASKMGR "Gestionnaire des tâches" - IDS_IDLE_PROCESS "Processus système en atente" + IDS_IDLE_PROCESS "Processus système en attente" END STRINGTABLE DISCARDABLE diff --git a/boot/freeldr/freeldr/arch/i386/i386bug.c b/boot/freeldr/freeldr/arch/i386/i386bug.c index 260e39dd630..4ea6876b37f 100644 --- a/boot/freeldr/freeldr/arch/i386/i386bug.c +++ b/boot/freeldr/freeldr/arch/i386/i386bug.c @@ -171,14 +171,6 @@ i386PrintExceptionText(ULONG TrapIndex, PKTRAP_FRAME TrapFrame, PKSPECIAL_REGIST InstructionPointer[6], InstructionPointer[7]); } -char *BugCodeStrings[] = -{ - "TEST_BUGCHECK", - "MISSING_HARDWARE_REQUIREMENTS", -}; - -ULONG_PTR BugCheckInfo[5]; - void NTAPI FrLdrBugCheckEx( diff --git a/boot/freeldr/freeldr/debug.c b/boot/freeldr/freeldr/debug.c index 21b78ca2918..5ac8e10fbd0 100644 --- a/boot/freeldr/freeldr/debug.c +++ b/boot/freeldr/freeldr/debug.c @@ -427,3 +427,13 @@ RtlAssert(IN PVOID FailedAssertion, DbgBreakPoint(); } + +char *BugCodeStrings[] = +{ + "TEST_BUGCHECK", + "MISSING_HARDWARE_REQUIREMENTS", + "FREELDR_IMAGE_CORRUPTION", +}; + +ULONG_PTR BugCheckInfo[5]; + diff --git a/boot/freeldr/freeldr/include/arch/pc/x86common.h b/boot/freeldr/freeldr/include/arch/pc/x86common.h index 91f8c420a0a..e681390bc61 100644 --- a/boot/freeldr/freeldr/include/arch/pc/x86common.h +++ b/boot/freeldr/freeldr/include/arch/pc/x86common.h @@ -23,6 +23,7 @@ #define BIOSCALLBUFSEGMENT (BIOSCALLBUFFER/16) /* Buffer to store temporary data for any Int386() call */ #define BIOSCALLBUFOFFSET HEX(0000) /* Buffer to store temporary data for any Int386() call */ #define BIOSCALLBUFSIZE PAGE_SIZE /* max is sizeof(VESA_SVGA_INFO) = 512 */ +#define MAX_FREELDR_PE_SIZE (DISKREADBUFFER - FREELDR_PE_BASE) /* These addresses specify the realmode "BSS section" layout */ #define BSS_RealModeEntry (BSS_START + 0) diff --git a/boot/freeldr/freeldr/include/debug.h b/boot/freeldr/freeldr/include/debug.h index 16d04cc1780..7ab94d0491f 100644 --- a/boot/freeldr/freeldr/include/debug.h +++ b/boot/freeldr/freeldr/include/debug.h @@ -120,4 +120,19 @@ void MEMORY_WRITE_BREAKPOINT4(unsigned long addr); #endif // DBG +void +NTAPI +FrLdrBugCheck(ULONG BugCode); + +/* Bugcheck codes */ +enum _FRLDR_BUGCHECK_CODES +{ + TEST_BUGCHECK, + MISSING_HARDWARE_REQUIREMENTS, + FREELDR_IMAGE_CORRUPTION, +}; + +extern char *BugCodeStrings[]; +extern ULONG_PTR BugCheckInfo[5]; + #endif // defined __DEBUG_H diff --git a/boot/freeldr/freeldr/include/mm.h b/boot/freeldr/freeldr/include/mm.h index a453a284770..7b6ed61566a 100644 --- a/boot/freeldr/freeldr/include/mm.h +++ b/boot/freeldr/freeldr/include/mm.h @@ -19,6 +19,13 @@ #pragma once +extern char __ImageBase; +#ifdef __GNUC__ +#define FREELDR_SECTION_COUNT 3 +#else +#define FREELDR_SECTION_COUNT 1 +#endif + typedef struct _FREELDR_MEMORY_DESCRIPTOR { TYPE_OF_MEMORY MemoryType; diff --git a/boot/freeldr/freeldr/mm/meminit.c b/boot/freeldr/freeldr/mm/meminit.c index 7794f6f1639..b9e8877c872 100644 --- a/boot/freeldr/freeldr/mm/meminit.c +++ b/boot/freeldr/freeldr/mm/meminit.c @@ -163,6 +163,46 @@ ArcGetMemoryDescriptor(const FREELDR_MEMORY_DESCRIPTOR* Current) } +BOOLEAN +MmCheckFreeldrImageFile() +{ + PIMAGE_NT_HEADERS NtHeaders; + PIMAGE_FILE_HEADER FileHeader; + PIMAGE_OPTIONAL_HEADER OptionalHeader; + + /* Get the NT headers */ + NtHeaders = RtlImageNtHeader(&__ImageBase); + if (!NtHeaders) + { + ERR("Coult not get NtHeaders!\n"); + return FALSE; + } + + /* Check the file header */ + FileHeader = &NtHeaders->FileHeader; + if ((FileHeader->Machine != IMAGE_FILE_MACHINE_NATIVE) || + (FileHeader->NumberOfSections != FREELDR_SECTION_COUNT) || + (FileHeader->PointerToSymbolTable != 0) || + (FileHeader->NumberOfSymbols != 0) || + (FileHeader->SizeOfOptionalHeader != 0xE0)) + { + return FALSE; + } + + /* Check the optional header */ + OptionalHeader = &NtHeaders->OptionalHeader; + if ((OptionalHeader->Magic != IMAGE_NT_OPTIONAL_HDR_MAGIC) || + (OptionalHeader->Subsystem != 1) || // native + (OptionalHeader->ImageBase != FREELDR_PE_BASE) || + (OptionalHeader->SizeOfImage > MAX_FREELDR_PE_SIZE) || + (OptionalHeader->SectionAlignment != OptionalHeader->FileAlignment)) + { + return FALSE; + } + + return TRUE; +} + BOOLEAN MmInitializeMemoryManager(VOID) { #if DBG @@ -171,6 +211,12 @@ BOOLEAN MmInitializeMemoryManager(VOID) TRACE("Initializing Memory Manager.\n"); + /* Check the freeldr binary */ + if (!MmCheckFreeldrImageFile()) + { + FrLdrBugCheck(FREELDR_IMAGE_CORRUPTION); + } + BiosMemoryMap = MachVtbl.GetMemoryMap(&BiosMemoryMapEntryCount); #if DBG diff --git a/dll/cpl/usrmgr/users.c b/dll/cpl/usrmgr/users.c index e4d1c9b8b6c..a5492488297 100644 --- a/dll/cpl/usrmgr/users.c +++ b/dll/cpl/usrmgr/users.c @@ -261,14 +261,10 @@ UserNew(HWND hwndDlg) NewUserDlgProc, (LPARAM)&user) == IDOK) { -#if 0 status = NetUserAdd(NULL, 3, (LPBYTE)&user, NULL); -#else - status = NERR_Success; -#endif if (status != NERR_Success) { TCHAR szText[256]; @@ -434,11 +430,13 @@ UpdateUsersList(HWND hwndListView) lvi.iImage = (pBuffer[i].usri20_flags & UF_ACCOUNTDISABLE) ? 1 : 0; iItem = ListView_InsertItem(hwndListView, &lvi); - ListView_SetItemText(hwndListView, iItem, 1, - pBuffer[i].usri20_full_name); + if (pBuffer[i].usri20_full_name != NULL) + ListView_SetItemText(hwndListView, iItem, 1, + pBuffer[i].usri20_full_name); - ListView_SetItemText(hwndListView, iItem, 2, - pBuffer[i].usri20_comment); + if (pBuffer[i].usri20_comment != NULL) + ListView_SetItemText(hwndListView, iItem, 2, + pBuffer[i].usri20_comment); } NetApiBufferFree(pBuffer); diff --git a/dll/win32/kernel32/client/path.c b/dll/win32/kernel32/client/path.c index 48224db7a3a..2229d3ed835 100644 --- a/dll/win32/kernel32/client/path.c +++ b/dll/win32/kernel32/client/path.c @@ -237,7 +237,8 @@ BasepComputeProcessPath(IN PBASE_SEARCH_PATH_TYPE PathOrder, { /* This means someone added RTL_PERTHREAD_CURDIR */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); + // while (TRUE); } /* We do not. Do we have the LDR_ENTRY for the executable? */ diff --git a/dll/win32/kernel32/client/proc.c b/dll/win32/kernel32/client/proc.c index a0409d72586..7fd9ce630a9 100644 --- a/dll/win32/kernel32/client/proc.c +++ b/dll/win32/kernel32/client/proc.c @@ -2637,7 +2637,7 @@ CreateProcessInternalW(HANDLE hToken, while (NULL != (ScanString = wcschr(ScanString, L'^'))) { ScanString++; - if (*ScanString == L'\"' || *ScanString == L'^' || *ScanString == L'\"') + if (*ScanString == L'\"' || *ScanString == L'^' || *ScanString == L'\\') { Escape = TRUE; break; diff --git a/dll/win32/kernel32/client/thread.c b/dll/win32/kernel32/client/thread.c index 404bd11d20e..c9d7f173978 100644 --- a/dll/win32/kernel32/client/thread.c +++ b/dll/win32/kernel32/client/thread.c @@ -241,7 +241,8 @@ CreateRemoteThread(IN HANDLE hProcess, DbgPrint("SXS: %s - Failing thread create because " "NtQueryInformationThread() failed with status %08lx\n", __FUNCTION__, Status); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return NULL; } /* Allocate the Activation Context Stack */ @@ -252,7 +253,8 @@ CreateRemoteThread(IN HANDLE hProcess, DbgPrint("SXS: %s - Failing thread create because " "RtlAllocateActivationContextStack() failed with status %08lx\n", __FUNCTION__, Status); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return NULL; } /* Save it */ @@ -274,7 +276,8 @@ CreateRemoteThread(IN HANDLE hProcess, DbgPrint("SXS: %s - Failing thread create because " "RtlQueryInformationActivationContext() failed with status %08lx\n", __FUNCTION__, Status); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return NULL; } /* Does it need to be activated? */ @@ -291,7 +294,8 @@ CreateRemoteThread(IN HANDLE hProcess, DbgPrint("SXS: %s - Failing thread create because " "RtlActivateActivationContextEx() failed with status %08lx\n", __FUNCTION__, Status); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return NULL; } } } @@ -367,7 +371,8 @@ ExitThread(IN DWORD uExitCode) /* We should never reach this place */ DPRINT1("It should not happen\n"); - while (TRUE); + ASSERT(FALSE); + while (TRUE); // 'noreturn' function. } /* diff --git a/dll/win32/netapi32/user.c b/dll/win32/netapi32/user.c index 3022cc349d3..25238ae0d05 100644 --- a/dll/win32/netapi32/user.c +++ b/dll/win32/netapi32/user.c @@ -18,6 +18,18 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ +/* + * TODO: + * Implement NetUserChangePassword + * Implement NetUserDel + * Implement NetUserGetGroups + * Implement NetUserSetGroups + * Implement NetUserSetInfo + * NetUserGetLocalGroups does not support LG_INCLUDE_INDIRECT yet. + * Add missing information levels. + * ... + */ + #include "netapi32.h" WINE_DEFAULT_DEBUG_CHANNEL(netapi32); @@ -31,7 +43,7 @@ typedef struct _ENUM_CONTEXT SAM_ENUMERATE_HANDLE EnumerationContext; PSAM_RID_ENUMERATION Buffer; - ULONG Returned; + ULONG Count; ULONG Index; BOOLEAN BuiltinDone; @@ -107,6 +119,46 @@ static struct sam_user* NETAPI_FindUser(LPCWSTR UserName) } +static PSID +CreateSidFromSidAndRid(PSID SrcSid, + ULONG RelativeId) +{ + UCHAR RidCount; + PSID DstSid; + ULONG i; + ULONG DstSidSize; + PULONG p, q; + + RidCount = *RtlSubAuthorityCountSid(SrcSid); + if (RidCount >= 8) + return NULL; + + DstSidSize = RtlLengthRequiredSid(RidCount + 1); + + DstSid = RtlAllocateHeap(RtlGetProcessHeap(), + 0, + DstSidSize); + if (DstSid == NULL) + return NULL; + + RtlInitializeSid(DstSid, + RtlIdentifierAuthoritySid(SrcSid), + RidCount + 1); + + for (i = 0; i < (ULONG)RidCount; i++) + { + p = RtlSubAuthoritySid(SrcSid, i); + q = RtlSubAuthoritySid(DstSid, i); + *q = *p; + } + + q = RtlSubAuthoritySid(DstSid, (ULONG)RidCount); + *q = RelativeId; + + return DstSid; +} + + static NET_API_STATUS BuildUserInfoBuffer(PUSER_ACCOUNT_INFORMATION UserInfo, @@ -246,7 +298,7 @@ BuildUserInfoBuffer(PUSER_ACCOUNT_INFORMATION UserInfo, Ptr = (LPWSTR)((ULONG_PTR)Ptr + UserInfo->AdminComment.Length + sizeof(WCHAR)); } - UserInfo1->usri1_flags = UserInfo->UserAccountControl; +// UserInfo1->usri1_flags = UserInfo->UserAccountControl; if (UserInfo->ScriptPath.Length > 0) { @@ -342,7 +394,7 @@ BuildUserInfoBuffer(PUSER_ACCOUNT_INFORMATION UserInfo, Ptr = (LPWSTR)((ULONG_PTR)Ptr + UserInfo->AdminComment.Length + sizeof(WCHAR)); } - UserInfo20->usri20_flags = UserInfo->UserAccountControl; +// UserInfo20->usri20_flags = UserInfo->UserAccountControl; UserInfo20->usri20_user_id = RelativeId; break; @@ -399,6 +451,131 @@ FreeUserInfo(PUSER_ACCOUNT_INFORMATION UserInfo) } +static +NET_API_STATUS +SetUserInfo(SAM_HANDLE UserHandle, + LPBYTE UserInfo, + DWORD Level) +{ + USER_ALL_INFORMATION UserAllInfo; + PUSER_INFO_1 UserInfo1; + PUSER_INFO_3 UserInfo3; + NET_API_STATUS ApiStatus = NERR_Success; + NTSTATUS Status = STATUS_SUCCESS; + + ZeroMemory(&UserAllInfo, sizeof(USER_ALL_INFORMATION)); + + switch (Level) + { + case 1: + UserInfo1 = (PUSER_INFO_1)UserInfo; +// RtlInitUnicodeString(&UserAllInfo.UserName, +// UserInfo1->usri1_name); + + RtlInitUnicodeString(&UserAllInfo.AdminComment, + UserInfo1->usri1_comment); + + RtlInitUnicodeString(&UserAllInfo.HomeDirectory, + UserInfo1->usri1_home_dir); + + RtlInitUnicodeString(&UserAllInfo.ScriptPath, + UserInfo1->usri1_script_path); + + RtlInitUnicodeString(&UserAllInfo.NtPassword, + UserInfo1->usri1_password); + UserAllInfo.NtPasswordPresent = TRUE; + +// UserInfo1->usri1_flags +// UserInfo1->usri1_priv + + UserAllInfo.WhichFields = + USER_ALL_ADMINCOMMENT | + USER_ALL_HOMEDIRECTORY | + USER_ALL_SCRIPTPATH | + USER_ALL_NTPASSWORDPRESENT +// USER_ALL_USERACCOUNTCONTROL + ; + break; + + + case 3: + UserInfo3 = (PUSER_INFO_3)UserInfo; + +// LPWSTR usri3_name; + + RtlInitUnicodeString(&UserAllInfo.NtPassword, + UserInfo3->usri3_password); + UserAllInfo.NtPasswordPresent = TRUE; + +// DWORD usri3_password_age; // ignored +// DWORD usri3_priv; + + RtlInitUnicodeString(&UserAllInfo.HomeDirectory, + UserInfo3->usri3_home_dir); + + RtlInitUnicodeString(&UserAllInfo.AdminComment, + UserInfo3->usri3_comment); + +// DWORD usri3_flags; + + RtlInitUnicodeString(&UserAllInfo.ScriptPath, + UserInfo3->usri3_script_path); + +// DWORD usri3_auth_flags; + + RtlInitUnicodeString(&UserAllInfo.FullName, + UserInfo3->usri3_full_name); + +// LPWSTR usri3_usr_comment; +// LPWSTR usri3_parms; +// LPWSTR usri3_workstations; +// DWORD usri3_last_logon; +// DWORD usri3_last_logoff; +// DWORD usri3_acct_expires; +// DWORD usri3_max_storage; +// DWORD usri3_units_per_week; +// PBYTE usri3_logon_hours; +// DWORD usri3_bad_pw_count; +// DWORD usri3_num_logons; +// LPWSTR usri3_logon_server; +// DWORD usri3_country_code; +// DWORD usri3_code_page; +// DWORD usri3_user_id; // ignored +// DWORD usri3_primary_group_id; +// LPWSTR usri3_profile; +// LPWSTR usri3_home_dir_drive; +// DWORD usri3_password_expired; + + UserAllInfo.WhichFields = + USER_ALL_NTPASSWORDPRESENT | + USER_ALL_HOMEDIRECTORY | + USER_ALL_ADMINCOMMENT | + USER_ALL_SCRIPTPATH | + USER_ALL_FULLNAME +// USER_ALL_USERACCOUNTCONTROL + ; + break; + + default: + ERR("Unsupported level %lu!\n", Level); + return ERROR_INVALID_PARAMETER; + } + + Status = SamSetInformationUser(UserHandle, + UserAllInformation, + &UserAllInfo); + if (!NT_SUCCESS(Status)) + { + ERR("SamSetInformationUser failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + +done: + return ApiStatus; +} + + /************************************************************ * NetUserAdd (NETAPI32.@) */ @@ -409,72 +586,89 @@ NetUserAdd(LPCWSTR servername, LPBYTE bufptr, LPDWORD parm_err) { - NET_API_STATUS status; - struct sam_user * su = NULL; + UNICODE_STRING ServerName; + UNICODE_STRING UserName; + SAM_HANDLE ServerHandle = NULL; + SAM_HANDLE DomainHandle = NULL; + SAM_HANDLE UserHandle = NULL; + ULONG GrantedAccess; + ULONG RelativeId; + NET_API_STATUS ApiStatus = NERR_Success; + NTSTATUS Status = STATUS_SUCCESS; - FIXME("(%s, %d, %p, %p) stub!\n", debugstr_w(servername), level, bufptr, parm_err); + TRACE("(%s, %d, %p, %p)\n", debugstr_w(servername), level, bufptr, parm_err); - if((status = NETAPI_ValidateServername(servername)) != NERR_Success) - return status; + /* Check the info level */ + if (level < 1 || level > 4) + return ERROR_INVALID_LEVEL; - switch(level) + if (servername != NULL) + RtlInitUnicodeString(&ServerName, servername); + + /* Connect to the SAM Server */ + Status = SamConnect((servername != NULL) ? &ServerName : NULL, + &ServerHandle, + SAM_SERVER_CONNECT | SAM_SERVER_LOOKUP_DOMAIN, + NULL); + if (!NT_SUCCESS(Status)) { - /* Level 3 and 4 are identical for the purposes of NetUserAdd */ - case 4: - case 3: - FIXME("Level 3 and 4 not implemented.\n"); - /* Fall through */ - case 2: - FIXME("Level 2 not implemented.\n"); - /* Fall through */ - case 1: - { - PUSER_INFO_1 ui = (PUSER_INFO_1) bufptr; - su = HeapAlloc(GetProcessHeap(), 0, sizeof(struct sam_user)); - if(!su) - { - status = NERR_InternalError; - break; - } - - if(lstrlenW(ui->usri1_name) > LM20_UNLEN) - { - status = NERR_BadUsername; - break; - } - - /*FIXME: do other checks for a valid username */ - lstrcpyW(su->user_name, ui->usri1_name); - - if(lstrlenW(ui->usri1_password) > PWLEN) - { - /* Always return PasswordTooShort on invalid passwords. */ - status = NERR_PasswordTooShort; - break; - } - lstrcpyW(su->user_password, ui->usri1_password); - - su->sec_since_passwd_change = ui->usri1_password_age; - su->user_priv = ui->usri1_priv; - su->user_flags = ui->usri1_flags; - - /*FIXME: set the other LPWSTRs to NULL for now */ - su->home_dir = NULL; - su->user_comment = NULL; - su->user_logon_script_path = NULL; - - list_add_head(&user_list, &su->entry); - return NERR_Success; - } - default: - TRACE("Invalid level %d specified.\n", level); - status = ERROR_INVALID_LEVEL; - break; + ERR("SamConnect failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; } - HeapFree(GetProcessHeap(), 0, su); + /* Open the Account Domain */ + Status = OpenAccountDomain(ServerHandle, + (servername != NULL) ? &ServerName : NULL, + DOMAIN_CREATE_USER | DOMAIN_LOOKUP, + &DomainHandle); + if (!NT_SUCCESS(Status)) + { + ERR("OpenAccountDomain failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } - return status; + /* Initialize the user name string */ + RtlInitUnicodeString(&UserName, + ((PUSER_INFO_1)bufptr)->usri1_name); + + /* Create the user account */ + Status = SamCreateUser2InDomain(DomainHandle, + &UserName, + USER_NORMAL_ACCOUNT, + USER_ALL_ACCESS | DELETE | WRITE_DAC, + &UserHandle, + &GrantedAccess, + &RelativeId); + if (!NT_SUCCESS(Status)) + { + ERR("SamCreateUser2InDomain failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + /* Set user information */ + ApiStatus = SetUserInfo(UserHandle, + bufptr, + level); + if (ApiStatus != NERR_Success) + { + ERR("SetUserInfo failed (Status %lu)\n", ApiStatus); + goto done; + } + +done: + if (UserHandle != NULL) + SamCloseHandle(UserHandle); + + if (DomainHandle != NULL) + SamCloseHandle(DomainHandle); + + if (ServerHandle != NULL) + SamCloseHandle(ServerHandle); + + return ApiStatus; } @@ -599,7 +793,7 @@ NetUserEnum(LPCWSTR servername, EnumContext->EnumerationContext = 0; EnumContext->Buffer = NULL; - EnumContext->Returned = 0; + EnumContext->Count = 0; EnumContext->Index = 0; EnumContext->BuiltinDone = FALSE; @@ -639,9 +833,9 @@ NetUserEnum(LPCWSTR servername, // while (TRUE) // { TRACE("EnumContext->Index: %lu\n", EnumContext->Index); - TRACE("EnumContext->Returned: %lu\n", EnumContext->Returned); + TRACE("EnumContext->Count: %lu\n", EnumContext->Count); - if (EnumContext->Index >= EnumContext->Returned) + if (EnumContext->Index >= EnumContext->Count) { // if (EnumContext->BuiltinDone == TRUE) // { @@ -655,7 +849,7 @@ NetUserEnum(LPCWSTR servername, 0, (PVOID *)&EnumContext->Buffer, prefmaxlen, - &EnumContext->Returned); + &EnumContext->Count); TRACE("SamEnumerateUsersInDomain returned (Status %08lx)\n", Status); if (!NT_SUCCESS(Status)) @@ -677,7 +871,7 @@ NetUserEnum(LPCWSTR servername, } TRACE("EnumContext: %lu\n", EnumContext); - TRACE("EnumContext->Returned: %lu\n", EnumContext->Returned); + TRACE("EnumContext->Count: %lu\n", EnumContext->Count); TRACE("EnumContext->Buffer: %p\n", EnumContext->Buffer); /* Get a pointer to the current user */ @@ -731,11 +925,11 @@ NetUserEnum(LPCWSTR servername, // } done: - if (ApiStatus == NERR_Success && EnumContext->Index < EnumContext->Returned) + if (ApiStatus == NERR_Success && EnumContext->Index < EnumContext->Count) ApiStatus = ERROR_MORE_DATA; if (EnumContext != NULL) - *totalentries = EnumContext->Returned; + *totalentries = EnumContext->Count; if (resume_handle == NULL || ApiStatus != ERROR_MORE_DATA) { @@ -752,7 +946,7 @@ done: if (EnumContext->Buffer != NULL) { - for (i = 0; i < EnumContext->Returned; i++) + for (i = 0; i < EnumContext->Count; i++) { SamFreeMemory(EnumContext->Buffer[i].Name.Buffer); } @@ -955,53 +1149,298 @@ NetUserGetLocalGroups(LPCWSTR servername, LPDWORD entriesread, LPDWORD totalentries) { - NET_API_STATUS status; - const WCHAR admins[] = {'A','d','m','i','n','i','s','t','r','a','t','o','r','s',0}; - LPWSTR currentuser; - LOCALGROUP_USERS_INFO_0* info; - DWORD size; + UNICODE_STRING ServerName; + UNICODE_STRING UserName; + SAM_HANDLE ServerHandle = NULL; + SAM_HANDLE BuiltinDomainHandle = NULL; + SAM_HANDLE AccountDomainHandle = NULL; + PSID AccountDomainSid = NULL; + PSID UserSid = NULL; + PULONG RelativeIds = NULL; + PSID_NAME_USE Use = NULL; + ULONG BuiltinMemberCount = 0; + ULONG AccountMemberCount = 0; + PULONG BuiltinAliases = NULL; + PULONG AccountAliases = NULL; + PUNICODE_STRING BuiltinNames = NULL; + PUNICODE_STRING AccountNames = NULL; + PLOCALGROUP_USERS_INFO_0 Buffer = NULL; + ULONG Size; + ULONG Count = 0; + ULONG Index; + ULONG i; + LPWSTR StrPtr; + NET_API_STATUS ApiStatus = NERR_Success; + NTSTATUS Status = STATUS_SUCCESS; - FIXME("(%s, %s, %d, %08x, %p %d, %p, %p) stub!\n", + TRACE("(%s, %s, %d, %08x, %p %d, %p, %p) stub!\n", debugstr_w(servername), debugstr_w(username), level, flags, bufptr, prefmaxlen, entriesread, totalentries); - status = NETAPI_ValidateServername(servername); - if (status != NERR_Success) - return status; + if (level != 0) + return ERROR_INVALID_LEVEL; - size = UNLEN + 1; - NetApiBufferAllocate(size * sizeof(WCHAR), (LPVOID*)¤tuser); - GetUserNameW(currentuser, &size); + if (flags & ~LG_INCLUDE_INDIRECT) + return ERROR_INVALID_PARAMETER; - if (lstrcmpiW(username, currentuser) && NETAPI_FindUser(username)) + if (flags & LG_INCLUDE_INDIRECT) { - NetApiBufferFree(currentuser); - return NERR_UserNotFound; + WARN("The flag LG_INCLUDE_INDIRECT is not supported yet!\n"); } - NetApiBufferFree(currentuser); - *totalentries = 1; - size = sizeof(*info) + sizeof(admins); + if (servername != NULL) + RtlInitUnicodeString(&ServerName, servername); - if(prefmaxlen < size) - status = ERROR_MORE_DATA; - else - status = NetApiBufferAllocate(size, (LPVOID*)&info); + RtlInitUnicodeString(&UserName, username); - if(status != NERR_Success) + /* Connect to the SAM Server */ + Status = SamConnect((servername != NULL) ? &ServerName : NULL, + &ServerHandle, + SAM_SERVER_CONNECT | SAM_SERVER_LOOKUP_DOMAIN, + NULL); + if (!NT_SUCCESS(Status)) + { + ERR("SamConnect failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + /* Open the Builtin Domain */ + Status = OpenBuiltinDomain(ServerHandle, + DOMAIN_LOOKUP | DOMAIN_GET_ALIAS_MEMBERSHIP, + &BuiltinDomainHandle); + if (!NT_SUCCESS(Status)) + { + ERR("OpenBuiltinDomain failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + /* Get the Account Domain SID */ + Status = GetAccountDomainSid((servername != NULL) ? &ServerName : NULL, + &AccountDomainSid); + if (!NT_SUCCESS(Status)) + { + ERR("GetAccountDomainSid failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + /* Open the Account Domain */ + Status = SamOpenDomain(ServerHandle, + DOMAIN_LOOKUP | DOMAIN_GET_ALIAS_MEMBERSHIP, + AccountDomainSid, + &AccountDomainHandle); + if (!NT_SUCCESS(Status)) + { + ERR("OpenAccountDomain failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + /* Get the RID for the given user name */ + Status = SamLookupNamesInDomain(AccountDomainHandle, + 1, + &UserName, + &RelativeIds, + &Use); + if (!NT_SUCCESS(Status)) + { + ERR("SamLookupNamesInDomain failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + /* Fail, if it is not a user account */ + if (Use[0] != SidTypeUser) + { + ERR("Account is not a User!\n"); + ApiStatus = NERR_UserNotFound; + goto done; + } + + /* Build the User SID from the Account Domain SID and the users RID */ + UserSid = CreateSidFromSidAndRid(AccountDomainSid, + RelativeIds[0]); + if (UserSid == NULL) + { + ERR("CreateSidFromSidAndRid failed!\n"); + ApiStatus = ERROR_NOT_ENOUGH_MEMORY; + goto done; + } + + /* Get alias memberships in the Builtin Domain */ + Status = SamGetAliasMembership(BuiltinDomainHandle, + 1, + &UserSid, + &BuiltinMemberCount, + &BuiltinAliases); + if (!NT_SUCCESS(Status)) + { + ERR("SamGetAliasMembership failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + if (BuiltinMemberCount > 0) + { + /* Get the Names of the builtin alias members */ + Status = SamLookupIdsInDomain(BuiltinDomainHandle, + BuiltinMemberCount, + BuiltinAliases, + &BuiltinNames, + NULL); + if (!NT_SUCCESS(Status)) + { + ERR("SamLookupIdsInDomain failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + } + + /* Get alias memberships in the Account Domain */ + Status = SamGetAliasMembership(AccountDomainHandle, + 1, + &UserSid, + &AccountMemberCount, + &AccountAliases); + if (!NT_SUCCESS(Status)) + { + ERR("SamGetAliasMembership failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + + if (AccountMemberCount > 0) + { + /* Get the Names of the builtin alias members */ + Status = SamLookupIdsInDomain(AccountDomainHandle, + AccountMemberCount, + AccountAliases, + &AccountNames, + NULL); + if (!NT_SUCCESS(Status)) + { + ERR("SamLookupIdsInDomain failed (Status %08lx)\n", Status); + ApiStatus = NetpNtStatusToApiStatus(Status); + goto done; + } + } + + /* Calculate the required buffer size */ + Size = 0; + + for (i = 0; i < BuiltinMemberCount; i++) + { + if (BuiltinNames[i].Length > 0) + { + Size += (sizeof(LOCALGROUP_USERS_INFO_0) + BuiltinNames[i].Length + sizeof(UNICODE_NULL)); + Count++; + } + } + + for (i = 0; i < AccountMemberCount; i++) + { + if (BuiltinNames[i].Length > 0) + { + Size += (sizeof(LOCALGROUP_USERS_INFO_0) + AccountNames[i].Length + sizeof(UNICODE_NULL)); + Count++; + } + } + + if (Size == 0) + { + ApiStatus = NERR_Success; + goto done; + } + + /* Allocate buffer */ + ApiStatus = NetApiBufferAllocate(Size, (LPVOID*)&Buffer); + if (ApiStatus != NERR_Success) + goto done; + + ZeroMemory(Buffer, Size); + + StrPtr = (LPWSTR)((INT_PTR)Buffer + Count * sizeof(LOCALGROUP_USERS_INFO_0)); + + /* Copy data to the allocated buffer */ + Index = 0; + for (i = 0; i < BuiltinMemberCount; i++) + { + if (BuiltinNames[i].Length > 0) + { + CopyMemory(StrPtr, + BuiltinNames[i].Buffer, + BuiltinNames[i].Length); + Buffer[Index].lgrui0_name = StrPtr; + + StrPtr = (LPWSTR)((INT_PTR)StrPtr + BuiltinNames[i].Length + sizeof(UNICODE_NULL)); + Index++; + } + } + + for (i = 0; i < AccountMemberCount; i++) + { + if (AccountNames[i].Length > 0) + { + CopyMemory(StrPtr, + AccountNames[i].Buffer, + AccountNames[i].Length); + Buffer[Index].lgrui0_name = StrPtr; + + StrPtr = (LPWSTR)((INT_PTR)StrPtr + AccountNames[i].Length + sizeof(UNICODE_NULL)); + Index++; + } + } + +done: + if (AccountNames != NULL) + SamFreeMemory(AccountNames); + + if (BuiltinNames != NULL) + SamFreeMemory(BuiltinNames); + + if (AccountAliases != NULL) + SamFreeMemory(AccountAliases); + + if (BuiltinAliases != NULL) + SamFreeMemory(BuiltinAliases); + + if (RelativeIds != NULL) + SamFreeMemory(RelativeIds); + + if (Use != NULL) + SamFreeMemory(Use); + + if (UserSid != NULL) + RtlFreeHeap(RtlGetProcessHeap(), 0, UserSid); + + if (AccountDomainSid != NULL) + RtlFreeHeap(RtlGetProcessHeap(), 0, AccountDomainSid); + + if (AccountDomainHandle != NULL) + SamCloseHandle(AccountDomainHandle); + + if (BuiltinDomainHandle != NULL) + SamCloseHandle(BuiltinDomainHandle); + + if (ServerHandle != NULL) + SamCloseHandle(ServerHandle); + + if (ApiStatus != NERR_Success && ApiStatus != ERROR_MORE_DATA) { - *bufptr = NULL; *entriesread = 0; - return status; + *totalentries = 0; + } + else + { + *entriesread = Count; + *totalentries = Count; } - info->lgrui0_name = (LPWSTR)((LPBYTE)info + sizeof(*info)); - lstrcpyW(info->lgrui0_name, admins); + *bufptr = (LPBYTE)Buffer; - *bufptr = (LPBYTE)info; - *entriesread = 1; - - return NERR_Success; + return ApiStatus; } diff --git a/dll/win32/samlib/samlib.c b/dll/win32/samlib/samlib.c index 000fa183714..1b28ba309ac 100644 --- a/dll/win32/samlib/samlib.c +++ b/dll/win32/samlib/samlib.c @@ -212,7 +212,7 @@ SamCloseHandle(IN SAM_HANDLE SamHandle) NTSTATUS NTAPI -SamConnect(IN OUT PUNICODE_STRING ServerName, +SamConnect(IN OUT PUNICODE_STRING ServerName OPTIONAL, OUT PSAM_HANDLE ServerHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes) @@ -682,7 +682,7 @@ SamGetAliasMembership(IN SAM_HANDLE DomainHandle, SAMPR_ULONG_ARRAY Membership; NTSTATUS Status; - TRACE("SamAliasMembership(%p %ul %p %p %p)\n", + TRACE("SamAliasMembership(%p %lu %p %p %p)\n", DomainHandle, PassedCount, Sids, MembershipCount, Aliases); if (Sids == NULL || @@ -905,7 +905,7 @@ SamLookupIdsInDomain(IN SAM_HANDLE DomainHandle, IN ULONG Count, IN PULONG RelativeIds, OUT PUNICODE_STRING *Names, - OUT PSID_NAME_USE *Use) + OUT PSID_NAME_USE *Use OPTIONAL) { SAMPR_RETURNED_USTRING_ARRAY NamesBuffer = {0, NULL}; SAMPR_ULONG_ARRAY UseBuffer = {0, NULL}; @@ -916,7 +916,9 @@ SamLookupIdsInDomain(IN SAM_HANDLE DomainHandle, DomainHandle, Count, RelativeIds, Names, Use); *Names = NULL; - *Use = NULL; + + if (Use != NULL) + *Use = NULL; RpcTryExcept { @@ -951,13 +953,6 @@ SamLookupIdsInDomain(IN SAM_HANDLE DomainHandle, } } - *Use = midl_user_allocate(Count * sizeof(SID_NAME_USE)); - if (*Use == NULL) - { - Status = STATUS_INSUFFICIENT_RESOURCES; - goto done; - } - for (i = 0; i < Count; i++) { (*Names)[i].Length = NamesBuffer.Element[i].Length; @@ -968,9 +963,19 @@ SamLookupIdsInDomain(IN SAM_HANDLE DomainHandle, NamesBuffer.Element[i].Length); } - RtlCopyMemory(*Use, - UseBuffer.Element, - Count * sizeof(SID_NAME_USE)); + if (Use != NULL) + { + *Use = midl_user_allocate(Count * sizeof(SID_NAME_USE)); + if (*Use == NULL) + { + Status = STATUS_INSUFFICIENT_RESOURCES; + goto done; + } + + RtlCopyMemory(*Use, + UseBuffer.Element, + Count * sizeof(SID_NAME_USE)); + } } done: @@ -987,7 +992,7 @@ done: midl_user_free(*Names); } - if (*Use != NULL) + if (Use != NULL && *Use != NULL) midl_user_free(*Use); } @@ -1659,8 +1664,21 @@ NTSTATUS NTAPI SamShutdownSamServer(IN SAM_HANDLE ServerHandle) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + NTSTATUS Status; + + TRACE("(%p)\n", ServerHandle); + + RpcTryExcept + { + Status = SamrShutdownSamServer((SAMPR_HANDLE)ServerHandle); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + Status = I_RpcMapWin32Status(RpcExceptionCode()); + } + RpcEndExcept; + + return Status; } /* EOF */ diff --git a/dll/win32/samsrv/samrpc.c b/dll/win32/samsrv/samrpc.c index edb6dc2ce4f..ebc6020faad 100644 --- a/dll/win32/samsrv/samrpc.c +++ b/dll/win32/samsrv/samrpc.c @@ -17,6 +17,46 @@ WINE_DEFAULT_DEBUG_CHANNEL(samsrv); static SID_IDENTIFIER_AUTHORITY NtSidAuthority = {SECURITY_NT_AUTHORITY}; +static GENERIC_MAPPING ServerMapping = +{ + SAM_SERVER_READ, + SAM_SERVER_WRITE, + SAM_SERVER_EXECUTE, + SAM_SERVER_ALL_ACCESS +}; + +static GENERIC_MAPPING DomainMapping = +{ + DOMAIN_READ, + DOMAIN_WRITE, + DOMAIN_EXECUTE, + DOMAIN_ALL_ACCESS +}; + +static GENERIC_MAPPING AliasMapping = +{ + ALIAS_READ, + ALIAS_WRITE, + ALIAS_EXECUTE, + ALIAS_ALL_ACCESS +}; + +static GENERIC_MAPPING GroupMapping = +{ + GROUP_READ, + GROUP_WRITE, + GROUP_EXECUTE, + GROUP_ALL_ACCESS +}; + +static GENERIC_MAPPING UserMapping = +{ + USER_READ, + USER_WRITE, + USER_EXECUTE, + USER_ALL_ACCESS +}; + /* FUNCTIONS *****************************************************************/ @@ -68,10 +108,12 @@ void __RPC_USER midl_user_free(void __RPC_FAR * ptr) HeapFree(GetProcessHeap(), 0, ptr); } + void __RPC_USER SAMPR_HANDLE_rundown(SAMPR_HANDLE hHandle) { } + /* Function 0 */ NTSTATUS NTAPI @@ -85,6 +127,11 @@ SamrConnect(IN PSAMPR_SERVER_NAME ServerName, TRACE("SamrConnect(%p %p %lx)\n", ServerName, ServerHandle, DesiredAccess); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &ServerMapping); + + /* Open the Server Object */ Status = SampOpenDbObject(NULL, NULL, L"SAM", @@ -100,6 +147,7 @@ SamrConnect(IN PSAMPR_SERVER_NAME ServerName, return Status; } + /* Function 1 */ NTSTATUS NTAPI @@ -125,6 +173,7 @@ SamrCloseHandle(IN OUT SAMPR_HANDLE *SamHandle) return Status; } + /* Function 2 */ NTSTATUS NTAPI @@ -136,6 +185,7 @@ SamrSetSecurityObject(IN SAMPR_HANDLE ObjectHandle, return STATUS_NOT_IMPLEMENTED; } + /* Function 3 */ NTSTATUS NTAPI @@ -147,6 +197,7 @@ SamrQuerySecurityObject(IN SAMPR_HANDLE ObjectHandle, return STATUS_NOT_IMPLEMENTED; } + /* Function 4 */ NTSTATUS NTAPI @@ -486,6 +537,10 @@ SamrOpenDomain(IN SAMPR_HANDLE ServerHandle, TRACE("SamrOpenDomain(%p %lx %p %p)\n", ServerHandle, DesiredAccess, DomainId, DomainHandle); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &DomainMapping); + /* Validate the server handle */ Status = SampValidateDbObject(ServerHandle, SamDbServerObject, @@ -1653,6 +1708,10 @@ SamrCreateGroupInDomain(IN SAMPR_HANDLE DomainHandle, TRACE("SamrCreateGroupInDomain(%p %p %lx %p %p)\n", DomainHandle, Name, DesiredAccess, GroupHandle, RelativeId); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &GroupMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -2019,6 +2078,10 @@ SamrCreateUserInDomain(IN SAMPR_HANDLE DomainHandle, RelativeId == NULL) return STATUS_INVALID_PARAMETER; + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &UserMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -2473,6 +2536,10 @@ SamrCreateAliasInDomain(IN SAMPR_HANDLE DomainHandle, TRACE("SamrCreateAliasInDomain(%p %p %lx %p %p)\n", DomainHandle, AccountName, DesiredAccess, AliasHandle, RelativeId); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &AliasMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -2810,6 +2877,7 @@ SamrGetAliasMembership(IN SAMPR_HANDLE DomainHandle, ULONG DataLength; ULONG i, j; NTSTATUS Status; + WCHAR NameBuffer[9]; TRACE("SamrGetAliasMembership(%p %p %p)\n", DomainHandle, SidArray, Membership); @@ -2817,7 +2885,7 @@ SamrGetAliasMembership(IN SAMPR_HANDLE DomainHandle, /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, - DOMAIN_LOOKUP, + DOMAIN_GET_ALIAS_MEMBERSHIP, &DomainObject); if (!NT_SUCCESS(Status)) return Status; @@ -2835,6 +2903,13 @@ SamrGetAliasMembership(IN SAMPR_HANDLE DomainHandle, KEY_READ, &MembersKeyHandle); TRACE("SampRegOpenKey returned %08lX\n", Status); + + if (Status == STATUS_OBJECT_NAME_NOT_FOUND) + { + Status = STATUS_SUCCESS; + goto done; + } + if (!NT_SUCCESS(Status)) goto done; @@ -2859,13 +2934,21 @@ TRACE("Open %S\n", MemberSidString); MaxSidCount += ValueCount; } - NtClose(MemberKeyHandle); } + if (Status == STATUS_OBJECT_NAME_NOT_FOUND) + Status = STATUS_SUCCESS; + LocalFree(MemberSidString); } + if (MaxSidCount == 0) + { + Status = STATUS_SUCCESS; + goto done; + } + TRACE("Maximum sid count: %lu\n", MaxSidCount); RidArray = midl_user_allocate(MaxSidCount * sizeof(ULONG)); if (RidArray == NULL) @@ -2895,14 +2978,18 @@ TRACE("Open %S\n", MemberSidString); for (j = 0; j < ValueCount; j++) { - DataLength = sizeof(ULONG); + DataLength = 9 * sizeof(WCHAR); Status = SampRegEnumerateValue(MemberKeyHandle, j, - NULL, - NULL, - NULL, - (PVOID)&RidArray[j], - &DataLength); + NameBuffer, + &DataLength, + NULL, + NULL, + NULL); + if (NT_SUCCESS(Status)) + { + RidArray[j] = wcstoul(NameBuffer, NULL, 16); + } } } @@ -2912,7 +2999,6 @@ TRACE("Open %S\n", MemberSidString); LocalFree(MemberSidString); } - done: if (NT_SUCCESS(Status)) { @@ -3452,6 +3538,10 @@ SamrOpenGroup(IN SAMPR_HANDLE DomainHandle, TRACE("SamrOpenGroup(%p %lx %lx %p)\n", DomainHandle, DesiredAccess, GroupId, GroupHandle); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &GroupMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -3900,6 +3990,10 @@ SamrOpenAlias(IN SAMPR_HANDLE DomainHandle, TRACE("SamrOpenAlias(%p %lx %lx %p)\n", DomainHandle, DesiredAccess, AliasId, AliasHandle); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &AliasMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -4565,6 +4659,10 @@ SamrOpenUser(IN SAMPR_HANDLE DomainHandle, TRACE("SamrOpenUser(%p %lx %lx %p)\n", DomainHandle, DesiredAccess, UserId, UserHandle); + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &UserMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -5903,6 +6001,181 @@ done: } +static NTSTATUS +SampSetUserAll(PSAM_DB_OBJECT UserObject, + PSAMPR_USER_INFO_BUFFER Buffer) +{ + SAM_USER_FIXED_DATA FixedData; + ULONG Length = 0; + ULONG WhichFields; + NTSTATUS Status = STATUS_SUCCESS; + + WhichFields = Buffer->All.WhichFields; + + if (WhichFields & USER_ALL_USERNAME) + { + Status = SampSetObjectAttribute(UserObject, + L"Name", + REG_SZ, + Buffer->All.UserName.Buffer, + Buffer->All.UserName.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_FULLNAME) + { + Status = SampSetObjectAttribute(UserObject, + L"FullName", + REG_SZ, + Buffer->All.FullName.Buffer, + Buffer->All.FullName.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_ADMINCOMMENT) + { + Status = SampSetObjectAttribute(UserObject, + L"AdminComment", + REG_SZ, + Buffer->All.AdminComment.Buffer, + Buffer->All.AdminComment.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_USERCOMMENT) + { + Status = SampSetObjectAttribute(UserObject, + L"UserComment", + REG_SZ, + Buffer->All.UserComment.Buffer, + Buffer->All.UserComment.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_HOMEDIRECTORY) + { + Status = SampSetObjectAttribute(UserObject, + L"HomeDirectory", + REG_SZ, + Buffer->All.HomeDirectory.Buffer, + Buffer->All.HomeDirectory.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_HOMEDIRECTORYDRIVE) + { + Status = SampSetObjectAttribute(UserObject, + L"HomeDirectoryDrive", + REG_SZ, + Buffer->All.HomeDirectoryDrive.Buffer, + Buffer->All.HomeDirectoryDrive.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_SCRIPTPATH) + { + Status = SampSetObjectAttribute(UserObject, + L"ScriptPath", + REG_SZ, + Buffer->All.ScriptPath.Buffer, + Buffer->All.ScriptPath.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_PROFILEPATH) + { + Status = SampSetObjectAttribute(UserObject, + L"ProfilePath", + REG_SZ, + Buffer->All.ProfilePath.Buffer, + Buffer->All.ProfilePath.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_WORKSTATIONS) + { + Status = SampSetObjectAttribute(UserObject, + L"WorkStations", + REG_SZ, + Buffer->All.WorkStations.Buffer, + Buffer->All.WorkStations.MaximumLength); + if (!NT_SUCCESS(Status)) + goto done; + } + + if (WhichFields & USER_ALL_PARAMETERS) + { + Status = SampSetObjectAttribute(UserObject, + L"Parameters", + REG_SZ, + Buffer->All.Parameters.Buffer, + Buffer->All.Parameters.MaximumLength); + } + + if (WhichFields & (USER_ALL_PRIMARYGROUPID | + USER_ALL_ACCOUNTEXPIRES | + USER_ALL_USERACCOUNTCONTROL | + USER_ALL_COUNTRYCODE | + USER_ALL_CODEPAGE)) + { + Length = sizeof(SAM_USER_FIXED_DATA); + Status = SampGetObjectAttribute(UserObject, + L"F", + NULL, + (PVOID)&FixedData, + &Length); + if (!NT_SUCCESS(Status)) + goto done; + + if (WhichFields & USER_ALL_PRIMARYGROUPID) + FixedData.PrimaryGroupId = Buffer->All.PrimaryGroupId; + + if (WhichFields & USER_ALL_ACCOUNTEXPIRES) + { + FixedData.AccountExpires.LowPart = Buffer->All.AccountExpires.LowPart; + FixedData.AccountExpires.HighPart = Buffer->All.AccountExpires.HighPart; + } + + if (WhichFields & USER_ALL_USERACCOUNTCONTROL) + FixedData.UserAccountControl = Buffer->All.UserAccountControl; + + if (WhichFields & USER_ALL_COUNTRYCODE) + FixedData.CountryCode = Buffer->Preferences.CountryCode; + + if (WhichFields & USER_ALL_CODEPAGE) + FixedData.CodePage = Buffer->Preferences.CodePage; + + Status = SampSetObjectAttribute(UserObject, + L"F", + REG_BINARY, + &FixedData, + Length); + if (!NT_SUCCESS(Status)) + goto done; + } + +/* +FIXME: + USER_ALL_LOGONHOURS + USER_ALL_NTPASSWORDPRESENT + USER_ALL_LMPASSWORDPRESENT + USER_ALL_PASSWORDEXPIRED +*/ + +done: + + return Status; +} + + /* Function 37 */ NTSTATUS NTAPI @@ -5931,6 +6204,7 @@ SamrSetInformationUser(IN SAMPR_HANDLE UserHandle, case UserWorkStationsInformation: case UserControlInformation: case UserExpiresInformation: + case UserParametersInformation: DesiredAccess = USER_WRITE_ACCOUNT; break; @@ -5947,6 +6221,10 @@ SamrSetInformationUser(IN SAMPR_HANDLE UserHandle, DesiredAccess = USER_FORCE_PASSWORD_CHANGE; break; + case UserAllInformation: + DesiredAccess = 0; /* FIXME */ + break; + default: return STATUS_INVALID_INFO_CLASS; } @@ -6086,8 +6364,20 @@ SamrSetInformationUser(IN SAMPR_HANDLE UserHandle, break; // case UserInternal1Information: -// case UserParametersInformation: -// case UserAllInformation: + + case UserParametersInformation: + Status = SampSetObjectAttribute(UserObject, + L"Parameters", + REG_SZ, + Buffer->Parameters.Parameters.Buffer, + Buffer->Parameters.Parameters.MaximumLength); + break; + + case UserAllInformation: + Status = SampSetUserAll(UserObject, + Buffer); + break; + // case UserInternal4Information: // case UserInternal5Information: // case UserInternal4InformationNew: @@ -6100,6 +6390,7 @@ SamrSetInformationUser(IN SAMPR_HANDLE UserHandle, return Status; } + /* Function 38 */ NTSTATUS NTAPI @@ -6285,6 +6576,10 @@ SamrCreateUser2InDomain(IN SAMPR_HANDLE DomainHandle, AccountType != USER_TEMP_DUPLICATE_ACCOUNT) return STATUS_INVALID_PARAMETER; + /* Map generic access rights */ + RtlMapGenericMask(&DesiredAccess, + &UserMapping); + /* Validate the domain handle */ Status = SampValidateDbObject(DomainHandle, SamDbDomainObject, @@ -6639,6 +6934,7 @@ SamrConnect2(IN PSAMPR_SERVER_NAME ServerName, return STATUS_NOT_IMPLEMENTED; } + /* Function 58 */ NTSTATUS NTAPI @@ -6646,10 +6942,14 @@ SamrSetInformationUser2(IN SAMPR_HANDLE UserHandle, IN USER_INFORMATION_CLASS UserInformationClass, IN PSAMPR_USER_INFO_BUFFER Buffer) { - UNIMPLEMENTED; - return STATUS_NOT_IMPLEMENTED; + TRACE("(%p %lu %p)\n", UserHandle, UserInformationClass, Buffer); + + return SamrSetInformationUser(UserHandle, + UserInformationClass, + Buffer); } + /* Function 59 */ NTSTATUS NTAPI diff --git a/dll/win32/shell32/lang/bg-BG.rc b/dll/win32/shell32/lang/bg-BG.rc index 64aa994d3d9..cb0d71d3659 100644 --- a/dll/win32/shell32/lang/bg-BG.rc +++ b/dll/win32/shell32/lang/bg-BG.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/ca-ES.rc b/dll/win32/shell32/lang/ca-ES.rc index 889dd8ebc1a..adf56502f3d 100644 --- a/dll/win32/shell32/lang/ca-ES.rc +++ b/dll/win32/shell32/lang/ca-ES.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/cs-CZ.rc b/dll/win32/shell32/lang/cs-CZ.rc index efff2daf194..f1860424eed 100644 --- a/dll/win32/shell32/lang/cs-CZ.rc +++ b/dll/win32/shell32/lang/cs-CZ.rc @@ -143,7 +143,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/el-GR.rc b/dll/win32/shell32/lang/el-GR.rc index b58f4089b9f..9b87bcca188 100644 --- a/dll/win32/shell32/lang/el-GR.rc +++ b/dll/win32/shell32/lang/el-GR.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/fi-FI.rc b/dll/win32/shell32/lang/fi-FI.rc index c2b8f9f2a58..f86c4a73be5 100644 --- a/dll/win32/shell32/lang/fi-FI.rc +++ b/dll/win32/shell32/lang/fi-FI.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/fr-FR.rc b/dll/win32/shell32/lang/fr-FR.rc index 767bc3a2992..2348a28247e 100644 --- a/dll/win32/shell32/lang/fr-FR.rc +++ b/dll/win32/shell32/lang/fr-FR.rc @@ -159,7 +159,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Exécuter" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/hu-HU.rc b/dll/win32/shell32/lang/hu-HU.rc index e971fc5b87e..52aa0591d31 100644 --- a/dll/win32/shell32/lang/hu-HU.rc +++ b/dll/win32/shell32/lang/hu-HU.rc @@ -158,7 +158,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/it-IT.rc b/dll/win32/shell32/lang/it-IT.rc index c1febfbfffc..efb90e477ec 100644 --- a/dll/win32/shell32/lang/it-IT.rc +++ b/dll/win32/shell32/lang/it-IT.rc @@ -156,7 +156,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/ja-JP.rc b/dll/win32/shell32/lang/ja-JP.rc index dd17a72811e..264fc372fe9 100644 --- a/dll/win32/shell32/lang/ja-JP.rc +++ b/dll/win32/shell32/lang/ja-JP.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 9, "MS UI Gothic" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/ko-KR.rc b/dll/win32/shell32/lang/ko-KR.rc index 0dfe8745bae..f61e3dbf540 100644 --- a/dll/win32/shell32/lang/ko-KR.rc +++ b/dll/win32/shell32/lang/ko-KR.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/nl-NL.rc b/dll/win32/shell32/lang/nl-NL.rc index 1013a6b0d71..eebea39d441 100644 --- a/dll/win32/shell32/lang/nl-NL.rc +++ b/dll/win32/shell32/lang/nl-NL.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/pl-PL.rc b/dll/win32/shell32/lang/pl-PL.rc index b4cd60ea666..c84de9110c8 100644 --- a/dll/win32/shell32/lang/pl-PL.rc +++ b/dll/win32/shell32/lang/pl-PL.rc @@ -163,7 +163,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/pt-BR.rc b/dll/win32/shell32/lang/pt-BR.rc index 35d5098854a..d0a6a79a312 100644 --- a/dll/win32/shell32/lang/pt-BR.rc +++ b/dll/win32/shell32/lang/pt-BR.rc @@ -158,7 +158,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/pt-PT.rc b/dll/win32/shell32/lang/pt-PT.rc index f3691d5d18c..0898ee757bd 100644 --- a/dll/win32/shell32/lang/pt-PT.rc +++ b/dll/win32/shell32/lang/pt-PT.rc @@ -158,7 +158,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/ru-RU.rc b/dll/win32/shell32/lang/ru-RU.rc index 7e4fbfea97f..86bafafee9f 100644 --- a/dll/win32/shell32/lang/ru-RU.rc +++ b/dll/win32/shell32/lang/ru-RU.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/sl-SI.rc b/dll/win32/shell32/lang/sl-SI.rc index 8a0cd0af30f..9d383276006 100644 --- a/dll/win32/shell32/lang/sl-SI.rc +++ b/dll/win32/shell32/lang/sl-SI.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/sv-SE.rc b/dll/win32/shell32/lang/sv-SE.rc index 9f502fd8849..f7ec76d08dd 100644 --- a/dll/win32/shell32/lang/sv-SE.rc +++ b/dll/win32/shell32/lang/sv-SE.rc @@ -155,7 +155,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/zh-CN.rc b/dll/win32/shell32/lang/zh-CN.rc index 0082df8fdd4..9885effdb00 100644 --- a/dll/win32/shell32/lang/zh-CN.rc +++ b/dll/win32/shell32/lang/zh-CN.rc @@ -146,7 +146,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/lang/zh-TW.rc b/dll/win32/shell32/lang/zh-TW.rc index 54bd3019060..2944d51d48e 100644 --- a/dll/win32/shell32/lang/zh-TW.rc +++ b/dll/win32/shell32/lang/zh-TW.rc @@ -145,7 +145,7 @@ END IDD_RUN DIALOGEX LOADONCALL MOVEABLE DISCARDABLE 0, 0, 227, 95 STYLE DS_SHELLFONT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU -CAPTION "" +CAPTION "Run" FONT 8, "MS Shell Dlg" BEGIN ICON "", 12297, 7, 11, 18, 20, WS_VISIBLE diff --git a/dll/win32/shell32/shell32.spec b/dll/win32/shell32/shell32.spec index 589ec730ab2..e8324b5966c 100644 --- a/dll/win32/shell32/shell32.spec +++ b/dll/win32/shell32/shell32.spec @@ -1,4 +1,3 @@ -# Functions exported by the WinXP SP3 shell32.dll (6.0.2900.5686) 2 stdcall SHChangeNotifyRegister(long long long long long ptr) 3 stdcall SHDefExtractIconA(str long long ptr ptr long) 4 stdcall SHChangeNotifyDeregister(long) @@ -27,7 +26,7 @@ 27 stdcall ILSaveToStream(ptr ptr) 28 stdcall SHILCreateFromPath(ptr ptr ptr) SHILCreateFromPathAW 29 stdcall -noname PathIsRoot(ptr) PathIsRootAW -30 stdcall -noname PathBuildRoot(ptr long) PathBuildRootAW +30 stdcall -noname PathBuildRoot(ptr long) PathBuildRootAW # FIXME: should be PathBuildRootW 31 stdcall -noname PathFindExtension(wstr) PathFindExtensionW 32 stdcall -noname PathAddBackslash(wstr) PathAddBackslashW 33 stdcall -noname PathRemoveBlanks(wstr) PathRemoveBlanksW @@ -41,7 +40,6 @@ 41 stdcall IsLFNDriveA(str) 42 stdcall IsLFNDriveW(wstr) 43 stdcall PathIsExe(ptr) PathIsExeAW -44 stdcall OpenAs_RunDLL(long long str long) OpenAs_RunDLLA 45 stdcall -noname PathFileExists(ptr) PathFileExistsAW # Fixme 46 stdcall -noname PathMatchSpec(wstr wstr) PathMatchSpecW 47 stdcall PathMakeUniqueName(ptr long ptr ptr ptr) PathMakeUniqueNameAW @@ -50,7 +48,7 @@ 50 stdcall -noname PathStripToRoot(wstr) PathStripToRootW 51 stdcall PathResolve(str long long) PathResolveAW 52 stdcall -noname PathGetArgs(wstr) PathGetArgsW -53 stdcall -noname IsSuspendAllowed() +53 stdcall -noname IsSuspendAllowed() # FIXME: Wine says DoEnvironmentSubst 54 stdcall -noname LogoffWindowsDialog(ptr) 55 stdcall -noname PathQuoteSpaces(wstr) PathQuoteSpacesW 56 stdcall -noname PathUnquoteSpaces(wstr) PathUnquoteSpacesW @@ -68,27 +66,26 @@ 68 stdcall SHGetSetSettings(ptr long long) 69 stdcall -noname SHGetNetResource(ptr long ptr long) 70 stdcall -noname SHCreateDefClassObject(long long long long long) -71 stdcall -noname Shell_GetImageLists(ptr ptr) +71 stdcall Shell_GetImageLists(ptr ptr) 72 stdcall Shell_GetCachedImageIndex(ptr ptr long) Shell_GetCachedImageIndexAW 73 stdcall SHShellFolderView_Message(long long long) 74 stdcall SHCreateStdEnumFmtEtc(long ptr ptr) 75 stdcall PathYetAnotherMakeUniqueName(ptr wstr wstr wstr) -76 stdcall DragQueryInfo(ptr ptr) +76 stdcall -noname DragQueryInfo(ptr ptr) 77 stdcall SHMapPIDLToSystemImageListIndex(ptr ptr ptr) 78 stdcall -noname OleStrToStrN(str long wstr long) OleStrToStrNAW # Fixme 79 stdcall -noname StrToOleStrN(wstr long str long) StrToOleStrNAW # Fixme 80 stdcall SHOpenPropSheetW(wstr ptr long ptr ptr ptr wstr) -81 stdcall OpenAs_RunDLLA(long long str long) 82 stdcall -noname DDECreatePostNotify(ptr) 83 stdcall -noname CIDLData_CreateFromIDArray(ptr long ptr ptr) -84 stdcall SHIsBadInterfacePtr(ptr long) # Fixme +84 stdcall -noname SHIsBadInterfacePtr(ptr long) # Fixme 85 stdcall OpenRegStream(long str str long) shlwapi.SHOpenRegStreamA 86 stdcall -noname SHRegisterDragDrop(long ptr) 87 stdcall -noname SHRevokeDragDrop(long) 88 stdcall SHDoDragDrop(long ptr ptr long ptr) 89 stdcall SHCloneSpecialIDList(long long long) 90 stdcall SHFindFiles(ptr ptr) -91 stdcall SHFindComputer(ptr ptr) +91 stdcall -noname SHFindComputer(ptr ptr) 92 stdcall PathGetShortPath(ptr) PathGetShortPathAW 93 stdcall -noname Win32CreateDirectory(wstr ptr) Win32CreateDirectoryW 94 stdcall -noname Win32RemoveDirectory(wstr) Win32RemoveDirectoryW @@ -98,31 +95,12 @@ 98 stdcall SHGetRealIDL(ptr ptr ptr) 99 stdcall -noname SetAppStartingCursor(long long) # Fixme 100 stdcall SHRestricted(long) -101 stdcall OpenAs_RunDLLW(long long wstr long) 102 stdcall SHCoCreateInstance(wstr ptr long ptr ptr) -103 stdcall SignalFileOpen(long) -104 stdcall Activate_RunDLL(long ptr ptr ptr) -105 stdcall AppCompat_RunDLLW(ptr ptr wstr long) -106 stdcall CheckEscapesA(str long) -107 stdcall CheckEscapesW(wstr long) -108 stdcall CommandLineToArgvW(wstr ptr) -109 stdcall Control_FillCache_RunDLL(long long long long) Control_FillCache_RunDLLA -110 stdcall Control_FillCache_RunDLLA(long long long long) -111 stdcall Control_FillCache_RunDLLW(long long long long) -112 stdcall Control_RunDLL(ptr ptr str long) Control_RunDLLA -113 stdcall Control_RunDLLA(ptr ptr str long) -114 stdcall Control_RunDLLAsUserW(ptr ptr wstr long) -115 stdcall Control_RunDLLW(ptr ptr wstr long) -@ stdcall -private DllCanUnloadNow() -@ stdcall -private DllGetClassObject(ptr ptr ptr) -118 stdcall DllGetVersion(ptr) +103 stdcall SignalFileOpen(ptr) 119 stdcall IsLFNDrive(ptr) IsLFNDriveAW -@ stdcall -private DllInstall(long wstr) 121 stdcall SHFlushClipboard() 122 stdcall -noname RunDLL_CallEntry16(long long long str long) # Fixme #name wrong? 123 stdcall -noname SHFreeUnusedLibraries() -@ stdcall -private DllRegisterServer() -@ stdcall -private DllUnregisterServer() 126 stdcall -noname SHOutOfMemoryMessageBox(long long long) # Fixme 127 stdcall -noname SHWinHelp(long long long long) 128 stdcall -noname SHDllGetClassObject(ptr ptr ptr) DllGetClassObject @@ -130,24 +108,14 @@ 130 stdcall -noname DAD_DragEnter(long) 131 stdcall DAD_DragEnterEx(long double) 132 stdcall DAD_DragLeave() -133 stdcall DoEnvironmentSubstA(str str) 134 stdcall DAD_DragMove(double) -135 stdcall DoEnvironmentSubstW(wstr wstr) 136 stdcall DAD_SetDragImage(long long) 137 stdcall DAD_ShowDragImage(long) -138 stdcall DragAcceptFiles(long long) -139 stdcall DragFinish(long) -140 stdcall DragQueryFile(long long ptr long) DragQueryFileA -141 stdcall DragQueryFileA(long long ptr long) -142 stdcall DragQueryFileAorW(ptr long wstr long long long) -143 stdcall DragQueryFileW(long long ptr long) -144 stdcall DragQueryPoint(long ptr) 145 stdcall -noname PathFindOnPath(wstr wstr) PathFindOnPathW 146 stdcall -noname RLBuildListOfPaths() 147 stdcall SHCLSIDFromString(long long) SHCLSIDFromStringAW 148 stdcall SHMapIDListToImageListIndexAsync(ptr ptr ptr long ptr ptr ptr ptr ptr) 149 stdcall SHFind_InitMenuPopup(long long long long) -150 stdcall DuplicateIcon(long long) 151 stdcall SHLoadOLE(long) 152 stdcall ILGetSize(ptr) 153 stdcall ILGetNext(ptr) @@ -157,7 +125,7 @@ 157 stdcall ILCreateFromPath(ptr) ILCreateFromPathAW 158 stdcall -noname PathGetExtension(wstr long long) SHPathGetExtensionW 159 stdcall -noname PathIsDirectory(wstr) PathIsDirectoryW -160 stdcall SHNetConnectionDialog(ptr wstr long) # Fixme +160 stdcall -noname SHNetConnectionDialog(ptr wstr long) # Fixme 161 stdcall SHRunControlPanel(long long) 162 stdcall SHSimpleIDListFromPath(ptr) SHSimpleIDListFromPathAW # Fixme 163 stdcall -noname StrToOleStr(wstr str) StrToOleStrAW # Fixme @@ -179,8 +147,8 @@ 179 stdcall SHGetNewLinkInfoA(str str ptr long long) 180 stdcall SHGetNewLinkInfoW(wstr wstr ptr long long) 181 stdcall -noname RegisterShellHook(long long) -182 varargs ShellMessageBoxA(long long str str long) -183 varargs ShellMessageBoxW(long long wstr wstr long) +182 varargs ShellMessageBoxW(long long wstr wstr long) +183 varargs ShellMessageBoxA(long long str str long) 184 stdcall -noname ArrangeWindows(long long long long long) 185 stdcall -noname SHHandleDiskFull(ptr long) # Fixme 186 stdcall -noname ILGetDisplayNameEx(ptr ptr ptr long) @@ -196,16 +164,13 @@ 196 stdcall SHAlloc(long) 197 stdcall -noname SHGlobalDefect(long) 198 stdcall -noname SHAbortInvokeCommand() -199 stdcall ExtractAssociatedIconA(long str ptr) +# FIXME: Wine has SHGetFileIcon/SHLocalAlloc/SHLocalFree/SHLocalReAlloc from 199-202 200 stdcall -noname SHCreateDesktop(ptr) 201 stdcall -noname SHDesktopMessageLoop(ptr) 202 stub -noname DDEHandleViewFolderNotify 203 stdcall -noname AddCommasW(long wstr) 204 stdcall -noname ShortSizeFormatW(double) -205 stdcall Printer_LoadIconsW(wstr ptr ptr) -206 stdcall ExtractAssociatedIconExA(long str long long) -207 stdcall ExtractAssociatedIconExW(long wstr long long) -208 stdcall ExtractAssociatedIconW(long wstr ptr) +205 stdcall -noname Printer_LoadIconsW(wstr ptr ptr) 209 stdcall -noname Int64ToString(double wstr long long ptr long) # Fixme 210 stdcall -noname LargeIntegerToString(ptr wstr long long ptr long) # Fixme 211 stdcall -noname Printers_GetPidl(ptr str) # Fixme @@ -213,20 +178,6 @@ 213 stdcall -noname Printers_RegisterWindowW(wstr long ptr ptr) 214 stdcall -noname Printers_UnregisterWindow(long long) 215 stdcall -noname SHStartNetConnectionDialog(long str long) -216 stdcall ExtractIconA(long str long) -217 stdcall ExtractIconEx(ptr long ptr ptr long) ExtractIconExA -218 stdcall ExtractIconExA(str long ptr ptr long) -219 stdcall ExtractIconExW(wstr long ptr ptr long) -220 stdcall ExtractIconResInfoA(ptr str long ptr ptr) -221 stdcall ExtractIconResInfoW(ptr wstr long ptr ptr) -222 stdcall ExtractIconW(long wstr long) -223 stdcall ExtractVersionResource16W(wstr ptr) -224 stdcall FindExeDlgProc(ptr long ptr ptr) -225 stdcall FindExecutableA(str str ptr) -226 stdcall FindExecutableW(wstr wstr ptr) -227 stdcall FreeIconList(long) -228 stdcall InternalExtractIconListA(ptr str ptr) -229 stdcall InternalExtractIconListW(ptr wstr ptr) 230 stdcall -noname FirstUserLogon(wstr wstr) 231 stdcall -noname SHSetFolderPathA(long ptr long str) 232 stdcall -noname SHSetFolderPathW(long ptr long wstr) @@ -235,7 +186,6 @@ 235 stdcall -noname SHOpenEffectiveToken(ptr) 236 stdcall -noname SHTestTokenPrivilegeW(ptr ptr) 237 stdcall -noname SHShouldShowWizards(ptr) -238 stdcall Options_RunDLL(ptr ptr str long) 239 stdcall PathIsSlowW(wstr long) 240 stdcall PathIsSlowA(str long) 241 stdcall -noname SHGetUserDisplayName(wstr ptr) @@ -252,148 +202,10 @@ 252 stdcall -noname PathIsURL(wstr) shlwapi.PathIsURLW 253 stub -noname SHIsCurrentProcessConsoleSession 254 stub -noname DisconnectWindowsDialog -255 stdcall Options_RunDLLA(ptr ptr str long) 256 stdcall SHCreateShellFolderView(ptr ptr) 257 stdcall -noname SHGetShellFolderViewCB(ptr) 258 stdcall -noname LinkWindow_RegisterClass() 259 stdcall -noname LinkWindow_UnregisterClass() -260 stdcall Options_RunDLLW(ptr ptr wstr long) -261 stdcall PrintersGetCommand_RunDLL(ptr ptr wstr long) -262 stdcall PrintersGetCommand_RunDLLA(ptr ptr str long) -263 stdcall PrintersGetCommand_RunDLLW(ptr ptr wstr long) -264 stdcall RealShellExecuteA(ptr str str str str str str str long ptr) -265 stdcall RealShellExecuteExA(ptr str str str str str str str long ptr long) -266 stdcall RealShellExecuteExW(ptr str str str str str str str long ptr long) -267 stdcall RealShellExecuteW(ptr wstr wstr wstr wstr wstr wstr wstr long ptr) -268 stdcall RegenerateUserEnvironment(ptr long) -269 stdcall SHAddToRecentDocs(long ptr) -270 stdcall SHAppBarMessage(long ptr) -271 stdcall SHBindToParent(ptr ptr ptr ptr) -272 stdcall SHBrowseForFolder(ptr) SHBrowseForFolderA -273 stdcall SHBrowseForFolderA(ptr) -274 stdcall SHBrowseForFolderW(ptr) -275 stdcall SHChangeNotify(long long ptr ptr) -276 stdcall SHChangeNotifySuspendResume(long ptr long long) -277 stdcall SHCreateDirectoryExA(long str ptr) -278 stdcall SHCreateDirectoryExW(long wstr ptr) -279 stub SHCreateLocalServerRunDll -280 stdcall SHCreateProcessAsUserW(ptr) -281 stdcall SHCreateQueryCancelAutoPlayMoniker(ptr) -282 stdcall SHCreateShellItem(ptr ptr ptr ptr) -283 stdcall SHEmptyRecycleBinA(long str long) -284 stdcall SHEmptyRecycleBinW(long wstr long) -285 stub SHEnableServiceObject -286 stub SHEnumerateUnreadMailAccountsW -287 stdcall SHExtractIconsW(wstr long long long ptr ptr long long) user32.PrivateExtractIconsW -288 stdcall SHFileOperation(ptr) SHFileOperationA -289 stdcall SHFileOperationA(ptr) -290 stdcall SHFileOperationW(ptr) -291 stdcall SHFormatDrive(long long long long) -292 stdcall SHFreeNameMappings(ptr) -293 stdcall SHGetDataFromIDListA(ptr ptr long ptr long) -294 stdcall SHGetDataFromIDListW(ptr ptr long ptr long) -295 stdcall SHGetDesktopFolder(ptr) -296 stdcall SHGetDiskFreeSpaceA(str ptr ptr ptr) kernel32.GetDiskFreeSpaceExA -297 stdcall SHGetDiskFreeSpaceExA(str ptr ptr ptr) kernel32.GetDiskFreeSpaceExA -298 stdcall SHGetDiskFreeSpaceExW(wstr ptr ptr ptr) kernel32.GetDiskFreeSpaceExW -299 stdcall SHGetFileInfo(ptr long ptr long long) SHGetFileInfoA -300 stdcall SHGetFileInfoA(ptr long ptr long long) -301 stdcall SHGetFileInfoW(ptr long ptr long long) -302 stdcall SHGetFolderLocation(long long long long ptr) -303 stdcall SHGetFolderPathA(long long long long ptr) -304 stdcall SHGetFolderPathAndSubDirA(long long long long str ptr) -305 stdcall SHGetFolderPathAndSubDirW(long long long long wstr ptr) -306 stdcall SHGetFolderPathW(long long long long ptr) -307 stdcall SHGetIconOverlayIndexA(str long) -308 stdcall SHGetIconOverlayIndexW(wstr long) -309 stdcall SHGetInstanceExplorer(long) -310 stdcall SHGetMalloc(ptr) -311 stdcall SHGetNewLinkInfo(str str ptr long long) SHGetNewLinkInfoA -312 stdcall SHGetPathFromIDList(ptr ptr) SHGetPathFromIDListA -313 stdcall SHGetPathFromIDListA(ptr ptr) -314 stdcall SHGetPathFromIDListW(ptr ptr) -315 stdcall SHGetSettings(ptr long) -316 stdcall SHGetSpecialFolderLocation(long long ptr) -317 stdcall SHGetSpecialFolderPathA(long ptr long long) -318 stdcall SHGetSpecialFolderPathW(long ptr long long) -319 stdcall SHGetUnreadMailCountW (long wstr long ptr wstr long) -320 stdcall SHHelpShortcuts_RunDLL(long long long long) SHHelpShortcuts_RunDLLA -321 stdcall SHHelpShortcuts_RunDLLA(long long long long) -322 stdcall SHHelpShortcuts_RunDLLW(long long long long) -323 stdcall SHInvokePrinterCommandA(ptr long str str long) -324 stdcall SHInvokePrinterCommandW(ptr long wstr wstr long) -325 stdcall SHIsFileAvailableOffline(wstr ptr) -326 stdcall SHLoadInProc(long) -327 stdcall SHLoadNonloadedIconOverlayIdentifiers() -328 stdcall SHOpenFolderAndSelectItems(ptr long ptr long) -329 stdcall SHParseDisplayName(wstr ptr ptr long ptr) -330 stdcall SHPathPrepareForWriteA(long ptr str long) -331 stdcall SHPathPrepareForWriteW(long ptr wstr long) -332 stdcall SHQueryRecycleBinA(str ptr) -333 stdcall SHQueryRecycleBinW(wstr ptr) -334 stdcall SHSetLocalizedName(wstr wstr long) -335 stdcall SHSetUnreadMailCountW (wstr long wstr) -336 stdcall SHUpdateRecycleBinIcon() -337 stdcall SheChangeDirA(str) -338 stdcall SheChangeDirExA(str) -339 stdcall SheChangeDirExW(wstr) -340 stdcall SheChangeDirW(wstr) -341 stdcall SheConvertPathW(wstr wstr long) -342 stdcall SheFullPathA(str long str) -343 stdcall SheFullPathW(wstr long wstr) -344 stdcall SheGetCurDrive() -345 stdcall SheGetDirA(long long) -346 stdcall SheGetDirExW(wstr ptr wstr) -347 stdcall SheGetDirW(long long) -348 stdcall SheGetPathOffsetW(wstr) -349 stdcall SheRemoveQuotesA(str) -350 stdcall SheRemoveQuotesW(wstr) -351 stdcall SheSetCurDrive(long) -352 stdcall SheShortenPathA(str long) -353 stdcall SheShortenPathW(wstr long) -354 stdcall ShellAboutA(long str str long) -355 stdcall ShellAboutW(long wstr wstr long) -356 stdcall ShellExec_RunDLL(ptr ptr wstr long) -357 stdcall ShellExec_RunDLLA(ptr ptr str long) -358 stdcall ShellExec_RunDLLW(ptr ptr wstr long) -359 stdcall ShellExecuteA(long str str str str long) -360 stdcall ShellExecuteEx(long) ShellExecuteExA -361 stdcall ShellExecuteExA (long) -362 stdcall ShellExecuteExW (long) -363 stdcall ShellExecuteW(long wstr wstr wstr wstr long) -364 stdcall ShellHookProc(long ptr ptr) -365 stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIconA -366 stdcall Shell_NotifyIconA(long ptr) -367 stdcall Shell_NotifyIconW(long ptr) -368 stdcall StrChrA(str long) shlwapi.StrChrA -369 stdcall StrChrIA(str long) shlwapi.StrChrIA -370 stdcall StrChrIW(wstr long) shlwapi.StrChrIW -371 stdcall StrChrW(wstr long) shlwapi.StrChrW -372 stdcall StrCmpNA(str str long) shlwapi.StrCmpNA -373 stdcall StrCmpNIA(str str long) shlwapi.StrCmpNIA -374 stdcall StrCmpNIW(wstr wstr long) shlwapi.StrCmpNIW -375 stdcall StrCmpNW(wstr wstr long) shlwapi.StrCmpNW -376 stdcall StrCpyNA (ptr str long) kernel32.lstrcpynA -377 stdcall StrCpyNW(wstr wstr long) shlwapi.StrCpyNW -378 stdcall StrNCmpA(str str long) shlwapi.StrCmpNA -379 stdcall StrNCmpIA(str str long) shlwapi.StrCmpNIA -380 stdcall StrNCmpIW(wstr wstr long) shlwapi.StrCmpNIW -381 stdcall StrNCmpW(wstr wstr long) shlwapi.StrCmpNW -382 stdcall StrNCpyA (ptr str long) kernel32.lstrcpynA -383 stdcall StrNCpyW(wstr wstr long) shlwapi.StrCpyNW -384 stdcall StrRChrA(str str long) shlwapi.StrRChrA -385 stdcall StrRChrIA(str str long) shlwapi.StrRChrIA -386 stdcall StrRChrIW(str str long) shlwapi.StrRChrIW -387 stdcall StrRChrW(wstr wstr long) shlwapi.StrRChrW -388 stdcall StrRStrA(str str str) -389 stdcall StrRStrIA(str str str) shlwapi.StrRStrIA -390 stdcall StrRStrIW(wstr wstr wstr) shlwapi.StrRStrIW -391 stdcall StrRStrW(wstr wstr wstr) -392 stdcall StrStrA(str str) shlwapi.StrStrA -393 stdcall StrStrIA(str str) shlwapi.StrStrIA -394 stdcall StrStrIW(wstr wstr) shlwapi.StrStrIW -395 stdcall StrStrW(wstr wstr) shlwapi.StrStrW -396 stdcall WOWShellExecute(ptr wstr wstr wstr wstr long ptr) 520 stdcall SHAllocShared(ptr long long) 521 stdcall SHLockShared(long long) 522 stdcall SHUnlockShared(ptr) @@ -465,6 +277,195 @@ 755 stdcall -noname PathIsEqualOrSubFolder(wstr wstr) 756 stub -noname DeleteFileThumbnail +@ stdcall Activate_RunDLL(long ptr ptr ptr) +@ stdcall AppCompat_RunDLLW(ptr ptr wstr long) +@ stdcall CheckEscapesA(str long) +@ stdcall CheckEscapesW(wstr long) +@ stdcall CommandLineToArgvW(wstr ptr) +@ stdcall Control_FillCache_RunDLL(long long long long) Control_FillCache_RunDLLA +@ stdcall Control_FillCache_RunDLLA(long long long long) +@ stdcall Control_FillCache_RunDLLW(long long long long) +@ stdcall Control_RunDLL(ptr ptr str long) Control_RunDLLA +@ stdcall Control_RunDLLA(ptr ptr str long) +@ stdcall Control_RunDLLAsUserW(ptr ptr wstr long) +@ stdcall Control_RunDLLW(ptr ptr wstr long) +@ stdcall -private DllCanUnloadNow() +@ stdcall -private DllGetClassObject(ptr ptr ptr) +@ stdcall -private DllGetVersion(ptr) +@ stdcall -private DllInstall(long wstr) +@ stdcall -private DllRegisterServer() +@ stdcall -private DllUnregisterServer() +@ stdcall DoEnvironmentSubstA(str str) +@ stdcall DoEnvironmentSubstW(wstr wstr) +@ stdcall DragAcceptFiles(long long) +@ stdcall DragFinish(long) +@ stdcall DragQueryFile(long long ptr long) DragQueryFileA +@ stdcall DragQueryFileA(long long ptr long) +@ stdcall DragQueryFileAorW(ptr long wstr long long long) +@ stdcall DragQueryFileW(long long ptr long) +@ stdcall DragQueryPoint(long ptr) +@ stdcall DuplicateIcon(long long) +@ stdcall ExtractAssociatedIconA(long str ptr) +@ stdcall ExtractAssociatedIconExA(long str long long) +@ stdcall ExtractAssociatedIconExW(long wstr long long) +@ stdcall ExtractAssociatedIconW(long wstr ptr) +@ stdcall ExtractIconA(long str long) +@ stdcall ExtractIconEx(ptr long ptr ptr long) ExtractIconExA +@ stdcall ExtractIconExA(str long ptr ptr long) +@ stdcall ExtractIconExW(wstr long ptr ptr long) +@ stdcall ExtractIconResInfoA(ptr str long ptr ptr) +@ stdcall ExtractIconResInfoW(ptr wstr long ptr ptr) +@ stdcall ExtractIconW(long wstr long) +@ stdcall ExtractVersionResource16W(wstr ptr) +@ stdcall FindExecutableA(str str ptr) +@ stdcall FindExecutableW(wstr wstr ptr) +@ stdcall FindExeDlgProc(ptr long ptr ptr) +@ stdcall FreeIconList(long) +@ stdcall InternalExtractIconListA(ptr str ptr) +@ stdcall InternalExtractIconListW(ptr wstr ptr) +@ stdcall OpenAs_RunDLL(long long str long) OpenAs_RunDLLA +@ stdcall OpenAs_RunDLLA(long long str long) +@ stdcall OpenAs_RunDLLW(long long wstr long) +@ stdcall Options_RunDLL(ptr ptr str long) +@ stdcall Options_RunDLLA(ptr ptr str long) +@ stdcall Options_RunDLLW(ptr ptr wstr long) +@ stdcall PrintersGetCommand_RunDLL(ptr ptr wstr long) +@ stdcall PrintersGetCommand_RunDLLA(ptr ptr str long) +@ stdcall PrintersGetCommand_RunDLLW(ptr ptr wstr long) +@ stdcall RealShellExecuteA(ptr str str str str str str str long ptr) +@ stdcall RealShellExecuteExA(ptr str str str str str str str long ptr long) +@ stdcall RealShellExecuteExW(ptr str str str str str str str long ptr long) +@ stdcall RealShellExecuteW(ptr wstr wstr wstr wstr wstr wstr wstr long ptr) +@ stdcall RegenerateUserEnvironment(ptr long) +@ stdcall SHAddToRecentDocs(long ptr) +@ stdcall SHAppBarMessage(long ptr) +@ stdcall SHBindToParent(ptr ptr ptr ptr) +@ stdcall SHBrowseForFolder(ptr) SHBrowseForFolderA +@ stdcall SHBrowseForFolderA(ptr) +@ stdcall SHBrowseForFolderW(ptr) +@ stdcall SHChangeNotify(long long ptr ptr) +@ stdcall SHChangeNotifySuspendResume(long ptr long long) +@ stdcall SHCreateDirectoryExA(long str ptr) +@ stdcall SHCreateDirectoryExW(long wstr ptr) +@ stub SHCreateLocalServerRunDll +@ stdcall SHCreateProcessAsUserW(ptr) +@ stdcall SHCreateQueryCancelAutoPlayMoniker(ptr) +@ stdcall SHCreateShellItem(ptr ptr ptr ptr) +@ stdcall SHEmptyRecycleBinA(long str long) +@ stdcall SHEmptyRecycleBinW(long wstr long) +@ stub SHEnableServiceObject +@ stub SHEnumerateUnreadMailAccountsW +@ stdcall SHExtractIconsW(wstr long long long ptr ptr long long) user32.PrivateExtractIconsW +@ stdcall SHFileOperation(ptr) SHFileOperationA +@ stdcall SHFileOperationA(ptr) +@ stdcall SHFileOperationW(ptr) +@ stdcall SHFormatDrive(long long long long) +@ stdcall SHFreeNameMappings(ptr) +@ stdcall SHGetDataFromIDListA(ptr ptr long ptr long) +@ stdcall SHGetDataFromIDListW(ptr ptr long ptr long) +@ stdcall SHGetDesktopFolder(ptr) +@ stdcall SHGetDiskFreeSpaceA(str ptr ptr ptr) kernel32.GetDiskFreeSpaceExA +@ stdcall SHGetDiskFreeSpaceExA(str ptr ptr ptr) kernel32.GetDiskFreeSpaceExA +@ stdcall SHGetDiskFreeSpaceExW(wstr ptr ptr ptr) kernel32.GetDiskFreeSpaceExW +@ stdcall SHGetFileInfo(ptr long ptr long long) SHGetFileInfoA +@ stdcall SHGetFileInfoA(ptr long ptr long long) +@ stdcall SHGetFileInfoW(ptr long ptr long long) +@ stdcall SHGetFolderLocation(long long long long ptr) +@ stdcall SHGetFolderPathA(long long long long ptr) +@ stdcall SHGetFolderPathAndSubDirA(long long long long str ptr) +@ stdcall SHGetFolderPathAndSubDirW(long long long long wstr ptr) +@ stdcall SHGetFolderPathW(long long long long ptr) +@ stdcall SHGetIconOverlayIndexA(str long) +@ stdcall SHGetIconOverlayIndexW(wstr long) +@ stdcall SHGetInstanceExplorer(long) +@ stdcall SHGetMalloc(ptr) +@ stdcall SHGetNewLinkInfo(str str ptr long long) SHGetNewLinkInfoA +@ stdcall SHGetPathFromIDList(ptr ptr) SHGetPathFromIDListA +@ stdcall SHGetPathFromIDListA(ptr ptr) +@ stdcall SHGetPathFromIDListW(ptr ptr) +@ stdcall SHGetSettings(ptr long) +@ stdcall SHGetSpecialFolderLocation(long long ptr) +@ stdcall SHGetSpecialFolderPathA(long ptr long long) +@ stdcall SHGetSpecialFolderPathW(long ptr long long) +@ stdcall SHGetUnreadMailCountW (long wstr long ptr wstr long) +@ stdcall SHHelpShortcuts_RunDLL(long long long long) SHHelpShortcuts_RunDLLA +@ stdcall SHHelpShortcuts_RunDLLA(long long long long) +@ stdcall SHHelpShortcuts_RunDLLW(long long long long) +@ stdcall SHInvokePrinterCommandA(ptr long str str long) +@ stdcall SHInvokePrinterCommandW(ptr long wstr wstr long) +@ stdcall SHIsFileAvailableOffline(wstr ptr) +@ stdcall SHLoadInProc(long) +@ stdcall SHLoadNonloadedIconOverlayIdentifiers() +@ stdcall SHOpenFolderAndSelectItems(ptr long ptr long) +@ stdcall SHParseDisplayName(wstr ptr ptr long ptr) +@ stdcall SHPathPrepareForWriteA(long ptr str long) +@ stdcall SHPathPrepareForWriteW(long ptr wstr long) +@ stdcall SHQueryRecycleBinA(str ptr) +@ stdcall SHQueryRecycleBinW(wstr ptr) +@ stdcall SHSetLocalizedName(wstr wstr long) +@ stdcall SHSetUnreadMailCountW (wstr long wstr) +@ stdcall SHUpdateRecycleBinIcon() +@ stdcall SheChangeDirA(str) +@ stdcall SheChangeDirExA(str) +@ stdcall SheChangeDirExW(wstr) +@ stdcall SheChangeDirW(wstr) +@ stdcall SheConvertPathW(wstr wstr long) +@ stdcall SheFullPathA(str long str) +@ stdcall SheFullPathW(wstr long wstr) +@ stdcall SheGetCurDrive() +@ stdcall SheGetDirA(long long) +@ stdcall SheGetDirExW(wstr ptr wstr) +@ stdcall SheGetDirW(long long) +@ stdcall SheGetPathOffsetW(wstr) +@ stdcall SheRemoveQuotesA(str) +@ stdcall SheRemoveQuotesW(wstr) +@ stdcall SheSetCurDrive(long) +@ stdcall SheShortenPathA(str long) +@ stdcall SheShortenPathW(wstr long) +@ stdcall ShellAboutA(long str str long) +@ stdcall ShellAboutW(long wstr wstr long) +@ stdcall ShellExec_RunDLL(ptr ptr wstr long) +@ stdcall ShellExec_RunDLLA(ptr ptr str long) +@ stdcall ShellExec_RunDLLW(ptr ptr wstr long) +@ stdcall ShellExecuteA(long str str str str long) +@ stdcall ShellExecuteEx(long) ShellExecuteExA +@ stdcall ShellExecuteExA (long) +@ stdcall ShellExecuteExW (long) +@ stdcall ShellExecuteW(long wstr wstr wstr wstr long) +@ stdcall ShellHookProc(long ptr ptr) +@ stdcall Shell_NotifyIcon(long ptr) Shell_NotifyIconA +@ stdcall Shell_NotifyIconA(long ptr) +@ stdcall Shell_NotifyIconW(long ptr) +@ stdcall StrChrA(str long) shlwapi.StrChrA +@ stdcall StrChrIA(str long) shlwapi.StrChrIA +@ stdcall StrChrIW(wstr long) shlwapi.StrChrIW +@ stdcall StrChrW(wstr long) shlwapi.StrChrW +@ stdcall StrCmpNA(str str long) shlwapi.StrCmpNA +@ stdcall StrCmpNIA(str str long) shlwapi.StrCmpNIA +@ stdcall StrCmpNIW(wstr wstr long) shlwapi.StrCmpNIW +@ stdcall StrCmpNW(wstr wstr long) shlwapi.StrCmpNW +@ stdcall StrCpyNA (ptr str long) kernel32.lstrcpynA +@ stdcall StrCpyNW(wstr wstr long) shlwapi.StrCpyNW +@ stdcall StrNCmpA(str str long) shlwapi.StrCmpNA +@ stdcall StrNCmpIA(str str long) shlwapi.StrCmpNIA +@ stdcall StrNCmpIW(wstr wstr long) shlwapi.StrCmpNIW +@ stdcall StrNCmpW(wstr wstr long) shlwapi.StrCmpNW +@ stdcall StrNCpyA (ptr str long) kernel32.lstrcpynA +@ stdcall StrNCpyW(wstr wstr long) shlwapi.StrCpyNW +@ stdcall StrRChrA(str str long) shlwapi.StrRChrA +@ stdcall StrRChrIA(str str long) shlwapi.StrRChrIA +@ stdcall StrRChrIW(wstr wstr long) shlwapi.StrRChrIW +@ stdcall StrRChrW(wstr wstr long) shlwapi.StrRChrW +@ stdcall StrRStrA(str str str) +@ stdcall StrRStrIA(str str str) shlwapi.StrRStrIA +@ stdcall StrRStrIW(wstr wstr wstr) shlwapi.StrRStrIW +@ stdcall StrRStrW(wstr wstr wstr) +@ stdcall StrStrA(str str) shlwapi.StrStrA +@ stdcall StrStrIA(str str) shlwapi.StrStrIA +@ stdcall StrStrIW(wstr wstr) shlwapi.StrStrIW +@ stdcall StrStrW(wstr wstr) shlwapi.StrStrW +@ stdcall WOWShellExecute(ptr str str str str long ptr) + # Functions exported by the WinVista shell32.dll @ stdcall SHCreateDefaultContextMenu(ptr ptr ptr) @ stdcall SHCreateDefaultExtractIcon(ptr ptr) @@ -495,6 +496,7 @@ @ stdcall FileMenu_GetItemExtent(long long) # 4.0 (NT) and higher. Until discontinued in 5.0 +# FIXME: ordinals 505-512? @ stdcall SHRegCloseKey(long) @ stdcall SHRegOpenKeyA(long str long) @ stdcall SHRegOpenKeyW(long wstr long) diff --git a/dll/win32/syssetup/wizard.c b/dll/win32/syssetup/wizard.c index ea1b22c335a..f1caf2ac4a7 100644 --- a/dll/win32/syssetup/wizard.c +++ b/dll/win32/syssetup/wizard.c @@ -348,6 +348,7 @@ AckPageDlgProc(HWND hwndDlg, if (HIWORD(wParam) == BN_CLICKED && IDC_VIEWGPL == LOWORD(wParam)) { DialogBox(hDllInstance, MAKEINTRESOURCE(IDD_GPL), NULL, GplDlgProc); + SetForegroundWindow(GetParent(hwndDlg)); } break; diff --git a/drivers/bus/pcix/device.c b/drivers/bus/pcix/device.c index 360f5ceec5a..c8a1accdfcf 100644 --- a/drivers/bus/pcix/device.c +++ b/drivers/bus/pcix/device.c @@ -262,7 +262,7 @@ Device_GetAdditionalResourceDescriptors(IN PPCI_CONFIGURATOR_CONTEXT Context, { /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -272,7 +272,7 @@ Device_ResetDevice(IN PPCI_PDO_EXTENSION PdoExtension, { /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -282,7 +282,7 @@ Device_ChangeResourceSettings(IN PPCI_PDO_EXTENSION PdoExtension, { /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* EOF */ diff --git a/drivers/bus/pcix/enum.c b/drivers/bus/pcix/enum.c index 537c78fb775..4fde88f0aa2 100644 --- a/drivers/bus/pcix/enum.c +++ b/drivers/bus/pcix/enum.c @@ -148,13 +148,13 @@ PciComputeNewCurrentSettings(IN PPCI_PDO_EXTENSION PdoExtension, /* Not used in the driver yet */ case 1: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; /* Not used in the driver yet */ case 2: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; /* A drain request */ @@ -541,7 +541,8 @@ PciQueryEjectionRelations(IN PPCI_PDO_EXTENSION PdoExtension, { /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } NTSTATUS @@ -599,7 +600,7 @@ PciQueryRequirements(IN PPCI_PDO_EXTENSION PdoExtension, { /* Have not tested this on eVb's machine yet */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* Check if the requirements are actually the zero list */ @@ -1522,7 +1523,7 @@ PciProcessBus(IN PPCI_FDO_EXTENSION DeviceExtension) { /* Not really handling this year */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); /* Check for PCI bridges with the ISA bit set, or required */ if ((PdoExtension) && @@ -1532,7 +1533,7 @@ PciProcessBus(IN PPCI_FDO_EXTENSION DeviceExtension) { /* We'll need to do some legacy support */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } } else @@ -1547,7 +1548,7 @@ PciProcessBus(IN PPCI_FDO_EXTENSION DeviceExtension) { /* Again, some more legacy support we'll have to do */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } } } @@ -1557,7 +1558,7 @@ PciProcessBus(IN PPCI_FDO_EXTENSION DeviceExtension) { /* Not yet supported */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } } @@ -1606,7 +1607,7 @@ PciScanBus(IN PPCI_FDO_EXTENSION DeviceExtension) { DPRINT1("PCI: Bus numbers have been changed! Restoring originals.\n"); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } } @@ -1668,7 +1669,7 @@ PciScanBus(IN PPCI_FDO_EXTENSION DeviceExtension) { /* Check if this PCI device is the ACPI Watchdog Device... */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* Check for non-simple devices */ @@ -1734,7 +1735,7 @@ PciScanBus(IN PPCI_FDO_EXTENSION DeviceExtension) { /* Rescan scenarios are not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* Bus processing will need to happen */ @@ -2197,7 +2198,7 @@ PciSetResources(IN PPCI_PDO_EXTENSION PdoExtension, { /* Don't have hotplug devices to test with yet, QEMU 0.14 should */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* Locate the correct resource configurator for this type of device */ diff --git a/drivers/bus/pcix/fdo.c b/drivers/bus/pcix/fdo.c index 785dfca3c52..ed80518b793 100644 --- a/drivers/bus/pcix/fdo.c +++ b/drivers/bus/pcix/fdo.c @@ -94,7 +94,7 @@ PciFdoIrpStartDevice(IN PIRP Irp, /* These resources would only be for non-root FDOs, unhandled for now */ ASSERT(Resources->Count == 1); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* Initialize the arbiter for this FDO */ @@ -112,7 +112,7 @@ PciFdoIrpStartDevice(IN PIRP Irp, /* Unhandled for now */ ASSERT(Resources->Count == 1); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* Commit the transition to the started state */ @@ -137,7 +137,7 @@ PciFdoIrpRemoveDevice(IN PIRP Irp, IN PPCI_FDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -148,7 +148,7 @@ PciFdoIrpCancelRemoveDevice(IN PIRP Irp, IN PPCI_FDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -159,7 +159,7 @@ PciFdoIrpStopDevice(IN PIRP Irp, IN PPCI_FDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -170,7 +170,7 @@ PciFdoIrpQueryStopDevice(IN PIRP Irp, IN PPCI_FDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -181,7 +181,7 @@ PciFdoIrpCancelStopDevice(IN PIRP Irp, IN PPCI_FDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -319,7 +319,7 @@ PciFdoIrpDeviceUsageNotification(IN PIRP Irp, IN PPCI_FDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -330,7 +330,7 @@ PciFdoIrpSurpriseRemoval(IN PIRP Irp, IN PPCI_FDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -341,7 +341,7 @@ PciFdoIrpQueryLegacyBusInformation(IN PIRP Irp, IN PPCI_FDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -393,7 +393,7 @@ PciGetHotPlugParameters(IN PPCI_FDO_EXTENSION FdoExtension) /* HotPlug PCI Support not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } while (FALSE); /* Free the buffer and return */ @@ -545,7 +545,7 @@ PciAddDevice(IN PDRIVER_OBJECT DriverObject, { /* Root PDO in ReactOS does not assign boot resources */ UNIMPLEMENTED; -// while (TRUE); + ASSERT(FALSE); // while (TRUE); DPRINT1("Encountered during setup\n"); Descriptor = NULL; } @@ -554,7 +554,7 @@ PciAddDevice(IN PDRIVER_OBJECT DriverObject, { /* Root PDO in ReactOS does not assign boot resources */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } else { diff --git a/drivers/bus/pcix/init.c b/drivers/bus/pcix/init.c index 45e02ae011f..36d1d930ee4 100644 --- a/drivers/bus/pcix/init.c +++ b/drivers/bus/pcix/init.c @@ -679,7 +679,7 @@ PciGetDebugPorts(IN HANDLE DebugKey) { /* This function is not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } @@ -690,7 +690,7 @@ PciDriverUnload(IN PDRIVER_OBJECT DriverObject) /* This function is not yet implemented */ DPRINT1("PCI: Unload\n"); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } NTSTATUS diff --git a/drivers/bus/pcix/intrface/agpintrf.c b/drivers/bus/pcix/intrface/agpintrf.c index a860ad15bfa..e9d285dc921 100644 --- a/drivers/bus/pcix/intrface/agpintrf.c +++ b/drivers/bus/pcix/intrface/agpintrf.c @@ -59,7 +59,8 @@ agpintrf_Constructor(IN PVOID DeviceExtension, /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } /* EOF */ diff --git a/drivers/bus/pcix/intrface/busintrf.c b/drivers/bus/pcix/intrface/busintrf.c index 08681cb1be7..a6dc65d561f 100644 --- a/drivers/bus/pcix/intrface/busintrf.c +++ b/drivers/bus/pcix/intrface/busintrf.c @@ -49,7 +49,8 @@ busintrf_Constructor(IN PVOID DeviceExtension, { /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } /* EOF */ diff --git a/drivers/bus/pcix/intrface/cardbus.c b/drivers/bus/pcix/intrface/cardbus.c index e51fb12f308..be6ce008cdf 100644 --- a/drivers/bus/pcix/intrface/cardbus.c +++ b/drivers/bus/pcix/intrface/cardbus.c @@ -34,7 +34,7 @@ NTAPI Cardbus_SaveCurrentSettings(IN PPCI_CONFIGURATOR_CONTEXT Context) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -42,7 +42,7 @@ NTAPI Cardbus_SaveLimits(IN PPCI_CONFIGURATOR_CONTEXT Context) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -50,7 +50,7 @@ NTAPI Cardbus_MassageHeaderForLimitsDetermination(IN PPCI_CONFIGURATOR_CONTEXT Context) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -58,7 +58,7 @@ NTAPI Cardbus_RestoreCurrent(IN PPCI_CONFIGURATOR_CONTEXT Context) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -68,7 +68,7 @@ Cardbus_GetAdditionalResourceDescriptors(IN PPCI_CONFIGURATOR_CONTEXT Context, IN PIO_RESOURCE_DESCRIPTOR IoDescriptor) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -77,7 +77,7 @@ Cardbus_ResetDevice(IN PPCI_PDO_EXTENSION PdoExtension, IN PPCI_COMMON_HEADER PciData) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -86,7 +86,7 @@ Cardbus_ChangeResourceSettings(IN PPCI_PDO_EXTENSION PdoExtension, IN PPCI_COMMON_HEADER PciData) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } NTSTATUS @@ -109,7 +109,8 @@ pcicbintrf_Constructor(IN PVOID DeviceExtension, { /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } /* EOF */ diff --git a/drivers/bus/pcix/intrface/devhere.c b/drivers/bus/pcix/intrface/devhere.c index 919ff30dc56..b2d4548dd21 100644 --- a/drivers/bus/pcix/intrface/devhere.c +++ b/drivers/bus/pcix/intrface/devhere.c @@ -51,7 +51,8 @@ devpresent_Constructor(IN PVOID DeviceExtension, /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } /* EOF */ diff --git a/drivers/bus/pcix/intrface/lddintrf.c b/drivers/bus/pcix/intrface/lddintrf.c index 6665427f1fd..512390e66f1 100644 --- a/drivers/bus/pcix/intrface/lddintrf.c +++ b/drivers/bus/pcix/intrface/lddintrf.c @@ -49,7 +49,8 @@ lddintrf_Constructor(IN PVOID DeviceExtension, { /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } /* EOF */ diff --git a/drivers/bus/pcix/intrface/locintrf.c b/drivers/bus/pcix/intrface/locintrf.c index f2ca1797ba7..814d69e808e 100644 --- a/drivers/bus/pcix/intrface/locintrf.c +++ b/drivers/bus/pcix/intrface/locintrf.c @@ -49,7 +49,8 @@ locintrf_Constructor(IN PVOID DeviceExtension, { /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } /* EOF */ diff --git a/drivers/bus/pcix/intrface/pmeintf.c b/drivers/bus/pcix/intrface/pmeintf.c index 5b59e9af68b..0debb22eba4 100644 --- a/drivers/bus/pcix/intrface/pmeintf.c +++ b/drivers/bus/pcix/intrface/pmeintf.c @@ -52,7 +52,8 @@ PciPmeInterfaceConstructor(IN PVOID DeviceExtension, /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } /* EOF */ diff --git a/drivers/bus/pcix/intrface/routintf.c b/drivers/bus/pcix/intrface/routintf.c index d7b7b458b4d..f7e53711be6 100644 --- a/drivers/bus/pcix/intrface/routintf.c +++ b/drivers/bus/pcix/intrface/routintf.c @@ -54,7 +54,8 @@ routeintrf_Constructor(IN PVOID DeviceExtension, /* Not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } NTSTATUS diff --git a/drivers/bus/pcix/pci/config.c b/drivers/bus/pcix/pci/config.c index 453656d2fde..c4fc3c71b6d 100644 --- a/drivers/bus/pcix/pci/config.c +++ b/drivers/bus/pcix/pci/config.c @@ -66,7 +66,7 @@ PciReadWriteConfigSpace(IN PPCI_FDO_EXTENSION DeviceExtension, { /* Currently this driver only supports the legacy HAL interface */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } else { diff --git a/drivers/bus/pcix/pci/ppbridge.c b/drivers/bus/pcix/pci/ppbridge.c index 57b660d2134..7881f1dc448 100644 --- a/drivers/bus/pcix/pci/ppbridge.c +++ b/drivers/bus/pcix/pci/ppbridge.c @@ -672,7 +672,7 @@ PPBridge_ResetDevice(IN PPCI_PDO_EXTENSION PdoExtension, IN PPCI_COMMON_HEADER PciData) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID diff --git a/drivers/bus/pcix/pcivrify.c b/drivers/bus/pcix/pcivrify.c index f51f02dba89..1d04ee73dd9 100644 --- a/drivers/bus/pcix/pcivrify.c +++ b/drivers/bus/pcix/pcivrify.c @@ -80,7 +80,7 @@ PciVerifierProfileChangeCallback(IN PVOID NotificationStructure, { /* This function is not yet implemented */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } diff --git a/drivers/bus/pcix/pdo.c b/drivers/bus/pcix/pdo.c index 4bbc524dec0..7a647d6eca8 100644 --- a/drivers/bus/pcix/pdo.c +++ b/drivers/bus/pcix/pdo.c @@ -80,7 +80,7 @@ PciPdoWaitWake(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -101,7 +101,7 @@ PciPdoIrpQueryPower(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -219,7 +219,7 @@ PciPdoIrpRemoveDevice(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -230,7 +230,7 @@ PciPdoIrpCancelRemoveDevice(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -241,7 +241,7 @@ PciPdoIrpStopDevice(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -252,7 +252,7 @@ PciPdoIrpQueryStopDevice(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -263,7 +263,7 @@ PciPdoIrpCancelStopDevice(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -274,7 +274,7 @@ PciPdoIrpQueryInterface(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -405,7 +405,7 @@ PciPdoIrpReadConfig(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -416,7 +416,7 @@ PciPdoIrpWriteConfig(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -437,7 +437,7 @@ PciPdoIrpDeviceUsageNotification(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -448,7 +448,7 @@ PciPdoIrpSurpriseRemoval(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } @@ -459,7 +459,7 @@ PciPdoIrpQueryLegacyBusInformation(IN PIRP Irp, IN PPCI_PDO_EXTENSION DeviceExtension) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_NOT_SUPPORTED; } diff --git a/drivers/bus/pcix/power.c b/drivers/bus/pcix/power.c index d57c1b78398..d52aab00ae6 100644 --- a/drivers/bus/pcix/power.c +++ b/drivers/bus/pcix/power.c @@ -192,7 +192,8 @@ PciSetPowerManagedDevicePowerState(IN PPCI_PDO_EXTENSION DeviceExtension, { /* We would normally re-assign resources after powerup */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + Status = STATUS_NOT_IMPLEMENTED; } } diff --git a/drivers/bus/pcix/utils.c b/drivers/bus/pcix/utils.c index 5948e8a5168..d7511f769cd 100644 --- a/drivers/bus/pcix/utils.c +++ b/drivers/bus/pcix/utils.c @@ -153,7 +153,7 @@ PciIsDatacenter(VOID) { /* This scenario shouldn't happen yet, since SetupDD isn't used */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* Return if this is Datacenter or not */ @@ -758,7 +758,8 @@ PciIsDeviceOnDebugPath(IN PPCI_PDO_EXTENSION DeviceExtension) /* eVb has not been able to test such devices yet */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return FALSE; } NTSTATUS diff --git a/drivers/ksfilter/ks/device.c b/drivers/ksfilter/ks/device.c index a382c4e87d3..c93b0b9ac49 100644 --- a/drivers/ksfilter/ks/device.c +++ b/drivers/ksfilter/ks/device.c @@ -218,7 +218,7 @@ IKsDevice_fnCheckIoCapability( return STATUS_NOT_IMPLEMENTED; } -static IKsDeviceVtbl vt_IKsDevice = +static IKsDeviceVtbl vt_IKsDevice = { IKsDevice_fnQueryInterface, IKsDevice_fnAddRef, @@ -631,12 +631,16 @@ IKsDevice_Create( ASSERT(ObjectHeader); /* find a matching a create item */ - Status = FindMatchingCreateItem(&ObjectHeader->ItemList, IoStack->FileObject->FileName.Length, IoStack->FileObject->FileName.Buffer, &CreateItemEntry); + Status = FindMatchingCreateItem(&ObjectHeader->ItemList, + &IoStack->FileObject->FileName, + &CreateItemEntry); } else { /* request to create a filter */ - Status = FindMatchingCreateItem(&DeviceHeader->ItemList, IoStack->FileObject->FileName.Length, IoStack->FileObject->FileName.Buffer, &CreateItemEntry); + Status = FindMatchingCreateItem(&DeviceHeader->ItemList, + &IoStack->FileObject->FileName, + &CreateItemEntry); } if (NT_SUCCESS(Status)) diff --git a/drivers/ksfilter/ks/irp.c b/drivers/ksfilter/ks/irp.c index 307437140c9..d2ca995a699 100644 --- a/drivers/ksfilter/ks/irp.c +++ b/drivers/ksfilter/ks/irp.c @@ -1175,7 +1175,7 @@ KsDefaultDeviceIoCompletion( /* get current irp stack */ IoStack = IoGetCurrentIrpStackLocation(Irp); - if (IoStack->Parameters.DeviceIoControl.IoControlCode != IOCTL_KS_PROPERTY && + if (IoStack->Parameters.DeviceIoControl.IoControlCode != IOCTL_KS_PROPERTY && IoStack->Parameters.DeviceIoControl.IoControlCode != IOCTL_KS_METHOD && IoStack->Parameters.DeviceIoControl.IoControlCode != IOCTL_KS_PROPERTY) { @@ -1744,41 +1744,53 @@ KsCancelRoutine( NTSTATUS FindMatchingCreateItem( PLIST_ENTRY ListHead, - ULONG BufferSize, - LPWSTR Buffer, + PUNICODE_STRING String, OUT PCREATE_ITEM_ENTRY *OutCreateItem) { PLIST_ENTRY Entry; PCREATE_ITEM_ENTRY CreateItemEntry; UNICODE_STRING RefString; LPWSTR pStr; + ULONG Count; - /* get terminator */ - pStr = wcschr(Buffer, L'\\'); + /* Copy the input string */ + RefString = *String; - /* sanity check */ - ASSERT(pStr != NULL); - - if (pStr == Buffer) + /* Check if the string starts with a backslash */ + if (String->Buffer[0] == L'\\') { - // skip slash - RtlInitUnicodeString(&RefString, ++pStr); + /* Skip backslash */ + RefString.Buffer++; + RefString.Length -= sizeof(WCHAR); } else { + /* get terminator */ + pStr = String->Buffer; + Count = String->Length / sizeof(WCHAR); + while ((Count > 0) && (*pStr != L'\\')) + { + pStr++; + Count--; + } + + /* sanity check */ + ASSERT(Count != 0); + // request is for pin / node / allocator - RefString.Buffer = Buffer; - RefString.Length = BufferSize = RefString.MaximumLength = ((ULONG_PTR)pStr - (ULONG_PTR)Buffer); + RefString.Length = (USHORT)((PCHAR)pStr - (PCHAR)String->Buffer); } /* point to first entry */ Entry = ListHead->Flink; /* loop all device items */ - while(Entry != ListHead) + while (Entry != ListHead) { /* get create item entry */ - CreateItemEntry = (PCREATE_ITEM_ENTRY)CONTAINING_RECORD(Entry, CREATE_ITEM_ENTRY, Entry); + CreateItemEntry = (PCREATE_ITEM_ENTRY)CONTAINING_RECORD(Entry, + CREATE_ITEM_ENTRY, + Entry); ASSERT(CreateItemEntry->CreateItem); @@ -1796,10 +1808,11 @@ FindMatchingCreateItem( continue; } - DPRINT("CreateItem %S Length %u Request %wZ %u\n", CreateItemEntry->CreateItem->ObjectClass.Buffer, - CreateItemEntry->CreateItem->ObjectClass.Length, - &RefString, - RefString.Length); + DPRINT("CreateItem %S Length %u Request %wZ %u\n", + CreateItemEntry->CreateItem->ObjectClass.Buffer, + CreateItemEntry->CreateItem->ObjectClass.Length, + &RefString, + RefString.Length); if (CreateItemEntry->CreateItem->ObjectClass.Length > RefString.Length) { @@ -1809,7 +1822,9 @@ FindMatchingCreateItem( } /* now check if the object class is the same */ - if (!RtlCompareUnicodeString(&CreateItemEntry->CreateItem->ObjectClass, &RefString, TRUE)) + if (!RtlCompareUnicodeString(&CreateItemEntry->CreateItem->ObjectClass, + &RefString, + TRUE)) { /* found matching create item */ *OutCreateItem = CreateItemEntry; @@ -1865,12 +1880,16 @@ KspCreate( ASSERT(ObjectHeader); /* find a matching a create item */ - Status = FindMatchingCreateItem(&ObjectHeader->ItemList, IoStack->FileObject->FileName.Length, IoStack->FileObject->FileName.Buffer, &CreateItemEntry); + Status = FindMatchingCreateItem(&ObjectHeader->ItemList, + &IoStack->FileObject->FileName, + &CreateItemEntry); } else { /* request to create a filter */ - Status = FindMatchingCreateItem(&DeviceHeader->ItemList, IoStack->FileObject->FileName.Length, IoStack->FileObject->FileName.Buffer, &CreateItemEntry); + Status = FindMatchingCreateItem(&DeviceHeader->ItemList, + &IoStack->FileObject->FileName, + &CreateItemEntry); } if (NT_SUCCESS(Status)) diff --git a/drivers/ksfilter/ks/ksfunc.h b/drivers/ksfilter/ks/ksfunc.h index 1c51a8c1c80..fc039f13fe1 100644 --- a/drivers/ksfilter/ks/ksfunc.h +++ b/drivers/ksfilter/ks/ksfunc.h @@ -106,8 +106,7 @@ KspPinPropertyHandler( NTSTATUS FindMatchingCreateItem( PLIST_ENTRY ListHead, - ULONG BufferSize, - LPWSTR Buffer, + PUNICODE_STRING String, OUT PCREATE_ITEM_ENTRY *OutCreateItem); NTSTATUS diff --git a/drivers/storage/class/ramdisk/ramdisk.c b/drivers/storage/class/ramdisk/ramdisk.c index 42b94c9b0a0..06f6461b2a8 100644 --- a/drivers/storage/class/ramdisk/ramdisk.c +++ b/drivers/storage/class/ramdisk/ramdisk.c @@ -773,7 +773,7 @@ RamdiskCreateDiskDevice(IN PRAMDISK_BUS_EXTENSION DeviceExtension, FailCreate: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } @@ -1068,7 +1068,7 @@ RamdiskWorkerThread(IN PDEVICE_OBJECT DeviceObject, DPRINT1("Get drive layout request\n"); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_DISK_GET_PARTITION_INFO: @@ -1080,7 +1080,7 @@ RamdiskWorkerThread(IN PDEVICE_OBJECT DeviceObject, DPRINT1("Invalid request\n"); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; } @@ -1097,7 +1097,7 @@ RamdiskWorkerThread(IN PDEVICE_OBJECT DeviceObject, DPRINT1("Read/Write request\n"); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; // @@ -1107,7 +1107,7 @@ RamdiskWorkerThread(IN PDEVICE_OBJECT DeviceObject, DPRINT1("SCSI request\n"); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; // @@ -1117,7 +1117,7 @@ RamdiskWorkerThread(IN PDEVICE_OBJECT DeviceObject, DPRINT1("Flush request\n"); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; // @@ -1127,7 +1127,7 @@ RamdiskWorkerThread(IN PDEVICE_OBJECT DeviceObject, DPRINT1("Invalid request: %lx\n", IoStackLocation->MajorFunction); UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; } @@ -1481,8 +1481,7 @@ RamdiskDeviceControl(IN PDEVICE_OBJECT DeviceObject, // // We don't handle anything else yet // - ASSERT(FALSE); - while (TRUE); + ASSERT(FALSE); // while (TRUE); } } else @@ -1498,7 +1497,7 @@ RamdiskDeviceControl(IN PDEVICE_OBJECT DeviceObject, case IOCTL_CDROM_CHECK_VERIFY: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_STORAGE_GET_MEDIA_TYPES: @@ -1664,67 +1663,67 @@ RamdiskDeviceControl(IN PDEVICE_OBJECT DeviceObject, case IOCTL_DISK_GET_DRIVE_LAYOUT: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_DISK_GET_LENGTH_INFO: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_DISK_IS_WRITABLE: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_SCSI_MINIPORT: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_STORAGE_QUERY_PROPERTY: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_MOUNTDEV_QUERY_UNIQUE_ID: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_MOUNTDEV_QUERY_STABLE_GUID: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_VOLUME_SET_GPT_ATTRIBUTES: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_VOLUME_GET_GPT_ATTRIBUTES: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IOCTL_VOLUME_OFFLINE: UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; default: @@ -1793,7 +1792,7 @@ RamdiskQueryDeviceRelations(IN DEVICE_RELATION_TYPE Type, // FIXME: TODO // UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } // @@ -1980,7 +1979,7 @@ RamdiskDeleteDiskDevice(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } @@ -2148,37 +2147,37 @@ RamdiskPnp(IN PDEVICE_OBJECT DeviceObject, case IRP_MN_START_DEVICE: DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IRP_MN_QUERY_STOP_DEVICE: DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IRP_MN_CANCEL_STOP_DEVICE: DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IRP_MN_STOP_DEVICE: DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IRP_MN_QUERY_REMOVE_DEVICE: DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IRP_MN_CANCEL_REMOVE_DEVICE: DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IRP_MN_REMOVE_DEVICE: @@ -2213,7 +2212,7 @@ RamdiskPnp(IN PDEVICE_OBJECT DeviceObject, case IRP_MN_SURPRISE_REMOVAL: DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IRP_MN_QUERY_ID: @@ -2224,7 +2223,7 @@ RamdiskPnp(IN PDEVICE_OBJECT DeviceObject, if (DeviceExtension->Type == RamdiskDrive) { DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); } break; @@ -2236,14 +2235,14 @@ RamdiskPnp(IN PDEVICE_OBJECT DeviceObject, if (DeviceExtension->Type == RamdiskDrive) { DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); } break; case IRP_MN_EJECT: DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); break; case IRP_MN_QUERY_DEVICE_TEXT: @@ -2254,7 +2253,7 @@ RamdiskPnp(IN PDEVICE_OBJECT DeviceObject, if (DeviceExtension->Type == RamdiskDrive) { DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); } break; @@ -2278,7 +2277,7 @@ RamdiskPnp(IN PDEVICE_OBJECT DeviceObject, if (DeviceExtension->Type == RamdiskDrive) { DPRINT1("PnP IRP: %lx\n", Minor); - while (TRUE); + ASSERT(FALSE); // while (TRUE); } break; diff --git a/drivers/usb/usbhub/fdo.c b/drivers/usb/usbhub/fdo.c index 0342b13bc17..d6c62988acf 100644 --- a/drivers/usb/usbhub/fdo.c +++ b/drivers/usb/usbhub/fdo.c @@ -1,4 +1,4 @@ -/* +/* * PROJECT: ReactOS Universal Serial Bus Hub Driver * LICENSE: GPL - See COPYING in the top level directory * FILE: drivers/usb/usbhub/fdo.c diff --git a/hal/halx86/acpi/halpnpdd.c b/hal/halx86/acpi/halpnpdd.c index a0bf7439ad5..37e13eea43c 100644 --- a/hal/halx86/acpi/halpnpdd.c +++ b/hal/halx86/acpi/halpnpdd.c @@ -814,7 +814,7 @@ HalpDispatchWmi(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { DPRINT1("HAL: PnP Driver WMI!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } diff --git a/hal/halx86/generic/bios.c b/hal/halx86/generic/bios.c index 2fb9ef98f01..fa159e09239 100644 --- a/hal/halx86/generic/bios.c +++ b/hal/halx86/generic/bios.c @@ -216,6 +216,8 @@ HalpTrap0DHandler(IN PKTRAP_FRAME TrapFrame) /* Strange, it isn't! This can happen during NMI */ DPRINT1("HAL: Trap0D while not in V86 mode\n"); KiDumpTrapFrame(TrapFrame); + + ASSERT(FALSE); while (TRUE); } diff --git a/hal/halx86/generic/misc.c b/hal/halx86/generic/misc.c index 1c3790187e2..87be9c8a5bd 100644 --- a/hal/halx86/generic/misc.c +++ b/hal/halx86/generic/misc.c @@ -229,7 +229,7 @@ HalHandleNMI(IN PVOID NmiInfo) // // Don't recurse // - if (HalpNMIInProgress++) while (TRUE); + if (HalpNMIInProgress++) ASSERT(FALSE); // while (TRUE); // // Read the system control register B diff --git a/hal/halx86/generic/spinlock.c b/hal/halx86/generic/spinlock.c index 77aaa217113..d9cf19b4e29 100644 --- a/hal/halx86/generic/spinlock.c +++ b/hal/halx86/generic/spinlock.c @@ -182,7 +182,8 @@ KeTryToAcquireQueuedSpinLockRaiseToSynch(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, { #ifdef CONFIG_SMP ASSERT(FALSE); // FIXME: Unused - while (TRUE); + // while (TRUE); + return FALSE; #endif /* Simply raise to synch */ @@ -206,7 +207,8 @@ KeTryToAcquireQueuedSpinLock(IN KSPIN_LOCK_QUEUE_NUMBER LockNumber, { #ifdef CONFIG_SMP ASSERT(FALSE); // FIXME: Unused - while (TRUE); + // while (TRUE); + return FALSE; #endif /* Simply raise to dispatch */ diff --git a/hal/halx86/legacy/bus/cmosbus.c b/hal/halx86/legacy/bus/cmosbus.c index 279aebf9e20..5561284040f 100644 --- a/hal/halx86/legacy/bus/cmosbus.c +++ b/hal/halx86/legacy/bus/cmosbus.c @@ -26,7 +26,7 @@ HalpcGetCmosData(IN PBUS_HANDLER BusHandler, IN ULONG Length) { DPRINT1("CMOS GetData\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); return 0; } @@ -40,7 +40,7 @@ HalpcSetCmosData(IN PBUS_HANDLER BusHandler, IN ULONG Length) { DPRINT1("CMOS SetData\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); return 0; } diff --git a/hal/halx86/legacy/bus/pcibus.c b/hal/halx86/legacy/bus/pcibus.c index 071027920f9..b1bde8a7178 100644 --- a/hal/halx86/legacy/bus/pcibus.c +++ b/hal/halx86/legacy/bus/pcibus.c @@ -537,7 +537,7 @@ HalpPCIPin2ISALine(IN PBUS_HANDLER BusHandler, IN PPCI_COMMON_CONFIG PciData) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -549,7 +549,7 @@ HalpPCIISALine2Pin(IN PBUS_HANDLER BusHandler, IN PPCI_COMMON_CONFIG PciOldData) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } NTSTATUS @@ -643,7 +643,8 @@ HalpRegisterPciDebuggingDeviceInfo(VOID) /* FIXME: TODO */ DPRINT1("You have implemented the KD routines for searching PCI debugger" "devices, but you have forgotten to implement this routine\n"); - while (TRUE); + UNIMPLEMENTED; + ASSERT(FALSE); // while (TRUE); } static ULONG NTAPI @@ -678,7 +679,7 @@ HalpAdjustPCIResourceList(IN PBUS_HANDLER BusHandler, { /* /PCILOCK is not yet supported */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } #endif /* Now create the correct resource list based on the supported bus ranges */ diff --git a/hal/halx86/legacy/halpnpdd.c b/hal/halx86/legacy/halpnpdd.c index 62534a925b5..c79a9a387f6 100644 --- a/hal/halx86/legacy/halpnpdd.c +++ b/hal/halx86/legacy/halpnpdd.c @@ -812,7 +812,7 @@ HalpDispatchWmi(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp) { DPRINT1("HAL: PnP Driver WMI!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } diff --git a/include/ddk/ntsam.h b/include/ddk/ntsam.h index ba0771ec9ff..886be4608bb 100644 --- a/include/ddk/ntsam.h +++ b/include/ddk/ntsam.h @@ -192,6 +192,39 @@ extern "C" { #define SAM_HOURS_PER_WEEK (24 * SAM_DAYS_PER_WEEK) #define SAM_MINUTES_PER_WEEK (60 * SAM_HOURS_PER_WEEK) +/* Flags used in USER_ALL_INFORMATION.WhichField */ +#define USER_ALL_USERNAME 0x00000001 +#define USER_ALL_FULLNAME 0x00000002 +#define USER_ALL_USERID 0x00000004 +#define USER_ALL_PRIMARYGROUPID 0x00000008 +#define USER_ALL_ADMINCOMMENT 0x00000010 +#define USER_ALL_USERCOMMENT 0x00000020 +#define USER_ALL_HOMEDIRECTORY 0x00000040 +#define USER_ALL_HOMEDIRECTORYDRIVE 0x00000080 +#define USER_ALL_SCRIPTPATH 0x00000100 +#define USER_ALL_PROFILEPATH 0x00000200 +#define USER_ALL_WORKSTATIONS 0x00000400 +#define USER_ALL_LASTLOGON 0x00000800 +#define USER_ALL_LASTLOGOFF 0x00001000 +#define USER_ALL_LOGONHOURS 0x00002000 +#define USER_ALL_BADPASSWORDCOUNT 0x00004000 +#define USER_ALL_LOGONCOUNT 0x00008000 +#define USER_ALL_PASSWORDCANCHANGE 0x00010000 +#define USER_ALL_PASSWORDMUSTCHANGE 0x00020000 +#define USER_ALL_PASSWORDLASTSET 0x00040000 +#define USER_ALL_ACCOUNTEXPIRES 0x00080000 +#define USER_ALL_USERACCOUNTCONTROL 0x00100000 +#define USER_ALL_PARAMETERS 0x00200000 +#define USER_ALL_COUNTRYCODE 0x00400000 +#define USER_ALL_CODEPAGE 0x00800000 +#define USER_ALL_NTPASSWORDPRESENT 0x01000000 +#define USER_ALL_LMPASSWORDPRESENT 0x02000000 +#define USER_ALL_PRIVATEDATA 0x04000000 +#define USER_ALL_PASSWORDEXPIRED 0x08000000 +#define USER_ALL_SECURITYDESCRIPTOR 0x10000000 +#define USER_ALL_OWFPASSWORD 0x20000000 +#define USER_ALL_UNDEFINED_MASK 0xC0000000 + typedef PVOID SAM_HANDLE, *PSAM_HANDLE; typedef ULONG SAM_ENUMERATE_HANDLE, *PSAM_ENUMERATE_HANDLE; @@ -345,6 +378,12 @@ typedef struct _LOGON_HOURS PUCHAR LogonHours; } LOGON_HOURS, *PLOGON_HOURS; +typedef struct _SR_SECURITY_DESCRIPTOR +{ + ULONG Length; + PUCHAR SecurityDescriptor; +} SR_SECURITY_DESCRIPTOR, *PSR_SECURITY_DESCRIPTOR; + typedef enum _USER_INFORMATION_CLASS { UserGeneralInformation = 1, @@ -506,6 +545,55 @@ typedef struct _USER_CONTROL_INFORMATION ULONG UserAccountControl; } USER_CONTROL_INFORMATION, *PUSER_CONTROL_INFORMATION; +typedef struct _USER_EXPIRES_INFORMATION +{ + LARGE_INTEGER AccountExpires; +} USER_EXPIRES_INFORMATION, *PUSER_EXPIRES_INFORMATION; + +typedef struct _USER_PARAMETERS_INFORMATION +{ + UNICODE_STRING Parameters; +} USER_PARAMETERS_INFORMATION, *PUSER_PARAMETERS_INFORMATION; + +#include "pshpack4.h" +typedef struct _USER_ALL_INFORMATION +{ + LARGE_INTEGER LastLogon; + LARGE_INTEGER LastLogoff; + LARGE_INTEGER PasswordLastSet; + LARGE_INTEGER AccountExpires; + LARGE_INTEGER PasswordCanChange; + LARGE_INTEGER PasswordMustChange; + UNICODE_STRING UserName; + UNICODE_STRING FullName; + UNICODE_STRING HomeDirectory; + UNICODE_STRING HomeDirectoryDrive; + UNICODE_STRING ScriptPath; + UNICODE_STRING ProfilePath; + UNICODE_STRING AdminComment; + UNICODE_STRING WorkStations; + UNICODE_STRING UserComment; + UNICODE_STRING Parameters; + UNICODE_STRING LmPassword; + UNICODE_STRING NtPassword; + UNICODE_STRING PrivateData; + SR_SECURITY_DESCRIPTOR SecurityDescriptor; + ULONG UserId; + ULONG PrimaryGroupId; + ULONG UserAccountControl; + ULONG WhichFields; + LOGON_HOURS LogonHours; + USHORT BadPasswordCount; + USHORT LogonCount; + USHORT CountryCode; + USHORT CodePage; + BOOLEAN LmPasswordPresent; + BOOLEAN NtPasswordPresent; + BOOLEAN PasswordExpired; + BOOLEAN PrivateDataSensitive; +} USER_ALL_INFORMATION, *PUSER_ALL_INFORMATION; +#include "poppack.h" + #define SAM_SID_COMPATIBILITY_ALL 0 #define SAM_SID_COMPATIBILITY_LAX 1 @@ -535,7 +623,7 @@ SamCloseHandle(IN SAM_HANDLE SamHandle); NTSTATUS NTAPI -SamConnect(IN OUT PUNICODE_STRING ServerName, +SamConnect(IN OUT PUNICODE_STRING ServerName OPTIONAL, OUT PSAM_HANDLE ServerHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes); @@ -667,7 +755,7 @@ SamLookupIdsInDomain(IN SAM_HANDLE DomainHandle, IN ULONG Count, IN PULONG RelativeIds, OUT PUNICODE_STRING *Names, - OUT PSID_NAME_USE *Use); + OUT PSID_NAME_USE *Use OPTIONAL); NTSTATUS NTAPI diff --git a/include/reactos/idl/sam.idl b/include/reactos/idl/sam.idl index 6bfdaa97f62..07c792223da 100644 --- a/include/reactos/idl/sam.idl +++ b/include/reactos/idl/sam.idl @@ -459,12 +459,12 @@ typedef struct _USER_CONTROL_INFORMATION { unsigned long UserAccountControl; } USER_CONTROL_INFORMATION, *PUSER_CONTROL_INFORMATION; -cpp_quote("#endif") typedef struct _USER_EXPIRES_INFORMATION { OLD_LARGE_INTEGER AccountExpires; } USER_EXPIRES_INFORMATION, *PUSER_EXPIRES_INFORMATION; +cpp_quote("#endif") typedef struct _SAMPR_LOGON_HOURS { diff --git a/include/reactos/ks386.inc b/include/reactos/ks386.inc deleted file mode 100644 index c7ccf36f551..00000000000 --- a/include/reactos/ks386.inc +++ /dev/null @@ -1,947 +0,0 @@ - -/* Pointer size */ -SizeofPointer = 0x4 - -/* Breakpoints */ -BREAKPOINT_BREAK = 0x0 -BREAKPOINT_PRINT = 0x1 -BREAKPOINT_PROMPT = 0x2 -BREAKPOINT_LOAD_SYMBOLS = 0x3 -BREAKPOINT_UNLOAD_SYMBOLS = 0x4 -BREAKPOINT_COMMAND_STRING = 0x5 - -/* Context Frame Flags */ -CONTEXT_FULL = 0x10007 -CONTEXT_CONTROL = 0x10001 -CONTEXT_INTEGER = 0x10002 -CONTEXT_SEGMENTS = 0x10004 -CONTEXT_FLOATING_POINT = 0x10008 -CONTEXT_DEBUG_REGISTERS = 0x10010 - -/* Exception flags */ -EXCEPTION_NONCONTINUABLE = 0x1 -EXCEPTION_UNWINDING = 0x2 -EXCEPTION_EXIT_UNWIND = 0x4 -EXCEPTION_STACK_INVALID = 0x8 -EXCEPTION_NESTED_CALL = 0x10 -EXCEPTION_TARGET_UNWIND = 0x20 -EXCEPTION_COLLIDED_UNWIND = 0x20 -EXCEPTION_UNWIND = 0x6 -EXCEPTION_EXECUTE_HANDLER = 0x1 -EXCEPTION_CONTINUE_SEARCH = 0x0 -EXCEPTION_CONTINUE_EXECUTION = 0xffffffff -EXCEPTION_CHAIN_END = 0xffffffff - -/* Exception types */ -ExceptionContinueExecution = 0x0 -ExceptionContinueSearch = 0x1 -ExceptionNestedException = 0x2 -ExceptionCollidedUnwind = 0x3 - -/* Lock Queue */ -LOCK_QUEUE_WAIT = 0x1 -LOCK_QUEUE_OWNER = 0x2 -LockQueueDispatcherLock = 0x0 - -/* Process states */ -ProcessInMemory = 0x0 -ProcessOutOfMemory = 0x1 -ProcessInTransition = 0x2 - -/* Processor mode */ -KernelMode = 0x0 -UserMode = 0x1 - -/* Status codes */ -STATUS_ACCESS_VIOLATION = 0xc0000005 -STATUS_ASSERTION_FAILURE = 0xc0000420 -STATUS_ARRAY_BOUNDS_EXCEEDED = 0xc000008c -STATUS_BAD_COMPRESSION_BUFFER = 0xc0000242 -STATUS_BREAKPOINT = 0x80000003 -STATUS_CALLBACK_POP_STACK = 0xc0000423 -STATUS_DATATYPE_MISALIGNMENT = 0x80000002 -STATUS_FLOAT_DENORMAL_OPERAND = 0xc000008d -STATUS_FLOAT_DIVIDE_BY_ZERO = 0xc000008e -STATUS_FLOAT_INEXACT_RESULT = 0xc000008f -STATUS_FLOAT_INVALID_OPERATION = 0xc0000090 -STATUS_FLOAT_OVERFLOW = 0xc0000091 -STATUS_FLOAT_STACK_CHECK = 0xc0000092 -STATUS_FLOAT_UNDERFLOW = 0xc0000093 -STATUS_FLOAT_MULTIPLE_FAULTS = 0xc00002b4 -STATUS_FLOAT_MULTIPLE_TRAPS = 0xc00002b5 -STATUS_GUARD_PAGE_VIOLATION = 0x80000001 -STATUS_ILLEGAL_FLOAT_CONTEXT = 0xc000014a -STATUS_ILLEGAL_INSTRUCTION = 0xc000001d -STATUS_INSTRUCTION_MISALIGNMENT = 0xc00000aa -STATUS_INVALID_HANDLE = 0xc0000008 -STATUS_INVALID_LOCK_SEQUENCE = 0xc000001e -STATUS_INVALID_OWNER = 0xc000005a -STATUS_INVALID_PARAMETER = 0xc000000d -STATUS_INVALID_PARAMETER_1 = 0xc00000ef -STATUS_INVALID_SYSTEM_SERVICE = 0xc000001c -STATUS_INTEGER_DIVIDE_BY_ZERO = 0xc0000094 -STATUS_INTEGER_OVERFLOW = 0xc0000095 -STATUS_IN_PAGE_ERROR = 0xc0000006 -STATUS_KERNEL_APC = 0x100 -STATUS_LONGJUMP = 0x80000026 -STATUS_NO_CALLBACK_ACTIVE = 0xc0000258 -STATUS_NO_EVENT_PAIR = 0xc000014e -STATUS_PRIVILEGED_INSTRUCTION = 0xc0000096 -STATUS_SINGLE_STEP = 0x80000004 -STATUS_STACK_BUFFER_OVERRUN = 0xc0000409 -STATUS_STACK_OVERFLOW = 0xc00000fd -STATUS_SUCCESS = 0x0 -STATUS_THREAD_IS_TERMINATING = 0xc000004b -STATUS_TIMEOUT = 0x102 -STATUS_UNWIND = 0xc0000027 -STATUS_UNWIND_CONSOLIDATE = 0x80000029 -STATUS_USER_APC = 0xc0 -STATUS_WAKE_SYSTEM_DEBUGGER = 0x80000007 - -/* TLS defines */ -TLS_MINIMUM_AVAILABLE = 0x40 -TLS_EXPANSION_SLOTS = 0x400 - -/* Thread states */ -Initialized = 0x0 -Ready = 0x1 -Running = 0x2 -Standby = 0x3 -Terminated = 0x4 -Waiting = 0x5 - -/* Wait type / reason */ -WrExecutive = 0x7 -WrMutex = 0x1d -WrDispatchInt = 0x1f -WrQuantumEnd = 0x1e -WrEventPair = 0xe -WaitAny = 0x1 -WaitAll = 0x0 - -/* Interrupt object types */ -InLevelSensitive = 0x0 -InLatched = 0x1 - -/* Bug Check Codes */ -APC_INDEX_MISMATCH = 0x1 -INVALID_AFFINITY_SET = 0x3 -INVALID_DATA_ACCESS_TRAP = 0x4 -IRQL_NOT_GREATER_OR_EQUAL = 0x9 -IRQL_NOT_LESS_OR_EQUAL = 0xa -NO_USER_MODE_CONTEXT = 0xe -SPIN_LOCK_ALREADY_OWNED = 0xf -SPIN_LOCK_NOT_OWNED = 0x10 -THREAD_NOT_MUTEX_OWNER = 0x11 -TRAP_CAUSE_UNKNOWN = 0x12 -KMODE_EXCEPTION_NOT_HANDLED = 0x1e -KERNEL_APC_PENDING_DURING_EXIT = 0x20 -PANIC_STACK_SWITCH = 0x2b -DATA_BUS_ERROR = 0x2e -INSTRUCTION_BUS_ERROR = 0x2f -SYSTEM_EXIT_OWNED_MUTEX = 0x39 -PAGE_FAULT_WITH_INTERRUPTS_OFF = 0x49 -IRQL_GT_ZERO_AT_SYSTEM_SERVICE = 0x4a -DATA_COHERENCY_EXCEPTION = 0x55 -INSTRUCTION_COHERENCY_EXCEPTION = 0x56 -HAL1_INITIALIZATION_FAILED = 0x61 -UNEXPECTED_KERNEL_MODE_TRAP = 0x7f -NMI_HARDWARE_FAILURE = 0x80 -SPIN_LOCK_INIT_FAILURE = 0x81 -ATTEMPTED_SWITCH_FROM_DPC = 0xb8 - -/* IRQL */ -PASSIVE_LEVEL = 0x0 -APC_LEVEL = 0x1 -DISPATCH_LEVEL = 0x2 -CLOCK1_LEVEL = 0x1c -CLOCK2_LEVEL = 0x1c -IPI_LEVEL = 0x1d -POWER_LEVEL = 0x1e -PROFILE_LEVEL = 0x1b -HIGH_LEVEL = 0x1f -#ifdef NT_UP -SYNCH_LEVEL = 0x2 -#else -SYNCH_LEVEL = 0x1b -#endif - -/* Stack sizes */ -KERNEL_STACK_SIZE = 0x3000 -KERNEL_LARGE_STACK_SIZE = 0xf000 -KERNEL_LARGE_STACK_COMMIT = 0x3000 - -/* Miscellaneous Definitions */ -LOW_REALTIME_PRIORITY = 0x10 -CLOCK_QUANTUM_DECREMENT = 0x3 -WAIT_QUANTUM_DECREMENT = 0x1 -MAXIMUM_PROCESSORS = 0x20 -INITIAL_STALL_COUNT = 0x64 -KI_EXCEPTION_ACCESS_VIOLATION = 0x10000004 -Executive = 0x0 -FALSE = 0x0 -TRUE = 0x1 -DBG_STATUS_CONTROL_C = 0x1 -USER_SHARED_DATA = 0xffdf0000 -PAGE_SIZE = 0x1000 -MAXIMUM_IDTVECTOR = 0xff -PRIMARY_VECTOR_BASE = 0x30 -RPL_MASK = 0x3 -MODE_MASK = 0x1 -NUMBER_SERVICE_TABLES = 0x2 -SERVICE_NUMBER_MASK = 0xfff -SERVICE_TABLE_SHIFT = 0x8 -SERVICE_TABLE_MASK = 0x10 -SERVICE_TABLE_TEST = 0x10 - -/* KAPC */ -ApType = 0x0 -ApSize = 0x2 -ApThread = 0x8 -ApApcListEntry = 0xc -ApKernelRoutine = 0x14 -ApRundownRoutine = 0x18 -ApNormalRoutine = 0x1c -ApNormalContext = 0x20 -ApSystemArgument1 = 0x24 -ApSystemArgument2 = 0x28 -ApApcStateIndex = 0x2c -ApApcMode = 0x2d -ApInserted = 0x2e -ApcObjectLength = 0x30 - -/* KAPC_STATE */ -AsApcListHead = 0x0 -AsProcess = 0x10 -AsKernelApcInProgress = 0x14 -AsKernelApcPending = 0x15 -AsUserApcPending = 0x16 - -/* CLIENT_ID */ -CidUniqueProcess = 0x0 -CidUniqueThread = 0x4 - -/* RTL_CRITICAL_SECTION */ -CsDebugInfo = 0x0 -CsLockCount = 0x4 -CsRecursionCount = 0x8 -CsOwningThread = 0xc -CsLockSemaphore = 0x10 -CsSpinCount = 0x14 - -/* RTL_CRITICAL_SECTION_DEBUG */ -CsType = 0x0 -CsCreatorBackTraceIndex = 0x2 -CsCriticalSection = 0x4 -CsProcessLocksList = 0x8 -CsEntryCount = 0x10 -CsContentionCount = 0x14 - -/* KDEVICE_QUEUE_ENTRY */ -DeDeviceListEntry = 0x0 -DeSortKey = 0x8 -DeInserted = 0xc -DeviceQueueEntryLength = 0x10 - -/* KDPC */ -DpType = 0x0 -DpImportance = 0x1 -DpNumber = 0x2 -DpDpcListEntry = 0x4 -DpDeferredRoutine = 0xc -DpDeferredContext = 0x10 -DpSystemArgument1 = 0x14 -DpSystemArgument2 = 0x18 -DpDpcData = 0x1c -DpcObjectLength = 0x20 - -/* KDEVICE_QUEUE */ -DvType = 0x0 -DvSize = 0x2 -DvDeviceListHead = 0x4 -DvSpinLock = 0xc -DvBusy = 0x10 -DeviceQueueObjectLength = 0x14 - -/* EXCEPTION_RECORD */ -ErExceptionCode = 0x0 -ErExceptionFlags = 0x4 -ErExceptionRecord = 0x8 -ErExceptionAddress = 0xc -ErNumberParameters = 0x10 -ErExceptionInformation = 0x14 -ExceptionRecordLength = 0x50 -EXCEPTION_RECORD_LENGTH = 0x50 - -/* EPROCESS */ -EpDebugPort = 0xcc -EpVdmObjects = 0x144 -ExecutiveProcessObjectLength = 0x278 - -/* KEVENT */ -EvType = 0x0 -EvSize = 0x2 -EvSignalState = 0x4 -EvWaitListHead = 0x8 -EventObjectLength = 0x10 - -/* FAST_MUTEX */ -FmCount = 0x0 -FmOwner = 0x4 -FmContention = 0x8 -FmOldIrql = 0x1c - -/* KINTERRUPT */ -InType = 0x0 -InSize = 0x2 -InInterruptListEntry = 0x4 -InServiceRoutine = 0xc -InServiceContext = 0x10 -InSpinLock = 0x14 -InTickCount = 0x18 -InActualLock = 0x1c -InDispatchAddress = 0x20 -InVector = 0x24 -InIrql = 0x28 -InSynchronizeIrql = 0x29 -InFloatingSave = 0x2a -InConnected = 0x2b -InNumber = 0x2c -InShareVector = 0x2d -InMode = 0x30 -InServiceCount = 0x34 -InDispatchCount = 0x38 -InDispatchCode = 0x3c -InterruptObjectLength = 0x1e4 - -/* IO_STATUS_BLOCK */ -IoStatus = 0x0 -IoPointer = 0x0 -IoInformation = 0x4 - -/* KNODE */ -KnPfnDereferenceSListHead = 0x8 -KnProcessorMask = 0x10 -KnColor = 0x14 -KnSeed = 0x18 -KnNodeNumber = 0x19 -KnFlags = 0x1a -knMmShiftedColor = 0x1e -KnFreeCount = 0x22 -KnPfnDeferredList = 0x2a -KNODE_SIZE = 0x2e - -/* KSPIN_LOCK_QUEUE */ -LqNext = 0x0 -LqLock = 0x4 - -/* KLOCK_QUEUE_HANDLE */ -LqhNext = 0x0 -LqhLock = 0x4 -LqhOldIrql = 0x8 -LOCK_QUEUE_HEADER_SIZE = 0xc - -/* LARGE_INTEGER */ -LiLowPart = 0x0 -LiHighPart = 0x4 - -/* LIST_ENTRY */ -LsFlink = 0x0 -LsBlink = 0x4 - -/* PEB */ -PeKernelCallbackTable = 0x2c -ProcessEnvironmentBlockLength = 0x230 - -/* KPROFILE */ -PfType = 0x0 -PfSize = 0x2 -PfProfileListEntry = 0x4 -PfProcess = 0xc -PfRangeBase = 0x10 -PfRangeLimit = 0x14 -PfBucketShift = 0x18 -PfBuffer = 0x1c -PfSegment = 0x20 -PfAffinity = 0x24 -PfSource = 0x28 -PfStarted = 0x2c -ProfileObjectLength = 0x30 - -/* PORT_MESSAGE */ -PmLength = 0x0 -PmZeroInit = 0x4 -PmClientId = 0x8 -PmProcess = 0x8 -PmThread = 0xc -PmMessageId = 0x10 -PmClientViewSize = 0x14 -PortMessageLength = 0x18 - -/* KPROCESS */ -PrType = 0x0 -PrSize = 0x2 -PrSignalState = 0x4 -PrProfileListHead = 0x10 -PrDirectoryTableBase = 0x18 -PrLdtDescriptor = 0x20 -PrIopmOffset = 0x30 -PrInt21Descriptor = 0x28 -PrVdmTrapcHandler = 0x4c -PrFlags = 0x6b -PrActiveProcessors = 0x34 -PrKernelTime = 0x38 -PrUserTime = 0x3c -PrReadyListHead = 0x40 -PrSwapListEntry = 0x48 -PrThreadListHead = 0x50 -PrProcessLock = 0x58 -PrAffinity = 0x5c -PrProcessFlags = 0x60 -PrBasePriority = 0x64 -PrQuantumReset = 0x65 -PrState = 0x66 -PrStackCount = 0x6c -KernelProcessObjectLength = 0x78 - -/* KQUEUE */ -QuType = 0x0 -QuSize = 0x2 -QuSignalState = 0x4 -QuEntryListHead = 0x10 -QuCurrentCount = 0x18 -QuMaximumCount = 0x1c -QuThreadListHead = 0x20 -QueueObjectLength = 0x28 - -/* STRING */ -StrLength = 0x0 -StrMaximumLength = 0x2 -StrBuffer = 0x4 - -/* TEB */ -TeCmTeb = 0x0 -TeExceptionList = 0x0 -TeStackBase = 0x4 -TeStackLimit = 0x8 -TeFiberData = 0x10 -TeSelf = 0x18 -TeEnvironmentPointer = 0x1c -TeClientId = 0x20 -TeActiveRpcHandle = 0x28 -TeThreadLocalStoragePointer = 0x2c -TeCountOfOwnedCriticalSections = 0x38 -TePeb = 0x30 -TeCsrClientThread = 0x3c -TeWOW32Reserved = 0xc0 -TeExceptionCode = 0x1a4 -TeActivationContextStackPointer = 0x1a8 -TeGdiClientPID = 0x6c0 -TeGdiClientTID = 0x6c4 -TeGdiThreadLocalInfo = 0x6c8 -TeglDispatchTable = 0x7c4 -TeglReserved1 = 0xb68 -TeglReserved2 = 0xbdc -TeglSectionInfo = 0xbe0 -TeglSection = 0xbe4 -TeglTable = 0xbe8 -TeglCurrentRC = 0xbec -TeglContext = 0xbf0 -TeDeallocationStack = 0xe0c -TeTlsSlots = 0xe10 -TeTlsExpansionSlots = 0xf94 -TeLastErrorValue = 0x34 -TeVdm = 0xf18 -TeInstrumentation = 0xf2c -TeGdiBatchCount = 0xf70 -TeGuaranteedStackBytes = 0xf78 -TeFlsData = 0xfb4 -TeSafeThunkCall = 0xfb8 -ThreadEnvironmentBlockLength = 0xfbc - -/* TIME_FIELDS */ -TfSecond = 0xa -TfMinute = 0x8 -TfHour = 0x6 -TfWeekday = 0xe -TfDay = 0x4 -TfMonth = 0x2 -TfYear = 0x0 -TfMilliseconds = 0xc - -/* KTHREAD */ -ThType = 0x0 -ThSize = 0x2 -ThLock = 0x0 -ThDebugActive = 0x3 -ThSignalState = 0x4 -ThInitialStack = 0x18 -ThStackLimit = 0x1c -ThKernelStack = 0x20 -ThThreadLock = 0x24 -ThAlerted = 0x5e -ThApcState = 0x28 -ThPriority = 0x5b -ThSwapBusy = 0x5d -ThNextProcessor = 0x40 -ThDeferredProcessor = 0x41 -ThApcQueueLock = 0x44 -ThContextSwitches = 0x48 -ThState = 0x4c -ThNpxState = 0x4d -ThWaitIrql = 0x4e -ThWaitMode = 0x4f -ThWaitStatus = 0x50 -ThWaitBlockList = 0x54 -ThGateObject = 0x54 -ThWaitListEntry = 0x60 -ThSwapListEntry = 0x60 -ThQueue = 0x68 -ThWaitTime = 0x6c -ThCombinedApcDisable = 0x70 -ThKernelApcDisable = 0x70 -ThSpecialApcDisable = 0x72 -ThTeb = 0x74 -ThTimer = 0x78 -ThThreadFlags = 0xa0 -ThServiceTable = 0x118 -ThWaitBlock = 0xa8 -ThResourceIndex = 0xef -ThQueueListEntry = 0x108 -ThTrapFrame = 0x110 -ThCallbackStack = 0x114 -ThApcStateIndex = 0x11c -ThIdealProcessor = 0x11d -ThBasePriority = 0x121 -ThPriorityDecrement = 0x122 -ThAdjustReason = 0x42 -ThAdjustIncrement = 0x43 -ThPreviousMode = 0xd7 -ThSaturation = 0x123 -ThFreezeCount = 0x14f -ThUserAffinity = 0x124 -ThProcess = 0x128 -ThAffinity = 0x12c -ThUserIdealProcessor = 0x151 -ThApcStatePointer = 0x130 -ThSavedApcState = 0x138 -ThWaitReason = 0x5a -ThSuspendCount = 0x150 -ThWin32Thread = 0x154 -ThStackBase = 0x158 -ThSuspendApc = 0x15c -ThPowerState = 0x18b -ThKernelTime = 0x160 -ThLegoData = 0x184 -ThLargeStack = 0x107 -ThUserTime = 0x18c -ThSuspendSemaphore = 0x190 -ThSListFaultCount = 0x1a4 -ThThreadListEntry = 0x1a8 -ThMutantListHead = 0x10 -ThSListFaultAddress = 0x1b0 -KernelThreadObjectLength = 0x1b8 -ExecutiveThreadObjectLength = 0x250 - -/* KTIMER */ -TiType = 0x0 -TiSize = 0x2 -TiInserted = 0x3 -TiSignalState = 0x4 -TiDueTime = 0x10 -TiTimerListEntry = 0x18 -TiDpc = 0x20 -TiPeriod = 0x24 -TimerObjectLength = 0x28 - -/* TIME */ - -/* KUSER_SHARED_DATA */ -UsTickCountMultiplier = 0x4 -UsInterruptTime = 0x8 -UsSystemTime = 0x14 -UsTimeZoneBias = 0x20 -UsImageNumberLow = 0x2c -UsImageNumberHigh = 0x2e -UsNtSystemRoot = 0x30 -UsMaxStackTraceDepth = 0x238 -UsCryptoExponent = 0x23c -UsTimeZoneId = 0x240 -UsLargePageMinimum = 0x244 -UsReserved2 = 0x248 -UsNtProductType = 0x264 -UsProductTypeIsValid = 0x268 -UsNtMajorVersion = 0x26c -UsNtMinorVersion = 0x270 -UsProcessorFeatures = 0x274 -UsReserved1 = 0x2b4 -UsReserved3 = 0x2b8 -UsTimeSlip = 0x2bc -UsAlternativeArchitecture = 0x2c0 -UsSystemExpirationDate = 0x2c8 -UsSuiteMask = 0x2d0 -UsKdDebuggerEnabled = 0x2d4 -UsActiveConsoleId = 0x2d8 -UsDismountCount = 0x2dc -UsComPlusPackage = 0x2e0 -UsLastSystemRITEventTickCount = 0x2e4 -UsNumberOfPhysicalPages = 0x2e8 -UsSafeBootMode = 0x2ec -UsTestRetInstruction = 0x2f8 -UsSystemCall = 0x300 -UsSystemCallReturn = 0x304 -UsSystemCallPad = 0x308 -UsTickCount = 0x320 -UsTickCountQuad = 0x320 -UsWow64SharedInformation = 0x340 - -/* KWAIT_BLOCK */ -WbWaitListEntry = 0x0 -WbThread = 0x8 -WbObject = 0xc -WbNextWaitBlock = 0x10 -WbWaitKey = 0x14 -WbWaitType = 0x16 - -/* CR0 flags */ -CR0_PE = 0x1 -CR0_MP = 0x2 -CR0_EM = 0x4 -CR0_TS = 0x8 -CR0_ET = 0x10 -CR0_NE = 0x20 -CR0_WP = 0x10000 -CR0_AM = 0x40000 -CR0_NW = 0x20000000 -CR0_CD = 0x40000000 -CR0_PG = 0x80000000 - -/* CR4 flags */ -CR4_VME = 0x1 -CR4_PVI = 0x2 -CR4_TSD = 0x4 -CR4_DE = 0x8 -CR4_PSE = 0x10 -CR4_PAE = 0x20 -CR4_MCE = 0x40 -CR4_PGE = 0x80 -CR4_FXSR = 0x200 -CR4_XMMEXCPT = 0x400 - -/* KeFeatureBits flags */ -KF_RDTSC = 0x2 -KF_CR4 = 0x4 -KF_GLOBAL_PAGE = 0x10 -KF_LARGE_PAGE = 0x20 -KF_CMPXCHG8B = 0x80 -KF_FAST_SYSCALL = 0x1000 -KF_V86_VIS = 0x1 - -/* Machine type definitions */ -MACHINE_TYPE_ISA = 0x0 -MACHINE_TYPE_EISA = 0x1 -MACHINE_TYPE_MCA = 0x2 - -/* EFLAGS */ -EFLAGS_TF = 0x100 -EFLAGS_INTERRUPT_MASK = 0x200 -EFLAGS_V86_MASK = 0x20000 -EFLAGS_ALIGN_CHECK = 0x40000 -EFLAGS_VIF = 0x80000 -EFLAGS_VIP = 0x100000 -EFLAGS_USER_SANITIZE = 0x3f4dd7 - -/* KDGT selectors */ -KGDT_R3_DATA = 0x20 -KGDT_R3_CODE = 0x18 -KGDT_R0_CODE = 0x8 -KGDT_R0_DATA = 0x10 -KGDT_R0_PCR = 0x30 -KGDT_TSS = 0x28 -KGDT_R3_TEB = 0x38 -KGDT_DF_TSS = 0x50 -KGDT_NMI_TSS = 0x58 -KGDT_LDT = 0x48 -NPX_STATE_NOT_LOADED = 0xa -NPX_STATE_LOADED = 0x0 -PF_XMMI_INSTRUCTIONS_AVAILABLE = 0x6 -EFLAG_SELECT = 0xc000 - -/* CONTEXT */ -CsContextFlags = 0x0 -CsDr0 = 0x4 -CsDr1 = 0x8 -CsDr2 = 0xc -CsDr3 = 0x10 -CsDr6 = 0x14 -CsDr7 = 0x18 -CsFloatSave = 0x1c -CsSegGs = 0x8c -CsSegFs = 0x90 -CsSegEs = 0x94 -CsSegDs = 0x98 -CsEdi = 0x9c -CsEsi = 0xa0 -CsEbx = 0xa4 -CsEdx = 0xa8 -CsEcx = 0xac -CsEax = 0xb0 -CsEbp = 0xb4 -CsEip = 0xb8 -CsSegCs = 0xbc -CsEflags = 0xc0 -CsEsp = 0xc4 -CsSegSs = 0xc8 -CsExtendedRegisters = 0xcc -ContextFrameLength = 0x2cc -CONTEXT_LENGTH = 0x2cc - -/* KGDTENTRY */ -KgdtBaseLow = 0x2 -KgdtBaseMid = 0x4 -KgdtBaseHi = 0x7 -KgdtLimitHi = 0x6 -KgdtLimitLow = 0x0 - -/* KTRAP_FRAME */ -TsExceptionList = 0x4c -TsPreviousPreviousMode = 0x48 -TsSegGs = 0x30 -TsSegFs = 0x50 -TsSegEs = 0x34 -TsSegDs = 0x38 -TsEdi = 0x54 -TsEsi = 0x58 -TsEbp = 0x60 -TsEbx = 0x5c -TsEdx = 0x3c -TsEcx = 0x40 -TsEax = 0x44 -TsErrCode = 0x64 -TsEip = 0x68 -TsSegCs = 0x6c -TsEflags = 0x70 -TsHardwareEsp = 0x74 -TsHardwareSegSs = 0x78 -TsTempSegCs = 0x10 -TsTempEsp = 0x14 -TsDbgEbp = 0x0 -TsDbgEip = 0x4 -TsDbgArgMark = 0x8 -TsDbgArgPointer = 0xc -TsDr0 = 0x18 -TsDr1 = 0x1c -TsDr2 = 0x20 -TsDr3 = 0x24 -TsDr6 = 0x28 -TsDr7 = 0x2c -TsV86Es = 0x7c -TsV86Ds = 0x80 -TsV86Fs = 0x84 -TsV86Gs = 0x88 -KTRAP_FRAME_LENGTH = 0x8c -KTRAP_FRAME_ALIGN = 0x4 -FRAME_EDITED = 0xfff8 - -/* KTSS */ -TssEsp0 = 0x4 -TssCR3 = 0x1c -TssEip = 0x20 -TssEFlags = 0x24 -TssEax = 0x28 -TssEbx = 0x34 -TssEcx = 0x2c -TssEdx = 0x30 -TssEsp = 0x38 -TssEbp = 0x3c -TssEsi = 0x40 -TssEdi = 0x44 -TssEs = 0x48 -TssCs = 0x4c -TssSs = 0x50 -TssDs = 0x54 -TssFs = 0x58 -TssGs = 0x5c -TssLDT = 0x60 -TssIoMapBase = 0x66 -TssIoMaps = 0x68 -TssLength = 0x20ac - -/* KPCR */ -KPCR_EXCEPTION_LIST = 0x0 -KPCR_PERF_GLOBAL_GROUP_MASK = 0x8 -KPCR_CONTEXT_SWITCHES = 0x10 -KPCR_TEB = 0x18 -KPCR_SELF = 0x1c -KPCR_PRCB = 0x20 -KPCR_IDT = 0x38 -KPCR_GDT = 0x3c -KPCR_TSS = 0x40 -KPCR_STALL_SCALE_FACTOR = 0x4c -KPCR_PRCB_DATA = 0x120 -KPCR_CURRENT_THREAD = 0x124 -KPCR_PRCB_NEXT_THREAD = 0x128 -KPCR_PRCB_DPC_QUEUE_DEPTH = 0xa4c -KPCR_PRCB_DPC_STACK = 0xa68 -KPCR_PRCB_MAXIMUM_DPC_QUEUE_DEPTH = 0xa6c -KPCR_PRCB_DPC_ROUTINE_ACTIVE = 0xa7a -KPCR_PRCB_TIMER_REQUEST = 0xa88 -KPCR_PRCB_QUANTUM_END = 0xaa1 -KPCR_PRCB_DEFERRED_READY_LIST_HEAD = 0xc10 -KPCR_PRCB_POWER_STATE_IDLE_FUNCTION = 0xec0 - -/* KTRAP_FRAME */ -KTRAP_FRAME_DEBUGEBP = 0x0 -KTRAP_FRAME_DEBUGEIP = 0x4 -KTRAP_FRAME_TEMPESP = 0x14 -KTRAP_FRAME_DR0 = 0x18 -KTRAP_FRAME_DR1 = 0x1c -KTRAP_FRAME_DR2 = 0x20 -KTRAP_FRAME_DR3 = 0x24 -KTRAP_FRAME_DR6 = 0x28 -KTRAP_FRAME_DR7 = 0x2c -KTRAP_FRAME_GS = 0x30 -KTRAP_FRAME_ES = 0x34 -KTRAP_FRAME_DS = 0x38 -KTRAP_FRAME_EDX = 0x3c -KTRAP_FRAME_ECX = 0x40 -KTRAP_FRAME_EAX = 0x44 -KTRAP_FRAME_PREVIOUS_MODE = 0x48 -KTRAP_FRAME_EXCEPTION_LIST = 0x4c -KTRAP_FRAME_FS = 0x50 -KTRAP_FRAME_EDI = 0x54 -KTRAP_FRAME_ESI = 0x58 -KTRAP_FRAME_EBX = 0x5c -KTRAP_FRAME_EBP = 0x60 -KTRAP_FRAME_ERROR_CODE = 0x64 -KTRAP_FRAME_EIP = 0x68 -KTRAP_FRAME_EFLAGS = 0x70 -KTRAP_FRAME_ESP = 0x74 -KTRAP_FRAME_SS = 0x78 -KTRAP_FRAME_V86_ES = 0x7c -KTRAP_FRAME_V86_DS = 0x80 -KTRAP_FRAME_V86_FS = 0x84 -KTRAP_FRAME_V86_GS = 0x88 -KTRAP_FRAME_SIZE = 0x8c -FRAME_EDITED = 0xfff8 - -/* CONTEXT */ -CONTEXT_FLAGS = 0x0 -CONTEXT_SEGGS = 0x8c -CONTEXT_SEGFS = 0x90 -CONTEXT_SEGES = 0x94 -CONTEXT_SEGDS = 0x98 -CONTEXT_EDI = 0x9c -CONTEXT_ESI = 0xa0 -CONTEXT_EBX = 0xa4 -CONTEXT_EDX = 0xa8 -CONTEXT_ECX = 0xac -CONTEXT_EAX = 0xb0 -CONTEXT_EBP = 0xb4 -CONTEXT_EIP = 0xb8 -CONTEXT_SEGCS = 0xbc -CONTEXT_EFLAGS = 0xc0 -CONTEXT_ESP = 0xc4 -CONTEXT_SEGSS = 0xc8 -CONTEXT_FRAME_LENGTH = 0x2cc - -/* FIBER */ -FIBER_PARAMETER = 0x0 -FIBER_EXCEPTION_LIST = 0x4 -FIBER_STACK_BASE = 0x8 -FIBER_STACK_LIMIT = 0xc -FIBER_DEALLOCATION_STACK = 0x10 -FIBER_CONTEXT = 0x14 -FIBER_CONTEXT_FLAGS = 0x14 -FIBER_CONTEXT_EAX = 0xc4 -FIBER_CONTEXT_EBX = 0xb8 -FIBER_CONTEXT_ECX = 0xc0 -FIBER_CONTEXT_EDX = 0xbc -FIBER_CONTEXT_ESI = 0xb4 -FIBER_CONTEXT_EDI = 0xb0 -FIBER_CONTEXT_EBP = 0xc8 -FIBER_CONTEXT_EIP = 0xcc -FIBER_CONTEXT_ESP = 0xd8 -FIBER_CONTEXT_DR6 = 0x28 -FIBER_CONTEXT_FLOAT_SAVE_CONTROL_WORD = 0x30 -FIBER_CONTEXT_FLOAT_SAVE_STATUS_WORD = 0x34 -FIBER_CONTEXT_FLOAT_SAVE_TAG_WORD = 0x38 -FIBER_GUARANTEED_STACK_BYTES = 0x2e0 -FIBER_FLS_DATA = 0x2e4 -FIBER_ACTIVATION_CONTEXT_STACK = 0x2e8 - -/* KTSS */ -KTSS_IOMAPBASE = 0x66 -KTSS_ESP0 = 0x4 - -/* EXCEPTION_RECORD */ -EXCEPTION_RECORD_EXCEPTION_CODE = 0x0 -EXCEPTION_RECORD_EXCEPTION_FLAGS = 0x4 -EXCEPTION_RECORD_EXCEPTION_RECORD = 0x8 -EXCEPTION_RECORD_EXCEPTION_ADDRESS = 0xc -EXCEPTION_RECORD_NUMBER_PARAMETERS = 0x10 -EXCEPTION_RECORD_EXCEPTION_ADDRESS = 0xc -SIZEOF_EXCEPTION_RECORD = 0x50 -EXCEPTION_RECORD_LENGTH = 0x50 - -/* KTHREAD */ -KTHREAD_DEBUG_ACTIVE = 0x3 -KTHREAD_INITIAL_STACK = 0x18 -KTHREAD_STACK_LIMIT = 0x1c -KTHREAD_TEB = 0x74 -KTHREAD_KERNEL_STACK = 0x20 -KTHREAD_APCSTATE_PROCESS = 0x38 -KTHREAD_PENDING_KERNEL_APC = 0x3d -KTHREAD_CONTEXT_SWITCHES = 0x48 -KTHREAD_STATE_ = 0x4c -KTHREAD_NPX_STATE = 0x4d -KTHREAD_WAIT_IRQL = 0x4e -KTHREAD_WAIT_REASON = 0x5a -KTHREAD_COMBINED_APC_DISABLE = 0x70 -KTHREAD_SPECIAL_APC_DISABLE = 0x72 -KTHREAD_LARGE_STACK = 0x107 -KTHREAD_TRAP_FRAME = 0x110 -KTHREAD_CALLBACK_STACK = 0x114 -KTHREAD_APC_STATE_INDEX = 0x11c -KTHREAD_STACK_BASE = 0x158 - -/* KPROCESS */ -KPROCESS_DIRECTORY_TABLE_BASE = 0x18 -KPROCESS_LDT_DESCRIPTOR0 = 0x20 -KPROCESS_LDT_DESCRIPTOR1 = 0x24 -KPROCESS_INT21_DESCRIPTOR0 = 0x28 -KPROCESS_INT21_DESCRIPTOR1 = 0x2c -KPROCESS_IOPM_OFFSET = 0x30 - -/* Teb */ -TEB_EXCEPTION_LIST = 0x0 -TEB_STACK_LIMIT = 0x8 -TEB_STACK_BASE = 0x4 -TEB_SELF = 0x18 -TEB_FIBER_DATA = 0x10 -TEB_PEB = 0x30 -TEB_EXCEPTION_CODE = 0x1a4 -PEB_KERNEL_CALLBACK_TABLE = 0x2c -TEB_FLS_DATA = 0xfb4 -TEB_ACTIVATION_CONTEXT_STACK_POINTER = 0x1a8 -TEB_GUARANTEED_STACK_BYTES = 0xf78 -TEB_DEALLOCATION_STACK = 0xe0c - -/* Misc */ -NPX_FRAME_LENGTH = 0x210 -FN_CR0_NPX_STATE = 0x20c -DR7_RESERVED_MASK = 0xdc00 -FP_CONTROL_WORD = 0x0 -FP_STATUS_WORD = 0x4 -FP_TAG_WORD = 0x8 -FP_DATA_SELECTOR = 0x18 -CBSTACK_RESULT = 0x20 -CBSTACK_RESULT_LENGTH = 0x24 -CBSTACK_TRAP_FRAME = 0x4 -CBSTACK_CALLBACK_STACK = 0x8 -SIZEOF_FX_SAVE_AREA = 0x210 -KUSER_SHARED_SYSCALL = 0x7ffe0300 -EXCEPTION_EXECUTE_HANDLER = 0x1 -STATUS_CALLBACK_POP_STACK = 0xc0000423 -CONTEXT_ALIGNED_SIZE = 0x2cc -PROCESSOR_FEATURE_FXSR = 0x7ffe0278 diff --git a/include/reactos/ksamd64.inc b/include/reactos/ksamd64.inc deleted file mode 100644 index 24caf537153..00000000000 --- a/include/reactos/ksamd64.inc +++ /dev/null @@ -1,1074 +0,0 @@ - -/* Pointer size */ -SizeofPointer = 0x8 - -/* Breakpoints */ -BREAKPOINT_BREAK = 0x0 -BREAKPOINT_PRINT = 0x1 -BREAKPOINT_PROMPT = 0x2 -BREAKPOINT_LOAD_SYMBOLS = 0x3 -BREAKPOINT_UNLOAD_SYMBOLS = 0x4 -BREAKPOINT_COMMAND_STRING = 0x5 - -/* Context Frame Flags */ -CONTEXT_FULL = 0x10000b -CONTEXT_CONTROL = 0x100001 -CONTEXT_INTEGER = 0x100002 -CONTEXT_SEGMENTS = 0x100004 -CONTEXT_FLOATING_POINT = 0x100008 -CONTEXT_DEBUG_REGISTERS = 0x100010 - -/* Exception flags */ -EXCEPTION_NONCONTINUABLE = 0x1 -EXCEPTION_UNWINDING = 0x2 -EXCEPTION_EXIT_UNWIND = 0x4 -EXCEPTION_STACK_INVALID = 0x8 -EXCEPTION_NESTED_CALL = 0x10 -EXCEPTION_TARGET_UNWIND = 0x20 -EXCEPTION_COLLIDED_UNWIND = 0x20 -EXCEPTION_UNWIND = 0x6 -EXCEPTION_EXECUTE_HANDLER = 0x1 -EXCEPTION_CONTINUE_SEARCH = 0x0 -EXCEPTION_CONTINUE_EXECUTION = 0xffffffff - -/* Exception types */ -ExceptionContinueExecution = 0x0 -ExceptionContinueSearch = 0x1 -ExceptionNestedException = 0x2 -ExceptionCollidedUnwind = 0x3 - -/* Lock Queue */ -LOCK_QUEUE_WAIT = 0x1 -LOCK_QUEUE_OWNER = 0x2 -LockQueueDispatcherLock = 0x0 - -/* Process states */ -ProcessInMemory = 0x0 -ProcessOutOfMemory = 0x1 -ProcessInTransition = 0x2 - -/* Processor mode */ -KernelMode = 0x0 -UserMode = 0x1 - -/* Status codes */ -STATUS_ACCESS_VIOLATION = 0xc0000005 -STATUS_ASSERTION_FAILURE = 0xc0000420 -STATUS_ARRAY_BOUNDS_EXCEEDED = 0xc000008c -STATUS_BAD_COMPRESSION_BUFFER = 0xc0000242 -STATUS_BREAKPOINT = 0x80000003 -STATUS_CALLBACK_POP_STACK = 0xc0000423 -STATUS_DATATYPE_MISALIGNMENT = 0x80000002 -STATUS_FLOAT_DENORMAL_OPERAND = 0xc000008d -STATUS_FLOAT_DIVIDE_BY_ZERO = 0xc000008e -STATUS_FLOAT_INEXACT_RESULT = 0xc000008f -STATUS_FLOAT_INVALID_OPERATION = 0xc0000090 -STATUS_FLOAT_OVERFLOW = 0xc0000091 -STATUS_FLOAT_STACK_CHECK = 0xc0000092 -STATUS_FLOAT_UNDERFLOW = 0xc0000093 -STATUS_FLOAT_MULTIPLE_FAULTS = 0xc00002b4 -STATUS_FLOAT_MULTIPLE_TRAPS = 0xc00002b5 -STATUS_GUARD_PAGE_VIOLATION = 0x80000001 -STATUS_ILLEGAL_FLOAT_CONTEXT = 0xc000014a -STATUS_ILLEGAL_INSTRUCTION = 0xc000001d -STATUS_INSTRUCTION_MISALIGNMENT = 0xc00000aa -STATUS_INVALID_HANDLE = 0xc0000008 -STATUS_INVALID_LOCK_SEQUENCE = 0xc000001e -STATUS_INVALID_OWNER = 0xc000005a -STATUS_INVALID_PARAMETER = 0xc000000d -STATUS_INVALID_PARAMETER_1 = 0xc00000ef -STATUS_INVALID_SYSTEM_SERVICE = 0xc000001c -STATUS_INTEGER_DIVIDE_BY_ZERO = 0xc0000094 -STATUS_INTEGER_OVERFLOW = 0xc0000095 -STATUS_IN_PAGE_ERROR = 0xc0000006 -STATUS_KERNEL_APC = 0x100 -STATUS_LONGJUMP = 0x80000026 -STATUS_NO_CALLBACK_ACTIVE = 0xc0000258 -STATUS_NO_EVENT_PAIR = 0xc000014e -STATUS_PRIVILEGED_INSTRUCTION = 0xc0000096 -STATUS_SINGLE_STEP = 0x80000004 -STATUS_STACK_BUFFER_OVERRUN = 0xc0000409 -STATUS_STACK_OVERFLOW = 0xc00000fd -STATUS_SUCCESS = 0x0 -STATUS_THREAD_IS_TERMINATING = 0xc000004b -STATUS_TIMEOUT = 0x102 -STATUS_UNWIND = 0xc0000027 -STATUS_UNWIND_CONSOLIDATE = 0x80000029 -STATUS_USER_APC = 0xc0 -STATUS_WAKE_SYSTEM_DEBUGGER = 0x80000007 - -/* TLS defines */ -TLS_MINIMUM_AVAILABLE = 0x40 -TLS_EXPANSION_SLOTS = 0x400 - -/* Thread states */ -Initialized = 0x0 -Ready = 0x1 -Running = 0x2 -Standby = 0x3 -Terminated = 0x4 -Waiting = 0x5 - -/* Wait type / reason */ -WrExecutive = 0x7 -WrMutex = 0x1d -WrDispatchInt = 0x1f -WrQuantumEnd = 0x1e -WrEventPair = 0xe -WaitAny = 0x1 -WaitAll = 0x0 - -/* Interrupt object types */ -InLevelSensitive = 0x0 -InLatched = 0x1 - -/* Bug Check Codes */ -APC_INDEX_MISMATCH = 0x1 -INVALID_AFFINITY_SET = 0x3 -INVALID_DATA_ACCESS_TRAP = 0x4 -IRQL_NOT_GREATER_OR_EQUAL = 0x9 -IRQL_NOT_LESS_OR_EQUAL = 0xa -NO_USER_MODE_CONTEXT = 0xe -SPIN_LOCK_ALREADY_OWNED = 0xf -SPIN_LOCK_NOT_OWNED = 0x10 -THREAD_NOT_MUTEX_OWNER = 0x11 -TRAP_CAUSE_UNKNOWN = 0x12 -KMODE_EXCEPTION_NOT_HANDLED = 0x1e -KERNEL_APC_PENDING_DURING_EXIT = 0x20 -PANIC_STACK_SWITCH = 0x2b -DATA_BUS_ERROR = 0x2e -INSTRUCTION_BUS_ERROR = 0x2f -SYSTEM_EXIT_OWNED_MUTEX = 0x39 -PAGE_FAULT_WITH_INTERRUPTS_OFF = 0x49 -IRQL_GT_ZERO_AT_SYSTEM_SERVICE = 0x4a -DATA_COHERENCY_EXCEPTION = 0x55 -INSTRUCTION_COHERENCY_EXCEPTION = 0x56 -HAL1_INITIALIZATION_FAILED = 0x61 -UNEXPECTED_KERNEL_MODE_TRAP = 0x7f -NMI_HARDWARE_FAILURE = 0x80 -SPIN_LOCK_INIT_FAILURE = 0x81 -ATTEMPTED_SWITCH_FROM_DPC = 0xb8 - -/* IRQL */ -PASSIVE_LEVEL = 0x0 -APC_LEVEL = 0x1 -DISPATCH_LEVEL = 0x2 -CLOCK_LEVEL = 0xd -IPI_LEVEL = 0xe -POWER_LEVEL = 0xe -PROFILE_LEVEL = 0xf -HIGH_LEVEL = 0xf -#ifdef NT_UP -SYNCH_LEVEL = 0x2 -#else -SYNCH_LEVEL = 0xc -#endif - -/* Stack sizes */ -KERNEL_STACK_SIZE = 0x6000 -KERNEL_LARGE_STACK_SIZE = 0x12000 -KERNEL_LARGE_STACK_COMMIT = 0x6000 -KERNEL_MCA_EXCEPTION_STACK_SIZE = 0x2000 -NMI_STACK_SIZE = 0x2000 - -/* Miscellaneous Definitions */ -LOW_REALTIME_PRIORITY = 0x10 -CLOCK_QUANTUM_DECREMENT = 0x3 -WAIT_QUANTUM_DECREMENT = 0x1 -MAXIMUM_PROCESSORS = 0x40 -INITIAL_STALL_COUNT = 0x64 -KI_EXCEPTION_ACCESS_VIOLATION = 0x10000004 -Executive = 0x0 -FALSE = 0x0 -TRUE = 0x1 -DBG_STATUS_CONTROL_C = 0x1 -USER_SHARED_DATA = 0xffdf0000 -PAGE_SIZE = 0x1000 -MAXIMUM_IDTVECTOR = 0xff -PRIMARY_VECTOR_BASE = 0x30 -RPL_MASK = 0x3 -MODE_MASK = 0x1 -NUMBER_SERVICE_TABLES = 0x2 -SERVICE_NUMBER_MASK = 0xfff -SERVICE_TABLE_SHIFT = 0x7 -SERVICE_TABLE_MASK = 0x20 -SERVICE_TABLE_TEST = 0x20 - -/* KAPC */ -ApType = 0x0 -ApSize = 0x2 -ApThread = 0x8 -ApApcListEntry = 0x10 -ApKernelRoutine = 0x20 -ApRundownRoutine = 0x28 -ApNormalRoutine = 0x30 -ApNormalContext = 0x38 -ApSystemArgument1 = 0x40 -ApSystemArgument2 = 0x48 -ApApcStateIndex = 0x50 -ApApcMode = 0x51 -ApInserted = 0x52 -ApcObjectLength = 0x58 - -/* KAPC_STATE */ -AsApcListHead = 0x0 -AsProcess = 0x20 -AsKernelApcInProgress = 0x28 -AsKernelApcPending = 0x29 -AsUserApcPending = 0x2a - -/* CLIENT_ID */ -CidUniqueProcess = 0x0 -CidUniqueThread = 0x8 - -/* RTL_CRITICAL_SECTION */ -CsDebugInfo = 0x0 -CsLockCount = 0x8 -CsRecursionCount = 0xc -CsOwningThread = 0x10 -CsLockSemaphore = 0x18 -CsSpinCount = 0x20 - -/* RTL_CRITICAL_SECTION_DEBUG */ -CsType = 0x0 -CsCreatorBackTraceIndex = 0x2 -CsCriticalSection = 0x8 -CsProcessLocksList = 0x10 -CsEntryCount = 0x20 -CsContentionCount = 0x24 - -/* KDEVICE_QUEUE_ENTRY */ -DeDeviceListEntry = 0x0 -DeSortKey = 0x10 -DeInserted = 0x14 -DeviceQueueEntryLength = 0x18 - -/* KDPC */ -DpType = 0x0 -DpImportance = 0x1 -DpNumber = 0x2 -DpDpcListEntry = 0x8 -DpDeferredRoutine = 0x18 -DpDeferredContext = 0x20 -DpSystemArgument1 = 0x28 -DpSystemArgument2 = 0x30 -DpDpcData = 0x38 -DpcObjectLength = 0x40 - -/* KDEVICE_QUEUE */ -DvType = 0x0 -DvSize = 0x2 -DvDeviceListHead = 0x8 -DvSpinLock = 0x18 -DvBusy = 0x20 -DeviceQueueObjectLength = 0x28 - -/* EXCEPTION_RECORD */ -ErExceptionCode = 0x0 -ErExceptionFlags = 0x4 -ErExceptionRecord = 0x8 -ErExceptionAddress = 0x10 -ErNumberParameters = 0x18 -ErExceptionInformation = 0x20 -ExceptionRecordLength = 0x98 -EXCEPTION_RECORD_LENGTH = 0x98 - -/* EPROCESS */ -EpDebugPort = 0x110 -EpVdmObjects = 0x1f0 -ExecutiveProcessObjectLength = 0x3a0 - -/* KEVENT */ -EvType = 0x0 -EvSize = 0x2 -EvSignalState = 0x4 -EvWaitListHead = 0x8 -EventObjectLength = 0x18 - -/* FAST_MUTEX */ -FmCount = 0x0 -FmOwner = 0x8 -FmContention = 0x10 -FmOldIrql = 0x30 - -/* KINTERRUPT */ -InType = 0x0 -InSize = 0x2 -InInterruptListEntry = 0x8 -InServiceRoutine = 0x18 -InServiceContext = 0x20 -InSpinLock = 0x28 -InTickCount = 0x30 -InActualLock = 0x38 -InDispatchAddress = 0x40 -InVector = 0x48 -InIrql = 0x4c -InSynchronizeIrql = 0x4d -InFloatingSave = 0x4e -InConnected = 0x4f -InNumber = 0x50 -InShareVector = 0x51 -InMode = 0x54 -InServiceCount = 0x58 -InDispatchCount = 0x5c -InDispatchCode = 0x60 -InterruptObjectLength = 0x208 - -/* IO_STATUS_BLOCK */ -IoStatus = 0x0 -IoPointer = 0x0 -IoInformation = 0x8 - -/* KNODE */ -KnPfnDereferenceSListHead = 0x10 -KnProcessorMask = 0x20 -KnColor = 0x28 -KnSeed = 0x2c -KnNodeNumber = 0x2d -KnFlags = 0x2e -knMmShiftedColor = 0x32 -KnFreeCount = 0x36 -KnPfnDeferredList = 0x3e -KNODE_SIZE = 0x46 - -/* KSPIN_LOCK_QUEUE */ -LqNext = 0x0 -LqLock = 0x8 - -/* KLOCK_QUEUE_HANDLE */ -LqhNext = 0x0 -LqhLock = 0x8 -LqhOldIrql = 0x10 -LOCK_QUEUE_HEADER_SIZE = 0x18 - -/* LARGE_INTEGER */ -LiLowPart = 0x0 -LiHighPart = 0x4 - -/* LIST_ENTRY */ -LsFlink = 0x0 -LsBlink = 0x8 - -/* PEB */ -PeKernelCallbackTable = 0x58 -ProcessEnvironmentBlockLength = 0x358 - -/* KPROFILE */ -PfType = 0x0 -PfSize = 0x2 -PfProfileListEntry = 0x8 -PfProcess = 0x18 -PfRangeBase = 0x20 -PfRangeLimit = 0x28 -PfBucketShift = 0x30 -PfBuffer = 0x38 -PfSegment = 0x40 -PfAffinity = 0x48 -PfSource = 0x50 -PfStarted = 0x54 -ProfileObjectLength = 0x58 - -/* PORT_MESSAGE */ -PmLength = 0x0 -PmZeroInit = 0x4 -PmClientId = 0x8 -PmProcess = 0x8 -PmThread = 0x10 -PmMessageId = 0x18 -PmClientViewSize = 0x1c -PortMessageLength = 0x24 - -/* KPROCESS */ -PrType = 0x0 -PrSize = 0x2 -PrSignalState = 0x4 -PrProfileListHead = 0x18 -PrDirectoryTableBase = 0x28 -PrActiveProcessors = 0x30 -PrKernelTime = 0x34 -PrUserTime = 0x38 -PrReadyListHead = 0x40 -PrSwapListEntry = 0x50 -PrThreadListHead = 0x60 -PrProcessLock = 0x70 -PrAffinity = 0x78 -PrProcessFlags = 0x80 -PrBasePriority = 0x84 -PrQuantumReset = 0x85 -PrState = 0x86 -PrStackCount = 0x8c -KernelProcessObjectLength = 0xa0 - -/* KQUEUE */ -QuType = 0x0 -QuSize = 0x2 -QuSignalState = 0x4 -QuEntryListHead = 0x18 -QuCurrentCount = 0x28 -QuMaximumCount = 0x2c -QuThreadListHead = 0x30 -QueueObjectLength = 0x40 - -/* STRING */ -StrLength = 0x0 -StrMaximumLength = 0x2 -StrBuffer = 0x8 - -/* TEB */ -TeCmTeb = 0x0 -TeStackBase = 0x8 -TeStackLimit = 0x10 -TeFiberData = 0x20 -TeSelf = 0x30 -TeEnvironmentPointer = 0x38 -TeClientId = 0x40 -TeActiveRpcHandle = 0x50 -TeThreadLocalStoragePointer = 0x58 -TeCountOfOwnedCriticalSections = 0x6c -TePeb = 0x60 -TeCsrClientThread = 0x70 -TeWOW32Reserved = 0x100 -TeExceptionCode = 0x2c0 -TeActivationContextStackPointer = 0x2c8 -TeGdiClientPID = 0x7f0 -TeGdiClientTID = 0x7f4 -TeGdiThreadLocalInfo = 0x7f8 -TeglDispatchTable = 0x9f0 -TeglReserved1 = 0x1138 -TeglReserved2 = 0x1220 -TeglSectionInfo = 0x1228 -TeglSection = 0x1230 -TeglTable = 0x1238 -TeglCurrentRC = 0x1240 -TeglContext = 0x1248 -TeDeallocationStack = 0x1478 -TeTlsSlots = 0x1480 -TeTlsExpansionSlots = 0x1780 -TeLastErrorValue = 0x68 -TeVdm = 0x1690 -TeInstrumentation = 0x16b8 -TeGdiBatchCount = 0x1740 -TeGuaranteedStackBytes = 0x1748 -TeFlsData = 0x17c8 -ThreadEnvironmentBlockLength = 0x17d8 - -/* TIME_FIELDS */ -TfSecond = 0xa -TfMinute = 0x8 -TfHour = 0x6 -TfWeekday = 0xe -TfDay = 0x4 -TfMonth = 0x2 -TfYear = 0x0 -TfMilliseconds = 0xc - -/* KTHREAD */ -ThType = 0x0 -ThSize = 0x2 -ThLock = 0x0 -ThDebugActive = 0x3 -ThSignalState = 0x4 -ThInitialStack = 0x28 -ThStackLimit = 0x30 -ThKernelStack = 0x38 -ThThreadLock = 0x40 -ThAlerted = 0x9e -ThApcState = 0x48 -ThPriority = 0x9b -ThSwapBusy = 0x9d -ThNextProcessor = 0x60 -ThDeferredProcessor = 0x61 -ThApcQueueLock = 0x78 -ThContextSwitches = 0x80 -ThState = 0x84 -ThNpxState = 0x85 -ThWaitIrql = 0x86 -ThWaitMode = 0x87 -ThWaitStatus = 0x88 -ThWaitBlockList = 0x90 -ThGateObject = 0x90 -ThWaitListEntry = 0xa0 -ThSwapListEntry = 0xa0 -ThQueue = 0xb0 -ThWaitTime = 0xb8 -ThCombinedApcDisable = 0xbc -ThKernelApcDisable = 0xbc -ThSpecialApcDisable = 0xbe -ThTeb = 0xc0 -ThTimer = 0xc8 -ThThreadFlags = 0xf0 -ThServiceTable = 0x1e8 -ThWaitBlock = 0x108 -ThResourceIndex = 0x14f -ThQueueListEntry = 0x1c8 -ThTrapFrame = 0x1d8 -ThCallbackStack = 0x1e0 -ThApcStateIndex = 0x1f0 -ThIdealProcessor = 0x1f1 -ThBasePriority = 0x1f5 -ThPriorityDecrement = 0x1f6 -ThAdjustReason = 0x62 -ThAdjustIncrement = 0x63 -ThPreviousMode = 0x137 -ThSaturation = 0x1f7 -ThFreezeCount = 0x237 -ThUserAffinity = 0x1f8 -ThProcess = 0x200 -ThAffinity = 0x208 -ThUserIdealProcessor = 0x239 -ThApcStatePointer = 0x210 -ThSavedApcState = 0x220 -ThWaitReason = 0x9a -ThSuspendCount = 0x238 -ThWin32Thread = 0x250 -ThStackBase = 0x258 -ThSuspendApc = 0x260 -ThPowerState = 0x28f -ThKernelTime = 0x264 -ThLegoData = 0x288 -ThLargeStack = 0x167 -ThUserTime = 0x290 -ThSuspendSemaphore = 0x2b8 -ThSListFaultCount = 0x2cc -ThThreadListEntry = 0x2d8 -ThMutantListHead = 0x18 -ThSListFaultAddress = 0x2e8 -KernelThreadObjectLength = 0x2f0 -ExecutiveThreadObjectLength = 0x3f8 - -/* KTIMER */ -TiType = 0x0 -TiSize = 0x2 -TiInserted = 0x3 -TiSignalState = 0x4 -TiDueTime = 0x18 -TiTimerListEntry = 0x20 -TiDpc = 0x30 -TiPeriod = 0x3c -TimerObjectLength = 0x40 - -/* TIME */ - -/* KUSER_SHARED_DATA */ -UsTickCountMultiplier = 0x4 -UsInterruptTime = 0x8 -UsSystemTime = 0x14 -UsTimeZoneBias = 0x20 -UsImageNumberLow = 0x2c -UsImageNumberHigh = 0x2e -UsNtSystemRoot = 0x30 -UsMaxStackTraceDepth = 0x238 -UsCryptoExponent = 0x23c -UsTimeZoneId = 0x240 -UsLargePageMinimum = 0x244 -UsReserved2 = 0x248 -UsNtProductType = 0x264 -UsProductTypeIsValid = 0x268 -UsNtMajorVersion = 0x26c -UsNtMinorVersion = 0x270 -UsProcessorFeatures = 0x274 -UsReserved1 = 0x2b4 -UsReserved3 = 0x2b8 -UsTimeSlip = 0x2bc -UsAlternativeArchitecture = 0x2c0 -UsSystemExpirationDate = 0x2c8 -UsSuiteMask = 0x2d0 -UsKdDebuggerEnabled = 0x2d4 -UsActiveConsoleId = 0x2d8 -UsDismountCount = 0x2dc -UsComPlusPackage = 0x2e0 -UsLastSystemRITEventTickCount = 0x2e4 -UsNumberOfPhysicalPages = 0x2e8 -UsSafeBootMode = 0x2ec -UsTestRetInstruction = 0x2f8 -UsSystemCall = 0x300 -UsSystemCallReturn = 0x304 -UsSystemCallPad = 0x308 -UsTickCount = 0x320 -UsTickCountQuad = 0x320 -UsWow64SharedInformation = 0x340 - -/* KWAIT_BLOCK */ -WbWaitListEntry = 0x0 -WbThread = 0x10 -WbObject = 0x18 -WbNextWaitBlock = 0x20 -WbWaitKey = 0x28 -WbWaitType = 0x2a - -/* CR0 flags */ -CR0_PE = 0x1 -CR0_MP = 0x2 -CR0_EM = 0x4 -CR0_TS = 0x8 -CR0_ET = 0x10 -CR0_NE = 0x20 -CR0_WP = 0x10000 -CR0_AM = 0x40000 -CR0_NW = 0x20000000 -CR0_CD = 0x40000000 -CR0_PG = 0x80000000 - -/* CR4 flags */ -CR4_VME = 0x1 -CR4_PVI = 0x2 -CR4_TSD = 0x4 -CR4_DE = 0x8 -CR4_PSE = 0x10 -CR4_PAE = 0x20 -CR4_MCE = 0x40 -CR4_PGE = 0x80 -CR4_FXSR = 0x200 -CR4_XMMEXCPT = 0x400 -CR4_CHANNELS = 0x800 - -/* KeFeatureBits flags */ -KF_RDTSC = 0x2 -KF_CR4 = 0x4 -KF_GLOBAL_PAGE = 0x10 -KF_LARGE_PAGE = 0x20 -KF_CMPXCHG8B = 0x80 -KF_FAST_SYSCALL = 0x1000 - -/* Machine type definitions */ -MACHINE_TYPE_ISA = 0x0 -MACHINE_TYPE_EISA = 0x1 -MACHINE_TYPE_MCA = 0x2 - -/* EFLAGS */ -EFLAGS_TF_MASK = 0x100 -EFLAGS_TF_SHIFT = 0x8 -EFLAGS_IF_MASK = 0x200 -EFLAGS_IF_SHIFT = 0x9 -EFLAGS_ID_MASK = 0x200000 - -/* Hypervisor Enlightenment Definitions */ - -/* KDGT selectors */ -KGDT64_NULL = 0x0 -KGDT64_R0_CODE = 0x10 -KGDT64_R0_DATA = 0x18 -KGDT64_R3_CMCODE = 0x20 -KGDT64_R3_DATA = 0x28 -KGDT64_R3_CODE = 0x30 -KGDT64_SYS_TSS = 0x40 -KGDT64_R3_CMTEB = 0x50 - -/* Machine Specific Register Numbers */ -MSR_EFER = 0xc0000080 -MSR_STAR = 0xc0000081 -MSR_LSTAR = 0xc0000082 -MSR_CSTAR = 0xc0000083 -MSR_SYSCALL_MASK = 0xc0000084 -MSR_FS_BASE = 0xc0000100 -MSR_GS_BASE = 0xc0000101 -MSR_GS_SWAP = 0xc0000102 -MSR_MCG_STATUS = 0x17a -MSR_AMD_ACCESS = 0x9c5a203a - -/* Flags for MSR_EFER */ -MSR_LMA = 0x400 -MSR_LME = 0x100 -MSR_SCE = 0x1 -MSR_NXE = 0x800 -MSR_PAT = 0x277 -MSR_DEGUG_CTL = 0x1d9 -MSR_LAST_BRANCH_FROM = 0x1db -MSR_LAST_BRANCH_TO = 0x1dc -MSR_LAST_EXCEPTION_FROM = 0x1dd -MSR_LAST_EXCEPTION_TO = 0x1de - -/* Flags for MSR_DEGUG_CTL */ - -/* Fatal exception codes */ -EXCEPTION_DIVIDED_BY_ZERO = 0x0 -EXCEPTION_DEBUG = 0x1 -EXCEPTION_NMI = 0x2 -EXCEPTION_INT3 = 0x3 -EXCEPTION_BOUND_CHECK = 0x5 -EXCEPTION_INVALID_OPCODE = 0x6 -EXCEPTION_NPX_NOT_AVAILABLE = 0x7 -EXCEPTION_DOUBLE_FAULT = 0x8 -EXCEPTION_NPX_OVERRUN = 0x9 -EXCEPTION_INVALID_TSS = 0xa -EXCEPTION_SEGMENT_NOT_PRESENT = 0xb -EXCEPTION_STACK_FAULT = 0xc -EXCEPTION_GP_FAULT = 0xd -EXCEPTION_RESERVED_TRAP = 0xf -EXCEPTION_NPX_ERROR = 0x10 -EXCEPTION_ALIGNMENT_CHECK = 0x11 - -/* Argument Home Address */ -P1Home = 0x0 -P2Home = 0x0 -P3Home = 0x0 -P4Home = 0x0 - -/* CONTEXT */ -CONTEXT_P1Home = 0x0 -CONTEXT_P2Home = 0x8 -CONTEXT_P3Home = 0x10 -CONTEXT_P4Home = 0x18 -CONTEXT_P5Home = 0x20 -CONTEXT_P6Home = 0x28 -CONTEXT_ContextFlags = 0x30 -CONTEXT_MxCsr = 0x34 -CONTEXT_SegCs = 0x38 -CONTEXT_SegDs = 0x3a -CONTEXT_SegEs = 0x3c -CONTEXT_SegFs = 0x3e -CONTEXT_SegGs = 0x40 -CONTEXT_SegSs = 0x42 -CONTEXT_EFlags = 0x44 -CONTEXT_Dr0 = 0x48 -CONTEXT_Dr1 = 0x50 -CONTEXT_Dr2 = 0x58 -CONTEXT_Dr3 = 0x60 -CONTEXT_Dr6 = 0x68 -CONTEXT_Dr7 = 0x70 -CONTEXT_Rax = 0x78 -CONTEXT_Rcx = 0x80 -CONTEXT_Rdx = 0x88 -CONTEXT_Rbx = 0x90 -CONTEXT_Rsp = 0x98 -CONTEXT_Rbp = 0xa0 -CONTEXT_Rsi = 0xa8 -CONTEXT_Rdi = 0xb0 -CONTEXT_R8 = 0xb8 -CONTEXT_R9 = 0xc0 -CONTEXT_R10 = 0xc8 -CONTEXT_R11 = 0xd0 -CONTEXT_R12 = 0xd8 -CONTEXT_R13 = 0xe0 -CONTEXT_R14 = 0xe8 -CONTEXT_R15 = 0xf0 -CONTEXT_Rip = 0xf8 -CONTEXT_FltSave = 0x100 -CONTEXT_Xmm0 = 0x1a0 -CONTEXT_Xmm1 = 0x1b0 -CONTEXT_Xmm2 = 0x1c0 -CONTEXT_Xmm3 = 0x1d0 -CONTEXT_Xmm4 = 0x1e0 -CONTEXT_Xmm5 = 0x1f0 -CONTEXT_Xmm6 = 0x200 -CONTEXT_Xmm7 = 0x210 -CONTEXT_Xmm8 = 0x220 -CONTEXT_Xmm9 = 0x230 -CONTEXT_Xmm10 = 0x240 -CONTEXT_Xmm11 = 0x250 -CONTEXT_Xmm12 = 0x260 -CONTEXT_Xmm13 = 0x270 -CONTEXT_Xmm14 = 0x280 -CONTEXT_Xmm15 = 0x290 -CONTEXT_DebugControl = 0x4a8 -CONTEXT_LastBranchToRip = 0x4b0 -CONTEXT_LastBranchFromRip = 0x4b8 -CONTEXT_LastExceptionToRip = 0x4c0 -CONTEXT_LastExceptionFromRip = 0x4c8 -CONTEXT_VectorControl = 0x4a0 -CONTEXT_VectorRegister = 0x300 -CONTEXT_FRAME_LENGTH = 0x4d0 - -/* DISPATCHER_CONTEXT */ -DcControlPc = 0x0 -DcImageBase = 0x8 -DcFunctionEntry = 0x10 -DcEstablisherFrame = 0x18 -DcTargetIp = 0x20 -DcContextRecord = 0x28 -DcLanguageHandler = 0x30 -DcHandlerData = 0x38 -DcHistoryTable = 0x40 -DcScopeIndex = 0x48 - -/* KEXCEPTION_FRAME */ -KEXCEPTION_FRAME_P1Home = 0x0 -KEXCEPTION_FRAME_P2Home = 0x8 -KEXCEPTION_FRAME_P3Home = 0x10 -KEXCEPTION_FRAME_P4Home = 0x18 -KEXCEPTION_FRAME_P5 = 0x20 -KEXCEPTION_FRAME_Xmm6 = 0x30 -KEXCEPTION_FRAME_Xmm7 = 0x40 -KEXCEPTION_FRAME_Xmm8 = 0x50 -KEXCEPTION_FRAME_Xmm9 = 0x60 -KEXCEPTION_FRAME_Xmm10 = 0x70 -KEXCEPTION_FRAME_Xmm11 = 0x80 -KEXCEPTION_FRAME_Xmm12 = 0x90 -KEXCEPTION_FRAME_Xmm13 = 0xa0 -KEXCEPTION_FRAME_Xmm14 = 0xb0 -KEXCEPTION_FRAME_Xmm15 = 0xc0 -KEXCEPTION_FRAME_MxCsr = 0xf0 -KEXCEPTION_FRAME_Rbp = 0xf8 -KEXCEPTION_FRAME_Rbx = 0x100 -KEXCEPTION_FRAME_Rdi = 0x108 -KEXCEPTION_FRAME_Rsi = 0x110 -KEXCEPTION_FRAME_R12 = 0x118 -KEXCEPTION_FRAME_R13 = 0x120 -KEXCEPTION_FRAME_R14 = 0x128 -KEXCEPTION_FRAME_R15 = 0x130 -KEXCEPTION_FRAME_Return = 0x138 -KEXCEPTION_FRAME_InitialStack = 0x28 -KEXCEPTION_FRAME_TrapFrame = 0xd0 -KEXCEPTION_FRAME_CallbackStack = 0xd8 -KEXCEPTION_FRAME_OutputBuffer = 0xe0 -KEXCEPTION_FRAME_OutputLength = 0xe8 -KEXCEPTION_FRAME_LENGTH = 0x140 - -/* JUMP_BUFFER */ -JbFrame = 0x0 -JbRbx = 0x8 -JbRsp = 0x10 -JbRbp = 0x18 -JbRsi = 0x20 -JbRdi = 0x28 -JbR12 = 0x30 -JbR13 = 0x38 -JbR14 = 0x40 -JbR15 = 0x48 -JbRip = 0x50 -JbXmm6 = 0x60 -JbXmm7 = 0x70 -JbXmm8 = 0x80 -JbXmm9 = 0x90 -JbXmm10 = 0xa0 -JbXmm11 = 0xb0 -JbXmm12 = 0xc0 -JbXmm13 = 0xd0 -JbXmm14 = 0xe0 -JbXmm15 = 0xf0 - -/* KGDTENTRY64 */ -KgdtBaseLow = 0x2 -KgdtBaseMiddle = 0x4 -KgdtBaseHigh = 0x7 -KgdtBaseUpper = 0x8 -KgdtLimitHigh = 0x6 -KgdtLimitLow = 0x0 - -/* KPRCB */ -PbMxCsr = 0x0 -PbNumber = 0x4 -PbInterruptRequest = 0x6 -PbIdleHalt = 0x7 -PbCurrentThread = 0x8 -PbNextThread = 0x10 -PbIdleThread = 0x18 -PbNestingLevel = 0x5 -PbRspBase = 0x28 -PbPrcbLock = 0x30 -PbSetMember = 0x38 -PbProcessorState = 0x40 -PbCpuType = 0x5f0 -PbCpuID = 0x5f1 -PbCpuStep = 0x5f2 -PbHalReserved = 0x5f8 -PbMinorVersion = 0x638 -PbMajorVersion = 0x63a -PbBuildType = 0x63c -PbCpuVendor = 0x63d -PbApicMask = 0x640 -PbCFlushSize = 0x644 -PbAcpiReserved = 0x648 -PbInitialApicId = 0x63e -PbLockQueue = 0x670 -PbPPLookasideList = 0x880 -PbPPNPagedLookasideList = 0x980 -PbPPPagedLookasideList = 0xb80 -PbPacketBarrier = 0xd80 -PbDeferredReadyListHead = 0xd88 -PbLookasideIrpFloat = 0xdc4 -PbTargetSet = 0xe00 -PbIpiFrozen = 0xe08 -PbRequestMailbox = 0xe80 -PbSenderSummary = 0x2680 -PbDpcStack = 0x2740 -PbMaximumDpcQueueDepth = 0x2750 -PbDpcRequestRate = 0x2754 -PbMinimumDpcRate = 0x2758 -PbDpcInterruptRequested = 0x275c -PbDpcThreadRequested = 0x275d -PbDpcRoutineActive = 0x275e -PbDpcThreadActive = 0x275f -PbTimerHand = 0x2760 -PbTimerRequest = 0x2768 -PbTickOffset = 0x2770 -PbMasterOffset = 0x2774 -PbDpcLastCount = 0x2778 -PbQuantumEnd = 0x277d -PbDpcSetEventRequest = 0x2780 -PbIdleSchedule = 0x277f -PbReadySummary = 0x2818 -PbDispatcherReadyListHead = 0x2820 -PbInterruptCount = 0x2a20 -PbKernelTime = 0x2a24 -PbUserTime = 0x2a28 -PbDpcTime = 0x2a2c -PbInterruptTime = 0x2a30 -PbAdjustDpcThreshold = 0x2a34 -PbSkipTick = 0x2a38 -PbPollSlot = 0x2a3a -PbParentNode = 0x2a48 -PbMultiThreadProcessorSet = 0x2a50 -PbMultiThreadSetMaster = 0x2a58 -PbPageColor = 0x2a6c -PbNodeColor = 0x2a70 -PbNodeShiftedColor = 0x2a74 -PbSecondaryColorMask = 0x2a78 -PbSleeping = 0x2a60 -PbVendorString = 0x2abc -PbPowerState = 0x2ad8 -ProcessorBlockLength = 0x2c88 - -/* KPCR */ -PcUserRsp = 0x10 -PcSelf = 0x18 -PcCurrentPrcb = 0x20 -PcLockArray = 0x28 -PcIrql = 0x50 -PcStallScaleFactor = 0x64 -PcHalReserved = 0xc0 - -/* KPROCESSOR_STATE */ -PsSpecialRegisters = 0x0 -PsCr0 = 0x0 -PsCr2 = 0x8 -PsCr3 = 0x10 -PsCr4 = 0x18 -PsKernelDr0 = 0x20 -PsKernelDr1 = 0x28 -PsKernelDr2 = 0x30 -PsKernelDr3 = 0x38 -PsKernelDr6 = 0x40 -PsKernelDr7 = 0x48 -PsGdtr = 0x50 -PsIdtr = 0x60 -PsTr = 0x70 -PsLdtr = 0x72 -PsMxCsr = 0x74 -PsContextFrame = 0xe0 -PsDebugControl = 0x78 -PsLastBranchToRip = 0x80 -PsLastBranchFromRip = 0x88 -PsLastExceptionToRip = 0x90 -PsLastExceptionFromRip = 0x98 -PsCr8 = 0xa0 -ProcessorStateLength = 0x5b0 - -/* KSTART_FRAME */ -SfP1Home = 0x0 -SfP2Home = 0x8 -SfP3Home = 0x10 -SfP4Home = 0x18 -SfReturn = 0x28 -KSTART_FRAME_LENGTH = 0x30 - -/* KSPECIAL_REGISTERS */ -SrKernelDr0 = 0x20 -SrKernelDr1 = 0x28 -SrKernelDr2 = 0x30 -SrKernelDr3 = 0x38 -SrKernelDr6 = 0x40 -SrKernelDr7 = 0x48 -SrGdtr = 0x50 -SrIdtr = 0x60 -SrTr = 0x70 -SrMxCsr = 0x74 -SrMsrGsBase = 0xa8 -SrMsrGsSwap = 0xb0 -SrMsrStar = 0xb8 -SrMsrLStar = 0xc0 -SrMsrCStar = 0xc8 -SrMsrSyscallMask = 0xd0 - -/* KSYSTEM_TIME */ -StLowTime = 0x0 -StHigh1Time = 0x4 -StHigh2Time = 0x8 - -/* KSWITCH_FRAME */ -SwP5Home = 0x20 -SwApcBypass = 0x28 -SwRbp = 0x30 -SwReturn = 0x38 -SwitchFrameLength = 0x40 -KSWITCH_FRAME_LENGTH = 0x40 - -/* KTRAP_FRAME */ -KTRAP_FRAME_P1Home = 0x0 -KTRAP_FRAME_P2Home = 0x8 -KTRAP_FRAME_P3Home = 0x10 -KTRAP_FRAME_P4Home = 0x18 -KTRAP_FRAME_P5 = 0x20 -KTRAP_FRAME_PreviousMode = 0x28 -KTRAP_FRAME_PreviousIrql = 0x29 -KTRAP_FRAME_FaultIndicator = 0x2a -KTRAP_FRAME_ExceptionActive = 0x2b -KTRAP_FRAME_MxCsr = 0x2c -KTRAP_FRAME_Rax = 0x30 -KTRAP_FRAME_Rcx = 0x38 -KTRAP_FRAME_Rdx = 0x40 -KTRAP_FRAME_R8 = 0x48 -KTRAP_FRAME_R9 = 0x50 -KTRAP_FRAME_R10 = 0x58 -KTRAP_FRAME_R11 = 0x60 -KTRAP_FRAME_GsBase = 0x68 -KTRAP_FRAME_GsSwap = 0x68 -KTRAP_FRAME_Xmm0 = 0x70 -KTRAP_FRAME_Xmm1 = 0x80 -KTRAP_FRAME_Xmm2 = 0x90 -KTRAP_FRAME_Xmm3 = 0xa0 -KTRAP_FRAME_Xmm4 = 0xb0 -KTRAP_FRAME_Xmm5 = 0xc0 -KTRAP_FRAME_FaultAddress = 0xd0 -KTRAP_FRAME_TimeStampCKCL = 0xd0 -KTRAP_FRAME_Dr0 = 0xd8 -KTRAP_FRAME_Dr1 = 0xe0 -KTRAP_FRAME_Dr2 = 0xe8 -KTRAP_FRAME_Dr3 = 0xf0 -KTRAP_FRAME_Dr6 = 0xf8 -KTRAP_FRAME_Dr7 = 0x100 -KTRAP_FRAME_DebugControl = 0x108 -KTRAP_FRAME_LastBranchToRip = 0x110 -KTRAP_FRAME_LastBranchFromRip = 0x118 -KTRAP_FRAME_LastExceptionToRip = 0x120 -KTRAP_FRAME_LastExceptionFromRip = 0x128 -KTRAP_FRAME_LastBranchControl = 0x108 -KTRAP_FRAME_LastBranchMSR = 0x110 -KTRAP_FRAME_SegDs = 0x130 -KTRAP_FRAME_SegEs = 0x132 -KTRAP_FRAME_SegFs = 0x134 -KTRAP_FRAME_SegGs = 0x136 -KTRAP_FRAME_TrapFrame = 0x138 -KTRAP_FRAME_Rbx = 0x140 -KTRAP_FRAME_Rdi = 0x148 -KTRAP_FRAME_Rsi = 0x150 -KTRAP_FRAME_Rbp = 0x158 -KTRAP_FRAME_ErrorCode = 0x160 -KTRAP_FRAME_TimeStampKlog = 0x160 -KTRAP_FRAME_Rip = 0x168 -KTRAP_FRAME_SegCs = 0x170 -KTRAP_FRAME_Logging = 0x173 -KTRAP_FRAME_EFlags = 0x178 -KTRAP_FRAME_Rsp = 0x180 -KTRAP_FRAME_SegSs = 0x188 -KTRAP_FRAME_CodePatchCycle = 0x18c -KTRAP_FRAME_LENGTH = 0x190 - -/* KTSS */ -TssRsp0 = 0x4 -TssRsp1 = 0xc -TssRsp2 = 0x14 -TssPanicStack = 0x24 -TssMcaStack = 0x2c -TssNmiStack = 0x34 -TssIoMapBase = 0x66 -TssLength = 0x68 - -/* EXCEPTION_RECORD */ -EXCEPTION_RECORD_ExceptionCode = 0x0 -EXCEPTION_RECORD_ExceptionFlags = 0x4 -EXCEPTION_RECORD_ExceptionRecord = 0x8 -EXCEPTION_RECORD_ExceptionAddress = 0x10 -EXCEPTION_RECORD_NumberParameters = 0x18 -EXCEPTION_RECORD_ExceptionInformation = 0x20 -KTHREAD_WAIT_IRQL = 0x86 diff --git a/include/reactos/libs/pseh/pseh3.h b/include/reactos/libs/pseh/pseh3.h index 78e248755ed..7e051d645de 100644 --- a/include/reactos/libs/pseh/pseh3.h +++ b/include/reactos/libs/pseh/pseh3.h @@ -45,6 +45,9 @@ typedef struct _SEH3$_REGISTRATION_FRAME } SEH3$_REGISTRATION_FRAME ,*PSEH3$_REGISTRATION_FRAME; +/* Prevent gcc from inlining functions that use SEH. */ +static inline __attribute__((always_inline)) __attribute__((returns_twice)) void _SEH3$_PreventInlining() {} + extern inline __attribute__((always_inline,gnu_inline)) void _SEH3$_UnregisterFrame(volatile SEH3$_REGISTRATION_FRAME *RegistrationFrame) { @@ -92,18 +95,20 @@ void * __cdecl __attribute__((error("Can only be used inside an exception filter /* This is an asm wrapper around _SEH3$_RegisterFrame */ #define _SEH3$_RegisterFrame(_TrylevelFrame, _DataTable, _Target) \ - asm goto ("call __SEH3$_RegisterFrame\n" \ + asm goto ("leal %0, %%ecx\n" \ + "call __SEH3$_RegisterFrame\n" \ : \ - : "c" (_TrylevelFrame), "a" (_DataTable) \ - : "edx", "memory" \ + : "m" (*(_TrylevelFrame)), "a" (_DataTable) \ + : "ecx", "edx", "memory" \ : _Target) /* This is an asm wrapper around _SEH3$_EnterTryLevel */ #define _SEH3$_RegisterTryLevel(_TrylevelFrame, _DataTable, _Target) \ - asm goto ("call __SEH3$_RegisterTryLevel\n" \ + asm goto ("leal %0, %%ecx\n" \ + "call __SEH3$_RegisterTryLevel\n" \ : \ - : "c" (_TrylevelFrame), "a" (_DataTable) \ - : "edx", "memory" \ + : "m" (*(_TrylevelFrame)), "a" (_DataTable) \ + : "ecx", "edx", "memory" \ : _Target) /* On GCC the filter function is a nested function with __fastcall calling @@ -165,13 +170,16 @@ void * __cdecl __attribute__((error("Can only be used inside an exception filter around into places that are never executed. */ #define _SEH3$_SCARE_GCC() \ void *plabel; \ + _SEH3$_ASM_GOTO("#\n", _SEH3$_l_BeforeTry); \ _SEH3$_ASM_GOTO("#\n", _SEH3$_l_HandlerTarget); \ + _SEH3$_ASM_GOTO("#\n", _SEH3$_l_OnException); \ asm volatile ("#" : "=a"(plabel) : "p"(&&_SEH3$_l_BeforeTry), "p"(&&_SEH3$_l_HandlerTarget), "p"(&&_SEH3$_l_OnException) \ : _SEH3$_CLOBBER_ON_EXCEPTION ); \ - goto *plabel; + goto _SEH3$_l_OnException; #define _SEH3_TRY \ + _SEH3$_PreventInlining(); \ /* Enter the outer scope */ \ do { \ /* Declare local labels */ \ diff --git a/lib/cmlib/hivecell.c b/lib/cmlib/hivecell.c index c3e3dbea41b..3c82b450b9d 100644 --- a/lib/cmlib/hivecell.c +++ b/lib/cmlib/hivecell.c @@ -549,7 +549,7 @@ HvTrackCellRef(PHV_TRACK_CELL_REF CellRef, /* FIXME: TODO */ DPRINT1("ERROR: Too many references\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); return FALSE; } diff --git a/ntoskrnl/cache/cachesub.c b/ntoskrnl/cache/cachesub.c index f9a949d69d0..0431a5666f6 100644 --- a/ntoskrnl/cache/cachesub.c +++ b/ntoskrnl/cache/cachesub.c @@ -132,7 +132,7 @@ CcGetFlushedValidData(IN PSECTION_OBJECT_POINTERS SectionObjectPointer, { LARGE_INTEGER Result = {{0}}; UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return Result; } diff --git a/ntoskrnl/cache/copysup.c b/ntoskrnl/cache/copysup.c index eb344ee50b5..be2af04c983 100644 --- a/ntoskrnl/cache/copysup.c +++ b/ntoskrnl/cache/copysup.c @@ -122,7 +122,7 @@ CcFastCopyRead(IN PFILE_OBJECT FileObject, OUT PIO_STATUS_BLOCK IoStatus) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } BOOLEAN @@ -209,7 +209,7 @@ CcFastCopyWrite(IN PFILE_OBJECT FileObject, IN PVOID Buffer) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } BOOLEAN @@ -220,7 +220,7 @@ CcCanIWrite(IN PFILE_OBJECT FileObject, IN UCHAR Retrying) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return FALSE; } @@ -234,7 +234,7 @@ CcDeferWrite(IN PFILE_OBJECT FileObject, IN BOOLEAN Retrying) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* EOF */ diff --git a/ntoskrnl/cache/fssup.c b/ntoskrnl/cache/fssup.c index 4b4bc15cf23..f816100dfa8 100644 --- a/ntoskrnl/cache/fssup.c +++ b/ntoskrnl/cache/fssup.c @@ -399,7 +399,7 @@ CcSetDirtyPageThreshold(IN PFILE_OBJECT FileObject, IN ULONG DirtyPageThreshold) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } /* diff --git a/ntoskrnl/cache/logsup.c b/ntoskrnl/cache/logsup.c index 6c5f3540ed5..cb4f78a3f0b 100644 --- a/ntoskrnl/cache/logsup.c +++ b/ntoskrnl/cache/logsup.c @@ -24,7 +24,7 @@ CcSetAdditionalCacheAttributes(IN PFILE_OBJECT FileObject, IN BOOLEAN DisableWriteBehind) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -48,7 +48,7 @@ CcGetDirtyPages(IN PVOID LogHandle, { LARGE_INTEGER Result = {{0}}; UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return Result; } @@ -57,7 +57,7 @@ NTAPI CcIsThereDirtyData(IN PVPB Vpb) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return FALSE; } @@ -68,7 +68,7 @@ CcGetLsnForFileObject(IN PFILE_OBJECT FileObject, { LARGE_INTEGER Result = {{0}}; UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return Result; } diff --git a/ntoskrnl/include/internal/i386/ke.h b/ntoskrnl/include/internal/i386/ke.h index 8363477ab48..7e81de388aa 100644 --- a/ntoskrnl/include/internal/i386/ke.h +++ b/ntoskrnl/include/internal/i386/ke.h @@ -138,8 +138,8 @@ typedef union _KTRAP_EXIT_SKIP_BITS { \ /* Not yet handled */ \ UNIMPLEMENTED; \ - while (TRUE); \ - return TRUE; \ + ASSERT(FALSE); /* while (TRUE); */ \ + return FALSE; \ } C_ASSERT(NPX_FRAME_LENGTH == sizeof(FX_SAVE_AREA)); diff --git a/ntoskrnl/io/iomgr/irp.c b/ntoskrnl/io/iomgr/irp.c index f88e80f46d8..f19b496bb87 100644 --- a/ntoskrnl/io/iomgr/irp.c +++ b/ntoskrnl/io/iomgr/irp.c @@ -266,7 +266,8 @@ IopCompleteRequest(IN PKAPC Apc, { /* We should never get this yet */ DPRINT1("Reparse support not yet present!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return; } } @@ -1373,7 +1374,7 @@ IofCompleteRequest(IN PIRP Irp, #else /* Not implemented yet. */ DPRINT1("Not supported!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); #endif } diff --git a/ntoskrnl/io/pnpmgr/pnpmgr.c b/ntoskrnl/io/pnpmgr/pnpmgr.c index ebba94d5377..54e5c410f3f 100644 --- a/ntoskrnl/io/pnpmgr/pnpmgr.c +++ b/ntoskrnl/io/pnpmgr/pnpmgr.c @@ -3784,7 +3784,7 @@ PiGetDeviceRegistryProperty(IN PDEVICE_OBJECT DeviceObject, #define PIP_RETURN_DATA(x, y) {ReturnLength = x; Data = y; Status = STATUS_SUCCESS; break;} #define PIP_REGISTRY_DATA(x, y) {ValueName = x; ValueType = y; break;} -#define PIP_UNIMPLEMENTED() {UNIMPLEMENTED; while(TRUE); break;} +#define PIP_UNIMPLEMENTED() {UNIMPLEMENTED; ASSERT(FALSE); /* while (TRUE); */ break;} /* * @implemented diff --git a/ntoskrnl/kd/kdmain.c b/ntoskrnl/kd/kdmain.c index 3e21f675ee7..0b13fae3b41 100644 --- a/ntoskrnl/kd/kdmain.c +++ b/ntoskrnl/kd/kdmain.c @@ -108,7 +108,8 @@ KdpServiceDispatcher(ULONG Service, #endif /* KDBG */ #endif /* DBG */ default: - HalDisplayString ("Invalid debug service call!\n"); + DPRINT1("Invalid debug service call!\n"); + HalDisplayString("Invalid debug service call!\n"); break; } diff --git a/ntoskrnl/kd64/amd64/kdx64.c b/ntoskrnl/kd64/amd64/kdx64.c index df27345bf92..a496fd74a49 100644 --- a/ntoskrnl/kd64/amd64/kdx64.c +++ b/ntoskrnl/kd64/amd64/kdx64.c @@ -140,7 +140,7 @@ KdpSysReadBusData(IN ULONG BusDataType, OUT PULONG ActualLength) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -155,7 +155,7 @@ KdpSysWriteBusData(IN ULONG BusDataType, OUT PULONG ActualLength) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -358,7 +358,7 @@ NTAPI KdpSysCheckLowMemory(IN ULONG Flags) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -367,6 +367,6 @@ NTAPI KdpAllowDisable(VOID) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_ACCESS_DENIED; } diff --git a/ntoskrnl/kd64/arm/kdarm.c b/ntoskrnl/kd64/arm/kdarm.c index 32a82ebb9d0..35f9211014d 100644 --- a/ntoskrnl/kd64/arm/kdarm.c +++ b/ntoskrnl/kd64/arm/kdarm.c @@ -23,7 +23,7 @@ KdpGetStateChange(IN PDBGKD_MANIPULATE_STATE64 State, IN PCONTEXT Context) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -32,7 +32,7 @@ KdpSetContextState(IN PDBGKD_ANY_WAIT_STATE_CHANGE WaitStateChange, IN PCONTEXT Context) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } NTSTATUS @@ -41,7 +41,7 @@ KdpSysReadMsr(IN ULONG Msr, OUT PLARGE_INTEGER MsrValue) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -51,7 +51,7 @@ KdpSysWriteMsr(IN ULONG Msr, IN PLARGE_INTEGER MsrValue) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -66,7 +66,7 @@ KdpSysReadBusData(IN ULONG BusDataType, OUT PULONG ActualLength) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -81,7 +81,7 @@ KdpSysWriteBusData(IN ULONG BusDataType, OUT PULONG ActualLength) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -94,7 +94,7 @@ KdpSysReadControlSpace(IN ULONG Processor, OUT PULONG ActualLength) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -107,7 +107,7 @@ KdpSysWriteControlSpace(IN ULONG Processor, OUT PULONG ActualLength) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -122,7 +122,7 @@ KdpSysReadIoSpace(IN ULONG InterfaceType, OUT PULONG ActualDataSize) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -137,7 +137,7 @@ KdpSysWriteIoSpace(IN ULONG InterfaceType, OUT PULONG ActualDataSize) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -146,7 +146,7 @@ NTAPI KdpSysCheckLowMemory(IN ULONG Flags) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_UNSUCCESSFUL; } @@ -155,6 +155,6 @@ NTAPI KdpAllowDisable(VOID) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_ACCESS_DENIED; } diff --git a/ntoskrnl/ke/bug.c b/ntoskrnl/ke/bug.c index 641c544dfa9..d701444ae6b 100644 --- a/ntoskrnl/ke/bug.c +++ b/ntoskrnl/ke/bug.c @@ -1178,6 +1178,7 @@ KeBugCheckWithTf(IN ULONG BugCheckCode, KiBugCheckDebugBreak(DBG_STATUS_BUGCHECK_SECOND); /* Shouldn't get here */ + ASSERT(FALSE); while (TRUE); } diff --git a/ntoskrnl/ke/dpc.c b/ntoskrnl/ke/dpc.c index d507b726eb7..577fefbd587 100644 --- a/ntoskrnl/ke/dpc.c +++ b/ntoskrnl/ke/dpc.c @@ -780,6 +780,7 @@ KeInsertQueueDpc(IN PKDPC Dpc, { /* FIXME: Setup Threaded DPC */ DPRINT1("Threaded DPC not supported\n"); + ASSERT(FALSE); while (TRUE); } } diff --git a/ntoskrnl/ke/i386/context.c b/ntoskrnl/ke/i386/context.c index 085e9ae735b..cd36a145449 100644 --- a/ntoskrnl/ke/i386/context.c +++ b/ntoskrnl/ke/i386/context.c @@ -36,7 +36,8 @@ KiSwapProcess(IN PKPROCESS NewProcess, { /* Not handled yet */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return; } /* Update CR3 */ diff --git a/ntoskrnl/ke/i386/traphdlr.c b/ntoskrnl/ke/i386/traphdlr.c index 835d8e70417..2bd9a46d998 100644 --- a/ntoskrnl/ke/i386/traphdlr.c +++ b/ntoskrnl/ke/i386/traphdlr.c @@ -663,6 +663,7 @@ KiTrap06Handler(IN PKTRAP_FRAME TrapFrame) { /* Should only happen in VDM mode */ UNIMPLEMENTED; + ASSERT(FALSE); while (TRUE); } @@ -735,6 +736,7 @@ KiTrap07Handler(IN PKTRAP_FRAME TrapFrame) { /* Not implemented */ UNIMPLEMENTED; + ASSERT(FALSE); while (TRUE); } @@ -921,6 +923,7 @@ KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame) { /* Should only happen in VDM mode */ UNIMPLEMENTED; + ASSERT(FALSE); while (TRUE); } @@ -1077,6 +1080,7 @@ KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame) { /* Not implemented */ UNIMPLEMENTED; + ASSERT(FALSE); while (TRUE); } @@ -1133,6 +1137,7 @@ KiTrap0DHandler(IN PKTRAP_FRAME TrapFrame) { /* Otherwise, this is another kind of IRET fault */ UNIMPLEMENTED; + ASSERT(FALSE); while (TRUE); } } @@ -1191,6 +1196,7 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame) { /* The stack is somewhere in between frames, we need to fix it */ UNIMPLEMENTED; + ASSERT(FALSE); while (TRUE); } } @@ -1256,6 +1262,7 @@ KiTrap0EHandler(IN PKTRAP_FRAME TrapFrame) { /* Not yet implemented */ UNIMPLEMENTED; + ASSERT(FALSE); while (TRUE); } #endif @@ -1439,7 +1446,7 @@ FASTCALL KiGetTickCountHandler(IN PKTRAP_FRAME TrapFrame) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -1447,7 +1454,7 @@ FASTCALL KiCallbackReturnHandler(IN PKTRAP_FRAME TrapFrame) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } DECLSPEC_NORETURN @@ -1618,6 +1625,7 @@ KiSystemCall(IN PKTRAP_FRAME TrapFrame, { /* Access violation */ UNIMPLEMENTED; + ASSERT(FALSE); while (TRUE); } @@ -1683,6 +1691,7 @@ Kei386EoiHelper(VOID) { /* We should never see this call happening */ DPRINT1("Mismatched NT/HAL version"); + ASSERT(FALSE); while (TRUE); } diff --git a/ntoskrnl/mm/ARM3/arm/init.c b/ntoskrnl/mm/ARM3/arm/init.c index 3f1d2c2c868..0b87140b008 100644 --- a/ntoskrnl/mm/ARM3/arm/init.c +++ b/ntoskrnl/mm/ARM3/arm/init.c @@ -66,7 +66,7 @@ MiInitMachineDependent(IN PLOADER_PARAMETER_BLOCK LoaderBlock) // Always return success for now // DPRINT1("NEVER TELL ME THE ODDS!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } diff --git a/ntoskrnl/mm/ARM3/largepag.c b/ntoskrnl/mm/ARM3/largepag.c index 49ce25fc71a..84ef6f6f167 100644 --- a/ntoskrnl/mm/ARM3/largepag.c +++ b/ntoskrnl/mm/ARM3/largepag.c @@ -59,7 +59,7 @@ MiSyncCachedRanges(VOID) for (i = 0; i < MiLargePageRangeIndex; i++) { DPRINT1("No support for large pages\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); } } diff --git a/ntoskrnl/mm/ARM3/mminit.c b/ntoskrnl/mm/ARM3/mminit.c index 06db17afc6d..1211b659861 100644 --- a/ntoskrnl/mm/ARM3/mminit.c +++ b/ntoskrnl/mm/ARM3/mminit.c @@ -2043,7 +2043,7 @@ MmArmInitSystem(IN ULONG Phase, // Define the basic user vs. kernel address space separation // MmSystemRangeStart = (PVOID)MI_DEFAULT_SYSTEM_RANGE_START; - MmUserProbeAddress = (ULONG_PTR)MI_HIGHEST_USER_ADDRESS; + MmUserProbeAddress = (ULONG_PTR)MI_USER_PROBE_ADDRESS; MmHighestUserAddress = (PVOID)MI_HIGHEST_USER_ADDRESS; /* Highest PTE and PDE based on the addresses above */ diff --git a/ntoskrnl/mm/ARM3/pagfault.c b/ntoskrnl/mm/ARM3/pagfault.c index aa45a70c97b..b99f77e04c9 100644 --- a/ntoskrnl/mm/ARM3/pagfault.c +++ b/ntoskrnl/mm/ARM3/pagfault.c @@ -876,7 +876,8 @@ MiDispatchFault(IN BOOLEAN StoreInstruction, NTSTATUS Status; PMMPTE SuperProtoPte; PMMPFN Pfn1, OutPfn = NULL; - PFN_NUMBER PageFrameIndex, PteCount, ProcessedPtes; + PFN_NUMBER PageFrameIndex; + PFN_COUNT PteCount, ProcessedPtes; DPRINT("ARM3 Page Fault Dispatcher for address: %p in process: %p\n", Address, Process); @@ -1055,7 +1056,7 @@ MiDispatchFault(IN BOOLEAN StoreInstruction, if (ProcessedPtes) { /* Bump the transition count */ - InterlockedExchangeAdd(&KeGetCurrentPrcb()->MmTransitionCount, ProcessedPtes); + InterlockedExchangeAddSizeT(&KeGetCurrentPrcb()->MmTransitionCount, ProcessedPtes); ProcessedPtes--; /* Loop all the processing we did */ @@ -1208,9 +1209,15 @@ MmArmAccessFault(IN BOOLEAN StoreInstruction, if (TrapInformation) { PKTRAP_FRAME TrapFrame = TrapInformation; +#ifdef _M_IX86 DbgPrint("MM:***EIP %p, EFL %p\n", TrapFrame->Eip, TrapFrame->EFlags); DbgPrint("MM:***EAX %p, ECX %p EDX %p\n", TrapFrame->Eax, TrapFrame->Ecx, TrapFrame->Edx); DbgPrint("MM:***EBX %p, ESI %p EDI %p\n", TrapFrame->Ebx, TrapFrame->Esi, TrapFrame->Edi); +#elif defined(_M_AMD64) + DbgPrint("MM:***RIP %p, EFL %p\n", TrapFrame->Rip, TrapFrame->EFlags); + DbgPrint("MM:***RAX %p, RCX %p RDX %p\n", TrapFrame->Rax, TrapFrame->Rcx, TrapFrame->Rdx); + DbgPrint("MM:***RBX %p, RSI %p RDI %p\n", TrapFrame->Rbx, TrapFrame->Rsi, TrapFrame->Rdi); +#endif } /* Tell the trap handler to fail */ diff --git a/ntoskrnl/mm/ARM3/pool.c b/ntoskrnl/mm/ARM3/pool.c index f31f512ac45..728949d7515 100644 --- a/ntoskrnl/mm/ARM3/pool.c +++ b/ntoskrnl/mm/ARM3/pool.c @@ -1324,8 +1324,10 @@ MiInitializeSessionPool(VOID) /* Initialize the first page table */ Index = (ULONG_PTR)MmSessionSpace->PagedPoolStart - (ULONG_PTR)MmSessionBase; Index >>= 22; +#ifndef _M_AMD64 // FIXME ASSERT(MmSessionSpace->PageTables[Index].u.Long == 0); MmSessionSpace->PageTables[Index] = *PointerPde; +#endif /* Bump up counters */ InterlockedIncrementSizeT(&MmSessionSpace->NonPageablePages); diff --git a/ntoskrnl/mm/ARM3/procsup.c b/ntoskrnl/mm/ARM3/procsup.c index 27660f72180..7cfa0b3dd49 100644 --- a/ntoskrnl/mm/ARM3/procsup.c +++ b/ntoskrnl/mm/ARM3/procsup.c @@ -1580,7 +1580,9 @@ MiReleaseProcessReferenceToSessionDataPage(IN PMM_SESSION_SPACE SessionGlobal) DPRINT1("Last process in sessino %d going down!!!\n", SessionId); /* Free the session page tables */ +#ifndef _M_AMD64 ExFreePool(SessionGlobal->PageTables); +#endif ASSERT(!MI_IS_PHYSICAL_ADDRESS(SessionGlobal)); /* Capture the data page PFNs */ @@ -1744,8 +1746,9 @@ MiSessionInitializeWorkingSetList(VOID) /* Add this into the list */ Index = ((ULONG_PTR)WorkingSetList - (ULONG_PTR)MmSessionBase) >> 22; +#ifndef _M_AMD64 MmSessionSpace->PageTables[Index] = TempPte; - +#endif /* Initialize the page directory page, and now zero the working set list itself */ MiInitializePfnForOtherProcess(PageFrameIndex, PointerPde, @@ -1977,8 +1980,10 @@ MiSessionCreateInternal(OUT PULONG SessionId) MmSessionSpace->Color = Color; MmSessionSpace->NonPageablePages = MiSessionCreateCharge; MmSessionSpace->CommittedPages = MiSessionCreateCharge; +#ifndef _M_AMD64 MmSessionSpace->PageTables = PageTables; MmSessionSpace->PageTables[PointerPde - MiAddressToPde(MmSessionBase)] = *PointerPde; +#endif InitializeListHead(&MmSessionSpace->ImageList); DPRINT1("Session %d is ready to go: 0x%p 0x%p, %lx 0x%p\n", *SessionId, MmSessionSpace, SessionGlobal, SessionPageDirIndex, PageTables); diff --git a/ntoskrnl/mm/ARM3/section.c b/ntoskrnl/mm/ARM3/section.c index 5c10f2c4ce0..b3c4674aa74 100644 --- a/ntoskrnl/mm/ARM3/section.c +++ b/ntoskrnl/mm/ARM3/section.c @@ -906,9 +906,10 @@ MiSessionCommitPageTables(IN PVOID StartVa, Index = ((ULONG_PTR)StartVa - (ULONG_PTR)MmSessionBase) >> 22; while (StartPde <= EndPde) { +#ifndef _M_AMD64 /* If we don't already have a page table for it, increment count */ if (MmSessionSpace->PageTables[Index].u.Long == 0) PageCount++; - +#endif /* Move to the next one */ StartPde++; Index++; @@ -924,6 +925,7 @@ MiSessionCommitPageTables(IN PVOID StartVa, /* Loop each PDE while holding the working set lock */ // MiLockWorkingSet(PsGetCurrentThread(), // &MmSessionSpace->GlobalVirtualAddress->Vm); +#ifndef _M_AMD64 while (StartPde <= EndPde) { /* Check if we already have a page table */ @@ -966,6 +968,7 @@ MiSessionCommitPageTables(IN PVOID StartVa, StartPde++; Index++; } +#endif /* Make sure we didn't do more pages than expected */ ASSERT(ActualPages <= PageCount); diff --git a/ntoskrnl/mm/ARM3/sysldr.c b/ntoskrnl/mm/ARM3/sysldr.c index 59e37c1a80a..e226766a10a 100644 --- a/ntoskrnl/mm/ARM3/sysldr.c +++ b/ntoskrnl/mm/ARM3/sysldr.c @@ -106,7 +106,8 @@ MiLoadImageSection(IN OUT PVOID *SectionPtr, { /* Fail */ DPRINT1("Session loading not yet supported!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } /* Not session load, shouldn't have an entry */ @@ -1217,7 +1218,7 @@ CheckDllState: /* We failed, unload the image */ MmUnloadSystemImage(DllEntry); DPRINT1("MmCallDllInitialize failed with status 0x%x\n", Status); - while (TRUE); + ASSERT(FALSE); // while (TRUE); Loaded = FALSE; } } @@ -1720,7 +1721,8 @@ MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock) { /* Shouldn't happen */ DPRINT1("[Mm0]: Couldn't allocate driver section!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return; } /* This is the new virtual address for the module */ @@ -1773,7 +1775,8 @@ MiReloadBootLoadedDrivers(IN PLOADER_PARAMETER_BLOCK LoaderBlock) { /* This shouldn't happen */ DPRINT1("Relocations failed!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + return; } } @@ -2922,7 +2925,8 @@ LoaderScan: { /* We don't support session loading yet */ DPRINT1("Unsupported Session-Load!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + Status = STATUS_NOT_IMPLEMENTED; } /* Do cleanup */ @@ -3023,7 +3027,8 @@ LoaderScan: { /* We don't support session loading yet */ DPRINT1("Unsupported Session-Load!\n"); - while (TRUE); + ASSERT(FALSE); // while (TRUE); + goto Quickie; } /* Check the loader list again, we should end up in the path below */ diff --git a/ntoskrnl/mm/ARM3/virtual.c b/ntoskrnl/mm/ARM3/virtual.c index 65f2701e173..3d3b4a1f25d 100644 --- a/ntoskrnl/mm/ARM3/virtual.c +++ b/ntoskrnl/mm/ARM3/virtual.c @@ -3861,8 +3861,9 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, } if ((AllocationType & MEM_RESET) == MEM_RESET) { - DPRINT1("MEM_RESET not supported\n"); - Status = STATUS_INVALID_PARAMETER; + /// @todo HACK: pretend success + DPRINT("MEM_RESET not supported\n"); + Status = STATUS_SUCCESS; goto FailPathNoLock; } if (Process->VmTopDown == 1) @@ -4307,7 +4308,6 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, // There's a change in protection, remember this for later, but do // not yet handle it. // - DPRINT1("Protection change to: 0x%lx not implemented\n", Protect); ChangeProtection = TRUE; } @@ -4317,11 +4317,6 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, PointerPte++; } - // - // This path is not yet handled - // - ASSERT(ChangeProtection == FALSE); - // // Release the working set lock, unlock the address space, and detach from // the target process if it was not the current process. Also dereference the @@ -4331,6 +4326,26 @@ NtAllocateVirtualMemory(IN HANDLE ProcessHandle, Status = STATUS_SUCCESS; FailPath: MmUnlockAddressSpace(AddressSpace); + + // + // Check if we need to update the protection + // + if (ChangeProtection) + { + PVOID ProtectBaseAddress = (PVOID)StartingAddress; + SIZE_T ProtectSize = PRegionSize; + ULONG OldProtection; + + // + // Change the protection of the region + // + MiProtectVirtualMemory(Process, + &ProtectBaseAddress, + &ProtectSize, + Protect, + &OldProtection); + } + FailPathNoLock: if (Attached) KeUnstackDetachProcess(&ApcState); if (ProcessHandle != NtCurrentProcess()) ObDereferenceObject(Process); diff --git a/ntoskrnl/mm/arm/page.c b/ntoskrnl/mm/arm/page.c index 1820d9101b8..5dda48308a7 100644 --- a/ntoskrnl/mm/arm/page.c +++ b/ntoskrnl/mm/arm/page.c @@ -125,7 +125,7 @@ MiFlushTlb(IN PMMPTE PointerPte, IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } BOOLEAN @@ -135,7 +135,7 @@ MmCreateProcessAddressSpace(IN ULONG MinWs, IN PULONG DirectoryTableBase) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return FALSE; } @@ -165,7 +165,7 @@ MmDisableVirtualMapping(IN PEPROCESS Process, OUT PPFN_NUMBER Page) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -174,7 +174,7 @@ MmEnableVirtualMapping(IN PEPROCESS Process, IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } NTSTATUS @@ -186,7 +186,7 @@ MmCreateVirtualMappingUnsafe(IN PEPROCESS Process, IN ULONG PageCount) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } @@ -199,7 +199,7 @@ MmCreateVirtualMapping(IN PEPROCESS Process, IN ULONG PageCount) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return STATUS_SUCCESS; } @@ -208,7 +208,7 @@ NTAPI MmRawDeleteVirtualMapping(IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -220,7 +220,7 @@ MmDeleteVirtualMapping(IN PEPROCESS Process, OUT PPFN_NUMBER Page) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -230,7 +230,7 @@ MmDeletePageFileMapping(IN PEPROCESS Process, IN SWAPENTRY *SwapEntry) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } NTSTATUS @@ -240,8 +240,8 @@ MmCreatePageFileMapping(IN PEPROCESS Process, IN SWAPENTRY SwapEntry) { UNIMPLEMENTED; - while (TRUE); - return 0; + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } PFN_NUMBER @@ -250,7 +250,7 @@ MmGetPfnForProcess(IN PEPROCESS Process, IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return 0; } @@ -260,8 +260,8 @@ MmIsDirtyPage(IN PEPROCESS Process, IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); - return 0; + ASSERT(FALSE); // while (TRUE); + return FALSE; } VOID @@ -270,7 +270,7 @@ MmSetCleanPage(IN PEPROCESS Process, IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -279,7 +279,7 @@ MmSetDirtyPage(IN PEPROCESS Process, IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } BOOLEAN @@ -288,7 +288,7 @@ MmIsPagePresent(IN PEPROCESS Process, IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return FALSE; } @@ -298,7 +298,7 @@ MmIsPageSwapEntry(IN PEPROCESS Process, IN PVOID Address) { UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return FALSE; } @@ -357,7 +357,7 @@ MmGetPhysicalAddress(IN PVOID Address) PhysicalAddress.QuadPart = 0; UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); return PhysicalAddress; } diff --git a/ntoskrnl/mm/arm/stubs.c b/ntoskrnl/mm/arm/stubs.c index 06df8b23f2b..1d71bc95969 100644 --- a/ntoskrnl/mm/arm/stubs.c +++ b/ntoskrnl/mm/arm/stubs.c @@ -375,8 +375,8 @@ Mmi386ReleaseMmInfo(IN PEPROCESS Process) // FIXME-USER: Need to delete address space // UNIMPLEMENTED; - while (TRUE); - return 0; + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } PULONG @@ -400,7 +400,7 @@ MmDisableVirtualMapping(IN PEPROCESS Process, // TODO // UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -412,7 +412,7 @@ MmEnableVirtualMapping(IN PEPROCESS Process, // TODO // UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } NTSTATUS @@ -659,7 +659,7 @@ MmDeletePageFileMapping(IN PEPROCESS Process, // TODO // UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } NTSTATUS @@ -672,8 +672,8 @@ MmCreatePageFileMapping(IN PEPROCESS Process, // TODO // UNIMPLEMENTED; - while (TRUE); - return 0; + ASSERT(FALSE); // while (TRUE); + return STATUS_NOT_IMPLEMENTED; } PFN_NUMBER @@ -704,8 +704,8 @@ MmIsDirtyPage(IN PEPROCESS Process, // TODO // UNIMPLEMENTED; - while (TRUE); - return 0; + ASSERT(FALSE); // while (TRUE); + return FALSE; } VOID @@ -717,7 +717,7 @@ MmSetCleanPage(IN PEPROCESS Process, // TODO // UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } VOID @@ -729,7 +729,7 @@ MmSetDirtyPage(IN PEPROCESS Process, // TODO // UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); } BOOLEAN diff --git a/ntoskrnl/po/povolume.c b/ntoskrnl/po/povolume.c index 77003029a43..13da03a43f2 100644 --- a/ntoskrnl/po/povolume.c +++ b/ntoskrnl/po/povolume.c @@ -300,7 +300,9 @@ PopFlushVolumes(IN BOOLEAN ShuttingDown) { /* ReactOS only implements this routine for shutdown, which requires it */ UNIMPLEMENTED; - while (TRUE); + ASSERT(FALSE); // while (TRUE); + KeReleaseGuardedMutex(&PopVolumeLock); + return; } /* Check if there were no volumes at all */ diff --git a/win32ss/gdi/eng/alphablend.c b/win32ss/gdi/eng/alphablend.c index d760866223b..5b4530bc63c 100644 --- a/win32ss/gdi/eng/alphablend.c +++ b/win32ss/gdi/eng/alphablend.c @@ -17,13 +17,14 @@ */ BOOL APIENTRY -EngAlphaBlend(IN SURFOBJ *psoDest, - IN SURFOBJ *psoSource, - IN CLIPOBJ *ClipRegion, - IN XLATEOBJ *ColorTranslation, - IN PRECTL DestRect, - IN PRECTL SourceRect, - IN BLENDOBJ *BlendObj) +EngAlphaBlend( + _Inout_ SURFOBJ *psoDest, + _In_ SURFOBJ *psoSource, + _In_opt_ CLIPOBJ *ClipRegion, + _In_opt_ XLATEOBJ *ColorTranslation, + _In_ RECTL *DestRect, + _In_ RECTL *SourceRect, + _In_ BLENDOBJ *BlendObj) { RECTL InputRect; RECTL OutputRect; diff --git a/win32ss/gdi/eng/bitblt.c b/win32ss/gdi/eng/bitblt.c index 3031a8952b8..20e34a034fc 100644 --- a/win32ss/gdi/eng/bitblt.c +++ b/win32ss/gdi/eng/bitblt.c @@ -296,18 +296,20 @@ NtGdiEngBitBlt( /* * @implemented */ -BOOL APIENTRY -EngBitBlt(SURFOBJ *DestObj, - SURFOBJ *SourceObj, - SURFOBJ *Mask, - CLIPOBJ *ClipRegion, - XLATEOBJ *ColorTranslation, - RECTL *DestRect, - POINTL *SourcePoint, - POINTL *MaskOrigin, - BRUSHOBJ *pbo, - POINTL *BrushOrigin, - ROP4 Rop4) +BOOL +APIENTRY +EngBitBlt( + _Inout_ SURFOBJ *psoTrg, + _In_opt_ SURFOBJ *psoSrc, + _In_opt_ SURFOBJ *psoMask, + _In_opt_ CLIPOBJ *pco, + _In_opt_ XLATEOBJ *pxlo, + _In_ RECTL *prclTrg, + _When_(psoSrc, _In_) POINTL *pptlSrc, + _When_(psoMask, _In_) POINTL *pptlMask, + _In_opt_ BRUSHOBJ *pbo, + _When_(pbo, _In_) POINTL *pptlBrush, + _In_ ROP4 rop4) { BYTE clippingType; RECTL CombinedRect; @@ -321,36 +323,36 @@ EngBitBlt(SURFOBJ *DestObj, PBLTRECTFUNC BltRectFunc; BOOLEAN Ret = TRUE; RECTL ClipRect; - unsigned i; + ULONG i; POINTL Pt; ULONG Direction; BOOL UsesSource, UsesMask; POINTL AdjustedBrushOrigin; - UsesSource = ROP4_USES_SOURCE(Rop4); - UsesMask = ROP4_USES_MASK(Rop4); + UsesSource = ROP4_USES_SOURCE(rop4); + UsesMask = ROP4_USES_MASK(rop4); - if (Rop4 == ROP4_NOOP) + if (rop4 == ROP4_NOOP) { /* Copy destination onto itself: nop */ return TRUE; } - //DPRINT1("Rop4 : 0x%08x\n", Rop4); + //DPRINT1("rop4 : 0x%08x\n", rop4); - OutputRect = *DestRect; + OutputRect = *prclTrg; RECTL_vMakeWellOrdered(&OutputRect); if (UsesSource) { - if (NULL == SourcePoint) + if (!psoSrc || !pptlSrc) { return FALSE; } /* Make sure we don't try to copy anything outside the valid source region */ - InputPoint = *SourcePoint; + InputPoint = *pptlSrc; if (InputPoint.x < 0) { OutputRect.left -= InputPoint.x; @@ -361,17 +363,17 @@ EngBitBlt(SURFOBJ *DestObj, OutputRect.top -= InputPoint.y; InputPoint.y = 0; } - if (SourceObj->sizlBitmap.cx < InputPoint.x + + if (psoSrc->sizlBitmap.cx < InputPoint.x + OutputRect.right - OutputRect.left) { OutputRect.right = OutputRect.left + - SourceObj->sizlBitmap.cx - InputPoint.x; + psoSrc->sizlBitmap.cx - InputPoint.x; } - if (SourceObj->sizlBitmap.cy < InputPoint.y + + if (psoSrc->sizlBitmap.cy < InputPoint.y + OutputRect.bottom - OutputRect.top) { OutputRect.bottom = OutputRect.top + - SourceObj->sizlBitmap.cy - InputPoint.y; + psoSrc->sizlBitmap.cy - InputPoint.y; } InputRect.left = InputPoint.x; @@ -379,40 +381,40 @@ EngBitBlt(SURFOBJ *DestObj, InputRect.top = InputPoint.y; InputRect.bottom = InputPoint.y + (OutputRect.bottom - OutputRect.top); - InputObj = SourceObj; + InputObj = psoSrc; } else { InputPoint.x = InputPoint.y = 0; InputRect.left = 0; - InputRect.right = DestRect->right - DestRect->left; + InputRect.right = prclTrg->right - prclTrg->left; InputRect.top = 0; - InputRect.bottom = DestRect->bottom - DestRect->top; + InputRect.bottom = prclTrg->bottom - prclTrg->top; } - if (NULL != ClipRegion) + if (NULL != pco) { - if (OutputRect.left < ClipRegion->rclBounds.left) + if (OutputRect.left < pco->rclBounds.left) { - InputRect.left += ClipRegion->rclBounds.left - OutputRect.left; - InputPoint.x += ClipRegion->rclBounds.left - OutputRect.left; - OutputRect.left = ClipRegion->rclBounds.left; + InputRect.left += pco->rclBounds.left - OutputRect.left; + InputPoint.x += pco->rclBounds.left - OutputRect.left; + OutputRect.left = pco->rclBounds.left; } - if (ClipRegion->rclBounds.right < OutputRect.right) + if (pco->rclBounds.right < OutputRect.right) { - InputRect.right -= OutputRect.right - ClipRegion->rclBounds.right; - OutputRect.right = ClipRegion->rclBounds.right; + InputRect.right -= OutputRect.right - pco->rclBounds.right; + OutputRect.right = pco->rclBounds.right; } - if (OutputRect.top < ClipRegion->rclBounds.top) + if (OutputRect.top < pco->rclBounds.top) { - InputRect.top += ClipRegion->rclBounds.top - OutputRect.top; - InputPoint.y += ClipRegion->rclBounds.top - OutputRect.top; - OutputRect.top = ClipRegion->rclBounds.top; + InputRect.top += pco->rclBounds.top - OutputRect.top; + InputPoint.y += pco->rclBounds.top - OutputRect.top; + OutputRect.top = pco->rclBounds.top; } - if (ClipRegion->rclBounds.bottom < OutputRect.bottom) + if (pco->rclBounds.bottom < OutputRect.bottom) { - InputRect.bottom -= OutputRect.bottom - ClipRegion->rclBounds.bottom; - OutputRect.bottom = ClipRegion->rclBounds.bottom; + InputRect.bottom -= OutputRect.bottom - pco->rclBounds.bottom; + OutputRect.bottom = pco->rclBounds.bottom; } } @@ -424,12 +426,12 @@ EngBitBlt(SURFOBJ *DestObj, return TRUE; } - OutputObj = DestObj; + OutputObj = psoTrg; - if (BrushOrigin) + if (pptlBrush) { - AdjustedBrushOrigin.x = BrushOrigin->x; - AdjustedBrushOrigin.y = BrushOrigin->y; + AdjustedBrushOrigin.x = pptlBrush->x; + AdjustedBrushOrigin.y = pptlBrush->y; } else { @@ -438,20 +440,20 @@ EngBitBlt(SURFOBJ *DestObj, } /* Determine clipping type */ - if (ClipRegion == (CLIPOBJ *) NULL) + if (pco == (CLIPOBJ *) NULL) { clippingType = DC_TRIVIAL; } else { - clippingType = ClipRegion->iDComplexity; + clippingType = pco->iDComplexity; } if (UsesMask) { BltRectFunc = BltMask; } - else if ((Rop4 & 0xFF) == R3_OPINDEX_PATCOPY) + else if ((rop4 & 0xFF) == R3_OPINDEX_PATCOPY) { if (pbo && pbo->iSolidColor == 0xFFFFFFFF) BltRectFunc = CallDibBitBlt; @@ -467,16 +469,23 @@ EngBitBlt(SURFOBJ *DestObj, switch (clippingType) { case DC_TRIVIAL: - Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, ColorTranslation, - &OutputRect, &InputPoint, MaskOrigin, pbo, - &AdjustedBrushOrigin, Rop4); + Ret = (*BltRectFunc)(OutputObj, + InputObj, + psoMask, + pxlo, + &OutputRect, + &InputPoint, + pptlMask, + pbo, + &AdjustedBrushOrigin, + rop4); break; case DC_RECT: /* Clip the blt to the clip rectangle */ - ClipRect.left = ClipRegion->rclBounds.left; - ClipRect.right = ClipRegion->rclBounds.right; - ClipRect.top = ClipRegion->rclBounds.top; - ClipRect.bottom = ClipRegion->rclBounds.bottom; + ClipRect.left = pco->rclBounds.left; + ClipRect.right = pco->rclBounds.right; + ClipRect.top = pco->rclBounds.top; + ClipRect.bottom = pco->rclBounds.bottom; if (RECTL_bIntersectRect(&CombinedRect, &OutputRect, &ClipRect)) { #ifdef _USE_DIBLIB_ @@ -488,9 +497,16 @@ EngBitBlt(SURFOBJ *DestObj, #endif Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; - Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, ColorTranslation, - &CombinedRect, &Pt, MaskOrigin, pbo, - &AdjustedBrushOrigin, Rop4); + Ret = (*BltRectFunc)(OutputObj, + InputObj, + psoMask, + pxlo, + &CombinedRect, + &Pt, + pptlMask, + pbo, + &AdjustedBrushOrigin, + rop4); } break; case DC_COMPLEX: @@ -512,10 +528,10 @@ EngBitBlt(SURFOBJ *DestObj, { Direction = CD_ANY; } - CLIPOBJ_cEnumStart(ClipRegion, FALSE, CT_RECTANGLES, Direction, 0); + CLIPOBJ_cEnumStart(pco, FALSE, CT_RECTANGLES, Direction, 0); do { - EnumMore = CLIPOBJ_bEnum(ClipRegion,(ULONG) sizeof(RectEnum), + EnumMore = CLIPOBJ_bEnum(pco, sizeof(RectEnum), (PVOID) &RectEnum); for (i = 0; i < RectEnum.c; i++) @@ -535,10 +551,16 @@ EngBitBlt(SURFOBJ *DestObj, #endif Pt.x = InputPoint.x + CombinedRect.left - OutputRect.left; Pt.y = InputPoint.y + CombinedRect.top - OutputRect.top; - Ret = (*BltRectFunc)(OutputObj, InputObj, Mask, - ColorTranslation, &CombinedRect, &Pt, - MaskOrigin, pbo, &AdjustedBrushOrigin, - Rop4) && Ret; + Ret = (*BltRectFunc)(OutputObj, + InputObj, + psoMask, + pxlo, + &CombinedRect, + &Pt, + pptlMask, + pbo, + &AdjustedBrushOrigin, + rop4) && Ret; } } } @@ -965,7 +987,7 @@ IntEngMaskBlt(SURFOBJ *psoDest, { BOOLEAN ret; RECTL OutputRect; - POINTL InputPoint; + POINTL InputPoint = {0,0}; //SURFACE *psurfDest; ASSERT(psoMask); diff --git a/win32ss/gdi/eng/clip.c b/win32ss/gdi/eng/clip.c index 28166230c78..bce0502cf45 100644 --- a/win32ss/gdi/eng/clip.c +++ b/win32ss/gdi/eng/clip.c @@ -188,13 +188,15 @@ CompareSpans( return Cmp; } -VOID FASTCALL +VOID +FASTCALL IntEngDeleteClipRegion(CLIPOBJ *ClipObj) { EngFreeMem(ObjToGDI(ClipObj, CLIP)); } -CLIPOBJ* FASTCALL +CLIPOBJ* +FASTCALL IntEngCreateClipRegion(ULONG count, PRECTL pRect, PRECTL rcBounds) { CLIPGDI *Clip; @@ -250,7 +252,8 @@ IntEngCreateClipRegion(ULONG count, PRECTL pRect, PRECTL rcBounds) /* * @implemented */ -CLIPOBJ * APIENTRY +CLIPOBJ * +APIENTRY EngCreateClip(VOID) { CLIPGDI *Clip = EngAllocMem(FL_ZERO_MEMORY, sizeof(CLIPGDI), GDITAG_CLIPOBJ); @@ -265,32 +268,35 @@ EngCreateClip(VOID) /* * @implemented */ -VOID APIENTRY -EngDeleteClip(CLIPOBJ *ClipRegion) +VOID +APIENTRY +EngDeleteClip( + _In_ _Post_ptr_invalid_ CLIPOBJ *pco) { - EngFreeMem(ObjToGDI(ClipRegion, CLIP)); + EngFreeMem(ObjToGDI(pco, CLIP)); } /* * @implemented */ -ULONG APIENTRY +ULONG +APIENTRY CLIPOBJ_cEnumStart( - IN CLIPOBJ* ClipObj, - IN BOOL ShouldDoAll, - IN ULONG ClipType, - IN ULONG BuildOrder, - IN ULONG MaxRects) + _Inout_ CLIPOBJ *pco, + _In_ BOOL bAll, + _In_ ULONG iType, + _In_ ULONG iDirection, + _In_ ULONG cMaxRects) { - CLIPGDI *ClipGDI = ObjToGDI(ClipObj, CLIP); + CLIPGDI *ClipGDI = ObjToGDI(pco, CLIP); SORTCOMP CompareFunc; ClipGDI->EnumPos = 0; - ClipGDI->EnumMax = (MaxRects > 0) ? MaxRects : ClipGDI->EnumRects.c; + ClipGDI->EnumMax = (cMaxRects > 0) ? cMaxRects : ClipGDI->EnumRects.c; - if (CD_ANY != BuildOrder && ClipGDI->EnumOrder != BuildOrder) + if (CD_ANY != iDirection && ClipGDI->EnumOrder != iDirection) { - switch (BuildOrder) + switch (iDirection) { case CD_RIGHTDOWN: CompareFunc = (SORTCOMP) CompareRightDown; @@ -309,8 +315,8 @@ CLIPOBJ_cEnumStart( break; default: - DPRINT1("Invalid BuildOrder %lu\n", BuildOrder); - BuildOrder = ClipGDI->EnumOrder; + DPRINT1("Invalid iDirection %lu\n", iDirection); + iDirection = ClipGDI->EnumOrder; CompareFunc = NULL; break; } @@ -320,11 +326,11 @@ CLIPOBJ_cEnumStart( EngSort((PBYTE) ClipGDI->EnumRects.arcl, sizeof(RECTL), ClipGDI->EnumRects.c, CompareFunc); } - ClipGDI->EnumOrder = BuildOrder; + ClipGDI->EnumOrder = iDirection; } /* Return the number of rectangles enumerated */ - if ((MaxRects > 0) && (ClipGDI->EnumRects.c > MaxRects)) + if ((cMaxRects > 0) && (ClipGDI->EnumRects.c > cMaxRects)) { return 0xFFFFFFFF; } @@ -335,21 +341,22 @@ CLIPOBJ_cEnumStart( /* * @implemented */ -BOOL APIENTRY +BOOL +APIENTRY CLIPOBJ_bEnum( - IN CLIPOBJ* ClipObj, - IN ULONG ObjSize, - OUT ULONG *EnumRects) + _In_ CLIPOBJ *pco, + _In_ ULONG cj, + _Out_bytecap_(cj) ULONG *pulEnumRects) { RECTL *dest, *src; - CLIPGDI *ClipGDI = ObjToGDI(ClipObj, CLIP); + CLIPGDI *ClipGDI = ObjToGDI(pco, CLIP); ULONG nCopy, i; - ENUMRECTS* pERects = (ENUMRECTS*)EnumRects; + ENUMRECTS* pERects = (ENUMRECTS*)pulEnumRects; // Calculate how many rectangles we should copy nCopy = min( ClipGDI->EnumMax - ClipGDI->EnumPos, min( ClipGDI->EnumRects.c - ClipGDI->EnumPos, - (ObjSize - sizeof(ULONG)) / sizeof(RECTL))); + (cj - sizeof(ULONG)) / sizeof(RECTL))); if(nCopy == 0) { diff --git a/win32ss/gdi/eng/copybits.c b/win32ss/gdi/eng/copybits.c index 0e488f24bd9..3b673a672bf 100644 --- a/win32ss/gdi/eng/copybits.c +++ b/win32ss/gdi/eng/copybits.c @@ -15,12 +15,13 @@ * @implemented */ BOOL APIENTRY -EngCopyBits(SURFOBJ *psoDest, - SURFOBJ *psoSource, - CLIPOBJ *Clip, - XLATEOBJ *ColorTranslation, - RECTL *DestRect, - POINTL *SourcePoint) +EngCopyBits( + _In_ SURFOBJ *psoDest, + _In_ SURFOBJ *psoSource, + _In_opt_ CLIPOBJ *Clip, + _In_opt_ XLATEOBJ *ColorTranslation, + _In_ RECTL *DestRect, + _In_ POINTL *SourcePoint) { BOOL ret; BYTE clippingType; @@ -50,7 +51,7 @@ EngCopyBits(SURFOBJ *psoDest, rclDest.bottom = psoDest->sizlBitmap.cy; if (RECTL_bIsEmptyRect(&rclDest)) return TRUE; DestRect = &rclDest; - + // FIXME: Don't punt to the driver's DrvCopyBits immediately. Instead, // mark the copy block function to be DrvCopyBits instead of the // GDI's copy bit function so as to remove clipping from the diff --git a/win32ss/gdi/eng/debug.c b/win32ss/gdi/eng/debug.c index 4405a96007c..f2a136de8cc 100644 --- a/win32ss/gdi/eng/debug.c +++ b/win32ss/gdi/eng/debug.c @@ -1,4 +1,4 @@ -/* +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * PURPOSE: @@ -14,10 +14,12 @@ /* * @implemented */ -VOID APIENTRY -EngDebugPrint(PCHAR StandardPrefix, - PCHAR DebugMessage, - va_list ap) +VOID +APIENTRY +EngDebugPrint( + _In_z_ PCHAR StandardPrefix, + _In_z_ PCHAR DebugMessage, + _In_ va_list ap) { vDbgPrintExWithPrefix(StandardPrefix, -1, diff --git a/win32ss/gdi/eng/device.c b/win32ss/gdi/eng/device.c index 61445b29250..8f3420d5bcd 100644 --- a/win32ss/gdi/eng/device.c +++ b/win32ss/gdi/eng/device.c @@ -47,6 +47,7 @@ EngpRegisterGraphicsDevice( NTSTATUS Status; PWSTR pwsz; ULONG i, cj, cModes = 0; + SIZE_T cjWritten; BOOL bEnable = TRUE; PDEVMODEINFO pdminfo; PDEVMODEW pdm, pdmEnd; @@ -77,7 +78,7 @@ EngpRegisterGraphicsDevice( } /* Enable the device */ - EngFileWrite(pFileObject, &bEnable, sizeof(BOOL), &cj); + EngFileWrite(pFileObject, &bEnable, sizeof(BOOL), &cjWritten); /* Copy the device and file object pointers */ pGraphicsDevice->DeviceObject = pDeviceObject; @@ -288,11 +289,11 @@ static NTSTATUS EngpFileIoRequest( PFILE_OBJECT pFileObject, - ULONG ulMajorFunction, - LPVOID lpBuffer, - DWORD nBufferSize, - ULONGLONG ullStartOffset, - OUT LPDWORD lpInformation) + ULONG ulMajorFunction, + LPVOID lpBuffer, + SIZE_T nBufferSize, + ULONGLONG ullStartOffset, + OUT PULONG_PTR lpInformation) { PDEVICE_OBJECT pDeviceObject; KEVENT Event; @@ -316,7 +317,7 @@ EngpFileIoRequest( pIrp = IoBuildSynchronousFsdRequest(ulMajorFunction, pDeviceObject, lpBuffer, - nBufferSize, + (ULONG)nBufferSize, &liStartOffset, &Event, &Iosb); @@ -367,7 +368,7 @@ EngFileIoControl( IN SIZE_T nInBufferSize, OUT PVOID lpOutBuffer, IN SIZE_T nOutBufferSize, - OUT LPDWORD lpInformation) + OUT PULONG_PTR lpInformation) { PDEVICE_OBJECT pDeviceObject; KEVENT Event; @@ -389,9 +390,9 @@ EngFileIoControl( pIrp = IoBuildDeviceIoControlRequest(dwIoControlCode, pDeviceObject, lpInBuffer, - nInBufferSize, + (ULONG)nInBufferSize, lpOutBuffer, - nOutBufferSize, + (ULONG)nOutBufferSize, FALSE, &Event, &Iosb); @@ -422,13 +423,13 @@ EngFileIoControl( */ DWORD APIENTRY EngDeviceIoControl( - HANDLE hDevice, - DWORD dwIoControlCode, - LPVOID lpInBuffer, - DWORD nInBufferSize, - LPVOID lpOutBuffer, - DWORD nOutBufferSize, - DWORD *lpBytesReturned) + _In_ HANDLE hDevice, + _In_ DWORD dwIoControlCode, + _In_opt_bytecount_(cjInBufferSize) LPVOID lpInBuffer, + _In_ DWORD cjInBufferSize, + _Out_opt_bytecap_(cjOutBufferSize) LPVOID lpOutBuffer, + _In_ DWORD cjOutBufferSize, + _Out_ LPDWORD lpBytesReturned) { PIRP Irp; NTSTATUS Status; @@ -445,9 +446,12 @@ EngDeviceIoControl( Irp = IoBuildDeviceIoControlRequest(dwIoControlCode, DeviceObject, lpInBuffer, - nInBufferSize, + cjInBufferSize, lpOutBuffer, - nOutBufferSize, FALSE, &Event, &Iosb); + cjOutBufferSize, + FALSE, + &Event, + &Iosb); if (!Irp) return ERROR_NOT_ENOUGH_MEMORY; Status = IoCallDriver(DeviceObject, Irp); @@ -462,7 +466,7 @@ EngDeviceIoControl( Iosb.Information); /* Return information to the caller about the operation. */ - *lpBytesReturned = Iosb.Information; + *lpBytesReturned = (DWORD)Iosb.Information; /* Convert NT status values to win32 error codes. */ switch (Status) diff --git a/win32ss/gdi/eng/driverobj.c b/win32ss/gdi/eng/driverobj.c index 239ba26007f..d3488a668e6 100644 --- a/win32ss/gdi/eng/driverobj.c +++ b/win32ss/gdi/eng/driverobj.c @@ -36,12 +36,13 @@ DRIVEROBJ_Cleanup(PVOID pObject) /** Public interface **********************************************************/ +_Must_inspect_result_ HDRVOBJ APIENTRY EngCreateDriverObj( - IN PVOID pvObj, - IN FREEOBJPROC pFreeObjProc, - IN HDEV hdev) + _In_ PVOID pvObj, + _In_opt_ FREEOBJPROC pFreeObjProc, + _In_ HDEV hdev) { PEDRIVEROBJ pedo; HDRVOBJ hdo; @@ -72,9 +73,9 @@ EngCreateDriverObj( BOOL APIENTRY EngDeleteDriverObj( - IN HDRVOBJ hdo, - IN BOOL bCallBack, - IN BOOL bLocked) + _In_ _Post_ptr_invalid_ HDRVOBJ hdo, + _In_ BOOL bCallBack, + _In_ BOOL bLocked) { PEDRIVEROBJ pedo; @@ -111,7 +112,7 @@ EngDeleteDriverObj( PDRIVEROBJ APIENTRY EngLockDriverObj( - IN HDRVOBJ hdo) + _In_ HDRVOBJ hdo) { PEDRIVEROBJ pedo; @@ -126,7 +127,7 @@ EngLockDriverObj( BOOL APIENTRY EngUnlockDriverObj( - IN HDRVOBJ hdo) + _In_ _Post_ptr_invalid_ HDRVOBJ hdo) { PEDRIVEROBJ pedo; ULONG cLocks; diff --git a/win32ss/gdi/eng/engbrush.c b/win32ss/gdi/eng/engbrush.c index 45acd94b13e..81d2a977efd 100644 --- a/win32ss/gdi/eng/engbrush.c +++ b/win32ss/gdi/eng/engbrush.c @@ -287,7 +287,7 @@ NTAPI EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver) { BOOL bResult; - PFN_DrvRealizeBrush pfnRealzizeBrush = NULL; + PFN_DrvRealizeBrush pfnRealizeBrush = NULL; PSURFACE psurfPattern, psurfMask; PPDEVOBJ ppdev; EXLATEOBJ exlo; @@ -303,10 +303,10 @@ EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver) if (!ppdev) ppdev = gppdevPrimary; if (bCallDriver) - pfnRealzizeBrush = ppdev->DriverFunctions.RealizeBrush; + pfnRealizeBrush = ppdev->DriverFunctions.RealizeBrush; - if (!pfnRealzizeBrush) - pfnRealzizeBrush = EngRealizeBrush; + if (!pfnRealizeBrush) + pfnRealizeBrush = EngRealizeBrush; /* Check if this is a hatch brush */ if (pbr->flAttrs & BR_IS_HATCH) @@ -351,12 +351,12 @@ EBRUSHOBJ_bRealizeBrush(EBRUSHOBJ *pebo, BOOL bCallDriver) pebo->crCurrentText); /* Create the realization */ - bResult = pfnRealzizeBrush(&pebo->BrushObject, - &pebo->psurfTrg->SurfObj, - &psurfPattern->SurfObj, - psurfMask ? &psurfMask->SurfObj : NULL, - &exlo.xlo, - iHatch); + bResult = pfnRealizeBrush(&pebo->BrushObject, + &pebo->psurfTrg->SurfObj, + &psurfPattern->SurfObj, + psurfMask ? &psurfMask->SurfObj : NULL, + &exlo.xlo, + iHatch); /* Cleanup the XLATEOBJ */ EXLATEOBJ_vCleanup(&exlo); diff --git a/win32ss/gdi/eng/engevent.c b/win32ss/gdi/eng/engevent.c index 51f79759979..7b3f00859bc 100644 --- a/win32ss/gdi/eng/engevent.c +++ b/win32ss/gdi/eng/engevent.c @@ -17,7 +17,8 @@ BOOL APIENTRY -EngCreateEvent(OUT PEVENT* Event) +EngCreateEvent( + _Deref_out_opt_ PEVENT* Event) { BOOLEAN Result = TRUE; PENG_EVENT EngEvent; @@ -54,7 +55,8 @@ EngCreateEvent(OUT PEVENT* Event) BOOL APIENTRY -EngDeleteEvent(IN PEVENT Event) +EngDeleteEvent( + _In_ _Post_ptr_invalid_ PEVENT Event) { DPRINT("EngDeleteEvent(%p)\n", Event); @@ -75,7 +77,8 @@ EngDeleteEvent(IN PEVENT Event) VOID APIENTRY -EngClearEvent(IN PEVENT Event) +EngClearEvent( + _In_ PEVENT Event) { /* Clear the event */ KeClearEvent(Event->pKEvent); @@ -83,7 +86,8 @@ EngClearEvent(IN PEVENT Event) LONG APIENTRY -EngSetEvent(IN PEVENT Event) +EngSetEvent( + _In_ PEVENT Event) { /* Set the event */ return KeSetEvent(Event->pKEvent, @@ -93,7 +97,8 @@ EngSetEvent(IN PEVENT Event) LONG APIENTRY -EngReadStateEvent(IN PEVENT Event) +EngReadStateEvent( + _In_ PEVENT Event) { /* Read the event state */ return KeReadStateEvent(Event->pKEvent); @@ -101,11 +106,12 @@ EngReadStateEvent(IN PEVENT Event) PEVENT APIENTRY -EngMapEvent(IN HDEV hDev, - IN HANDLE hUserObject, - IN PVOID Reserved1, - IN PVOID Reserved2, - IN PVOID Reserved3) +EngMapEvent( + _In_ HDEV hDev, + _In_ HANDLE hUserObject, + _Reserved_ PVOID Reserved1, + _Reserved_ PVOID Reserved2, + _Reserved_ PVOID Reserved3) { PENG_EVENT EngEvent; NTSTATUS Status; @@ -147,7 +153,8 @@ EngMapEvent(IN HDEV hDev, BOOL APIENTRY -EngUnmapEvent(IN PEVENT Event) +EngUnmapEvent( + _In_ PEVENT Event) { /* Must be a usermapped event */ if (!(Event->fFlags & ENG_EVENT_USERMAPPED)) return FALSE; @@ -162,8 +169,9 @@ EngUnmapEvent(IN PEVENT Event) BOOL APIENTRY -EngWaitForSingleObject(IN PEVENT Event, - IN PLARGE_INTEGER TimeOut) +EngWaitForSingleObject( + _In_ PEVENT Event, + _In_opt_ PLARGE_INTEGER TimeOut) { NTSTATUS Status; DPRINT("EngWaitForSingleObject(%p %I64d)\n", Event, TimeOut->QuadPart); diff --git a/win32ss/gdi/eng/engmisc.c b/win32ss/gdi/eng/engmisc.c index 0f4cf878d73..56d0fadd29b 100644 --- a/win32ss/gdi/eng/engmisc.c +++ b/win32ss/gdi/eng/engmisc.c @@ -229,8 +229,9 @@ EngGetProcessHandle(VOID) VOID APIENTRY -EngGetCurrentCodePage(OUT PUSHORT OemCodePage, - OUT PUSHORT AnsiCodePage) +EngGetCurrentCodePage( + _Out_ PUSHORT OemCodePage, + _Out_ PUSHORT AnsiCodePage) { /* Forward to kernel */ RtlGetDefaultCodePage(AnsiCodePage, OemCodePage); @@ -239,8 +240,8 @@ EngGetCurrentCodePage(OUT PUSHORT OemCodePage, BOOL APIENTRY EngQuerySystemAttribute( - IN ENG_SYSTEM_ATTRIBUTE CapNum, - OUT PDWORD pCapability) + _In_ ENG_SYSTEM_ATTRIBUTE CapNum, + _Out_ PDWORD pCapability) { SYSTEM_BASIC_INFORMATION sbi; SYSTEM_PROCESSOR_INFORMATION spi; diff --git a/win32ss/gdi/eng/error.c b/win32ss/gdi/eng/error.c index a844c70fea1..2ff36883b78 100644 --- a/win32ss/gdi/eng/error.c +++ b/win32ss/gdi/eng/error.c @@ -24,7 +24,7 @@ EngGetLastError(VOID) */ VOID APIENTRY -EngSetLastError(IN ULONG iError) +EngSetLastError(_In_ ULONG iError) { PTEB pTeb = NtCurrentTeb(); if (pTeb) diff --git a/win32ss/gdi/eng/float.c b/win32ss/gdi/eng/float.c index 1187b9424ab..c2030593bd0 100644 --- a/win32ss/gdi/eng/float.c +++ b/win32ss/gdi/eng/float.c @@ -18,7 +18,7 @@ BOOL APIENTRY EngRestoreFloatingPointState( - IN VOID *Buffer) + _In_ VOID *Buffer) { NTSTATUS Status; @@ -34,8 +34,8 @@ EngRestoreFloatingPointState( ULONG APIENTRY EngSaveFloatingPointState( - OUT VOID *Buffer, - IN ULONG BufferSize) + _Out_ VOID *Buffer, + _In_ ULONG BufferSize) { KFLOATING_SAVE TempBuffer; NTSTATUS Status; diff --git a/win32ss/gdi/eng/gradient.c b/win32ss/gdi/eng/gradient.c index afd81368d24..24a55cc32d4 100644 --- a/win32ss/gdi/eng/gradient.c +++ b/win32ss/gdi/eng/gradient.c @@ -1,4 +1,4 @@ -/* +/* * COPYRIGHT: See COPYING in the top level directory * PROJECT: ReactOS kernel * PURPOSE: GDI Driver Gradient Functions @@ -443,16 +443,16 @@ IntEngIsNULLTriangle(TRIVERTEX *pVertex, GRADIENT_TRIANGLE *gt) BOOL APIENTRY EngGradientFill( - IN SURFOBJ *psoDest, - IN CLIPOBJ *pco, - IN XLATEOBJ *pxlo, - IN TRIVERTEX *pVertex, - IN ULONG nVertex, - IN PVOID pMesh, - IN ULONG nMesh, - IN RECTL *prclExtents, - IN POINTL *pptlDitherOrg, - IN ULONG ulMode) + _Inout_ SURFOBJ *psoDest, + _In_ CLIPOBJ *pco, + _In_opt_ XLATEOBJ *pxlo, + _In_ TRIVERTEX *pVertex, + _In_ ULONG nVertex, + _In_ PVOID pMesh, + _In_ ULONG nMesh, + _In_ RECTL *prclExtents, + _In_ POINTL *pptlDitherOrg, + _In_ ULONG ulMode) { ULONG i; BOOL ret = FALSE; diff --git a/win32ss/gdi/eng/inteng.h b/win32ss/gdi/eng/inteng.h index 589bb8d1821..a2e48e5f7a3 100644 --- a/win32ss/gdi/eng/inteng.h +++ b/win32ss/gdi/eng/inteng.h @@ -2,7 +2,7 @@ typedef ULONG HCLIP; -#define ENUM_RECT_LIMIT 50 +#define ENUM_RECT_LIMIT 32 typedef struct _RECT_ENUM { diff --git a/win32ss/gdi/eng/ldevobj.c b/win32ss/gdi/eng/ldevobj.c index f00c01bcb26..a4afcf76eb8 100644 --- a/win32ss/gdi/eng/ldevobj.c +++ b/win32ss/gdi/eng/ldevobj.c @@ -324,7 +324,7 @@ EngLoadImageEx( WCHAR acwBuffer[MAX_PATH]; PLDEVOBJ pldev; UNICODE_STRING strDriverName; - ULONG cwcLength; + SIZE_T cwcLength; LPWSTR pwsz; DPRINT("EngLoadImageEx(%ls, %lu)\n", pwszDriverName, ldevtype); @@ -442,7 +442,7 @@ leave: HANDLE APIENTRY EngLoadImage( - LPWSTR pwszDriverName) + _In_ LPWSTR pwszDriverName) { return (HANDLE)EngLoadImageEx(pwszDriverName, LDEV_IMAGE); } @@ -451,7 +451,7 @@ EngLoadImage( VOID APIENTRY EngUnloadImage( - IN HANDLE hModule) + _In_ HANDLE hModule) { PLDEVOBJ pldev = (PLDEVOBJ)hModule; @@ -486,8 +486,8 @@ EngUnloadImage( PVOID APIENTRY EngFindImageProcAddress( - IN HANDLE hModule, - IN LPSTR lpProcName) + _In_ HANDLE hModule, + _In_ LPSTR lpProcName) { PLDEVOBJ pldev = (PLDEVOBJ)hModule; diff --git a/win32ss/gdi/eng/lineto.c b/win32ss/gdi/eng/lineto.c index e61b8e7a9fb..31b45c84dc5 100644 --- a/win32ss/gdi/eng/lineto.c +++ b/win32ss/gdi/eng/lineto.c @@ -316,15 +316,16 @@ SEtoNW(SURFOBJ* OutputObj, CLIPOBJ* Clip, * @implemented */ BOOL APIENTRY -EngLineTo(SURFOBJ *DestObj, - CLIPOBJ *Clip, - BRUSHOBJ *pbo, - LONG x1, - LONG y1, - LONG x2, - LONG y2, - RECTL *RectBounds, - MIX mix) +EngLineTo( + _Inout_ SURFOBJ *DestObj, + _In_ CLIPOBJ *Clip, + _In_ BRUSHOBJ *pbo, + _In_ LONG x1, + _In_ LONG y1, + _In_ LONG x2, + _In_ LONG y2, + _In_opt_ RECTL *RectBounds, + _In_ MIX mix) { LONG x, y, deltax, deltay, xchange, ychange, hx, vy; ULONG i; diff --git a/win32ss/gdi/eng/mapping.c b/win32ss/gdi/eng/mapping.c index e13453c83ba..be5ddb185ba 100644 --- a/win32ss/gdi/eng/mapping.c +++ b/win32ss/gdi/eng/mapping.c @@ -419,7 +419,8 @@ EngLoadModuleEx( HANDLE APIENTRY -EngLoadModule(LPWSTR pwsz) +EngLoadModule( + _In_ LPWSTR pwsz) { /* Forward to EngLoadModuleEx */ return (HANDLE)EngLoadModuleEx(pwsz, 0, FVF_READONLY | FVF_SYSTEMROOT); @@ -428,8 +429,8 @@ EngLoadModule(LPWSTR pwsz) HANDLE APIENTRY EngLoadModuleForWrite( - IN LPWSTR pwsz, - IN ULONG cjSizeOfModule) + _In_ LPWSTR pwsz, + _In_ ULONG cjSizeOfModule) { /* Forward to EngLoadModuleEx */ return (HANDLE)EngLoadModuleEx(pwsz, cjSizeOfModule, FVF_SYSTEMROOT); @@ -438,15 +439,15 @@ EngLoadModuleForWrite( PVOID APIENTRY EngMapModule( - IN HANDLE h, - OUT PULONG pulSize) + _In_ HANDLE h, + _Out_ PULONG pulSize) { PFILEVIEW pFileView = (PFILEVIEW)h; NTSTATUS Status; pFileView->cjView = 0; - /* FIXME: Use system space because ARM3 doesn't support executable sections yet */ + /* FIXME: Use system space because ARM3 doesn't support executable sections yet */ Status = MmMapViewInSystemSpace(pFileView->pSection, &pFileView->pvKView, &pFileView->cjView); @@ -457,18 +458,19 @@ EngMapModule( return NULL; } - *pulSize = pFileView->cjView; + *pulSize = (ULONG)pFileView->cjView; return pFileView->pvKView; } VOID APIENTRY -EngFreeModule(IN HANDLE h) +EngFreeModule( + _In_ HANDLE h) { PFILEVIEW pFileView = (PFILEVIEW)h; NTSTATUS Status; - /* FIXME: Use system space because ARM3 doesn't support executable sections yet */ + /* FIXME: Use system space because ARM3 doesn't support executable sections yet */ Status = MmUnmapViewInSystemSpace(pFileView->pvKView); if (!NT_SUCCESS(Status)) { @@ -483,12 +485,14 @@ EngFreeModule(IN HANDLE h) EngFreeMem(pFileView); } +_Success_(return != 0) +_When_(cjSize != 0, _At_(return, _Out_writes_bytes_(cjSize))) PVOID APIENTRY EngMapFile( - IN LPWSTR pwsz, - IN ULONG cjSize, - OUT ULONG_PTR *piFile) + _In_ LPWSTR pwsz, + _In_ ULONG cjSize, + _Out_ ULONG_PTR *piFile) { HANDLE hModule; PVOID pvBase; @@ -517,7 +521,7 @@ EngMapFile( BOOL APIENTRY EngUnmapFile( - IN ULONG_PTR iFile) + _In_ ULONG_PTR iFile) { HANDLE hModule = (HANDLE)iFile; @@ -530,9 +534,9 @@ EngUnmapFile( BOOL APIENTRY EngMapFontFileFD( - IN ULONG_PTR iFile, - OUT PULONG *ppjBuf, - OUT ULONG *pcjBuf) + _In_ ULONG_PTR iFile, + _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf, + _Out_ ULONG *pcjBuf) { // www.osr.com/ddk/graphics/gdifncs_0co7.htm UNIMPLEMENTED; @@ -542,7 +546,7 @@ EngMapFontFileFD( VOID APIENTRY EngUnmapFontFileFD( - IN ULONG_PTR iFile) + _In_ ULONG_PTR iFile) { // http://www.osr.com/ddk/graphics/gdifncs_6wbr.htm UNIMPLEMENTED; @@ -551,9 +555,9 @@ EngUnmapFontFileFD( BOOL APIENTRY EngMapFontFile( - ULONG_PTR iFile, - PULONG *ppjBuf, - ULONG *pcjBuf) + _In_ ULONG_PTR iFile, + _Outptr_result_bytebuffer_(*pcjBuf) PULONG *ppjBuf, + _Out_ ULONG *pcjBuf) { // www.osr.com/ddk/graphics/gdifncs_3up3.htm return EngMapFontFileFD(iFile, ppjBuf, pcjBuf); @@ -562,7 +566,7 @@ EngMapFontFile( VOID APIENTRY EngUnmapFontFile( - IN ULONG_PTR iFile) + _In_ ULONG_PTR iFile) { // www.osr.com/ddk/graphics/gdifncs_09wn.htm EngUnmapFontFileFD(iFile); diff --git a/win32ss/gdi/eng/math.c b/win32ss/gdi/eng/math.c index 46036ee6bcc..f14abf8c943 100644 --- a/win32ss/gdi/eng/math.c +++ b/win32ss/gdi/eng/math.c @@ -21,53 +21,57 @@ #include -/* - * FIXME: Is there a better algorithm, like FT_MulDiv? - * - * @implemented - */ -INT APIENTRY EngMulDiv( - INT nMultiplicand, - INT nMultiplier, - INT nDivisor) +INT +APIENTRY +EngMulDiv( + _In_ INT iMultiplicand, + _In_ INT iMultiplier, + _In_ INT iDivisor) { -#if SIZEOF_LONG_LONG >= 8 - long long ret; + INT64 i64Multiplied, i64Result; - if (!nDivisor) return -1; - - /* We want to deal with a positive divisor to simplify the logic. */ - if (nDivisor < 0) + /* Check for divide by zero */ + if (iDivisor == 0) { - nMultiplicand = - nMultiplicand; - nDivisor = -nDivisor; + /* Quick sign check and return "infinite" */ + return ((iMultiplicand ^ iMultiplier) < 0) ? INT_MIN : INT_MAX; } - /* If the result is positive, we "add" to round. else, we subtract to round. */ - if ( ( (nMultiplicand < 0) && (nMultiplier < 0) ) || - ( (nMultiplicand >= 0) && (nMultiplier >= 0) ) ) - ret = (((long long)nMultiplicand * nMultiplier) + (nDivisor/2)) / nDivisor; + /* We want to deal with a positive divisor to simplify the logic. */ + if (iDivisor < 0) + { + iMultiplicand = -iMultiplicand; + iDivisor = -iDivisor; + } + + /* Do the multiplication */ + i64Multiplied = Int32x32To64(iMultiplicand, iMultiplier); + + /* If the result is positive, we add to round, else we subtract to round. */ + if (i64Multiplied >= 0) + { + i64Multiplied += (iDivisor / 2); + } else - ret = (((long long)nMultiplicand * nMultiplier) - (nDivisor/2)) / nDivisor; - - if ((ret > 2147483647) || (ret < -2147483647)) return -1; - return ret; -#else - if (!nDivisor) return -1; - - /* We want to deal with a positive divisor to simplify the logic. */ - if (nDivisor < 0) { - nMultiplicand = - nMultiplicand; - nDivisor = -nDivisor; + i64Multiplied -= (iDivisor / 2); } - /* If the result is positive, we "add" to round. else, we subtract to round. */ - if ( ( (nMultiplicand < 0) && (nMultiplier < 0) ) || - ( (nMultiplicand >= 0) && (nMultiplier >= 0) ) ) - return ((nMultiplicand * nMultiplier) + (nDivisor/2)) / nDivisor; + /* Now do the divide */ + i64Result = i64Multiplied / iDivisor; - return ((nMultiplicand * nMultiplier) - (nDivisor/2)) / nDivisor; + /* Check for positive overflow */ + if (i64Result > INT_MAX) + { + return INT_MAX; + } -#endif + /* Check for negative overflow. */ + if (i64Result < INT_MIN) + { + return INT_MIN; + } + + return (INT)i64Result; } + diff --git a/win32ss/gdi/eng/pdevobj.c b/win32ss/gdi/eng/pdevobj.c index 5214e0b7e78..5402a84c8c6 100644 --- a/win32ss/gdi/eng/pdevobj.c +++ b/win32ss/gdi/eng/pdevobj.c @@ -341,52 +341,68 @@ EngpCreatePDEV( return ppdev; } +VOID +FORCEINLINE +SwitchPointer( + _Inout_ PVOID pvPointer1, + _Inout_ PVOID pvPointer2) +{ + PVOID *ppvPointer1 = pvPointer1; + PVOID *ppvPointer2 = pvPointer2; + PVOID pvTemp; + + pvTemp = *ppvPointer1; + *ppvPointer1 = *ppvPointer2; + *ppvPointer2 = pvTemp; +} + VOID NTAPI PDEVOBJ_vSwitchPdev( PPDEVOBJ ppdev, PPDEVOBJ ppdev2) { - PDEVOBJ pdevTmp; - DWORD tmpStateFlags; - - /* Exchange data */ - pdevTmp = *ppdev; + union + { + DRIVER_FUNCTIONS pfn; + GDIINFO gdiinfo; + DEVINFO devinfo; + DWORD StateFlags; + } temp; /* Exchange driver functions */ + temp.pfn = ppdev->pfn; ppdev->pfn = ppdev2->pfn; - ppdev2->pfn = pdevTmp.pfn; + ppdev2->pfn = temp.pfn; /* Exchange LDEVs */ - ppdev->pldev = ppdev2->pldev; - ppdev2->pldev = pdevTmp.pldev; + SwitchPointer(&ppdev->pldev, &ppdev2->pldev); /* Exchange DHPDEV */ - ppdev->dhpdev = ppdev2->dhpdev; - ppdev2->dhpdev = pdevTmp.dhpdev; + SwitchPointer(&ppdev->dhpdev, &ppdev2->dhpdev); /* Exchange surfaces and associate them with their new PDEV */ - ppdev->pSurface = ppdev2->pSurface; - ppdev2->pSurface = pdevTmp.pSurface; + SwitchPointer(&ppdev->pSurface, &ppdev2->pSurface); ppdev->pSurface->SurfObj.hdev = (HDEV)ppdev; ppdev2->pSurface->SurfObj.hdev = (HDEV)ppdev2; /* Exchange devinfo */ + temp.devinfo = ppdev->devinfo; ppdev->devinfo = ppdev2->devinfo; - ppdev2->devinfo = pdevTmp.devinfo; + ppdev2->devinfo = temp.devinfo; /* Exchange gdiinfo */ + temp.gdiinfo = ppdev->gdiinfo; ppdev->gdiinfo = ppdev2->gdiinfo; - ppdev2->gdiinfo = pdevTmp.gdiinfo; + ppdev2->gdiinfo = temp.gdiinfo; /* Exchange DEVMODE */ - ppdev->pdmwDev = ppdev2->pdmwDev; - ppdev2->pdmwDev = pdevTmp.pdmwDev; + SwitchPointer(&ppdev->pdmwDev, &ppdev2->pdmwDev); /* Exchange state flags */ - tmpStateFlags = ppdev->pGraphicsDevice->StateFlags; + temp.StateFlags = ppdev->pGraphicsDevice->StateFlags; ppdev->pGraphicsDevice->StateFlags = ppdev2->pGraphicsDevice->StateFlags; - ppdev2->pGraphicsDevice->StateFlags = tmpStateFlags; + ppdev2->pGraphicsDevice->StateFlags = temp.StateFlags; /* Notify each driver instance of its new HDEV association */ ppdev->pfn.CompletePDEV(ppdev->dhpdev, (HDEV)ppdev); @@ -407,6 +423,7 @@ PDEVOBJ_bSwitchMode( /* Lock the PDEV */ EngAcquireSemaphore(ppdev->hsemDevLock); + /* And everything else */ EngAcquireSemaphore(ghsemPDEV); @@ -613,9 +630,10 @@ PDEVOBJ_vGetDeviceCaps( /** Exported functions ********************************************************/ +_Must_inspect_result_ _Ret_z_ LPWSTR APIENTRY -EngGetDriverName(IN HDEV hdev) +EngGetDriverName(_In_ HDEV hdev) { PPDEVOBJ ppdev = (PPDEVOBJ)hdev; diff --git a/win32ss/gdi/eng/surface.c b/win32ss/gdi/eng/surface.c index ce83bf1f71a..6e08c550eec 100644 --- a/win32ss/gdi/eng/surface.c +++ b/win32ss/gdi/eng/surface.c @@ -275,11 +275,11 @@ SURFACE_AllocSurface( HBITMAP APIENTRY EngCreateBitmap( - IN SIZEL sizl, - IN LONG lWidth, - IN ULONG iFormat, - IN ULONG fl, - IN PVOID pvBits) + _In_ SIZEL sizl, + _In_ LONG lWidth, + _In_ ULONG iFormat, + _In_ ULONG fl, + _In_ PVOID pvBits) { PSURFACE psurf; HBITMAP hbmp; @@ -315,9 +315,9 @@ EngCreateBitmap( HBITMAP APIENTRY EngCreateDeviceBitmap( - IN DHSURF dhsurf, - IN SIZEL sizl, - IN ULONG iFormat) + _In_ DHSURF dhsurf, + _In_ SIZEL sizl, + _In_ ULONG iFormat) { PSURFACE psurf; HBITMAP hbmp; @@ -353,9 +353,9 @@ EngCreateDeviceBitmap( HSURF APIENTRY EngCreateDeviceSurface( - IN DHSURF dhsurf, - IN SIZEL sizl, - IN ULONG iFormat) + _In_ DHSURF dhsurf, + _In_ SIZEL sizl, + _In_ ULONG iFormat) { PSURFACE psurf; HSURF hsurf; @@ -391,9 +391,9 @@ EngCreateDeviceSurface( BOOL APIENTRY EngAssociateSurface( - IN HSURF hsurf, - IN HDEV hdev, - IN FLONG flHooks) + _In_ HSURF hsurf, + _In_ HDEV hdev, + _In_ FLONG flHooks) { SURFOBJ *pso; PSURFACE psurf; @@ -431,14 +431,14 @@ EngAssociateSurface( BOOL APIENTRY EngModifySurface( - IN HSURF hsurf, - IN HDEV hdev, - IN FLONG flHooks, - IN FLONG flSurface, - IN DHSURF dhsurf, - OUT VOID *pvScan0, - IN LONG lDelta, - IN VOID *pvReserved) + _In_ HSURF hsurf, + _In_ HDEV hdev, + _In_ FLONG flHooks, + _In_ FLONG flSurface, + _In_ DHSURF dhsurf, + _In_ VOID *pvScan0, + _In_ LONG lDelta, + _Reserved_ VOID *pvReserved) { SURFOBJ *pso; PSURFACE psurf; @@ -478,7 +478,8 @@ EngModifySurface( BOOL APIENTRY -EngDeleteSurface(IN HSURF hsurf) +EngDeleteSurface( + _In_ HSURF hsurf) { PSURFACE psurf; @@ -496,9 +497,9 @@ EngDeleteSurface(IN HSURF hsurf) BOOL APIENTRY EngEraseSurface( - SURFOBJ *pso, - RECTL *prcl, - ULONG iColor) + _In_ SURFOBJ *pso, + _In_ RECTL *prcl, + _In_ ULONG iColor) { ASSERT(pso); ASSERT(prcl); @@ -517,7 +518,8 @@ NtGdiEngLockSurface(IN HSURF hsurf) SURFOBJ * APIENTRY -EngLockSurface(IN HSURF hsurf) +EngLockSurface( + _In_ HSURF hsurf) { SURFACE *psurf = SURFACE_ShareLockSurface(hsurf); @@ -534,7 +536,8 @@ NtGdiEngUnlockSurface(IN SURFOBJ *pso) VOID APIENTRY -EngUnlockSurface(IN SURFOBJ *pso) +EngUnlockSurface( + _In_ SURFOBJ *pso) { if (pso != NULL) { diff --git a/win32ss/gdi/eng/xlateobj.c b/win32ss/gdi/eng/xlateobj.c index 2308022b922..b1cb79e5590 100644 --- a/win32ss/gdi/eng/xlateobj.c +++ b/win32ss/gdi/eng/xlateobj.c @@ -42,7 +42,9 @@ _Always_(_Post_satisfies_(return==iColor)) _Function_class_(FN_XLATE) ULONG FASTCALL -EXLATEOBJ_iXlateTrivial(PEXLATEOBJ pexlo, ULONG iColor) +EXLATEOBJ_iXlateTrivial( + _In_ PEXLATEOBJ pexlo, + _In_ ULONG iColor) { return iColor; } @@ -50,7 +52,7 @@ EXLATEOBJ_iXlateTrivial(PEXLATEOBJ pexlo, ULONG iColor) _Function_class_(FN_XLATE) ULONG FASTCALL -EXLATEOBJ_iXlateToMono(PEXLATEOBJ pexlo, ULONG iColor) +EXLATEOBJ_iXlateToMono(_In_ PEXLATEOBJ pexlo, ULONG iColor) { return (iColor == pexlo->xlo.pulXlate[0]); } @@ -354,12 +356,12 @@ EXLATEOBJ_iXlateBitfieldsToPal(PEXLATEOBJ pexlo, ULONG iColor) VOID NTAPI EXLATEOBJ_vInitialize( - PEXLATEOBJ pexlo, - PALETTE *ppalSrc, - PALETTE *ppalDst, - COLORREF crSrcBackColor, - COLORREF crDstBackColor, - COLORREF crDstForeColor) + _Out_ PEXLATEOBJ pexlo, + _In_opt_ PALETTE *ppalSrc, + _In_opt_ PALETTE *ppalDst, + _In_ COLORREF crSrcBackColor, + _In_ COLORREF crDstBackColor, + _In_ COLORREF crDstForeColor) { ULONG cEntries; ULONG i, ulColor; @@ -607,9 +609,9 @@ EXLATEOBJ_vInitialize( VOID NTAPI EXLATEOBJ_vInitXlateFromDCs( - EXLATEOBJ* pexlo, - PDC pdcSrc, - PDC pdcDst) + _Out_ EXLATEOBJ* pexlo, + _In_ PDC pdcSrc, + _In_ PDC pdcDst) { PSURFACE psurfDst, psurfSrc; @@ -644,7 +646,8 @@ VOID NTAPI EXLATEOBJ_vInitSrcMonoXlate( VOID NTAPI -EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo) +EXLATEOBJ_vCleanup( + _Inout_ PEXLATEOBJ pexlo) { if (pexlo->xlo.pulXlate != pexlo->aulXlate) { @@ -658,7 +661,9 @@ EXLATEOBJ_vCleanup(PEXLATEOBJ pexlo) #undef XLATEOBJ_iXlate ULONG NTAPI -XLATEOBJ_iXlate(XLATEOBJ *pxlo, ULONG iColor) +XLATEOBJ_iXlate( + _In_ XLATEOBJ *pxlo, + _In_ ULONG iColor) { PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo; @@ -671,7 +676,11 @@ XLATEOBJ_iXlate(XLATEOBJ *pxlo, ULONG iColor) ULONG NTAPI -XLATEOBJ_cGetPalette(XLATEOBJ *pxlo, ULONG iPal, ULONG cPal, ULONG *pPalOut) +XLATEOBJ_cGetPalette( + _In_ XLATEOBJ *pxlo, + _In_ ULONG iPal, + _In_ ULONG cPal, + _Out_cap_(cPal) ULONG *pPalOut) { PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo; PPALETTE ppal; @@ -741,7 +750,8 @@ XLATEOBJ_cGetPalette(XLATEOBJ *pxlo, ULONG iPal, ULONG cPal, ULONG *pPalOut) HANDLE NTAPI -XLATEOBJ_hGetColorTransform(XLATEOBJ *pxlo) +XLATEOBJ_hGetColorTransform( + _In_ XLATEOBJ *pxlo) { PEXLATEOBJ pexlo = (PEXLATEOBJ)pxlo; return pexlo->hColorTransform; @@ -749,7 +759,8 @@ XLATEOBJ_hGetColorTransform(XLATEOBJ *pxlo) PULONG NTAPI -XLATEOBJ_piVector(XLATEOBJ *pxlo) +XLATEOBJ_piVector( + _In_ XLATEOBJ *pxlo) { if (pxlo->iSrcType == PAL_INDEXED) { diff --git a/win32ss/gdi/gdi32/objects/region.c b/win32ss/gdi/gdi32/objects/region.c index 54140ed071d..a6866bbfb47 100644 --- a/win32ss/gdi/gdi32/objects/region.c +++ b/win32ss/gdi/gdi32/objects/region.c @@ -700,7 +700,18 @@ GetClipRgn( HRGN hrgn ) { - INT Ret = NtGdiGetRandomRgn(hdc, hrgn, CLIPRGN); + INT Ret; + + /* Check if DC handle is valid */ + if (!GdiGetDcAttr(hdc)) + { + /* Last error code differs from what NtGdiGetRandomRgn returns */ + SetLastError(ERROR_INVALID_PARAMETER); + return 0; + } + + Ret = NtGdiGetRandomRgn(hdc, hrgn, CLIPRGN); + // if (Ret) // { // if(GetLayout(hdc) & LAYOUT_RTL) MirrorRgnDC(hdc,(HRGN)Ret, NULL); diff --git a/win32ss/gdi/ntgdi/dc.h b/win32ss/gdi/ntgdi/dc.h index 6817f6f0ee5..53eeaaf2c04 100644 --- a/win32ss/gdi/ntgdi/dc.h +++ b/win32ss/gdi/ntgdi/dc.h @@ -66,7 +66,7 @@ typedef struct _DCLEVEL POINTL ptlBrushOrigin; PBRUSH pbrFill; PBRUSH pbrLine; - PVOID plfnt; /* LFONTOBJ* (TEXTOBJ*) */ + _Notnull_ struct _LFONT * plfnt; /* LFONT* (TEXTOBJ*) */ HGDIOBJ hPath; /* HPATH */ FLONG flPath; LINEATTRS laPath; /* 0x20 bytes */ @@ -110,7 +110,7 @@ typedef struct _DC PVOID hsem; /* PERESOURCE aka HSEMAPHORE */ FLONG flGraphicsCaps; FLONG flGraphicsCaps2; - PDC_ATTR pdcattr; + _Notnull_ PDC_ATTR pdcattr; DCLEVEL dclevel; DC_ATTR dcattr; HDC hdcNext; @@ -155,18 +155,27 @@ VOID FASTCALL DC_vUpdateLineBrush(PDC pdc); VOID FASTCALL DC_vUpdateTextBrush(PDC pdc); VOID FASTCALL DC_vUpdateBackgroundBrush(PDC pdc); +HFONT +NTAPI +DC_hSelectFont( + _In_ PDC pdc, + _In_ HFONT hlfntNew); + HPALETTE NTAPI GdiSelectPalette( - HDC hDC, - HPALETTE hpal, - BOOL ForceBackground); + _In_ HDC hDC, + _In_ HPALETTE hpal, + _In_ BOOL ForceBackground); /* dcutil.c */ COLORREF FASTCALL -IntGdiSetBkColor (HDC hDC, COLORREF Color); +IntGdiSetBkColor( + _In_ HDC hDC, + _In_ COLORREF Color); + INT FASTCALL IntGdiSetBkMode(HDC hDC, INT backgroundMode); COLORREF FASTCALL IntGdiSetTextColor(HDC hDC, COLORREF color); UINT FASTCALL IntGdiSetTextAlign(HDC hDC, UINT Mode); @@ -211,14 +220,26 @@ FORCEINLINE PDC DC_LockDc(HDC hdc) { - //if (GDI_HANDLE_GET_TYPE(hdc) != GDILoObjType_LO_DC_TYPE) return NULL; ??? - return GDIOBJ_LockObject(hdc, GDIObjType_DC_TYPE); + PDC pdc; + + pdc = GDIOBJ_LockObject(hdc, GDIObjType_DC_TYPE); + if (pdc) + { + ASSERT(GDI_HANDLE_GET_TYPE(pdc->BaseObject.hHmgr) == GDILoObjType_LO_DC_TYPE); + ASSERT(pdc->dclevel.plfnt != NULL); + ASSERT(GDI_HANDLE_GET_TYPE(((POBJ)pdc->dclevel.plfnt)->hHmgr) == GDILoObjType_LO_FONT_TYPE); + } + + return pdc; } FORCEINLINE VOID DC_UnlockDc(PDC pdc) { + ASSERT(pdc->dclevel.plfnt != NULL); + ASSERT(GDI_HANDLE_GET_TYPE(((POBJ)pdc->dclevel.plfnt)->hHmgr) == GDILoObjType_LO_FONT_TYPE); + GDIOBJ_vUnlockObject(&pdc->BaseObject); } diff --git a/win32ss/gdi/ntgdi/dclife.c b/win32ss/gdi/ntgdi/dclife.c index 66c709be861..16a628a4998 100644 --- a/win32ss/gdi/ntgdi/dclife.c +++ b/win32ss/gdi/ntgdi/dclife.c @@ -319,7 +319,7 @@ DC_vInitDc( pdc->dcattr.lBreakExtra = 0; pdc->dcattr.cBreak = 0; pdc->dcattr.hlfntNew = StockObjects[SYSTEM_FONT]; -// pdc->dclevel.pFont = LFONT_ShareLockFont(pdc->dcattr.hlfntNew); + pdc->dclevel.plfnt = LFONT_ShareLockFont(pdc->dcattr.hlfntNew); /* Other stuff */ pdc->hdcNext = NULL; @@ -368,6 +368,9 @@ DC_Cleanup(PVOID ObjectBody) EBRUSHOBJ_vCleanup(&pdc->eboText); EBRUSHOBJ_vCleanup(&pdc->eboBackground); + /* Release font */ + LFONT_ShareUnlockFont(pdc->dclevel.plfnt); + /* Free regions */ if (pdc->rosdc.hClipRgn && GreIsHandleValid(pdc->rosdc.hClipRgn)) GreDeleteObject(pdc->rosdc.hClipRgn); diff --git a/win32ss/gdi/ntgdi/dcobjs.c b/win32ss/gdi/ntgdi/dcobjs.c index db9bdbc8e06..be21fedb221 100644 --- a/win32ss/gdi/ntgdi/dcobjs.c +++ b/win32ss/gdi/ntgdi/dcobjs.c @@ -525,6 +525,85 @@ NtGdiSelectClipPath( return success; } +HFONT +NTAPI +DC_hSelectFont( + _In_ PDC pdc, + _In_ HFONT hlfntNew) +{ + PLFONT plfntNew; + HFONT hlfntOld; + + // Legacy crap that will die with font engine rewrite + if (!NT_SUCCESS(TextIntRealizeFont(hlfntNew, NULL))) + { + return NULL; + } + + /* Get the current selected font */ + hlfntOld = pdc->dclevel.plfnt->BaseObject.hHmgr; + + /* Check if a new font should be selected */ + if (hlfntNew != hlfntOld) + { + /* Lock the new font */ + plfntNew = LFONT_ShareLockFont(hlfntNew); + if (plfntNew) + { + /* Success, dereference the old font */ + LFONT_ShareUnlockFont(pdc->dclevel.plfnt); + + /* Select the new font */ + pdc->dclevel.plfnt = plfntNew; + pdc->pdcattr->hlfntNew = hlfntNew; + + /* Update dirty flags */ + pdc->pdcattr->ulDirty_ |= DIRTY_CHARSET; + pdc->pdcattr->ulDirty_ &= ~SLOW_WIDTHS; + } + else + { + /* Failed, restore old, return NULL */ + pdc->pdcattr->hlfntNew = hlfntOld; + hlfntOld = NULL; + } + } + + return hlfntOld; +} + +HFONT +APIENTRY +NtGdiSelectFont( + _In_ HDC hdc, + _In_ HFONT hfont) +{ + HFONT hfontOld; + PDC pdc; + + /* Check parameters */ + if ((hdc == NULL) || (hfont == NULL)) + { + return NULL; + } + + /* Lock the DC */ + pdc = DC_LockDc(hdc); + if (!pdc) + { + return NULL; + } + + /* Call the internal function */ + hfontOld = DC_hSelectFont(pdc, hfont); + + /* Unlock the DC */ + DC_UnlockDc(pdc); + + /* Return the previously selected font */ + return hfontOld; +} + HANDLE APIENTRY NtGdiGetDCObject(HDC hDC, INT ObjectType) @@ -615,12 +694,13 @@ NtGdiGetRandomRgn( INT ret = 0; PDC pdc; HRGN hrgnSrc = NULL; + PREGION prgnSrc = NULL; POINTL ptlOrg; pdc = DC_LockDc(hdc); if (!pdc) { - EngSetLastError(ERROR_INVALID_PARAMETER); + EngSetLastError(ERROR_INVALID_HANDLE); return -1; } @@ -628,34 +708,52 @@ NtGdiGetRandomRgn( { case CLIPRGN: hrgnSrc = pdc->rosdc.hClipRgn; -// if (pdc->dclevel.prgnClip) hrgnSrc = pdc->dclevel.prgnClip->BaseObject.hHmgr; +// if (pdc->dclevel.prgnClip) prgnSrc = pdc->dclevel.prgnClip; break; + case METARGN: - if (pdc->dclevel.prgnMeta) - hrgnSrc = pdc->dclevel.prgnMeta->BaseObject.hHmgr; + prgnSrc = pdc->dclevel.prgnMeta; break; + case APIRGN: - if (pdc->prgnAPI) hrgnSrc = pdc->prgnAPI->BaseObject.hHmgr; -// else if (pdc->dclevel.prgnClip) hrgnSrc = pdc->dclevel.prgnClip->BaseObject.hHmgr; - else if (pdc->rosdc.hClipRgn) hrgnSrc = pdc->rosdc.hClipRgn; - else if (pdc->dclevel.prgnMeta) hrgnSrc = pdc->dclevel.prgnMeta->BaseObject.hHmgr; - break; - case SYSRGN: - if (pdc->prgnVis) + if (pdc->prgnAPI) { - PREGION prgnDest = REGION_LockRgn(hrgnDest); - ret = IntGdiCombineRgn(prgnDest, pdc->prgnVis, 0, RGN_COPY) == ERROR ? -1 : 1; - REGION_UnlockRgn(prgnDest); + prgnSrc = pdc->prgnAPI; + } +// else if (pdc->dclevel.prgnClip) prgnSrc = pdc->dclevel.prgnClip; + else if (pdc->rosdc.hClipRgn) + { + hrgnSrc = pdc->rosdc.hClipRgn; + } + else if (pdc->dclevel.prgnMeta) + { + prgnSrc = pdc->dclevel.prgnMeta; } break; + + case SYSRGN: + prgnSrc = pdc->prgnVis; + break; + default: - hrgnSrc = NULL; + break; } if (hrgnSrc) { ret = NtGdiCombineRgn(hrgnDest, hrgnSrc, 0, RGN_COPY) == ERROR ? -1 : 1; } + else if (prgnSrc) + { + PREGION prgnDest = REGION_LockRgn(hrgnDest); + if (prgnDest) + { + ret = IntGdiCombineRgn(prgnDest, prgnSrc, 0, RGN_COPY) == ERROR ? -1 : 1; + REGION_UnlockRgn(prgnDest); + } + else + ret = -1; + } if (iCode == SYSRGN) { diff --git a/win32ss/gdi/ntgdi/dcstate.c b/win32ss/gdi/ntgdi/dcstate.c index e0c33ae8e7a..d20018e298e 100644 --- a/win32ss/gdi/ntgdi/dcstate.c +++ b/win32ss/gdi/ntgdi/dcstate.c @@ -45,7 +45,9 @@ DC_vCopyState(PDC pdcSrc, PDC pdcDst, BOOL To) DC_vSelectLineBrush(pdcDst, pdcSrc->dclevel.pbrLine); DC_vSelectPalette(pdcDst, pdcSrc->dclevel.ppal); - // FIXME: Handle refs + /* Dereference the old font, reference the new one */ + if (pdcDst->dclevel.plfnt) LFONT_ShareUnlockFont(pdcDst->dclevel.plfnt); /// @todo should aways be != NULL + GDIOBJ_vReferenceObjectByPointer(&pdcSrc->dclevel.plfnt->BaseObject); pdcDst->dclevel.plfnt = pdcSrc->dclevel.plfnt; /* Get/SetDCState() don't change hVisRgn field ("Undoc. Windows" p.559). */ diff --git a/win32ss/gdi/ntgdi/dibobj.c b/win32ss/gdi/ntgdi/dibobj.c index 1ae6311cc31..de22ae8ca52 100644 --- a/win32ss/gdi/ntgdi/dibobj.c +++ b/win32ss/gdi/ntgdi/dibobj.c @@ -868,7 +868,7 @@ GreGetDIBitsInternal( psurfDest = SURFACE_ShareLockSurface(hBmpDest); - RECTL_vSetRect(&rcDest, 0, 0, ScanLines, psurf->SurfObj.sizlBitmap.cx); + RECTL_vSetRect(&rcDest, 0, 0, psurf->SurfObj.sizlBitmap.cx, ScanLines); srcPoint.x = 0; diff --git a/win32ss/gdi/ntgdi/font.c b/win32ss/gdi/ntgdi/font.c index a03c36f3730..10bd73b1a8e 100644 --- a/win32ss/gdi/ntgdi/font.c +++ b/win32ss/gdi/ntgdi/font.c @@ -395,48 +395,6 @@ RealizeFontInit(HFONT hFont) return pTextObj; } -HFONT -FASTCALL -GreSelectFont( HDC hDC, HFONT hFont) -{ - PDC pdc; - PDC_ATTR pdcattr; - PTEXTOBJ pOrgFnt, pNewFnt = NULL; - HFONT hOrgFont = NULL; - - if (!hDC || !hFont) return NULL; - - pdc = DC_LockDc(hDC); - if (!pdc) - { - return NULL; - } - - if (NT_SUCCESS(TextIntRealizeFont((HFONT)hFont,NULL))) - { - /* LFONTOBJ use share and locking. */ - pNewFnt = TEXTOBJ_LockText(hFont); - pdcattr = pdc->pdcattr; - pOrgFnt = pdc->dclevel.plfnt; - if (pOrgFnt) - { - hOrgFont = pOrgFnt->BaseObject.hHmgr; - } - else - { - hOrgFont = pdcattr->hlfntNew; - } - pdc->dclevel.plfnt = pNewFnt; - pdc->hlfntCur = hFont; - pdcattr->hlfntNew = hFont; - pdcattr->ulDirty_ |= DIRTY_CHARSET; - pdcattr->ulDirty_ &= ~SLOW_WIDTHS; - } - - if (pNewFnt) TEXTOBJ_UnlockText(pNewFnt); - DC_UnlockDc(pdc); - return hOrgFont; -} /** Functions ******************************************************************/ @@ -1120,17 +1078,5 @@ NtGdiHfontCreate( return hNewFont; } -/* - * @implemented - */ -HFONT -APIENTRY -NtGdiSelectFont( - IN HDC hDC, - IN HFONT hFont) -{ - return GreSelectFont(hDC, hFont); -} - /* EOF */ diff --git a/win32ss/gdi/ntgdi/gdibatch.c b/win32ss/gdi/ntgdi/gdibatch.c index ae365aa670d..8602740318a 100644 --- a/win32ss/gdi/ntgdi/gdibatch.c +++ b/win32ss/gdi/ntgdi/gdibatch.c @@ -66,7 +66,6 @@ ULONG FASTCALL GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr) { - BOOL Hit = FALSE; ULONG Cmd = 0, Size = 0; PDC_ATTR pdcattr = NULL; @@ -82,27 +81,25 @@ GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr) } _SEH2_EXCEPT(EXCEPTION_EXECUTE_HANDLER) { - Hit = TRUE; + DPRINT1("WARNING! GdiBatch Fault!\n"); + _SEH2_YIELD(return 0;) } _SEH2_END; - if (Hit) - { - DPRINT1("WARNING! GdiBatch Fault!\n"); - return 0; - } - - // FYI! The thread is approaching the end of sunset. switch(Cmd) { - case GdiBCPatBlt: // Highest pri first! + case GdiBCPatBlt: break; + case GdiBCPolyPatBlt: break; + case GdiBCTextOut: break; + case GdiBCExtTextOut: break; + case GdiBCSetBrushOrg: { PGDIBSSETBRHORG pgSBO; @@ -112,38 +109,31 @@ GdiFlushUserBatch(PDC dc, PGDIBATCHHDR pHdr) DC_vSetBrushOrigin(dc, pgSBO->ptlBrushOrigin.x, pgSBO->ptlBrushOrigin.y); break; } + case GdiBCExtSelClipRgn: break; + case GdiBCSelObj: { PGDIBSOBJECT pgO; - PTEXTOBJ pNewFnt = NULL; if (!dc) break; pgO = (PGDIBSOBJECT) pHdr; - if (NT_SUCCESS(TextIntRealizeFont((HFONT)pgO->hgdiobj,NULL))) - { - /* LFONTOBJ use share and locking. */ - pNewFnt = TEXTOBJ_LockText(pgO->hgdiobj); - - dc->dclevel.plfnt = pNewFnt; - dc->hlfntCur = pgO->hgdiobj; - pdcattr->hlfntNew = pgO->hgdiobj; - pdcattr->ulDirty_ |= DIRTY_CHARSET; - pdcattr->ulDirty_ &= ~SLOW_WIDTHS; - } - if (pNewFnt) TEXTOBJ_UnlockText(pNewFnt); + DC_hSelectFont(dc, (HFONT)pgO->hgdiobj); break; } + case GdiBCDelRgn: DPRINT("Delete Region Object!\n"); + /* Fall through */ case GdiBCDelObj: { PGDIBSOBJECT pgO = (PGDIBSOBJECT) pHdr; GreDeleteObject( pgO->hgdiobj ); break; } + default: break; } diff --git a/win32ss/gdi/ntgdi/gdifloat.h b/win32ss/gdi/ntgdi/gdifloat.h index 25bd1b2969b..94c590f47dc 100644 --- a/win32ss/gdi/ntgdi/gdifloat.h +++ b/win32ss/gdi/ntgdi/gdifloat.h @@ -1,5 +1,10 @@ #pragma once +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:28110) // disable "Drivers must protect floating point hardware state" warning +#endif + typedef struct tagFLOAT_POINT { FLOAT x, y; @@ -99,3 +104,7 @@ static __inline void INTERNAL_LPTODP(DC *dc, LPPOINT point) MulDiv((tx), (pdcattr)->szlViewportExt.cx, (pdcattr)->szlWindowExt.cx) #define YLSTODS(pdcattr,ty) \ MulDiv((ty), (pdcattr)->szlViewportExt.cy, (pdcattr)->szlWindowExt.cy) + +#ifdef _MSC_VER +#pragma warning(pop) +#endif diff --git a/win32ss/gdi/ntgdi/text.h b/win32ss/gdi/ntgdi/text.h index 20bfbbda0c3..2fd1bbe4f24 100644 --- a/win32ss/gdi/ntgdi/text.h +++ b/win32ss/gdi/ntgdi/text.h @@ -85,8 +85,11 @@ FORCEINLINE TEXTOBJ_LockText(HFONT hfont) { PLFONT plfnt = LFONT_ShareLockFont(hfont); - KeEnterCriticalRegion(); - ExAcquirePushLockExclusive(&plfnt->lock); + if (plfnt != 0) + { + KeEnterCriticalRegion(); + ExAcquirePushLockExclusive(&plfnt->lock); + } return plfnt; } diff --git a/win32ss/user/ntuser/object.h b/win32ss/user/ntuser/object.h index 2ab5f36da05..51355746184 100644 --- a/win32ss/user/ntuser/object.h +++ b/win32ss/user/ntuser/object.h @@ -6,29 +6,6 @@ typedef struct _USER_REFERENCE_ENTRY PVOID obj; } USER_REFERENCE_ENTRY, *PUSER_REFERENCE_ENTRY; -#define USER_ASSERT(exp,file,line) \ - if (!(exp)) {RtlAssert(#exp,(PVOID)file,line,"");} - -static __inline VOID -UserAssertLastRef(PVOID obj, const char *file, int line) -{ - PTHREADINFO W32Thread; - PSINGLE_LIST_ENTRY ReferenceEntry; - PUSER_REFERENCE_ENTRY UserReferenceEntry; - - USER_ASSERT(obj != NULL, file, line); - W32Thread = PsGetCurrentThreadWin32Thread(); - USER_ASSERT(W32Thread != NULL, file, line); - ReferenceEntry = W32Thread->ReferencesList.Next; - USER_ASSERT(ReferenceEntry != NULL, file, line); - UserReferenceEntry = CONTAINING_RECORD(ReferenceEntry, USER_REFERENCE_ENTRY, Entry); - USER_ASSERT(UserReferenceEntry != NULL, file, line); - USER_ASSERT(obj == UserReferenceEntry->obj, file, line); -} -#define ASSERT_LAST_REF(_obj_) UserAssertLastRef(_obj,__FILE__,__LINE__) - -#undef USER_ASSERT - extern PUSER_HANDLE_TABLE gHandleTable; VOID FASTCALL UserReferenceObject(PVOID obj); PVOID FASTCALL UserReferenceObjectByHandle(HANDLE handle, HANDLE_TYPE type);