mirror of https://github.com/reactos/reactos.git
Compare commits
35 Commits
d224f8d231
...
1aa2d9e37b
Author | SHA1 | Date |
---|---|---|
Maj Soklič | 1aa2d9e37b | |
Marcin Jabłoński | dcf9eb060a | |
Maj | a1a00c8a79 | |
Timo Kreuzer | 45aa8f8111 | |
Timo Kreuzer | 6beff505d7 | |
Thamatip Chitpong | cd0bb1af07 | |
Thamatip Chitpong | 6d16d27462 | |
Thamatip Chitpong | 018264f38f | |
Katayama Hirofumi MZ | 1331e2fb02 | |
Doug Lyons | 3693d55404 | |
Timo Kreuzer | 1f49173f82 | |
Timo Kreuzer | 3c55252828 | |
Timo Kreuzer | f319538d98 | |
Timo Kreuzer | 0ea48e79fc | |
Timo Kreuzer | 43beb913da | |
Katayama Hirofumi MZ | d55f49978d | |
Katayama Hirofumi MZ | 91acf823d8 | |
Katayama Hirofumi MZ | c0c270e90e | |
Katayama Hirofumi MZ | 75cc5b2b1c | |
Katayama Hirofumi MZ | 8337df2bd1 | |
Oleg Dubinskiy | 24e088daa8 | |
Katayama Hirofumi MZ | d23573beed | |
Katayama Hirofumi MZ | 25e2f5f277 | |
Timo Kreuzer | 6ac260dcec | |
Timo Kreuzer | 72fd54a7f4 | |
Timo Kreuzer | 9229709312 | |
Timo Kreuzer | af2ce4d08f | |
Timo Kreuzer | 1d289fec77 | |
Timo Kreuzer | d96f01b5dc | |
Katayama Hirofumi MZ | 1dc8d80ca1 | |
Timo Kreuzer | a8ece7e81a | |
Timo Kreuzer | 565828127f | |
Serge Gautherie | fd331f1494 | |
Serge Gautherie | 8b9bf3369c | |
Katayama Hirofumi MZ | 0240a87618 |
|
@ -1222,6 +1222,7 @@ void ProcessPage_OnOpenFileLocation(void)
|
|||
DWORD dwProcessId;
|
||||
DWORD dwLength;
|
||||
LPWSTR pszExePath;
|
||||
static const WCHAR szCmdFormat[] = L"/select,\"%s\"";
|
||||
LPWSTR pszCmdLine = NULL;
|
||||
|
||||
dwProcessId = GetSelectedProcessId();
|
||||
|
@ -1240,14 +1241,18 @@ void ProcessPage_OnOpenFileLocation(void)
|
|||
goto Cleanup;
|
||||
|
||||
/* Build the shell command line */
|
||||
pszCmdLine = HeapAlloc(GetProcessHeap(), 0, (dwLength + CONST_STR_LEN(L"/select,\"\"")) * sizeof(WCHAR));
|
||||
dwLength += CONST_STR_LEN(szCmdFormat) - CONST_STR_LEN(L"%s");
|
||||
pszCmdLine = HeapAlloc(GetProcessHeap(), 0, dwLength * sizeof(WCHAR));
|
||||
if (!pszCmdLine)
|
||||
goto Cleanup;
|
||||
|
||||
StringCchPrintfW(pszCmdLine, dwLength + CONST_STR_LEN(L"/select,\"\""), L"/select,\"%s\"", pszExePath);
|
||||
StringCchPrintfW(pszCmdLine, dwLength, szCmdFormat, pszExePath);
|
||||
|
||||
/* Call the shell to open the file location and select it */
|
||||
ShellExecuteW(NULL, L"open", L"explorer.exe", pszCmdLine, NULL, SW_SHOWNORMAL);
|
||||
/* Call the shell to open the file location and select it. If Explorer shell
|
||||
* is not available, use ReactOS's alternative file browser instead. */
|
||||
ShellExecuteW(NULL, L"open",
|
||||
GetShellWindow() ? L"explorer.exe" : L"filebrowser.exe",
|
||||
pszCmdLine, NULL, SW_SHOWNORMAL);
|
||||
|
||||
Cleanup:
|
||||
HeapFree(GetProcessHeap(), 0, pszCmdLine);
|
||||
|
|
|
@ -14,7 +14,6 @@ list(APPEND SOURCE
|
|||
gdiplus.c
|
||||
graphics.c
|
||||
graphicspath.c
|
||||
image.c
|
||||
imageattributes.c
|
||||
matrix.c
|
||||
metafile.c
|
||||
|
@ -24,6 +23,7 @@ list(APPEND SOURCE
|
|||
stringformat.c)
|
||||
|
||||
list(APPEND PCH_SKIP_SOURCE
|
||||
image.c
|
||||
guid.c
|
||||
${CMAKE_CURRENT_BINARY_DIR}/gdiplus_stubs.c)
|
||||
|
||||
|
|
|
@ -2287,6 +2287,7 @@ LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &
|
|||
{
|
||||
case SHCNE_MKDIR:
|
||||
case SHCNE_CREATE:
|
||||
case SHCNE_DRIVEADD:
|
||||
if (bParent0)
|
||||
{
|
||||
if (LV_FindItemByPidl(ILFindLastID(Pidls[0])) == -1)
|
||||
|
@ -2297,6 +2298,7 @@ LRESULT CDefView::OnChangeNotify(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &
|
|||
break;
|
||||
case SHCNE_RMDIR:
|
||||
case SHCNE_DELETE:
|
||||
case SHCNE_DRIVEREMOVED:
|
||||
if (bParent0)
|
||||
LV_DeleteItem(ILFindLastID(Pidls[0]));
|
||||
break;
|
||||
|
|
|
@ -57,6 +57,32 @@ EXTERN_C void FreeChangeNotifications(void)
|
|||
DeleteCriticalSection(&SHELL32_ChangenotifyCS);
|
||||
}
|
||||
|
||||
static HRESULT
|
||||
Shell_ParsePrinterName(
|
||||
_In_ LPCWSTR pszName,
|
||||
_Out_ LPITEMIDLIST *ppidl,
|
||||
_In_ IBindCtx *pBindCtx)
|
||||
{
|
||||
*ppidl = NULL;
|
||||
|
||||
CComHeapPtr<ITEMIDLIST> pidlPrinters;
|
||||
HRESULT hr = SHGetSpecialFolderLocation(NULL, CSIDL_PRINTERS, &pidlPrinters);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
CComPtr<IShellFolder> pFolder;
|
||||
hr = SHBindToObject(NULL, pidlPrinters, IID_PPV_ARG(IShellFolder, &pFolder));
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
CComHeapPtr<ITEMIDLIST> pidlTemp;
|
||||
hr = pFolder->ParseDisplayName(NULL, pBindCtx, (LPWSTR)pszName, NULL, &pidlTemp, NULL);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return hr;
|
||||
|
||||
return SHILCombine(pidlPrinters, pidlTemp, ppidl);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////////////
|
||||
// There are two delivery methods: "old delivery method" and "new delivery method".
|
||||
//
|
||||
|
@ -625,21 +651,48 @@ SHChangeNotifyTransmit(LONG lEvent, UINT uFlags, LPCITEMIDLIST pidl1, LPCITEMIDL
|
|||
EXTERN_C void WINAPI
|
||||
SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
|
||||
{
|
||||
LPITEMIDLIST pidl1 = NULL, pidl2 = NULL, pidlTemp1 = NULL, pidlTemp2 = NULL;
|
||||
DWORD dwTick = GetTickCount();
|
||||
WCHAR szPath1[MAX_PATH], szPath2[MAX_PATH];
|
||||
LPWSTR psz1, psz2;
|
||||
TRACE("(0x%08x,0x%08x,%p,%p)\n", wEventId, uFlags, dwItem1, dwItem2);
|
||||
|
||||
switch (uFlags & SHCNF_TYPE)
|
||||
if (!GetNotificationServer(FALSE))
|
||||
return;
|
||||
|
||||
DWORD dwTick = GetTickCount();
|
||||
|
||||
WCHAR szPath1[MAX_PATH], szPath2[MAX_PATH];
|
||||
LPITEMIDLIST pidl1 = NULL, pidl2 = NULL;
|
||||
LPWSTR psz1, psz2;
|
||||
SHChangeDWORDAsIDList dwidl;
|
||||
DWORD dwType;
|
||||
|
||||
Retry:
|
||||
dwType = (uFlags & SHCNF_TYPE);
|
||||
switch (dwType)
|
||||
{
|
||||
case SHCNF_IDLIST:
|
||||
{
|
||||
if (wEventId == SHCNE_FREESPACE)
|
||||
{
|
||||
szPath1[0] = szPath2[0] = UNICODE_NULL;
|
||||
if (dwItem1)
|
||||
SHGetPathFromIDList((LPCITEMIDLIST)dwItem1, szPath1);
|
||||
if (dwItem2)
|
||||
SHGetPathFromIDList((LPCITEMIDLIST)dwItem2, szPath2);
|
||||
|
||||
uFlags = SHCNF_PATHW;
|
||||
dwItem1 = (szPath1[0] ? szPath1 : NULL);
|
||||
dwItem2 = (szPath2[0] ? szPath2 : NULL);
|
||||
goto Retry;
|
||||
}
|
||||
|
||||
pidl1 = (LPITEMIDLIST)dwItem1;
|
||||
pidl2 = (LPITEMIDLIST)dwItem2;
|
||||
break;
|
||||
|
||||
}
|
||||
case SHCNF_PATHA:
|
||||
case SHCNF_PRINTERA:
|
||||
{
|
||||
psz1 = psz2 = NULL;
|
||||
szPath1[0] = szPath2[0] = UNICODE_NULL;
|
||||
if (dwItem1)
|
||||
{
|
||||
SHAnsiToUnicode((LPCSTR)dwItem1, szPath1, _countof(szPath1));
|
||||
|
@ -650,42 +703,90 @@ SHChangeNotify(LONG wEventId, UINT uFlags, LPCVOID dwItem1, LPCVOID dwItem2)
|
|||
SHAnsiToUnicode((LPCSTR)dwItem2, szPath2, _countof(szPath2));
|
||||
psz2 = szPath2;
|
||||
}
|
||||
uFlags &= ~SHCNF_TYPE;
|
||||
uFlags |= SHCNF_PATHW;
|
||||
SHChangeNotify(wEventId, uFlags, psz1, psz2);
|
||||
return;
|
||||
|
||||
uFlags = ((dwType == SHCNF_PRINTERA) ? SHCNF_PRINTERW : SHCNF_PATHW);
|
||||
dwItem1 = psz1;
|
||||
dwItem2 = psz2;
|
||||
goto Retry;
|
||||
}
|
||||
case SHCNF_PATHW:
|
||||
{
|
||||
if (wEventId == SHCNE_FREESPACE)
|
||||
{
|
||||
INT iDrive1 = -1, iDrive2 = -1;
|
||||
if (dwItem1)
|
||||
iDrive1 = PathGetDriveNumberW((LPCWSTR)dwItem1);
|
||||
if (dwItem2)
|
||||
iDrive2 = PathGetDriveNumberW((LPCWSTR)dwItem2);
|
||||
|
||||
DWORD dwValue = 0;
|
||||
if (iDrive1 >= 0)
|
||||
dwValue |= (1 << iDrive1);
|
||||
if (iDrive2 >= 0)
|
||||
dwValue |= (1 << iDrive2);
|
||||
|
||||
if (!dwValue)
|
||||
return;
|
||||
|
||||
uFlags = SHCNF_DWORD;
|
||||
dwItem1 = UlongToPtr(dwValue);
|
||||
dwItem2 = NULL;
|
||||
goto Retry;
|
||||
}
|
||||
|
||||
if (dwItem1)
|
||||
pidl1 = SHSimpleIDListFromPathW((LPCWSTR)dwItem1);
|
||||
if (dwItem2)
|
||||
pidl2 = SHSimpleIDListFromPathW((LPCWSTR)dwItem2);
|
||||
break;
|
||||
}
|
||||
case SHCNF_PRINTERW:
|
||||
{
|
||||
if (dwItem1)
|
||||
{
|
||||
pidl1 = pidlTemp1 = SHSimpleIDListFromPathW((LPCWSTR)dwItem1);
|
||||
HRESULT hr = Shell_ParsePrinterName((LPCWSTR)dwItem1, &pidl1, NULL);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
return;
|
||||
}
|
||||
|
||||
if (dwItem2)
|
||||
{
|
||||
pidl2 = pidlTemp2 = SHSimpleIDListFromPathW((LPCWSTR)dwItem2);
|
||||
HRESULT hr = Shell_ParsePrinterName((LPCWSTR)dwItem2, &pidl2, NULL);
|
||||
if (FAILED_UNEXPECTEDLY(hr))
|
||||
{
|
||||
ILFree(pidl1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case SHCNF_PRINTERA:
|
||||
case SHCNF_PRINTERW:
|
||||
FIXME("SHChangeNotify with (uFlags & SHCNF_PRINTER)\n");
|
||||
return;
|
||||
|
||||
}
|
||||
case SHCNF_DWORD:
|
||||
{
|
||||
dwidl.cb = offsetof(SHChangeDWORDAsIDList, cbZero);
|
||||
dwidl.dwItem1 = PtrToUlong(dwItem1);
|
||||
dwidl.dwItem2 = PtrToUlong(dwItem2);
|
||||
dwidl.cbZero = 0;
|
||||
pidl1 = (LPITEMIDLIST)&dwidl;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
FIXME("unknown type %08x\n", uFlags & SHCNF_TYPE);
|
||||
{
|
||||
FIXME("Unknown type: 0x%X\n", dwType);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (wEventId == 0 || (wEventId & SHCNE_ASSOCCHANGED) || pidl1 != NULL)
|
||||
if (pidl1 || !wEventId || (wEventId & SHCNE_ASSOCCHANGED))
|
||||
{
|
||||
TRACE("notifying event %s(%x)\n", DumpEvent(wEventId), wEventId);
|
||||
SHChangeNotifyTransmit(wEventId, uFlags, pidl1, pidl2, dwTick);
|
||||
}
|
||||
|
||||
if (pidlTemp1)
|
||||
ILFree(pidlTemp1);
|
||||
if (pidlTemp2)
|
||||
ILFree(pidlTemp2);
|
||||
if ((dwType == SHCNF_PATHW) || (dwType == SHCNF_PRINTERW))
|
||||
{
|
||||
ILFree(pidl1);
|
||||
ILFree(pidl2);
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
|
|
@ -550,7 +550,7 @@ HRESULT WINAPI CControlPanelFolder::GetDefaultColumnState(UINT iColumn, DWORD *p
|
|||
|
||||
if (!pcsFlags || iColumn >= CONTROLPANEL_COL_COUNT)
|
||||
return E_INVALIDARG;
|
||||
*pcsFlags = ControlPanelSFHeader[iColumn].pcsFlags;
|
||||
*pcsFlags = ControlPanelSFHeader[iColumn].colstate;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -21,6 +21,7 @@
|
|||
*/
|
||||
|
||||
#include <precomp.h>
|
||||
#include "CFSFolder.h" // Only for CFSFolder::*FSColumn* helpers!
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(shell);
|
||||
|
||||
|
@ -284,17 +285,6 @@ class CDesktopFolderEnum :
|
|||
|
||||
int SHELL_ConfirmMsgBox(HWND hWnd, LPWSTR lpszText, LPWSTR lpszCaption, HICON hIcon, BOOL bYesToAll);
|
||||
|
||||
static const shvheader DesktopSFHeader[] = {
|
||||
{IDS_SHV_COLUMN_NAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15},
|
||||
{IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 10},
|
||||
{IDS_SHV_COLUMN_TYPE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10},
|
||||
{IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
|
||||
{IDS_SHV_COLUMN_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 12},
|
||||
{IDS_SHV_COLUMN_ATTRIBUTES, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10}
|
||||
};
|
||||
|
||||
#define DESKTOPSHELLVIEWCOLUMNS 6
|
||||
|
||||
static const DWORD dwDesktopAttributes =
|
||||
SFGAO_HASSUBFOLDER | SFGAO_FILESYSTEM | SFGAO_FOLDER | SFGAO_FILESYSANCESTOR |
|
||||
SFGAO_STORAGEANCESTOR | SFGAO_HASPROPSHEET | SFGAO_STORAGE;
|
||||
|
@ -978,16 +968,25 @@ HRESULT WINAPI CDesktopFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI CDesktopFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
||||
HRESULT WINAPI CDesktopFolder::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags)
|
||||
{
|
||||
HRESULT hr;
|
||||
TRACE ("(%p)\n", this);
|
||||
|
||||
if (!pcsFlags || iColumn >= DESKTOPSHELLVIEWCOLUMNS)
|
||||
if (!pcsFlags)
|
||||
return E_INVALIDARG;
|
||||
|
||||
*pcsFlags = DesktopSFHeader[iColumn].pcsFlags;
|
||||
|
||||
return S_OK;
|
||||
hr = CFSFolder::GetDefaultFSColumnState(iColumn, *pcsFlags);
|
||||
/*
|
||||
// CDesktopFolder may override the flags if desired (future)
|
||||
switch(iColumn)
|
||||
{
|
||||
case SHFSF_COL_FATTS:
|
||||
*pcsFlags &= ~SHCOLSTATE_ONBYDEFAULT;
|
||||
break;
|
||||
}
|
||||
*/
|
||||
return hr;
|
||||
}
|
||||
|
||||
HRESULT WINAPI CDesktopFolder::GetDetailsEx(
|
||||
|
@ -1000,19 +999,27 @@ HRESULT WINAPI CDesktopFolder::GetDetailsEx(
|
|||
return E_NOTIMPL;
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
* Column info functions.
|
||||
* CFSFolder.h provides defaults for us.
|
||||
*/
|
||||
HRESULT CDesktopFolder::GetColumnDetails(UINT iColumn, SHELLDETAILS &sd)
|
||||
{
|
||||
/* CDesktopFolder may override the flags and/or name if desired */
|
||||
return CFSFolder::GetFSColumnDetails(iColumn, sd);
|
||||
}
|
||||
|
||||
HRESULT WINAPI CDesktopFolder::GetDetailsOf(
|
||||
PCUITEMID_CHILD pidl,
|
||||
UINT iColumn,
|
||||
SHELLDETAILS *psd)
|
||||
{
|
||||
if (!psd || iColumn >= DESKTOPSHELLVIEWCOLUMNS)
|
||||
if (!psd)
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (!pidl)
|
||||
{
|
||||
psd->fmt = DesktopSFHeader[iColumn].fmt;
|
||||
psd->cxChar = DesktopSFHeader[iColumn].cxChar;
|
||||
return SHSetStrRet(&psd->str, DesktopSFHeader[iColumn].colnameid);
|
||||
return GetColumnDetails(iColumn, *psd);
|
||||
}
|
||||
|
||||
CComPtr<IShellFolder2> psf;
|
||||
|
|
|
@ -42,6 +42,8 @@ class CDesktopFolder :
|
|||
|
||||
HRESULT _GetSFFromPidl(LPCITEMIDLIST pidl, IShellFolder2** psf);
|
||||
|
||||
static HRESULT GetColumnDetails(UINT iColumn, SHELLDETAILS &sd);
|
||||
|
||||
HRESULT _ParseDisplayNameByParent(
|
||||
HWND hwndOwner,
|
||||
LPBC pbc,
|
||||
|
|
|
@ -1168,13 +1168,13 @@ HRESULT WINAPI CDrivesFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI CDrivesFolder::GetDefaultColumnState(UINT iColumn, DWORD * pcsFlags)
|
||||
HRESULT WINAPI CDrivesFolder::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF * pcsFlags)
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
|
||||
if (!pcsFlags || iColumn >= _countof(MyComputerSFHeader))
|
||||
return E_INVALIDARG;
|
||||
*pcsFlags = MyComputerSFHeader[iColumn].pcsFlags;
|
||||
*pcsFlags = MyComputerSFHeader[iColumn].colstate;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -527,17 +527,35 @@ CFSFolder::~CFSFolder()
|
|||
SHFree(m_sPathTarget);
|
||||
}
|
||||
|
||||
|
||||
static const shvheader GenericSFHeader[] = {
|
||||
{IDS_SHV_COLUMN_NAME, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15},
|
||||
{IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_INT | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
|
||||
{IDS_SHV_COLUMN_TYPE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10},
|
||||
{IDS_SHV_COLUMN_SIZE, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_RIGHT, 10},
|
||||
{IDS_SHV_COLUMN_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 12},
|
||||
{IDS_SHV_COLUMN_MODIFIED, SHCOLSTATE_TYPE_DATE | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 15},
|
||||
{IDS_SHV_COLUMN_ATTRIBUTES, SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT, LVCFMT_LEFT, 10},
|
||||
{IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR, LVCFMT_LEFT, 10}
|
||||
{IDS_SHV_COLUMN_COMMENTS, SHCOLSTATE_TYPE_STR | SHCOLSTATE_SLOW, LVCFMT_LEFT, 10}, // We don't currently support comments but CRegFolder does
|
||||
};
|
||||
|
||||
#define GENERICSHELLVIEWCOLUMNS 6
|
||||
#define GENERICSHELLVIEWCOLUMNS _countof(GenericSFHeader)
|
||||
|
||||
HRESULT CFSFolder::GetFSColumnDetails(UINT iColumn, SHELLDETAILS &sd)
|
||||
{
|
||||
if (iColumn >= _countof(GenericSFHeader))
|
||||
return E_INVALIDARG;
|
||||
|
||||
sd.fmt = GenericSFHeader[iColumn].fmt;
|
||||
sd.cxChar = GenericSFHeader[iColumn].cxChar;
|
||||
return SHSetStrRet(&sd.str, GenericSFHeader[iColumn].colnameid);
|
||||
}
|
||||
|
||||
HRESULT CFSFolder::GetDefaultFSColumnState(UINT iColumn, SHCOLSTATEF &csFlags)
|
||||
{
|
||||
if (iColumn >= _countof(GenericSFHeader))
|
||||
return E_INVALIDARG;
|
||||
|
||||
csFlags = GenericSFHeader[iColumn].colstate;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
static HRESULT SHELL32_GetCLSIDForDirectory(LPCWSTR pwszDir, LPCWSTR KeyName, CLSID* pclsidFolder)
|
||||
{
|
||||
|
@ -1021,18 +1039,13 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam,
|
|||
return MAKE_COMPARE_HRESULT(bIsFolder1 ? -1 : 1);
|
||||
}
|
||||
|
||||
int result;
|
||||
int result = 0;
|
||||
switch (LOWORD(lParam))
|
||||
{
|
||||
case 0: /* Name */
|
||||
case SHFSF_COL_NAME:
|
||||
result = wcsicmp(pDataW1->wszName, pDataW2->wszName);
|
||||
break;
|
||||
case 1: /* Type */
|
||||
pExtension1 = PathFindExtensionW(pDataW1->wszName);
|
||||
pExtension2 = PathFindExtensionW(pDataW2->wszName);
|
||||
result = wcsicmp(pExtension1, pExtension2);
|
||||
break;
|
||||
case 2: /* Size */
|
||||
case SHFSF_COL_SIZE:
|
||||
if (pData1->u.file.dwFileSize > pData2->u.file.dwFileSize)
|
||||
result = 1;
|
||||
else if (pData1->u.file.dwFileSize < pData2->u.file.dwFileSize)
|
||||
|
@ -1040,16 +1053,26 @@ HRESULT WINAPI CFSFolder::CompareIDs(LPARAM lParam,
|
|||
else
|
||||
result = 0;
|
||||
break;
|
||||
case 3: /* Modified */
|
||||
case SHFSF_COL_TYPE:
|
||||
pExtension1 = PathFindExtensionW(pDataW1->wszName);
|
||||
pExtension2 = PathFindExtensionW(pDataW2->wszName);
|
||||
result = wcsicmp(pExtension1, pExtension2);
|
||||
break;
|
||||
case SHFSF_COL_MDATE:
|
||||
result = pData1->u.file.uFileDate - pData2->u.file.uFileDate;
|
||||
if (result == 0)
|
||||
result = pData1->u.file.uFileTime - pData2->u.file.uFileTime;
|
||||
break;
|
||||
case 4: /* Attributes */
|
||||
case SHFSF_COL_FATTS:
|
||||
return SHELL32_CompareDetails(this, lParam, pidl1, pidl2);
|
||||
case 5: /* Comments */
|
||||
case SHFSF_COL_COMMENT:
|
||||
result = 0;
|
||||
break;
|
||||
default:
|
||||
if (_ILIsPidlSimple(pidl1) || _ILIsPidlSimple(pidl2))
|
||||
ERR("Unknown column %u, can't compare\n", LOWORD(lParam));
|
||||
else
|
||||
TRACE("Unknown column %u, deferring to the subfolder\n", LOWORD(lParam));
|
||||
}
|
||||
|
||||
if (result == 0)
|
||||
|
@ -1543,16 +1566,14 @@ HRESULT WINAPI CFSFolder::GetDefaultColumn(DWORD dwRes,
|
|||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::GetDefaultColumnState(UINT iColumn,
|
||||
DWORD * pcsFlags)
|
||||
SHCOLSTATEF *pcsFlags)
|
||||
{
|
||||
TRACE ("(%p)\n", this);
|
||||
|
||||
if (!pcsFlags || iColumn >= GENERICSHELLVIEWCOLUMNS)
|
||||
if (!pcsFlags)
|
||||
return E_INVALIDARG;
|
||||
|
||||
*pcsFlags = GenericSFHeader[iColumn].pcsFlags;
|
||||
|
||||
return S_OK;
|
||||
else
|
||||
return GetDefaultFSColumnState(iColumn, *pcsFlags);
|
||||
}
|
||||
|
||||
HRESULT WINAPI CFSFolder::GetDetailsEx(PCUITEMID_CHILD pidl,
|
||||
|
@ -1576,9 +1597,7 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl,
|
|||
if (!pidl)
|
||||
{
|
||||
/* the header titles */
|
||||
psd->fmt = GenericSFHeader[iColumn].fmt;
|
||||
psd->cxChar = GenericSFHeader[iColumn].cxChar;
|
||||
return SHSetStrRet(&psd->str, GenericSFHeader[iColumn].colnameid);
|
||||
return GetFSColumnDetails(iColumn, *psd);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -1587,24 +1606,30 @@ HRESULT WINAPI CFSFolder::GetDetailsOf(PCUITEMID_CHILD pidl,
|
|||
/* the data from the pidl */
|
||||
switch (iColumn)
|
||||
{
|
||||
case 0: /* name */
|
||||
case SHFSF_COL_NAME:
|
||||
hr = GetDisplayNameOf (pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
break;
|
||||
case 1: /* type */
|
||||
_ILGetFileType(pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 2: /* size */
|
||||
case SHFSF_COL_SIZE:
|
||||
_ILGetFileSize(pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 3: /* date */
|
||||
case SHFSF_COL_TYPE:
|
||||
_ILGetFileType(pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case SHFSF_COL_MDATE:
|
||||
_ILGetFileDate(pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 4: /* attributes */
|
||||
case SHFSF_COL_FATTS:
|
||||
_ILGetFileAttributes(pidl, psd->str.cStr, MAX_PATH);
|
||||
break;
|
||||
case 5: /* FIXME: comments */
|
||||
psd->str.cStr[0] = 0;
|
||||
case SHFSF_COL_COMMENT:
|
||||
psd->str.cStr[0] = '\0'; // TODO: Extract comment from .lnk files? desktop.ini?
|
||||
break;
|
||||
#if DBG
|
||||
default:
|
||||
ERR("Missing case for column %d\n", iColumn);
|
||||
#else
|
||||
DEFAULT_UNREACHABLE;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -125,6 +125,11 @@ class CFSFolder :
|
|||
|
||||
protected:
|
||||
HRESULT WINAPI GetCustomViewInfo(ULONG unknown, SFVM_CUSTOMVIEWINFO_DATA *data);
|
||||
|
||||
public:
|
||||
// Helper functions shared with CDesktopFolder
|
||||
static HRESULT GetFSColumnDetails(UINT iColumn, SHELLDETAILS &sd);
|
||||
static HRESULT GetDefaultFSColumnState(UINT iColumn, SHCOLSTATEF &csFlags);
|
||||
};
|
||||
|
||||
#endif /* _CFSFOLDER_H_ */
|
||||
|
|
|
@ -510,13 +510,13 @@ HRESULT WINAPI CNetFolder::GetDefaultColumn (DWORD dwRes, ULONG *pSort, ULONG *p
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI CNetFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
||||
HRESULT WINAPI CNetFolder::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags)
|
||||
{
|
||||
TRACE("(%p)\n", this);
|
||||
|
||||
if (!pcsFlags || iColumn >= NETWORKPLACESSHELLVIEWCOLUMNS)
|
||||
return E_INVALIDARG;
|
||||
*pcsFlags = NetworkPlacesSFHeader[iColumn].pcsFlags;
|
||||
*pcsFlags = NetworkPlacesSFHeader[iColumn].colstate;
|
||||
return S_OK;
|
||||
}
|
||||
|
||||
|
|
|
@ -432,11 +432,11 @@ HRESULT WINAPI CPrinterFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
HRESULT WINAPI CPrinterFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
||||
HRESULT WINAPI CPrinterFolder::GetDefaultColumnState(UINT iColumn, SHCOLSTATEF *pcsFlags)
|
||||
{
|
||||
if (!pcsFlags || iColumn >= PrinterSHELLVIEWCOLUMNS)
|
||||
return E_INVALIDARG;
|
||||
*pcsFlags = PrinterSFHeader[iColumn].pcsFlags;
|
||||
*pcsFlags = PrinterSFHeader[iColumn].colstate;
|
||||
return S_OK;
|
||||
|
||||
}
|
||||
|
|
|
@ -233,14 +233,6 @@ class CRegFolderEnum :
|
|||
END_COM_MAP()
|
||||
};
|
||||
|
||||
enum registry_columns
|
||||
{
|
||||
REGISTRY_COL_NAME,
|
||||
REGISTRY_COL_TYPE,
|
||||
REGISTRY_COL_VALUE,
|
||||
REGISTRY_COL_COUNT,
|
||||
};
|
||||
|
||||
CRegFolderEnum::CRegFolderEnum()
|
||||
{
|
||||
}
|
||||
|
@ -302,6 +294,18 @@ HRESULT CRegFolderEnum::AddItemsFromKey(HKEY hkey_root, LPCWSTR szRepPath)
|
|||
return S_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* These columns try to map to CFSFolder's columns because the CDesktopFolder
|
||||
* displays CFSFolder and CRegFolder items in the same view.
|
||||
*/
|
||||
enum REGFOLDERCOLUMNINDEX
|
||||
{
|
||||
COL_NAME = SHFSF_COL_NAME,
|
||||
COL_TYPE = SHFSF_COL_TYPE,
|
||||
COL_INFOTIP = SHFSF_COL_COMMENT,
|
||||
REGFOLDERCOLUMNCOUNT = max(COL_INFOTIP, COL_TYPE) + 1
|
||||
};
|
||||
|
||||
class CRegFolder :
|
||||
public CComObjectRootEx<CComMultiThreadModelNoCS>,
|
||||
public IShellFolder2
|
||||
|
@ -808,7 +812,7 @@ HRESULT WINAPI CRegFolder::GetDefaultColumn(DWORD dwRes, ULONG *pSort, ULONG *pD
|
|||
|
||||
HRESULT WINAPI CRegFolder::GetDefaultColumnState(UINT iColumn, DWORD *pcsFlags)
|
||||
{
|
||||
if (iColumn >= REGISTRY_COL_COUNT)
|
||||
if (iColumn >= REGFOLDERCOLUMNCOUNT)
|
||||
return E_INVALIDARG;
|
||||
*pcsFlags = SHCOLSTATE_TYPE_STR | SHCOLSTATE_ONBYDEFAULT;
|
||||
return S_OK;
|
||||
|
@ -824,6 +828,12 @@ HRESULT WINAPI CRegFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHEL
|
|||
if (!psd)
|
||||
return E_INVALIDARG;
|
||||
|
||||
if (!pidl)
|
||||
{
|
||||
TRACE("CRegFolder has no column info\n");
|
||||
return E_INVALIDARG;
|
||||
}
|
||||
|
||||
GUID const *clsid = _ILGetGUIDPointer (pidl);
|
||||
|
||||
if (!clsid)
|
||||
|
@ -834,11 +844,11 @@ HRESULT WINAPI CRegFolder::GetDetailsOf(PCUITEMID_CHILD pidl, UINT iColumn, SHEL
|
|||
|
||||
switch(iColumn)
|
||||
{
|
||||
case REGISTRY_COL_NAME:
|
||||
case COL_NAME:
|
||||
return GetDisplayNameOf(pidl, SHGDN_NORMAL | SHGDN_INFOLDER, &psd->str);
|
||||
case REGISTRY_COL_TYPE:
|
||||
case COL_TYPE:
|
||||
return SHSetStrRet(&psd->str, IDS_SYSTEMFOLDER);
|
||||
case REGISTRY_COL_VALUE:
|
||||
case COL_INFOTIP:
|
||||
HKEY hKey;
|
||||
if (!HCR_RegOpenClassIDKey(*clsid, &hKey))
|
||||
return SHSetStrRet(&psd->str, "");
|
||||
|
|
|
@ -26,6 +26,8 @@
|
|||
#include <atlcoll.h>
|
||||
#endif
|
||||
|
||||
#include <dbt.h>
|
||||
|
||||
WINE_DEFAULT_DEBUG_CHANNEL(desktop);
|
||||
|
||||
static const WCHAR szProgmanClassName[] = L"Progman";
|
||||
|
@ -45,6 +47,7 @@ private:
|
|||
|
||||
CComPtr<IOleWindow> m_ChangeNotifyServer;
|
||||
HWND m_hwndChangeNotifyServer;
|
||||
DWORD m_dwDrives;
|
||||
|
||||
LRESULT _NotifyTray(UINT uMsg, WPARAM wParam, LPARAM lParam);
|
||||
HRESULT _Resize();
|
||||
|
@ -85,6 +88,7 @@ public:
|
|||
LRESULT OnCommand(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
|
||||
LRESULT OnSetFocus(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
|
||||
LRESULT OnGetChangeNotifyServer(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
|
||||
LRESULT OnDeviceChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
|
||||
LRESULT OnShowOptionsDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled);
|
||||
|
||||
DECLARE_WND_CLASS_EX(szProgmanClassName, CS_DBLCLKS, COLOR_DESKTOP)
|
||||
|
@ -99,6 +103,7 @@ BEGIN_MSG_MAP(CBaseBar)
|
|||
MESSAGE_HANDLER(WM_COMMAND, OnCommand)
|
||||
MESSAGE_HANDLER(WM_SETFOCUS, OnSetFocus)
|
||||
MESSAGE_HANDLER(WM_DESKTOP_GET_CNOTIFY_SERVER, OnGetChangeNotifyServer)
|
||||
MESSAGE_HANDLER(WM_DEVICECHANGE, OnDeviceChange)
|
||||
MESSAGE_HANDLER(WM_PROGMAN_OPENSHELLSETTINGS, OnShowOptionsDlg)
|
||||
END_MSG_MAP()
|
||||
|
||||
|
@ -112,7 +117,8 @@ END_COM_MAP()
|
|||
CDesktopBrowser::CDesktopBrowser():
|
||||
m_hAccel(NULL),
|
||||
m_hWndShellView(NULL),
|
||||
m_hwndChangeNotifyServer(NULL)
|
||||
m_hwndChangeNotifyServer(NULL),
|
||||
m_dwDrives(::GetLogicalDrives())
|
||||
{
|
||||
}
|
||||
|
||||
|
@ -460,6 +466,33 @@ LRESULT CDesktopBrowser::OnGetChangeNotifyServer(UINT uMsg, WPARAM wParam, LPARA
|
|||
return (LRESULT)m_hwndChangeNotifyServer;
|
||||
}
|
||||
|
||||
// Detect DBT_DEVICEARRIVAL and DBT_DEVICEREMOVECOMPLETE
|
||||
LRESULT CDesktopBrowser::OnDeviceChange(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
|
||||
{
|
||||
if (wParam != DBT_DEVICEARRIVAL && wParam != DBT_DEVICEREMOVECOMPLETE)
|
||||
return 0;
|
||||
|
||||
DWORD dwDrives = ::GetLogicalDrives();
|
||||
for (INT iDrive = 0; iDrive <= 'Z' - 'A'; ++iDrive)
|
||||
{
|
||||
WCHAR szPath[MAX_PATH];
|
||||
DWORD dwBit = (1 << iDrive);
|
||||
if (!(m_dwDrives & dwBit) && (dwDrives & dwBit)) // The drive is added
|
||||
{
|
||||
PathBuildRootW(szPath, iDrive);
|
||||
SHChangeNotify(SHCNE_DRIVEADD, SHCNF_PATHW, szPath, NULL);
|
||||
}
|
||||
else if ((m_dwDrives & dwBit) && !(dwDrives & dwBit)) // The drive is removed
|
||||
{
|
||||
PathBuildRootW(szPath, iDrive);
|
||||
SHChangeNotify(SHCNE_DRIVEREMOVED, SHCNF_PATHW, szPath, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
m_dwDrives = dwDrives;
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern VOID WINAPI ShowFolderOptionsDialog(UINT Page, BOOL Async);
|
||||
|
||||
LRESULT CDesktopBrowser::OnShowOptionsDlg(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL &bHandled)
|
||||
|
|
|
@ -27,11 +27,25 @@
|
|||
#define CHARS_IN_GUID 39
|
||||
|
||||
typedef struct {
|
||||
int colnameid;
|
||||
int pcsFlags;
|
||||
int fmt;
|
||||
int cxChar;
|
||||
WORD colnameid; // Column title text resource id passed to LoadString
|
||||
WORD colstate; // SHCOLSTATEF returned by IShellFolder2::GetDefaultColumnState
|
||||
// HACK: SHCOLSTATEF truncated to WORD to reduce .rdata section size
|
||||
WORD fmt; // LVCFMT_*
|
||||
WORD cxChar; // Column width hint
|
||||
} shvheader;
|
||||
/*
|
||||
* CFSFolder column indices. CDesktopFolder MUST use the same indices!
|
||||
* According to the documentation for IShellFolder2::GetDetailsOf,
|
||||
* the first 4 columns for SFGAO_FILESYSTEM items must be Name, Size, Type, Modified date
|
||||
For Details See:
|
||||
https://learn.microsoft.com/en-us/windows/win32/api/shobjidl_core/nf-shobjidl_core-ishellfolder2-getdetailsof
|
||||
*/
|
||||
#define SHFSF_COL_NAME 0
|
||||
#define SHFSF_COL_SIZE 1
|
||||
#define SHFSF_COL_TYPE 2 // SHGFI_TYPENAME
|
||||
#define SHFSF_COL_MDATE 3 // Modified date
|
||||
#define SHFSF_COL_FATTS 4 // File attributes
|
||||
#define SHFSF_COL_COMMENT 5
|
||||
|
||||
#define GET_SHGDN_FOR(dwFlags) ((DWORD)dwFlags & (DWORD)0x0000FF00)
|
||||
#define GET_SHGDN_RELATION(dwFlags) ((DWORD)dwFlags & (DWORD)0x000000FF)
|
||||
|
|
|
@ -873,6 +873,7 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
|
|||
* "a path\foo.cpl"
|
||||
*/
|
||||
{
|
||||
#ifndef __REACTOS__
|
||||
LPWSTR buffer;
|
||||
LPWSTR beg = NULL;
|
||||
LPWSTR end;
|
||||
|
@ -952,14 +953,6 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
|
|||
applet = Control_LoadApplet(hWnd, buffer, panel);
|
||||
if (applet)
|
||||
{
|
||||
#ifdef __REACTOS__
|
||||
ULONG_PTR cookie;
|
||||
BOOL bActivated;
|
||||
ATOM aCPLName;
|
||||
ATOM aCPLFlags;
|
||||
ATOM aCPLPath;
|
||||
AppDlgFindData findData;
|
||||
#endif
|
||||
/* we've been given a textual parameter (or none at all) */
|
||||
if (sp == -1) {
|
||||
while ((++sp) != applet->count) {
|
||||
|
@ -975,65 +968,201 @@ static void Control_DoLaunch(CPanel* panel, HWND hWnd, LPCWSTR wszCmd)
|
|||
sp = 0;
|
||||
}
|
||||
|
||||
#ifdef __REACTOS__
|
||||
bActivated = (applet->hActCtx != INVALID_HANDLE_VALUE ? ActivateActCtx(applet->hActCtx, &cookie) : FALSE);
|
||||
|
||||
aCPLPath = GlobalFindAtomW(applet->cmd);
|
||||
if (!aCPLPath)
|
||||
{
|
||||
aCPLPath = GlobalAddAtomW(applet->cmd);
|
||||
}
|
||||
|
||||
aCPLName = GlobalFindAtomW(L"CPLName");
|
||||
if (!aCPLName)
|
||||
{
|
||||
aCPLName = GlobalAddAtomW(L"CPLName");
|
||||
}
|
||||
|
||||
aCPLFlags = GlobalFindAtomW(L"CPLFlags");
|
||||
if (!aCPLFlags)
|
||||
{
|
||||
aCPLFlags = GlobalAddAtomW(L"CPLFlags");
|
||||
}
|
||||
|
||||
findData.szAppFile = applet->cmd;
|
||||
findData.sAppletNo = (UINT_PTR)(sp + 1);
|
||||
findData.aCPLName = aCPLName;
|
||||
findData.aCPLFlags = aCPLFlags;
|
||||
findData.hRunDLL = applet->hWnd;
|
||||
findData.hDlgResult = NULL;
|
||||
// Find the dialog of this applet in the first instance.
|
||||
// Note: The simpler functions "FindWindow" or "FindWindowEx" does not find this type of dialogs.
|
||||
EnumWindows(Control_EnumWinProc, (LPARAM)&findData);
|
||||
if (findData.hDlgResult)
|
||||
{
|
||||
BringWindowToTop(findData.hDlgResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLName), (HANDLE)MAKEINTATOM(aCPLPath));
|
||||
SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLFlags), UlongToHandle(sp + 1));
|
||||
Control_ShowAppletInTaskbar(applet, sp);
|
||||
#endif
|
||||
|
||||
if (!applet->proc(applet->hWnd, CPL_STARTWPARMSW, sp, (LPARAM)extraPmts))
|
||||
applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].data);
|
||||
#ifdef __REACTOS__
|
||||
RemovePropW(applet->hWnd, applet->cmd);
|
||||
GlobalDeleteAtom(aCPLPath);
|
||||
}
|
||||
#endif
|
||||
|
||||
Control_UnloadApplet(applet);
|
||||
|
||||
#ifdef __REACTOS__
|
||||
if (bActivated)
|
||||
DeactivateActCtx(0, cookie);
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, buffer);
|
||||
#else
|
||||
LPWSTR buffer;
|
||||
LPWSTR ptr;
|
||||
signed sp = -1;
|
||||
LPCWSTR extraPmts = L"";
|
||||
BOOL quoted = FALSE;
|
||||
CPlApplet *applet;
|
||||
LPCWSTR pchFirstComma = NULL, pchSecondComma = NULL;
|
||||
LPCWSTR pchLastUnquotedSpace = NULL;
|
||||
LPWSTR wszDialogBoxName;
|
||||
int i = 0;
|
||||
SIZE_T nLen = lstrlenW(wszCmd);
|
||||
|
||||
buffer = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*buffer) * (nLen + 1));
|
||||
wszDialogBoxName = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, sizeof(*wszDialogBoxName) * (nLen + 1));
|
||||
if (wszDialogBoxName == NULL || buffer == NULL)
|
||||
{
|
||||
if (buffer != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, buffer);
|
||||
if (wszDialogBoxName != NULL)
|
||||
HeapFree(GetProcessHeap(), 0, wszDialogBoxName);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Search for unquoted commas and spaces. */
|
||||
for (i = 0; i < nLen; i++)
|
||||
{
|
||||
if (quoted && wszCmd[i] != L'"')
|
||||
continue;
|
||||
switch (wszCmd[i])
|
||||
{
|
||||
case L'"':
|
||||
quoted = !quoted;
|
||||
break;
|
||||
case L',':
|
||||
if (!pchFirstComma)
|
||||
pchFirstComma = &wszCmd[i];
|
||||
else if (!pchSecondComma)
|
||||
pchSecondComma = &wszCmd[i];
|
||||
break;
|
||||
case L' ':
|
||||
pchLastUnquotedSpace = &wszCmd[i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/* If no unquoted commas are found, parameters are either space separated, or the entire string
|
||||
* is a CPL path. */
|
||||
if (!pchFirstComma)
|
||||
{
|
||||
/* An unquoted space was found in the string. Assume the last word is the dialog box
|
||||
* name/number. */
|
||||
if (pchLastUnquotedSpace)
|
||||
{
|
||||
int nSpaces = 0;
|
||||
|
||||
while (pchLastUnquotedSpace[nSpaces] == L' ')
|
||||
nSpaces++;
|
||||
|
||||
StringCchCopyNW(buffer, nLen + 1, wszCmd, pchLastUnquotedSpace - wszCmd);
|
||||
StringCchCopyW(wszDialogBoxName, nLen + 1, pchLastUnquotedSpace + nSpaces);
|
||||
}
|
||||
/* No parameters were passed, the entire string is the CPL path. */
|
||||
else
|
||||
{
|
||||
StringCchCopyW(buffer, nLen + 1, wszCmd);
|
||||
}
|
||||
}
|
||||
/* If an unquoted comma was found, there are at least two parts of the string:
|
||||
* - the CPL path
|
||||
* - either a dialog box number preceeded by @, or a dialog box name.
|
||||
* If there was a second unqoted comma, there is another part of the string:
|
||||
* - the rest of the parameters. */
|
||||
else
|
||||
{
|
||||
/* If there was no second unquoted comma in the string, the CPL path ends at thes
|
||||
* null terminator. */
|
||||
if (!pchSecondComma)
|
||||
pchSecondComma = wszCmd + nLen;
|
||||
|
||||
StringCchCopyNW(buffer, nLen + 1, wszCmd, pchFirstComma - wszCmd);
|
||||
StringCchCopyNW(wszDialogBoxName,
|
||||
nLen + 1,
|
||||
pchFirstComma + 1,
|
||||
pchSecondComma - pchFirstComma - 1);
|
||||
|
||||
if (pchSecondComma != wszCmd + nLen)
|
||||
{
|
||||
extraPmts = pchSecondComma + 1;
|
||||
}
|
||||
}
|
||||
|
||||
/* Remove the quotes from both buffers. */
|
||||
while ((ptr = StrChrW(buffer, '"')))
|
||||
memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
|
||||
|
||||
while ((ptr = StrChrW(wszDialogBoxName, '"')))
|
||||
memmove(ptr, ptr+1, lstrlenW(ptr)*sizeof(WCHAR));
|
||||
|
||||
if (wszDialogBoxName[0] == L'@')
|
||||
{
|
||||
sp = _wtoi(wszDialogBoxName + 1);
|
||||
}
|
||||
|
||||
TRACE("cmd %s, extra %s, sp %d\n", debugstr_w(buffer), debugstr_w(extraPmts), sp);
|
||||
|
||||
applet = Control_LoadApplet(hWnd, buffer, panel);
|
||||
if (applet)
|
||||
{
|
||||
ULONG_PTR cookie;
|
||||
BOOL bActivated;
|
||||
ATOM aCPLName;
|
||||
ATOM aCPLFlags;
|
||||
ATOM aCPLPath;
|
||||
AppDlgFindData findData;
|
||||
|
||||
/* we've been given a textual parameter (or none at all) */
|
||||
if (sp == -1)
|
||||
{
|
||||
while ((++sp) != applet->count)
|
||||
{
|
||||
TRACE("sp %d, name %s\n", sp, debugstr_w(applet->info[sp].name));
|
||||
|
||||
if (StrCmpIW(wszDialogBoxName, applet->info[sp].name) == 0)
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (sp >= applet->count && wszDialogBoxName[0] == L'\0')
|
||||
{
|
||||
sp = 0;
|
||||
}
|
||||
|
||||
bActivated = (applet->hActCtx != INVALID_HANDLE_VALUE ? ActivateActCtx(applet->hActCtx, &cookie) : FALSE);
|
||||
|
||||
if (sp < applet->count)
|
||||
{
|
||||
aCPLPath = GlobalFindAtomW(applet->cmd);
|
||||
if (!aCPLPath)
|
||||
aCPLPath = GlobalAddAtomW(applet->cmd);
|
||||
|
||||
aCPLName = GlobalFindAtomW(L"CPLName");
|
||||
if (!aCPLName)
|
||||
aCPLName = GlobalAddAtomW(L"CPLName");
|
||||
|
||||
aCPLFlags = GlobalFindAtomW(L"CPLFlags");
|
||||
if (!aCPLFlags)
|
||||
aCPLFlags = GlobalAddAtomW(L"CPLFlags");
|
||||
|
||||
findData.szAppFile = applet->cmd;
|
||||
findData.sAppletNo = (UINT_PTR)(sp + 1);
|
||||
findData.aCPLName = aCPLName;
|
||||
findData.aCPLFlags = aCPLFlags;
|
||||
findData.hRunDLL = applet->hWnd;
|
||||
findData.hDlgResult = NULL;
|
||||
// Find the dialog of this applet in the first instance.
|
||||
// Note: The simpler functions "FindWindow" or "FindWindowEx" does not find this type of dialogs.
|
||||
EnumWindows(Control_EnumWinProc, (LPARAM)&findData);
|
||||
if (findData.hDlgResult)
|
||||
{
|
||||
BringWindowToTop(findData.hDlgResult);
|
||||
}
|
||||
else
|
||||
{
|
||||
SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLName), (HANDLE)MAKEINTATOM(aCPLPath));
|
||||
SetPropW(applet->hWnd, (LPTSTR)MAKEINTATOM(aCPLFlags), UlongToHandle(sp + 1));
|
||||
Control_ShowAppletInTaskbar(applet, sp);
|
||||
|
||||
if (extraPmts[0] == L'\0' ||
|
||||
!applet->proc(applet->hWnd, CPL_STARTWPARMSW, sp, (LPARAM)extraPmts))
|
||||
{
|
||||
applet->proc(applet->hWnd, CPL_DBLCLK, sp, applet->info[sp].data);
|
||||
}
|
||||
|
||||
RemovePropW(applet->hWnd, applet->cmd);
|
||||
GlobalDeleteAtom(aCPLPath);
|
||||
}
|
||||
}
|
||||
|
||||
Control_UnloadApplet(applet);
|
||||
|
||||
if (bActivated)
|
||||
DeactivateActCtx(0, cookie);
|
||||
}
|
||||
|
||||
HeapFree(GetProcessHeap(), 0, buffer);
|
||||
HeapFree(GetProcessHeap(), 0, wszDialogBoxName);
|
||||
#endif
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
|
|
|
@ -2467,7 +2467,7 @@ FinishDlgProc(HWND hwndDlg,
|
|||
if (!SetupData->UnattendSetup || !SetupData->DisableGeckoInst)
|
||||
{
|
||||
/* Run the Wine Gecko prompt */
|
||||
Control_RunDLLW(hwndDlg, 0, L"appwiz.cpl install_gecko", SW_SHOW);
|
||||
Control_RunDLLW(hwndDlg, 0, L"appwiz.cpl,,install_gecko", SW_SHOW);
|
||||
}
|
||||
|
||||
/* Set title font */
|
||||
|
|
|
@ -16,7 +16,7 @@ URL: https://github.com/rdesktop/rdesktop
|
|||
Title: TreeList
|
||||
Path: base/setup/reactos/treelist.c
|
||||
Path: base/setup/reactos/treelist.h
|
||||
Used Version: ???
|
||||
Used Version: ??? (Imported on 2018.11.06: 2fdfb41 (0.4.11-dev-668))
|
||||
License: GPL-3.0-or-later (https://spdx.org/licenses/GPL-3.0-or-later.html)
|
||||
URL: https://github.com/sebkirche/treelist
|
||||
|
||||
|
@ -107,7 +107,7 @@ Path: base/services/nfsd
|
|||
Path: dll/3rdparty/libtirpc
|
||||
Path: dll/np/nfs
|
||||
Path: drivers/filesystems/nfs
|
||||
Used Version: ??? (Imported on 2017.06.18.)
|
||||
Used Version: ??? (Imported on 2017.06.18-19: 4008c7e (r75096), 42e5eee (r75105) and f445db2 (r75114))
|
||||
License: LGPL-2.1-or-later (https://spdx.org/licenses/LGPL-2.1-or-later.html)
|
||||
URL: http://www.citi.umich.edu/projects/nfsv4/windows/readme.html
|
||||
|
||||
|
@ -272,7 +272,7 @@ URL: http://www.zlib.net
|
|||
Title: chmc and lzxcomp
|
||||
Path: sdk/tools/hhpcomp/chmc
|
||||
Path: sdk/tools/hhpcomp/lzx_compress
|
||||
Used Version: ??? (Imported on 2015.08.11.)
|
||||
Used Version: ??? (Imported on 2015.08.11: 65780ec (r68685))
|
||||
License: GPL-3.0-or-later (https://spdx.org/licenses/GPL-3.0-or-later.html)
|
||||
URL: https://sourceforge.net/projects/chmc/
|
||||
|
||||
|
|
|
@ -1137,7 +1137,7 @@ list(APPEND SOURCE_MSVCRT
|
|||
# qsort_s
|
||||
# raise.c
|
||||
# rand.c
|
||||
# rand_s.c
|
||||
rand_s.c
|
||||
# realloc.c
|
||||
# remove.c
|
||||
# rename.c
|
||||
|
|
|
@ -0,0 +1,61 @@
|
|||
/*
|
||||
* PROJECT: ReactOS API Tests
|
||||
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||
* PURPOSE: Tests for rand_s
|
||||
* COPYRIGHT: Copyright 2024 Timo Kreuzer <timo.kreuzer@reactos.org>
|
||||
*/
|
||||
|
||||
#include <apitest.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#ifdef TEST_STATIC_CRT
|
||||
errno_t __cdecl rand_s(_Out_ unsigned int* _RandomValue);
|
||||
#endif
|
||||
|
||||
typedef int __cdecl rand_s_t(unsigned int*);
|
||||
rand_s_t *p_rand_s;
|
||||
|
||||
void test_rand_s_performance(void)
|
||||
{
|
||||
unsigned long long start, end;
|
||||
unsigned int val;
|
||||
int i;
|
||||
|
||||
start = __rdtsc();
|
||||
for (i = 0; i < 10000; i++)
|
||||
{
|
||||
p_rand_s(&val);
|
||||
}
|
||||
end = __rdtsc();
|
||||
printf("rand_s took %llu cycles\n", end - start);
|
||||
}
|
||||
|
||||
START_TEST(rand_s)
|
||||
{
|
||||
unsigned int val;
|
||||
int ret;
|
||||
|
||||
#ifndef TEST_STATIC_CRT
|
||||
/* Dynamically load rand_s from mvcrt */
|
||||
HMODULE msvcrt = GetModuleHandleA("msvcrt");
|
||||
p_rand_s = (rand_s_t*)GetProcAddress(msvcrt, "rand_s");
|
||||
if (!p_rand_s)
|
||||
{
|
||||
win_skip("rand_s is not available\n");
|
||||
return;
|
||||
}
|
||||
#else
|
||||
p_rand_s = rand_s;
|
||||
#endif
|
||||
|
||||
/* Test performance */
|
||||
test_rand_s_performance();
|
||||
|
||||
/* Test with NULL pointer */
|
||||
ret = p_rand_s(NULL);
|
||||
ok(ret == EINVAL, "Expected EINVAL, got %d\n", ret);
|
||||
|
||||
/* Test with valid pointer */
|
||||
ret = p_rand_s(&val);
|
||||
ok(ret == 0, "Expected 0, got %d\n", ret);
|
||||
}
|
|
@ -13,6 +13,7 @@ list(APPEND SOURCE_STATIC
|
|||
fpcontrol.c
|
||||
mbstowcs.c
|
||||
mbtowc.c
|
||||
rand_s.c
|
||||
sprintf.c
|
||||
strcpy.c
|
||||
strlen.c
|
||||
|
|
|
@ -32,6 +32,7 @@ extern void func__vsnprintf(void);
|
|||
extern void func__vsnwprintf(void);
|
||||
extern void func_mbstowcs(void);
|
||||
extern void func_mbtowc(void);
|
||||
extern void func_rand_s(void);
|
||||
extern void func_sprintf(void);
|
||||
extern void func_strcpy(void);
|
||||
extern void func_strlen(void);
|
||||
|
@ -79,6 +80,7 @@ const struct test winetest_testlist[] =
|
|||
{ "ceil", func_ceil },
|
||||
{ "fabs", func_fabs },
|
||||
{ "floor", func_floor },
|
||||
{ "rand_s", func_rand_s },
|
||||
#ifdef _M_AMD64 // x86 / arm need fixing
|
||||
{ "fpcontrol", func_fpcontrol },
|
||||
#endif
|
||||
|
|
|
@ -22,6 +22,7 @@ list(APPEND SOURCE
|
|||
interlck.c
|
||||
IsDBCSLeadByteEx.c
|
||||
JapaneseCalendar.c
|
||||
LCMapString.c
|
||||
LoadLibraryExW.c
|
||||
lstrcpynW.c
|
||||
lstrlen.c
|
||||
|
|
|
@ -0,0 +1,60 @@
|
|||
/*
|
||||
* PROJECT: ReactOS api tests
|
||||
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
|
||||
* PURPOSE: Tests for LCMapString
|
||||
* COPYRIGHT: Copyright 2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
*/
|
||||
|
||||
#include "precomp.h"
|
||||
|
||||
#undef ok_wstr_
|
||||
|
||||
static void
|
||||
ok_wstr_(const char *file, int line, LPCWSTR x, LPCWSTR y)
|
||||
{
|
||||
char buf1[100], buf2[100];
|
||||
lstrcpynA(buf1, wine_dbgstr_w(x), _countof(buf1));
|
||||
lstrcpynA(buf2, wine_dbgstr_w(y), _countof(buf2));
|
||||
ok_(file, line)(wcscmp(x, y) == 0, "Wrong string. Expected %s, got %s\n", buf2, buf1);
|
||||
}
|
||||
|
||||
#undef ok_wstr
|
||||
#define ok_wstr(x, y) ok_wstr_(__FILE__, __LINE__, x, y)
|
||||
|
||||
// "ABab12ABab12あアばバパ万萬" in UTF-16
|
||||
static const WCHAR c_target[] =
|
||||
L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x4e07\x842c";
|
||||
|
||||
static void TEST_LCMapStringW(void)
|
||||
{
|
||||
WCHAR results[100];
|
||||
|
||||
LCMapStringW(0, LCMAP_FULLWIDTH, c_target, -1, results, _countof(results));
|
||||
ok_wstr(results, L"\xff21\xff22\xff41\xff42\xff11\xff12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\x30d1\x4e07\x842c");
|
||||
|
||||
LCMapStringW(0, LCMAP_HALFWIDTH, c_target, -1, results, _countof(results));
|
||||
ok_wstr(results, L"ABab12ABab12\x3042\xff71\x3070\xff8a\xff9e\xff8a\xff9f\x4e07\x842c");
|
||||
|
||||
LCMapStringW(0, LCMAP_HIRAGANA, c_target, -1, results, _countof(results));
|
||||
ok_wstr(results, L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x3042\x3070\x3070\xff8a\xff9f\x4e07\x842c");
|
||||
|
||||
LCMapStringW(0, LCMAP_KATAKANA, c_target, -1, results, _countof(results));
|
||||
ok_wstr(results, L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x30a2\x30a2\x30d0\x30d0\xff8a\xff9f\x4e07\x842c");
|
||||
|
||||
LCMapStringW(0, LCMAP_LOWERCASE, c_target, -1, results, _countof(results));
|
||||
ok_wstr(results, L"abab12\xff41\xff42\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x4e07\x842c");
|
||||
|
||||
LCMapStringW(0, LCMAP_UPPERCASE, c_target, -1, results, _countof(results));
|
||||
ok_wstr(results, L"ABAB12\xff21\xff22\xff21\xff22\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x4e07\x842c");
|
||||
|
||||
LCMapStringW(0, LCMAP_SIMPLIFIED_CHINESE, c_target, -1, results, _countof(results));
|
||||
ok_wstr(results, L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x4e07\x4e07");
|
||||
|
||||
LCMapStringW(0, LCMAP_TRADITIONAL_CHINESE, c_target, -1, results, _countof(results));
|
||||
ok_wstr(results, L"ABab12\xff21\xff22\xff41\xff42\xff11\xff12\x3042\x30a2\x3070\x30d0\xff8a\xff9f\x842c\x842c");
|
||||
}
|
||||
|
||||
START_TEST(LCMapString)
|
||||
{
|
||||
TEST_LCMapStringW();
|
||||
}
|
|
@ -22,6 +22,7 @@ extern void func_InitOnce(void);
|
|||
extern void func_interlck(void);
|
||||
extern void func_IsDBCSLeadByteEx(void);
|
||||
extern void func_JapaneseCalendar(void);
|
||||
extern void func_LCMapString(void);
|
||||
extern void func_LoadLibraryExW(void);
|
||||
extern void func_lstrcpynW(void);
|
||||
extern void func_lstrlen(void);
|
||||
|
@ -59,6 +60,7 @@ const struct test winetest_testlist[] =
|
|||
{ "interlck", func_interlck },
|
||||
{ "IsDBCSLeadByteEx", func_IsDBCSLeadByteEx },
|
||||
{ "JapaneseCalendar", func_JapaneseCalendar },
|
||||
{ "LCMapString", func_LCMapString },
|
||||
{ "LoadLibraryExW", func_LoadLibraryExW },
|
||||
{ "lstrcpynW", func_lstrcpynW },
|
||||
{ "lstrlen", func_lstrlen },
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -256,27 +256,6 @@ static WCHAR s_win_test_exe[MAX_PATH];
|
|||
static WCHAR s_sys_bat_file[MAX_PATH];
|
||||
static WCHAR s_cur_dir[MAX_PATH];
|
||||
|
||||
static BOOL
|
||||
GetSubProgramPath(void)
|
||||
{
|
||||
GetModuleFileNameW(NULL, s_sub_program, _countof(s_sub_program));
|
||||
PathRemoveFileSpecW(s_sub_program);
|
||||
PathAppendW(s_sub_program, L"shell32_apitest_sub.exe");
|
||||
|
||||
if (!PathFileExistsW(s_sub_program))
|
||||
{
|
||||
PathRemoveFileSpecW(s_sub_program);
|
||||
PathAppendW(s_sub_program, L"testdata\\shell32_apitest_sub.exe");
|
||||
|
||||
if (!PathFileExistsW(s_sub_program))
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
}
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static const TEST_ENTRY s_entries_1[] =
|
||||
{
|
||||
// NULL
|
||||
|
@ -462,11 +441,6 @@ static const TEST_ENTRY s_entries_1[] =
|
|||
{ __LINE__, TRUE, TRUE, L"shell:::{450d8fba-ad25-11d0-98a8-0800361b1103}", NULL },
|
||||
// shell:sendto
|
||||
{ __LINE__, TRUE, TRUE, L"shell:sendto", NULL },
|
||||
// iexplore.exe
|
||||
{ __LINE__, TRUE, FALSE, L"iexplore", NULL },
|
||||
{ __LINE__, TRUE, FALSE, L"iexplore.exe", NULL },
|
||||
{ __LINE__, TRUE, TRUE, L"iexplore", NULL },
|
||||
{ __LINE__, TRUE, TRUE, L"iexplore.exe", NULL },
|
||||
// https://google.com
|
||||
{ __LINE__, TRUE, FALSE, L"https://google.com", NULL },
|
||||
{ __LINE__, TRUE, TRUE, L"https://google.com", NULL },
|
||||
|
@ -677,7 +651,7 @@ START_TEST(ShellExecCmdLine)
|
|||
}
|
||||
}
|
||||
|
||||
if (!GetSubProgramPath())
|
||||
if (!FindSubProgram(s_sub_program, _countof(s_sub_program)))
|
||||
{
|
||||
skip("shell32_apitest_sub.exe is not found\n");
|
||||
return;
|
||||
|
@ -747,6 +721,6 @@ START_TEST(ShellExecCmdLine)
|
|||
ok(DeleteFileA("Test File 2.bat"), "failed to delete the test file\n");
|
||||
free(s_wi0.phwnd);
|
||||
|
||||
DoWaitForWindow(CLASSNAME, CLASSNAME, TRUE, TRUE);
|
||||
DoWaitForWindow(SUB_CLASSNAME, SUB_CLASSNAME, TRUE, TRUE);
|
||||
Sleep(100);
|
||||
}
|
||||
|
|
|
@ -2,150 +2,299 @@
|
|||
* PROJECT: ReactOS api tests
|
||||
* LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
|
||||
* PURPOSE: Test for SHChangeNotify
|
||||
* COPYRIGHT: Copyright 2020 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
* COPYRIGHT: Copyright 2020-2024 Katayama Hirofumi MZ (katayama.hirofumi.mz@gmail.com)
|
||||
*/
|
||||
|
||||
// This program is used in SHChangeNotify and ShellExecCmdLine testcases.
|
||||
|
||||
#include "shelltest.h"
|
||||
#include "shell32_apitest_sub.h"
|
||||
#include <assert.h>
|
||||
|
||||
static HWND s_hwnd = NULL;
|
||||
typedef enum DIRTYPE
|
||||
{
|
||||
DIRTYPE_DESKTOP = 0,
|
||||
DIRTYPE_DESKTOP_DIR,
|
||||
DIRTYPE_DRIVES,
|
||||
DIRTYPE_PRINTERS,
|
||||
DIRTYPE_DIR1,
|
||||
DIRTYPE_MAX
|
||||
} DIRTYPE;
|
||||
|
||||
static HWND s_hMainWnd = NULL, s_hSubWnd = NULL;
|
||||
static LPITEMIDLIST s_pidl[DIRTYPE_MAX];
|
||||
static UINT s_uRegID = 0;
|
||||
static BOOL s_fRecursive = FALSE;
|
||||
static DIRTYPE s_iWatchDir = DIRTYPE_NULL;
|
||||
static INT s_nSources = 0;
|
||||
static LPITEMIDLIST s_pidl = NULL;
|
||||
static WCHAR s_path1[MAX_PATH], s_path2[MAX_PATH];
|
||||
static BYTE s_counters[TYPE_MAX + 1];
|
||||
static HANDLE s_hEvent = NULL;
|
||||
static INT s_iStage = -1;
|
||||
|
||||
static BOOL
|
||||
OnCreate(HWND hwnd)
|
||||
#define EVENTS (SHCNE_CREATE | SHCNE_DELETE | SHCNE_MKDIR | SHCNE_RMDIR | \
|
||||
SHCNE_RENAMEFOLDER | SHCNE_RENAMEITEM | SHCNE_UPDATEDIR | SHCNE_UPDATEITEM)
|
||||
|
||||
inline LPITEMIDLIST DoGetPidl(INT iDir)
|
||||
{
|
||||
s_hwnd = hwnd;
|
||||
s_pidl = DoGetPidl(s_iWatchDir);
|
||||
LPITEMIDLIST ret = NULL;
|
||||
|
||||
SHChangeNotifyEntry entry;
|
||||
entry.pidl = s_pidl;
|
||||
entry.fRecursive = s_fRecursive;
|
||||
s_uRegID = SHChangeNotifyRegister(hwnd, s_nSources, SHCNE_ALLEVENTS, WM_SHELL_NOTIFY, 1, &entry);
|
||||
return s_uRegID != 0;
|
||||
}
|
||||
|
||||
static void
|
||||
OnCommand(HWND hwnd, UINT id)
|
||||
{
|
||||
switch (id)
|
||||
switch (iDir)
|
||||
{
|
||||
case IDOK:
|
||||
case IDCANCEL:
|
||||
DestroyWindow(hwnd);
|
||||
case DIRTYPE_DESKTOP:
|
||||
{
|
||||
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ret);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
OnDestroy(HWND hwnd)
|
||||
{
|
||||
SHChangeNotifyDeregister(s_uRegID);
|
||||
s_uRegID = 0;
|
||||
|
||||
CoTaskMemFree(s_pidl);
|
||||
s_pidl = NULL;
|
||||
|
||||
PostQuitMessage(0);
|
||||
s_hwnd = NULL;
|
||||
}
|
||||
|
||||
static BOOL DoPathes(PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2)
|
||||
{
|
||||
WCHAR path[MAX_PATH];
|
||||
if (!SHGetPathFromIDListW(pidl1, path))
|
||||
{
|
||||
s_path1[0] = s_path2[0] = 0;
|
||||
return FALSE;
|
||||
}
|
||||
case DIRTYPE_DESKTOP_DIR:
|
||||
{
|
||||
WCHAR szPath1[MAX_PATH];
|
||||
SHGetSpecialFolderPathW(NULL, szPath1, CSIDL_DESKTOPDIRECTORY, FALSE);
|
||||
ret = ILCreateFromPathW(szPath1);
|
||||
break;
|
||||
}
|
||||
case DIRTYPE_DRIVES:
|
||||
{
|
||||
SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &ret);
|
||||
break;
|
||||
}
|
||||
case DIRTYPE_PRINTERS:
|
||||
{
|
||||
SHGetSpecialFolderLocation(NULL, CSIDL_PRINTERS, &ret);
|
||||
break;
|
||||
}
|
||||
case DIRTYPE_DIR1:
|
||||
{
|
||||
WCHAR szPath1[MAX_PATH];
|
||||
SHGetSpecialFolderPathW(NULL, szPath1, CSIDL_PERSONAL, FALSE); // My Documents
|
||||
PathAppendW(szPath1, L"_TESTDIR_1_");
|
||||
ret = ILCreateFromPathW(szPath1);
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (wcsstr(path, L"Recent") != NULL)
|
||||
return FALSE;
|
||||
return ret;
|
||||
}
|
||||
|
||||
StringCchCopyW(s_path1, _countof(s_path1), path);
|
||||
static BOOL OnCreate(HWND hwnd)
|
||||
{
|
||||
s_hSubWnd = hwnd;
|
||||
|
||||
if (!SHGetPathFromIDListW(pidl2, s_path2))
|
||||
s_path2[0] = 0;
|
||||
for (INT i = 0; i < DIRTYPE_MAX; ++i)
|
||||
s_pidl[i] = DoGetPidl(i);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static VOID DoPathesAndFlags(UINT type, PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2)
|
||||
static BOOL InitSHCN(HWND hwnd)
|
||||
{
|
||||
if (DoPathes(pidl1, pidl2))
|
||||
{
|
||||
s_counters[type] = 1;
|
||||
SetEvent(s_hEvent);
|
||||
}
|
||||
}
|
||||
assert(0 <= s_iStage);
|
||||
assert(s_iStage < NUM_STAGE);
|
||||
|
||||
static void
|
||||
DoShellNotify(HWND hwnd, PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2, LONG lEvent)
|
||||
{
|
||||
switch (lEvent)
|
||||
SHChangeNotifyEntry entry;
|
||||
INT sources;
|
||||
LONG events;
|
||||
switch (s_iStage)
|
||||
{
|
||||
case SHCNE_RENAMEITEM:
|
||||
DoPathesAndFlags(TYPE_RENAMEITEM, pidl1, pidl2);
|
||||
case 0:
|
||||
{
|
||||
entry.fRecursive = FALSE;
|
||||
entry.pidl = NULL;
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_CREATE:
|
||||
DoPathesAndFlags(TYPE_CREATE, pidl1, pidl2);
|
||||
}
|
||||
case 1:
|
||||
{
|
||||
entry.fRecursive = TRUE;
|
||||
entry.pidl = NULL;
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_DELETE:
|
||||
DoPathesAndFlags(TYPE_DELETE, pidl1, pidl2);
|
||||
}
|
||||
case 2:
|
||||
{
|
||||
entry.fRecursive = FALSE;
|
||||
entry.pidl = s_pidl[DIRTYPE_DESKTOP];
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_MKDIR:
|
||||
DoPathesAndFlags(TYPE_MKDIR, pidl1, pidl2);
|
||||
}
|
||||
case 3:
|
||||
{
|
||||
entry.fRecursive = TRUE;
|
||||
entry.pidl = s_pidl[DIRTYPE_DESKTOP];
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_RMDIR:
|
||||
DoPathesAndFlags(TYPE_RMDIR, pidl1, pidl2);
|
||||
}
|
||||
case 4:
|
||||
{
|
||||
entry.fRecursive = TRUE;
|
||||
entry.pidl = s_pidl[DIRTYPE_DESKTOP_DIR];
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_MEDIAINSERTED:
|
||||
}
|
||||
case 5:
|
||||
{
|
||||
entry.fRecursive = FALSE;
|
||||
entry.pidl = s_pidl[DIRTYPE_DRIVES];
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_MEDIAREMOVED:
|
||||
}
|
||||
case 6:
|
||||
{
|
||||
entry.fRecursive = TRUE;
|
||||
entry.pidl = s_pidl[DIRTYPE_DRIVES];
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_DRIVEREMOVED:
|
||||
}
|
||||
case 7:
|
||||
{
|
||||
entry.fRecursive = TRUE;
|
||||
entry.pidl = s_pidl[DIRTYPE_PRINTERS];
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_DRIVEADD:
|
||||
}
|
||||
case 8:
|
||||
{
|
||||
entry.fRecursive = FALSE;
|
||||
entry.pidl = s_pidl[DIRTYPE_DIR1];
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel;
|
||||
events = EVENTS;
|
||||
break;
|
||||
case SHCNE_NETSHARE:
|
||||
break;
|
||||
case SHCNE_NETUNSHARE:
|
||||
break;
|
||||
case SHCNE_ATTRIBUTES:
|
||||
break;
|
||||
case SHCNE_UPDATEDIR:
|
||||
DoPathesAndFlags(TYPE_UPDATEDIR, pidl1, pidl2);
|
||||
break;
|
||||
case SHCNE_UPDATEITEM:
|
||||
break;
|
||||
case SHCNE_SERVERDISCONNECT:
|
||||
break;
|
||||
case SHCNE_UPDATEIMAGE:
|
||||
break;
|
||||
case SHCNE_DRIVEADDGUI:
|
||||
break;
|
||||
case SHCNE_RENAMEFOLDER:
|
||||
DoPathesAndFlags(TYPE_RENAMEFOLDER, pidl1, pidl2);
|
||||
break;
|
||||
case SHCNE_FREESPACE:
|
||||
break;
|
||||
case SHCNE_EXTENDED_EVENT:
|
||||
break;
|
||||
case SHCNE_ASSOCCHANGED:
|
||||
}
|
||||
case 9:
|
||||
{
|
||||
entry.fRecursive = TRUE;
|
||||
entry.pidl = s_pidl[DIRTYPE_DIR1];
|
||||
sources = SHCNRF_NewDelivery | SHCNRF_ShellLevel | SHCNRF_InterruptLevel |
|
||||
SHCNRF_RecursiveInterrupt;
|
||||
events = EVENTS;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
{
|
||||
assert(0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
s_uRegID = SHChangeNotifyRegister(hwnd, sources, events, WM_SHELL_NOTIFY, 1, &entry);
|
||||
if (s_uRegID == 0)
|
||||
return FALSE;
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static void UnInitSHCN(HWND hwnd)
|
||||
{
|
||||
if (s_uRegID)
|
||||
{
|
||||
SHChangeNotifyDeregister(s_uRegID);
|
||||
s_uRegID = 0;
|
||||
}
|
||||
}
|
||||
|
||||
static INT_PTR
|
||||
OnShellNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
static void OnCommand(HWND hwnd, UINT id)
|
||||
{
|
||||
switch (id)
|
||||
{
|
||||
case IDYES: // Start testing
|
||||
{
|
||||
s_hMainWnd = ::FindWindow(MAIN_CLASSNAME, MAIN_CLASSNAME);
|
||||
if (!s_hMainWnd)
|
||||
{
|
||||
::DestroyWindow(hwnd);
|
||||
break;
|
||||
}
|
||||
s_iStage = 0;
|
||||
InitSHCN(hwnd);
|
||||
::PostMessageW(s_hMainWnd, WM_COMMAND, IDYES, 0);
|
||||
break;
|
||||
}
|
||||
case IDRETRY: // New stage
|
||||
{
|
||||
UnInitSHCN(hwnd);
|
||||
++s_iStage;
|
||||
InitSHCN(hwnd);
|
||||
::PostMessageW(s_hMainWnd, WM_COMMAND, IDRETRY, 0);
|
||||
break;
|
||||
}
|
||||
case IDNO: // Quit
|
||||
{
|
||||
s_iStage = -1;
|
||||
UnInitSHCN(hwnd);
|
||||
::DestroyWindow(hwnd);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void OnDestroy(HWND hwnd)
|
||||
{
|
||||
UnInitSHCN(hwnd);
|
||||
|
||||
for (auto& pidl : s_pidl)
|
||||
{
|
||||
CoTaskMemFree(pidl);
|
||||
pidl = NULL;
|
||||
}
|
||||
|
||||
::PostMessageW(s_hMainWnd, WM_COMMAND, IDNO, 0);
|
||||
|
||||
PostQuitMessage(0);
|
||||
}
|
||||
|
||||
static BOOL DoSendData(LONG lEvent, LPCITEMIDLIST pidl1, LPCITEMIDLIST pidl2)
|
||||
{
|
||||
DWORD cbPidl1 = ILGetSize(pidl1), cbPidl2 = ILGetSize(pidl2);
|
||||
DWORD cbTotal = sizeof(lEvent) + sizeof(cbPidl1) + sizeof(cbPidl2) + cbPidl1 + cbPidl2;
|
||||
LPBYTE pbData = (LPBYTE)::LocalAlloc(LPTR, cbTotal);
|
||||
if (!pbData)
|
||||
return FALSE;
|
||||
|
||||
LPBYTE pb = pbData;
|
||||
|
||||
*(LONG*)pb = lEvent;
|
||||
pb += sizeof(lEvent);
|
||||
|
||||
*(DWORD*)pb = cbPidl1;
|
||||
pb += sizeof(cbPidl1);
|
||||
|
||||
*(DWORD*)pb = cbPidl2;
|
||||
pb += sizeof(cbPidl2);
|
||||
|
||||
CopyMemory(pb, pidl1, cbPidl1);
|
||||
pb += cbPidl1;
|
||||
|
||||
CopyMemory(pb, pidl2, cbPidl2);
|
||||
pb += cbPidl2;
|
||||
|
||||
assert(INT(pb - pbData) == INT(cbTotal));
|
||||
|
||||
COPYDATASTRUCT CopyData;
|
||||
CopyData.dwData = 0xBEEFCAFE;
|
||||
CopyData.cbData = cbTotal;
|
||||
CopyData.lpData = pbData;
|
||||
BOOL ret = (BOOL)::SendMessageW(s_hMainWnd, WM_COPYDATA, (WPARAM)s_hSubWnd, (LPARAM)&CopyData);
|
||||
|
||||
::LocalFree(pbData);
|
||||
return ret;
|
||||
}
|
||||
|
||||
static void DoShellNotify(HWND hwnd, PIDLIST_ABSOLUTE pidl1, PIDLIST_ABSOLUTE pidl2, LONG lEvent)
|
||||
{
|
||||
if (s_iStage < 0)
|
||||
return;
|
||||
|
||||
DoSendData(lEvent, pidl1, pidl2);
|
||||
}
|
||||
|
||||
static INT_PTR OnShellNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
LONG lEvent;
|
||||
PIDLIST_ABSOLUTE *pidlAbsolute;
|
||||
|
@ -163,40 +312,7 @@ OnShellNotify(HWND hwnd, WPARAM wParam, LPARAM lParam)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
static LRESULT
|
||||
OnGetNotifyFlags(HWND hwnd)
|
||||
{
|
||||
if (s_uRegID == 0)
|
||||
return 0xFFFFFFFF;
|
||||
|
||||
DWORD dwFlags = 0;
|
||||
for (size_t i = 0; i < _countof(s_counters); ++i)
|
||||
{
|
||||
if (s_counters[i])
|
||||
dwFlags |= (1 << i);
|
||||
}
|
||||
return dwFlags;
|
||||
}
|
||||
|
||||
static void
|
||||
DoSetPaths(HWND hwnd)
|
||||
{
|
||||
WCHAR szText[MAX_PATH * 2];
|
||||
StringCchCopyW(szText, _countof(szText), s_path1);
|
||||
StringCchCatW(szText, _countof(szText), L"|");
|
||||
StringCchCatW(szText, _countof(szText), s_path2);
|
||||
|
||||
FILE *fp = _wfopen(TEMP_FILE, L"wb");
|
||||
if (fp)
|
||||
{
|
||||
fwrite(szText, (wcslen(szText) + 1) * sizeof(WCHAR), 1, fp);
|
||||
fflush(fp);
|
||||
fclose(fp);
|
||||
}
|
||||
}
|
||||
|
||||
static LRESULT CALLBACK
|
||||
WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
static LRESULT CALLBACK SubWindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
switch (uMsg)
|
||||
{
|
||||
|
@ -214,73 +330,42 @@ WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
OnDestroy(hwnd);
|
||||
break;
|
||||
|
||||
case WM_GET_NOTIFY_FLAGS:
|
||||
return OnGetNotifyFlags(hwnd);
|
||||
|
||||
case WM_CLEAR_FLAGS:
|
||||
ZeroMemory(&s_counters, sizeof(s_counters));
|
||||
s_path1[0] = s_path2[0] = 0;
|
||||
break;
|
||||
|
||||
case WM_SET_PATHS:
|
||||
DoSetPaths(hwnd);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
||||
return ::DefWindowProcW(hwnd, uMsg, wParam, lParam);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static BOOL ParseCommandLine(LPWSTR lpCmdLine)
|
||||
{
|
||||
LPWSTR pch = lpCmdLine; // fRecursive,iWatchDir,nSources
|
||||
s_fRecursive = !!wcstoul(pch, NULL, 0);
|
||||
pch = wcschr(pch, L',');
|
||||
if (!pch)
|
||||
return FALSE;
|
||||
++pch;
|
||||
|
||||
s_iWatchDir = (DIRTYPE)wcstoul(pch, NULL, 0);
|
||||
pch = wcschr(pch, L',');
|
||||
if (!pch)
|
||||
return FALSE;
|
||||
++pch;
|
||||
|
||||
s_nSources = wcstoul(pch, NULL, 0);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
INT APIENTRY
|
||||
wWinMain(HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPWSTR lpCmdLine,
|
||||
INT nCmdShow)
|
||||
wWinMain(
|
||||
HINSTANCE hInstance,
|
||||
HINSTANCE hPrevInstance,
|
||||
LPWSTR lpCmdLine,
|
||||
INT nCmdShow)
|
||||
{
|
||||
if (lstrcmpiW(lpCmdLine, L"") == 0 || lstrcmpiW(lpCmdLine, L"TEST") == 0)
|
||||
return 0;
|
||||
|
||||
if (!ParseCommandLine(lpCmdLine))
|
||||
return -1;
|
||||
|
||||
s_hEvent = OpenEventW(EVENT_ALL_ACCESS, TRUE, EVENT_NAME);
|
||||
|
||||
WNDCLASSW wc;
|
||||
ZeroMemory(&wc, sizeof(wc));
|
||||
wc.lpfnWndProc = WindowProc;
|
||||
wc.hInstance = GetModuleHandleW(NULL);
|
||||
wc.hIcon = LoadIcon(NULL, IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursor(NULL, IDC_ARROW);
|
||||
WNDCLASSW wc = { 0, SubWindowProc };
|
||||
wc.hInstance = hInstance;
|
||||
wc.hIcon = LoadIconW(NULL, IDI_APPLICATION);
|
||||
wc.hCursor = LoadCursorW(NULL, IDC_ARROW);
|
||||
wc.hbrBackground = (HBRUSH)(COLOR_3DFACE + 1);
|
||||
wc.lpszClassName = CLASSNAME;
|
||||
wc.lpszClassName = SUB_CLASSNAME;
|
||||
if (!RegisterClassW(&wc))
|
||||
{
|
||||
assert(0);
|
||||
return -1;
|
||||
}
|
||||
|
||||
HWND hwnd = CreateWindowW(CLASSNAME, CLASSNAME, WS_OVERLAPPEDWINDOW,
|
||||
HWND hwnd = CreateWindowW(SUB_CLASSNAME, SUB_CLASSNAME, WS_OVERLAPPEDWINDOW,
|
||||
CW_USEDEFAULT, CW_USEDEFAULT, 400, 100,
|
||||
NULL, NULL, GetModuleHandleW(NULL), NULL);
|
||||
NULL, NULL, hInstance, NULL);
|
||||
if (!hwnd)
|
||||
return -1;
|
||||
{
|
||||
assert(0);
|
||||
return -2;
|
||||
}
|
||||
|
||||
ShowWindow(hwnd, SW_SHOWNORMAL);
|
||||
UpdateWindow(hwnd);
|
||||
|
@ -292,7 +377,5 @@ wWinMain(HINSTANCE hInstance,
|
|||
DispatchMessageW(&msg);
|
||||
}
|
||||
|
||||
CloseHandle(s_hEvent);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -5,71 +5,29 @@
|
|||
#include <stdio.h>
|
||||
#include <strsafe.h>
|
||||
|
||||
#define TEMP_FILE L"shell-notify-temporary.txt"
|
||||
#define CLASSNAME L"SHChangeNotify testcase window"
|
||||
#define EVENT_NAME L"SHChangeNotify testcase event"
|
||||
#define MAIN_CLASSNAME L"SHChangeNotify main window"
|
||||
#define SUB_CLASSNAME L"SHChangeNotify sub-window"
|
||||
|
||||
#define WM_SHELL_NOTIFY (WM_USER + 100)
|
||||
#define WM_GET_NOTIFY_FLAGS (WM_USER + 101)
|
||||
#define WM_CLEAR_FLAGS (WM_USER + 102)
|
||||
#define WM_SET_PATHS (WM_USER + 103)
|
||||
|
||||
typedef enum TYPE
|
||||
#define NUM_STAGE 10
|
||||
|
||||
static inline BOOL FindSubProgram(LPWSTR pszSubProgram, DWORD cchSubProgram)
|
||||
{
|
||||
TYPE_RENAMEITEM,
|
||||
TYPE_CREATE,
|
||||
TYPE_DELETE,
|
||||
TYPE_MKDIR,
|
||||
TYPE_RMDIR,
|
||||
TYPE_RENAMEFOLDER,
|
||||
TYPE_UPDATEDIR,
|
||||
TYPE_MAX = TYPE_UPDATEDIR
|
||||
} TYPE;
|
||||
GetModuleFileNameW(NULL, pszSubProgram, cchSubProgram);
|
||||
PathRemoveFileSpecW(pszSubProgram);
|
||||
PathAppendW(pszSubProgram, L"shell32_apitest_sub.exe");
|
||||
|
||||
typedef enum DIRTYPE
|
||||
{
|
||||
DIRTYPE_NULL = 0,
|
||||
DIRTYPE_DESKTOP,
|
||||
DIRTYPE_MYCOMPUTER,
|
||||
DIRTYPE_MYDOCUMENTS
|
||||
} DIRTYPE;
|
||||
|
||||
inline LPITEMIDLIST DoGetPidl(DIRTYPE iDir)
|
||||
{
|
||||
LPITEMIDLIST ret = NULL;
|
||||
|
||||
switch (iDir)
|
||||
if (!PathFileExistsW(pszSubProgram))
|
||||
{
|
||||
case DIRTYPE_NULL:
|
||||
break;
|
||||
PathRemoveFileSpecW(pszSubProgram);
|
||||
PathAppendW(pszSubProgram, L"testdata\\shell32_apitest_sub.exe");
|
||||
|
||||
case DIRTYPE_DESKTOP:
|
||||
SHGetSpecialFolderLocation(NULL, CSIDL_DESKTOP, &ret);
|
||||
break;
|
||||
|
||||
case DIRTYPE_MYCOMPUTER:
|
||||
SHGetSpecialFolderLocation(NULL, CSIDL_DRIVES, &ret);
|
||||
break;
|
||||
|
||||
case DIRTYPE_MYDOCUMENTS:
|
||||
SHGetSpecialFolderLocation(NULL, CSIDL_PERSONAL, &ret);
|
||||
break;
|
||||
if (!PathFileExistsW(pszSubProgram))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline LPWSTR DoGetDir(DIRTYPE iDir)
|
||||
{
|
||||
static size_t s_index = 0;
|
||||
static WCHAR s_pathes[3][MAX_PATH];
|
||||
LPWSTR psz = s_pathes[s_index];
|
||||
LPITEMIDLIST pidl = DoGetPidl(iDir);
|
||||
psz[0] = 0;
|
||||
SHGetPathFromIDListW(pidl, psz);
|
||||
CoTaskMemFree(pidl);
|
||||
s_index = (s_index + 1) % _countof(s_pathes);
|
||||
return psz;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static inline HWND DoWaitForWindow(LPCWSTR clsname, LPCWSTR text, BOOL bClosing, BOOL bForce)
|
||||
|
|
|
@ -2,4 +2,4 @@
|
|||
add_subdirectory(win32u_ros)
|
||||
add_subdirectory(win32u_xpsp2)
|
||||
add_subdirectory(win32u_2k3sp2)
|
||||
#add_subdirectory(win32u_vista)
|
||||
add_subdirectory(win32u_vista)
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
|
||||
spec2def(win32u_vista.spec win32u_vista.spec ADD_IMPORTLIB)
|
||||
add_asm_files(win32u_vista_asm win32u_vista.S)
|
||||
spec2def(win32u_vista.dll win32u_vista.spec ADD_IMPORTLIB)
|
||||
add_asm_files(win32u_vista_asm sys-stubs.S)
|
||||
|
||||
add_library(win32u_vista MODULE
|
||||
main.c
|
||||
|
@ -9,3 +9,8 @@ add_library(win32u_vista MODULE
|
|||
|
||||
set_module_type(win32u_vista module)
|
||||
add_dependencies(win32u_vista psdk)
|
||||
add_rostests_file(TARGET win32u_vista)
|
||||
|
||||
if (STACK_PROTECTOR)
|
||||
target_compile_options(win32u_vista PRIVATE -fno-stack-protector)
|
||||
endif()
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
|
||||
#include <syscalls.inc>
|
||||
|
||||
#ifdef _M_ARM
|
||||
|
||||
TEXTAREA
|
||||
|
||||
#define SVC_(name, argcount) STUB_U name
|
||||
|
||||
#include "w32ksvc32.h"
|
||||
|
||||
END
|
||||
|
||||
#else
|
||||
|
||||
.code
|
||||
|
||||
SyscallId = HEX(1000)
|
||||
#define SVC_(name, argcount) STUB_U name, argcount
|
||||
|
||||
#ifdef _WIN64
|
||||
#include "w32ksvc64.h"
|
||||
#else
|
||||
#include "w32ksvc32.h"
|
||||
#endif
|
||||
|
||||
END
|
||||
#endif
|
||||
|
|
@ -0,0 +1,777 @@
|
|||
// SVC_(<NAME>, <ARG_COUNT>)
|
||||
//
|
||||
// Funcs order should match Windows Vista Service Pack 2 x86 Free
|
||||
// Note: these MUST be indented for the ARM assembler!
|
||||
//
|
||||
SVC_(GdiAbortDoc, 1) // 0x1000
|
||||
SVC_(GdiAbortPath, 1) // 0x1001
|
||||
SVC_(GdiAddFontResourceW, 6) // 0x1002
|
||||
SVC_(GdiAddRemoteFontToDC, 4) // 0x1003
|
||||
SVC_(GdiAddFontMemResourceEx, 5) // 0x1004
|
||||
SVC_(GdiRemoveMergeFont, 2) // 0x1005
|
||||
SVC_(GdiAddRemoteMMInstanceToDC, 3) // 0x1006
|
||||
SVC_(GdiAlphaBlend, 12) // 0x1007
|
||||
SVC_(GdiAngleArc, 6) // 0x1008
|
||||
SVC_(GdiAnyLinkedFonts, 0) // 0x1009
|
||||
SVC_(GdiFontIsLinked, 1) // 0x100a
|
||||
SVC_(GdiArcInternal, 10) // 0x100b
|
||||
SVC_(GdiBeginPath, 1) // 0x100c
|
||||
SVC_(GdiBitBlt, 11) // 0x100d
|
||||
SVC_(GdiCancelDC, 1) // 0x100e
|
||||
SVC_(GdiCheckBitmapBits, 8) // 0x100f
|
||||
SVC_(GdiCloseFigure, 1) // 0x1010
|
||||
SVC_(GdiClearBitmapAttributes, 2) // 0x1011
|
||||
SVC_(GdiClearBrushAttributes, 2) // 0x1012
|
||||
SVC_(GdiColorCorrectPalette, 6) // 0x1013
|
||||
SVC_(GdiCombineRgn, 4) // 0x1014
|
||||
SVC_(GdiCombineTransform, 3) // 0x1015
|
||||
SVC_(GdiComputeXformCoefficients, 1) // 0x1016
|
||||
SVC_(GdiConfigureOPMProtectedOutput, 4) // 0x1017
|
||||
SVC_(GdiConsoleTextOut, 4) // 0x1018
|
||||
SVC_(GdiConvertMetafileRect, 2) // 0x1019
|
||||
SVC_(GdiCreateBitmap, 5) // 0x101a
|
||||
SVC_(GdiCreateClientObj, 1) // 0x101b
|
||||
SVC_(GdiCreateColorSpace, 1) // 0x101c
|
||||
SVC_(GdiCreateColorTransform, 8) // 0x101d
|
||||
SVC_(GdiCreateCompatibleBitmap, 3) // 0x101e
|
||||
SVC_(GdiCreateCompatibleDC, 1) // 0x101f
|
||||
SVC_(GdiCreateDIBBrush, 6) // 0x1020
|
||||
SVC_(GdiCreateDIBitmapInternal, 11) // 0x1021
|
||||
SVC_(GdiCreateDIBSection, 9) // 0x1022
|
||||
SVC_(GdiCreateEllipticRgn, 4) // 0x1023
|
||||
SVC_(GdiCreateHalftonePalette, 1) // 0x1024
|
||||
SVC_(GdiCreateHatchBrushInternal, 3) // 0x1025
|
||||
SVC_(GdiCreateMetafileDC, 1) // 0x1026
|
||||
SVC_(GdiCreateOPMProtectedOutputs, 5) // 0x1027
|
||||
SVC_(GdiCreatePaletteInternal, 2) // 0x1028
|
||||
SVC_(GdiCreatePatternBrushInternal, 3) // 0x1029
|
||||
SVC_(GdiCreatePen, 4) // 0x102a
|
||||
SVC_(GdiCreateRectRgn, 4) // 0x102b
|
||||
SVC_(GdiCreateRoundRectRgn, 6) // 0x102c
|
||||
SVC_(GdiCreateServerMetaFile, 6) // 0x102d
|
||||
SVC_(GdiCreateSolidBrush, 2) // 0x102e
|
||||
SVC_(GdiD3dContextCreate, 4) // 0x102f
|
||||
SVC_(GdiD3dContextDestroy, 1) // 0x1030
|
||||
SVC_(GdiD3dContextDestroyAll, 1) // 0x1031
|
||||
SVC_(GdiD3dValidateTextureStageState, 1) // 0x1032
|
||||
SVC_(GdiD3dDrawPrimitives2, 7) // 0x1033
|
||||
SVC_(GdiDdGetDriverState, 1) // 0x1034
|
||||
SVC_(GdiDdAddAttachedSurface, 3) // 0x1035
|
||||
SVC_(GdiDdAlphaBlt, 3) // 0x1036
|
||||
SVC_(GdiDdAttachSurface, 2) // 0x1037
|
||||
SVC_(GdiDdBeginMoCompFrame, 2) // 0x1038
|
||||
SVC_(GdiDdBlt, 3) // 0x1039
|
||||
SVC_(GdiDdCanCreateSurface, 2) // 0x103a
|
||||
SVC_(GdiDdCanCreateD3DBuffer, 2) // 0x103b
|
||||
SVC_(GdiDdColorControl, 2) // 0x103c
|
||||
SVC_(GdiDdCreateDirectDrawObject, 1) // 0x103d
|
||||
SVC_(GdiDdCreateSurface, 8) // 0x103e
|
||||
SVC_(GdiDdCreateD3DBuffer, 8) // 0x103f
|
||||
SVC_(GdiDdCreateMoComp, 2) // 0x1040
|
||||
SVC_(GdiDdCreateSurfaceObject, 6) // 0x1041
|
||||
SVC_(GdiDdDeleteDirectDrawObject, 1) // 0x1042
|
||||
SVC_(GdiDdDeleteSurfaceObject, 1) // 0x1043
|
||||
SVC_(GdiDdDestroyMoComp, 2) // 0x1044
|
||||
SVC_(GdiDdDestroySurface, 2) // 0x1045
|
||||
SVC_(GdiDdDestroyD3DBuffer, 1) // 0x1046
|
||||
SVC_(GdiDdEndMoCompFrame, 2) // 0x1047
|
||||
SVC_(GdiDdFlip, 5) // 0x1048
|
||||
SVC_(GdiDdFlipToGDISurface, 2) // 0x1049
|
||||
SVC_(GdiDdGetAvailDriverMemory, 2) // 0x104a
|
||||
SVC_(GdiDdGetBltStatus, 2) // 0x104b
|
||||
SVC_(GdiDdGetDC, 2) // 0x104c
|
||||
SVC_(GdiDdGetDriverInfo, 2) // 0x104d
|
||||
SVC_(GdiDdGetDxHandle, 3) // 0x104e
|
||||
SVC_(GdiDdGetFlipStatus, 2) // 0x104f
|
||||
SVC_(GdiDdGetInternalMoCompInfo, 2) // 0x1050
|
||||
SVC_(GdiDdGetMoCompBuffInfo, 2) // 0x1051
|
||||
SVC_(GdiDdGetMoCompGuids, 2) // 0x1052
|
||||
SVC_(GdiDdGetMoCompFormats, 2) // 0x1053
|
||||
SVC_(GdiDdGetScanLine, 2) // 0x1054
|
||||
SVC_(GdiDdLock, 3) // 0x1055
|
||||
SVC_(GdiDdLockD3D, 2) // 0x1056
|
||||
SVC_(GdiDdQueryDirectDrawObject, 11) // 0x1057
|
||||
SVC_(GdiDdQueryMoCompStatus, 2) // 0x1058
|
||||
SVC_(GdiDdReenableDirectDrawObject, 2) // 0x1059
|
||||
SVC_(GdiDdReleaseDC, 1) // 0x105a
|
||||
SVC_(GdiDdRenderMoComp, 2) // 0x105b
|
||||
SVC_(GdiDdResetVisrgn, 2) // 0x105c
|
||||
SVC_(GdiDdSetColorKey, 2) // 0x105d
|
||||
SVC_(GdiDdSetExclusiveMode, 2) // 0x105e
|
||||
SVC_(GdiDdSetGammaRamp, 3) // 0x105f
|
||||
SVC_(GdiDdCreateSurfaceEx, 3) // 0x1060
|
||||
SVC_(GdiDdSetOverlayPosition, 3) // 0x1061
|
||||
SVC_(GdiDdUnattachSurface, 2) // 0x1062
|
||||
SVC_(GdiDdUnlock, 2) // 0x1063
|
||||
SVC_(GdiDdUnlockD3D, 2) // 0x1064
|
||||
SVC_(GdiDdUpdateOverlay, 3) // 0x1065
|
||||
SVC_(GdiDdWaitForVerticalBlank, 2) // 0x1066
|
||||
SVC_(GdiDvpCanCreateVideoPort, 2) // 0x1067
|
||||
SVC_(GdiDvpColorControl, 2) // 0x1068
|
||||
SVC_(GdiDvpCreateVideoPort, 2) // 0x1069
|
||||
SVC_(GdiDvpDestroyVideoPort, 2) // 0x106a
|
||||
SVC_(GdiDvpFlipVideoPort, 4) // 0x106b
|
||||
SVC_(GdiDvpGetVideoPortBandwidth, 2) // 0x106c
|
||||
SVC_(GdiDvpGetVideoPortField, 2) // 0x106d
|
||||
SVC_(GdiDvpGetVideoPortFlipStatus, 2) // 0x106e
|
||||
SVC_(GdiDvpGetVideoPortInputFormats, 2) // 0x106f
|
||||
SVC_(GdiDvpGetVideoPortLine, 2) // 0x1070
|
||||
SVC_(GdiDvpGetVideoPortOutputFormats, 2) // 0x1071
|
||||
SVC_(GdiDvpGetVideoPortConnectInfo, 2) // 0x1072
|
||||
SVC_(GdiDvpGetVideoSignalStatus, 2) // 0x1073
|
||||
SVC_(GdiDvpUpdateVideoPort, 4) // 0x1074
|
||||
SVC_(GdiDvpWaitForVideoPortSync, 2) // 0x1075
|
||||
SVC_(GdiDvpAcquireNotification, 3) // 0x1076
|
||||
SVC_(GdiDvpReleaseNotification, 2) // 0x1077
|
||||
SVC_(GdiDxgGenericThunk, 6) // 0x1078
|
||||
SVC_(GdiDeleteClientObj, 1) // 0x1079
|
||||
SVC_(GdiDeleteColorSpace, 1) // 0x107a
|
||||
SVC_(GdiDeleteColorTransform, 2) // 0x107b
|
||||
SVC_(GdiDeleteObjectApp, 1) // 0x107c
|
||||
SVC_(GdiDescribePixelFormat, 4) // 0x107d
|
||||
SVC_(GdiDestroyOPMProtectedOutput, 1) // 0x107e
|
||||
SVC_(GdiGetPerBandInfo, 2) // 0x107f
|
||||
SVC_(GdiDoBanding, 4) // 0x1080
|
||||
SVC_(GdiDoPalette, 6) // 0x1081
|
||||
SVC_(GdiDrawEscape, 4) // 0x1082
|
||||
SVC_(GdiEllipse, 5) // 0x1083
|
||||
SVC_(GdiEnableEudc, 1) // 0x1084
|
||||
SVC_(GdiEndDoc, 1) // 0x1085
|
||||
SVC_(GdiEndPage, 1) // 0x1086
|
||||
SVC_(GdiEndPath, 1) // 0x1087
|
||||
SVC_(GdiEnumFontChunk, 5) // 0x1088
|
||||
SVC_(GdiEnumFontClose, 1) // 0x1089
|
||||
SVC_(GdiEnumFontOpen, 7) // 0x108a
|
||||
SVC_(GdiEnumObjects, 4) // 0x108b
|
||||
SVC_(GdiEqualRgn, 2) // 0x108c
|
||||
SVC_(GdiEudcLoadUnloadLink, 7) // 0x108d
|
||||
SVC_(GdiExcludeClipRect, 5) // 0x108e
|
||||
SVC_(GdiExtCreatePen, 11) // 0x108f
|
||||
SVC_(GdiExtCreateRegion, 3) // 0x1090
|
||||
SVC_(GdiExtEscape, 8) // 0x1091
|
||||
SVC_(GdiExtFloodFill, 5) // 0x1092
|
||||
SVC_(GdiExtGetObjectW, 3) // 0x1093
|
||||
SVC_(GdiExtSelectClipRgn, 3) // 0x1094
|
||||
SVC_(GdiExtTextOutW, 9) // 0x1095
|
||||
SVC_(GdiFillPath, 1) // 0x1096
|
||||
SVC_(GdiFillRgn, 3) // 0x1097
|
||||
SVC_(GdiFlattenPath, 1) // 0x1098
|
||||
SVC_(GdiFlush, 0) // 0x1099
|
||||
SVC_(GdiForceUFIMapping, 2) // 0x109a
|
||||
SVC_(GdiFrameRgn, 5) // 0x109b
|
||||
SVC_(GdiFullscreenControl, 5) // 0x109c
|
||||
SVC_(GdiGetAndSetDCDword, 4) // 0x109d
|
||||
SVC_(GdiGetAppClipBox, 2) // 0x109e
|
||||
SVC_(GdiGetBitmapBits, 3) // 0x109f
|
||||
SVC_(GdiGetBitmapDimension, 2) // 0x10a0
|
||||
SVC_(GdiGetBoundsRect, 3) // 0x10a1
|
||||
SVC_(GdiGetCertificate, 4) // 0x10a2
|
||||
SVC_(GdiGetCertificateSize, 3) // 0x10a3
|
||||
SVC_(GdiGetCharABCWidthsW, 6) // 0x10a4
|
||||
SVC_(GdiGetCharacterPlacementW, 6) // 0x10a5
|
||||
SVC_(GdiGetCharSet, 1) // 0x10a6
|
||||
SVC_(GdiGetCharWidthW, 6) // 0x10a7
|
||||
SVC_(GdiGetCharWidthInfo, 2) // 0x10a8
|
||||
SVC_(GdiGetColorAdjustment, 2) // 0x10a9
|
||||
SVC_(GdiGetColorSpaceforBitmap, 1) // 0x10aa
|
||||
SVC_(GdiGetCOPPCompatibleOPMInformation, 3) // 0x10ab
|
||||
SVC_(GdiGetDCDword, 3) // 0x10ac
|
||||
SVC_(GdiGetDCforBitmap, 1) // 0x10ad
|
||||
SVC_(GdiGetDCObject, 2) // 0x10ae
|
||||
SVC_(GdiGetDCPoint, 3) // 0x10af
|
||||
SVC_(GdiGetDeviceCaps, 2) // 0x10b0
|
||||
SVC_(GdiGetDeviceGammaRamp, 2) // 0x10b1
|
||||
SVC_(GdiGetDeviceCapsAll, 2) // 0x10b2
|
||||
SVC_(GdiGetDIBitsInternal, 9) // 0x10b3
|
||||
SVC_(GdiGetETM, 2) // 0x10b4
|
||||
SVC_(GdiGetEudcTimeStampEx, 3) // 0x10b5
|
||||
SVC_(GdiGetFontData, 5) // 0x10b6
|
||||
SVC_(GdiGetFontResourceInfoInternalW, 7) // 0x10b7
|
||||
SVC_(GdiGetGlyphIndicesW, 5) // 0x10b8
|
||||
SVC_(GdiGetGlyphIndicesWInternal, 6) // 0x10b9
|
||||
SVC_(GdiGetGlyphOutline, 8) // 0x10ba
|
||||
SVC_(GdiGetOPMInformation, 3) // 0x10bb
|
||||
SVC_(GdiGetKerningPairs, 3) // 0x10bc
|
||||
SVC_(GdiGetLinkedUFIs, 3) // 0x10bd
|
||||
SVC_(GdiGetMiterLimit, 2) // 0x10be
|
||||
SVC_(GdiGetMonitorID, 3) // 0x10bf
|
||||
SVC_(GdiGetNearestColor, 2) // 0x10c0
|
||||
SVC_(GdiGetNearestPaletteIndex, 2) // 0x10c1
|
||||
SVC_(GdiGetObjectBitmapHandle, 2) // 0x10c2
|
||||
SVC_(GdiGetOPMRandomNumber, 2) // 0x10c3
|
||||
SVC_(GdiGetOutlineTextMetricsInternalW, 4) // 0x10c4
|
||||
SVC_(GdiGetPath, 4) // 0x10c5
|
||||
SVC_(GdiGetPixel, 3) // 0x10c6
|
||||
SVC_(GdiGetRandomRgn, 3) // 0x10c7
|
||||
SVC_(GdiGetRasterizerCaps, 2) // 0x10c8
|
||||
SVC_(GdiGetRealizationInfo, 3) // 0x10c9
|
||||
SVC_(GdiGetRegionData, 3) // 0x10ca
|
||||
SVC_(GdiGetRgnBox, 2) // 0x10cb
|
||||
SVC_(GdiGetServerMetaFileBits, 7) // 0x10cc
|
||||
SVC_(GdiGetSpoolMessage, 4) // 0x10cd
|
||||
SVC_(GdiGetStats, 5) // 0x10ce
|
||||
SVC_(GdiGetStockObject, 1) // 0x10cf
|
||||
SVC_(GdiGetStringBitmapW, 5) // 0x10d0
|
||||
SVC_(GdiGetSuggestedOPMProtectedOutputArraySize, 2) // 0x10d1
|
||||
SVC_(GdiGetSystemPaletteUse, 1) // 0x10d2
|
||||
SVC_(GdiGetTextCharsetInfo, 3) // 0x10d3
|
||||
SVC_(GdiGetTextExtent, 5) // 0x10d4
|
||||
SVC_(GdiGetTextExtentExW, 8) // 0x10d5
|
||||
SVC_(GdiGetTextFaceW, 4) // 0x10d6
|
||||
SVC_(GdiGetTextMetricsW, 3) // 0x10d7
|
||||
SVC_(GdiGetTransform, 3) // 0x10d8
|
||||
SVC_(GdiGetUFI, 6) // 0x10d9
|
||||
SVC_(GdiGetEmbUFI, 7) // 0x10da
|
||||
SVC_(GdiGetUFIPathname, 10) // 0x10db
|
||||
SVC_(GdiGetEmbedFonts, 0) // 0x10dc
|
||||
SVC_(GdiChangeGhostFont, 2) // 0x10dd
|
||||
SVC_(GdiAddEmbFontToDC, 2) // 0x10de
|
||||
SVC_(GdiGetFontUnicodeRanges, 2) // 0x10df
|
||||
SVC_(GdiGetWidthTable, 7) // 0x10e0
|
||||
SVC_(GdiGradientFill, 6) // 0x10e1
|
||||
SVC_(GdiHfontCreate, 5) // 0x10e2
|
||||
SVC_(GdiIcmBrushInfo, 8) // 0x10e3
|
||||
SVC_(GdiInit, 0) // 0x10e4
|
||||
SVC_(GdiInitSpool, 0) // 0x10e5
|
||||
SVC_(GdiIntersectClipRect, 5) // 0x10e6
|
||||
SVC_(GdiInvertRgn, 2) // 0x10e7
|
||||
SVC_(GdiLineTo, 3) // 0x10e8
|
||||
SVC_(GdiMakeFontDir, 5) // 0x10e9
|
||||
SVC_(GdiMakeInfoDC, 2) // 0x10ea
|
||||
SVC_(GdiMaskBlt, 13) // 0x10eb
|
||||
SVC_(GdiModifyWorldTransform, 3) // 0x10ec
|
||||
SVC_(GdiMonoBitmap, 1) // 0x10ed
|
||||
SVC_(GdiMoveTo, 4) // 0x10ee
|
||||
SVC_(GdiOffsetClipRgn, 3) // 0x10ef
|
||||
SVC_(GdiOffsetRgn, 3) // 0x10f0
|
||||
SVC_(GdiOpenDCW, 7) // 0x10f1
|
||||
SVC_(GdiPatBlt, 6) // 0x10f2
|
||||
SVC_(GdiPolyPatBlt, 5) // 0x10f3
|
||||
SVC_(GdiPathToRegion, 1) // 0x10f4
|
||||
SVC_(GdiPlgBlt, 11) // 0x10f5
|
||||
SVC_(GdiPolyDraw, 4) // 0x10f6
|
||||
SVC_(GdiPolyPolyDraw, 5) // 0x10f7
|
||||
SVC_(GdiPolyTextOutW, 4) // 0x10f8
|
||||
SVC_(GdiPtInRegion, 3) // 0x10f9
|
||||
SVC_(GdiPtVisible, 3) // 0x10fa
|
||||
SVC_(GdiQueryFonts, 3) // 0x10fb
|
||||
SVC_(GdiQueryFontAssocInfo, 1) // 0x10fc
|
||||
SVC_(GdiRectangle, 5) // 0x10fd
|
||||
SVC_(GdiRectInRegion, 2) // 0x10fe
|
||||
SVC_(GdiRectVisible, 2) // 0x10ff
|
||||
SVC_(GdiRemoveFontResourceW, 6) // 0x1100
|
||||
SVC_(GdiRemoveFontMemResourceEx, 1) // 0x1101
|
||||
SVC_(GdiResetDC, 5) // 0x1102
|
||||
SVC_(GdiResizePalette, 2) // 0x1103
|
||||
SVC_(GdiRestoreDC, 2) // 0x1104
|
||||
SVC_(GdiRoundRect, 7) // 0x1105
|
||||
SVC_(GdiSaveDC, 1) // 0x1106
|
||||
SVC_(GdiScaleViewportExtEx, 6) // 0x1107
|
||||
SVC_(GdiScaleWindowExtEx, 6) // 0x1108
|
||||
SVC_(GdiSelectBitmap, 2) // 0x1109
|
||||
SVC_(GdiSelectBrush, 2) // 0x110a
|
||||
SVC_(GdiSelectClipPath, 2) // 0x110b
|
||||
SVC_(GdiSelectFont, 2) // 0x110c
|
||||
SVC_(GdiSelectPen, 2) // 0x110d
|
||||
SVC_(GdiSetBitmapAttributes, 2) // 0x110e
|
||||
SVC_(GdiSetBitmapBits, 3) // 0x110f
|
||||
SVC_(GdiSetBitmapDimension, 4) // 0x1110
|
||||
SVC_(GdiSetBoundsRect, 3) // 0x1111
|
||||
SVC_(GdiSetBrushAttributes, 2) // 0x1112
|
||||
SVC_(GdiSetBrushOrg, 4) // 0x1113
|
||||
SVC_(GdiSetColorAdjustment, 2) // 0x1114
|
||||
SVC_(GdiSetColorSpace, 2) // 0x1115
|
||||
SVC_(GdiSetDeviceGammaRamp, 2) // 0x1116
|
||||
SVC_(GdiSetDIBitsToDeviceInternal, 16) // 0x1117
|
||||
SVC_(GdiSetFontEnumeration, 1) // 0x1118
|
||||
SVC_(GdiSetFontXform, 3) // 0x1119
|
||||
SVC_(GdiSetIcmMode, 3) // 0x111a
|
||||
SVC_(GdiSetLinkedUFIs, 3) // 0x111b
|
||||
SVC_(GdiSetMagicColors, 3) // 0x111c
|
||||
SVC_(GdiSetMetaRgn, 1) // 0x111d
|
||||
SVC_(GdiSetMiterLimit, 3) // 0x111e
|
||||
SVC_(GdiGetDeviceWidth, 1) // 0x111f
|
||||
SVC_(GdiMirrorWindowOrg, 1) // 0x1120
|
||||
SVC_(GdiSetLayout, 3) // 0x1121
|
||||
SVC_(GdiSetOPMSigningKeyAndSequenceNumbers, 2) // 0x1122
|
||||
SVC_(GdiSetPixel, 4) // 0x1123
|
||||
SVC_(GdiSetPixelFormat, 2) // 0x1124
|
||||
SVC_(GdiSetRectRgn, 5) // 0x1125
|
||||
SVC_(GdiSetSystemPaletteUse, 2) // 0x1126
|
||||
SVC_(GdiSetTextJustification, 3) // 0x1127
|
||||
SVC_(GdiSetupPublicCFONT, 3) // 0x1128
|
||||
SVC_(GdiSetVirtualResolution, 5) // 0x1129
|
||||
SVC_(GdiSetSizeDevice, 3) // 0x112a
|
||||
SVC_(GdiStartDoc, 4) // 0x112b
|
||||
SVC_(GdiStartPage, 1) // 0x112c
|
||||
SVC_(GdiStretchBlt, 12) // 0x112d
|
||||
SVC_(GdiStretchDIBitsInternal, 16) // 0x112e
|
||||
SVC_(GdiStrokeAndFillPath, 1) // 0x112f
|
||||
SVC_(GdiStrokePath, 1) // 0x1130
|
||||
SVC_(GdiSwapBuffers, 1) // 0x1131
|
||||
SVC_(GdiTransformPoints, 5) // 0x1132
|
||||
SVC_(GdiTransparentBlt, 11) // 0x1133
|
||||
SVC_(GdiUnloadPrinterDriver, 2) // 0x1134
|
||||
SVC_(GdiUnmapMemFont, 1) // 0x1135
|
||||
SVC_(GdiUnrealizeObject, 1) // 0x1136
|
||||
SVC_(GdiUpdateColors, 1) // 0x1137
|
||||
SVC_(GdiWidenPath, 1) // 0x1138
|
||||
SVC_(UserActivateKeyboardLayout, 2) // 0x1139
|
||||
SVC_(UserAddClipboardFormatListener, 1) // 0x113a
|
||||
SVC_(UserAlterWindowStyle, 3) // 0x113b
|
||||
SVC_(UserAssociateInputContext, 3) // 0x113c
|
||||
SVC_(UserAttachThreadInput, 3) // 0x113d
|
||||
SVC_(UserBeginPaint, 2) // 0x113e
|
||||
SVC_(UserBitBltSysBmp, 8) // 0x113f
|
||||
SVC_(UserBlockInput, 1) // 0x1140
|
||||
SVC_(UserBuildHimcList, 4) // 0x1141
|
||||
SVC_(UserBuildHwndList, 7) // 0x1142
|
||||
SVC_(UserBuildNameList, 4) // 0x1143
|
||||
SVC_(UserBuildPropList, 4) // 0x1144
|
||||
SVC_(UserCallHwnd, 2) // 0x1145
|
||||
SVC_(UserCallHwndLock, 2) // 0x1146
|
||||
SVC_(UserCallHwndOpt, 2) // 0x1147
|
||||
SVC_(UserCallHwndParam, 3) // 0x1148
|
||||
SVC_(UserCallHwndParamLock, 3) // 0x1149
|
||||
SVC_(UserCallMsgFilter, 2) // 0x114a
|
||||
SVC_(UserCallNextHookEx, 4) // 0x114b
|
||||
SVC_(UserCallNoParam, 1) // 0x114c
|
||||
SVC_(UserCallOneParam, 2) // 0x114d
|
||||
SVC_(UserCallTwoParam, 3) // 0x114e
|
||||
SVC_(UserChangeClipboardChain, 2) // 0x114f
|
||||
SVC_(UserChangeDisplaySettings, 4) // 0x1150
|
||||
SVC_(UserCheckAccessForIntegrityLevel, 3) // 0x1151
|
||||
SVC_(UserCheckDesktopByThreadId, 1) // 0x1152
|
||||
SVC_(UserCheckWindowThreadDesktop, 3) // 0x1153
|
||||
SVC_(UserCheckImeHotKey, 2) // 0x1154
|
||||
SVC_(UserCheckMenuItem, 3) // 0x1155
|
||||
SVC_(UserChildWindowFromPointEx, 4) // 0x1156
|
||||
SVC_(UserClipCursor, 1) // 0x1157
|
||||
SVC_(UserCloseClipboard, 0) // 0x1158
|
||||
SVC_(UserCloseDesktop, 1) // 0x1159
|
||||
SVC_(UserCloseWindowStation, 1) // 0x115a
|
||||
SVC_(UserConsoleControl, 3) // 0x115b
|
||||
SVC_(UserConvertMemHandle, 2) // 0x115c
|
||||
SVC_(UserCopyAcceleratorTable, 3) // 0x115d
|
||||
SVC_(UserCountClipboardFormats, 0) // 0x115e
|
||||
SVC_(UserCreateAcceleratorTable, 2) // 0x115f
|
||||
SVC_(UserCreateCaret, 4) // 0x1160
|
||||
SVC_(UserCreateDesktopEx, 6) // 0x1161
|
||||
SVC_(UserCreateInputContext, 1) // 0x1162
|
||||
SVC_(UserCreateLocalMemHandle, 4) // 0x1163
|
||||
SVC_(UserCreateWindowEx, 15) // 0x1164
|
||||
SVC_(UserCreateWindowStation, 7) // 0x1165
|
||||
SVC_(UserDdeInitialize, 5) // 0x1166
|
||||
SVC_(UserDeferWindowPos, 8) // 0x1167
|
||||
SVC_(UserDefSetText, 2) // 0x1168
|
||||
SVC_(UserDeleteMenu, 3) // 0x1169
|
||||
SVC_(UserDestroyAcceleratorTable, 1) // 0x116a
|
||||
SVC_(UserDestroyCursor, 2) // 0x116b
|
||||
SVC_(UserDestroyInputContext, 1) // 0x116c
|
||||
SVC_(UserDestroyMenu, 1) // 0x116d
|
||||
SVC_(UserDestroyWindow, 1) // 0x116e
|
||||
SVC_(UserDisableThreadIme, 1) // 0x116f
|
||||
SVC_(UserDispatchMessage, 1) // 0x1170
|
||||
SVC_(UserDoSoundConnect, 0) // 0x1171
|
||||
SVC_(UserDoSoundDisconnect, 0) // 0x1172
|
||||
SVC_(UserDragDetect, 3) // 0x1173
|
||||
SVC_(UserDragObject, 5) // 0x1174
|
||||
SVC_(UserDrawAnimatedRects, 4) // 0x1175
|
||||
SVC_(UserDrawCaption, 4) // 0x1176
|
||||
SVC_(UserDrawCaptionTemp, 7) // 0x1177
|
||||
SVC_(UserDrawIconEx, 11) // 0x1178
|
||||
SVC_(UserDrawMenuBarTemp, 5) // 0x1179
|
||||
SVC_(UserEmptyClipboard, 0) // 0x117a
|
||||
SVC_(UserEnableMenuItem, 3) // 0x117b
|
||||
SVC_(UserEnableScrollBar, 3) // 0x117c
|
||||
SVC_(UserEndDeferWindowPosEx, 2) // 0x117d
|
||||
SVC_(UserEndMenu, 0) // 0x117e
|
||||
SVC_(UserEndPaint, 2) // 0x117f
|
||||
SVC_(UserEnumDisplayDevices, 4) // 0x1180
|
||||
SVC_(UserEnumDisplayMonitors, 4) // 0x1181
|
||||
SVC_(UserEnumDisplaySettings, 4) // 0x1182
|
||||
SVC_(UserEvent, 1) // 0x1183
|
||||
SVC_(UserExcludeUpdateRgn, 2) // 0x1184
|
||||
SVC_(UserFillWindow, 4) // 0x1185
|
||||
SVC_(UserFindExistingCursorIcon, 3) // 0x1186
|
||||
SVC_(UserFindWindowEx, 5) // 0x1187
|
||||
SVC_(UserFlashWindowEx, 1) // 0x1188
|
||||
SVC_(UserFrostCrashedWindow, 2) // 0x1189
|
||||
SVC_(UserGetAltTabInfo, 6) // 0x118a
|
||||
SVC_(UserGetAncestor, 2) // 0x118b
|
||||
SVC_(UserGetAppImeLevel, 1) // 0x118c
|
||||
SVC_(UserGetAsyncKeyState, 1) // 0x118d
|
||||
SVC_(UserGetAtomName, 2) // 0x118e
|
||||
SVC_(UserGetCaretBlinkTime, 0) // 0x118f
|
||||
SVC_(UserGetCaretPos, 1) // 0x1190
|
||||
SVC_(UserGetClassInfoEx, 5) // 0x1191
|
||||
SVC_(UserGetClassName, 3) // 0x1192
|
||||
SVC_(UserGetClipboardData, 2) // 0x1193
|
||||
SVC_(UserGetClipboardFormatName, 3) // 0x1194
|
||||
SVC_(UserGetClipboardOwner, 0) // 0x1195
|
||||
SVC_(UserGetClipboardSequenceNumber, 0) // 0x1196
|
||||
SVC_(UserGetClipboardViewer, 0) // 0x1197
|
||||
SVC_(UserGetClipCursor, 1) // 0x1198
|
||||
SVC_(UserGetComboBoxInfo, 2) // 0x1199
|
||||
SVC_(UserGetControlBrush, 3) // 0x119a
|
||||
SVC_(UserGetControlColor, 4) // 0x119b
|
||||
SVC_(UserGetCPD, 3) // 0x119c
|
||||
SVC_(UserGetCursorFrameInfo, 4) // 0x119d
|
||||
SVC_(UserGetCursorInfo, 1) // 0x119e
|
||||
SVC_(UserGetDC, 1) // 0x119f
|
||||
SVC_(UserGetDCEx, 3) // 0x11a0
|
||||
SVC_(UserGetDoubleClickTime, 0) // 0x11a1
|
||||
SVC_(UserGetForegroundWindow, 0) // 0x11a2
|
||||
SVC_(UserGetGuiResources, 2) // 0x11a3
|
||||
SVC_(UserGetGUIThreadInfo, 2) // 0x11a4
|
||||
SVC_(UserGetIconInfo, 6) // 0x11a5
|
||||
SVC_(UserGetIconSize, 4) // 0x11a6
|
||||
SVC_(UserGetImeHotKey, 4) // 0x11a7
|
||||
SVC_(UserGetImeInfoEx, 2) // 0x11a8
|
||||
SVC_(UserGetInternalWindowPos, 3) // 0x11a9
|
||||
SVC_(UserGetKeyboardLayoutList, 2) // 0x11aa
|
||||
SVC_(UserGetKeyboardLayoutName, 1) // 0x11ab
|
||||
SVC_(UserGetKeyboardState, 1) // 0x11ac
|
||||
SVC_(UserGetKeyNameText, 3) // 0x11ad
|
||||
SVC_(UserGetKeyState, 1) // 0x11ae
|
||||
SVC_(UserGetListBoxInfo, 1) // 0x11af
|
||||
SVC_(UserGetMenuBarInfo, 4) // 0x11b0
|
||||
SVC_(UserGetMenuIndex, 2) // 0x11b1
|
||||
SVC_(UserGetMenuItemRect, 4) // 0x11b2
|
||||
SVC_(UserGetMessage, 4) // 0x11b3
|
||||
SVC_(UserGetMouseMovePointsEx, 5) // 0x11b4
|
||||
SVC_(UserGetObjectInformation, 5) // 0x11b5
|
||||
SVC_(UserGetOpenClipboardWindow, 0) // 0x11b6
|
||||
SVC_(UserGetPriorityClipboardFormat, 2) // 0x11b7
|
||||
SVC_(UserGetProcessWindowStation, 0) // 0x11b8
|
||||
SVC_(UserGetRawInputBuffer, 3) // 0x11b9
|
||||
SVC_(UserGetRawInputData, 5) // 0x11ba
|
||||
SVC_(UserGetRawInputDeviceInfo, 4) // 0x11bb
|
||||
SVC_(UserGetRawInputDeviceList, 3) // 0x11bc
|
||||
SVC_(UserGetRegisteredRawInputDevices, 3) // 0x11bd
|
||||
SVC_(UserGetScrollBarInfo, 3) // 0x11be
|
||||
SVC_(UserGetSystemMenu, 2) // 0x11bf
|
||||
SVC_(UserGetThreadDesktop, 2) // 0x11c0
|
||||
SVC_(UserGetThreadState, 1) // 0x11c1
|
||||
SVC_(UserGetTitleBarInfo, 2) // 0x11c2
|
||||
SVC_(UserGetUpdatedClipboardFormats, 3) // 0x11c3
|
||||
SVC_(UserGetUpdateRect, 3) // 0x11c4
|
||||
SVC_(UserGetUpdateRgn, 3) // 0x11c5
|
||||
SVC_(UserGetWindowDC, 1) // 0x11c6
|
||||
SVC_(UserGetWindowPlacement, 2) // 0x11c7
|
||||
SVC_(UserGetWOWClass, 2) // 0x11c8
|
||||
SVC_(UserGhostWindowFromHungWindow, 1) // 0x11c9
|
||||
SVC_(UserHardErrorControl, 3) // 0x11ca
|
||||
SVC_(UserHideCaret, 1) // 0x11cb
|
||||
SVC_(UserHiliteMenuItem, 4) // 0x11cc
|
||||
SVC_(UserHungWindowFromGhostWindow, 1) // 0x11cd
|
||||
SVC_(UserImpersonateDdeClientWindow, 2) // 0x11ce
|
||||
SVC_(UserInitialize, 3) // 0x11cf
|
||||
SVC_(UserInitializeClientPfnArrays, 4) // 0x11d0
|
||||
SVC_(UserInitTask, 12) // 0x11d1
|
||||
SVC_(UserInternalGetWindowText, 3) // 0x11d2
|
||||
SVC_(UserInternalGetWindowIcon, 2) // 0x11d3
|
||||
SVC_(UserInvalidateRect, 3) // 0x11d4
|
||||
SVC_(UserInvalidateRgn, 3) // 0x11d5
|
||||
SVC_(UserIsClipboardFormatAvailable, 1) // 0x11d6
|
||||
SVC_(UserKillTimer, 2) // 0x11d7
|
||||
SVC_(UserLoadKeyboardLayoutEx, 7) // 0x11d8
|
||||
SVC_(UserLockWindowStation, 1) // 0x11d9
|
||||
SVC_(UserLockWindowUpdate, 1) // 0x11da
|
||||
SVC_(UserLockWorkStation, 0) // 0x11db
|
||||
SVC_(UserLogicalToPhysicalPoint, 2) // 0x11dc
|
||||
SVC_(UserMapVirtualKeyEx, 4) // 0x11dd
|
||||
SVC_(UserMenuItemFromPoint, 4) // 0x11de
|
||||
SVC_(UserMessageCall, 7) // 0x11df
|
||||
SVC_(UserMinMaximize, 3) // 0x11e0
|
||||
SVC_(UserMNDragLeave, 0) // 0x11e1
|
||||
SVC_(UserMNDragOver, 2) // 0x11e2
|
||||
SVC_(UserModifyUserStartupInfoFlags, 2) // 0x11e3
|
||||
SVC_(UserMoveWindow, 6) // 0x11e4
|
||||
SVC_(UserNotifyIMEStatus, 3) // 0x11e5
|
||||
SVC_(UserNotifyProcessCreate, 4) // 0x11e6
|
||||
SVC_(UserNotifyWinEvent, 4) // 0x11e7
|
||||
SVC_(UserOpenClipboard, 2) // 0x11e8
|
||||
SVC_(UserOpenDesktop, 3) // 0x11e9
|
||||
SVC_(UserOpenInputDesktop, 3) // 0x11ea
|
||||
SVC_(UserOpenThreadDesktop, 5) // 0x11eb
|
||||
SVC_(UserOpenWindowStation, 2) // 0x11ec
|
||||
SVC_(UserPaintDesktop, 1) // 0x11ed
|
||||
SVC_(UserPaintMonitor, 3) // 0x11ee
|
||||
SVC_(UserPeekMessage, 5) // 0x11ef
|
||||
SVC_(UserPhysicalToLogicalPoint, 2) // 0x11f0
|
||||
SVC_(UserPostMessage, 4) // 0x11f1
|
||||
SVC_(UserPostThreadMessage, 4) // 0x11f2
|
||||
SVC_(UserPrintWindow, 3) // 0x11f3
|
||||
SVC_(UserProcessConnect, 3) // 0x11f4
|
||||
SVC_(UserQueryInformationThread, 4) // 0x11f5
|
||||
SVC_(UserQueryInputContext, 2) // 0x11f6
|
||||
SVC_(UserQuerySendMessage, 1) // 0x11f7
|
||||
SVC_(UserQueryWindow, 2) // 0x11f8
|
||||
SVC_(UserRealChildWindowFromPoint, 3) // 0x11f9
|
||||
SVC_(UserRealInternalGetMessage, 6) // 0x11fa
|
||||
SVC_(UserRealWaitMessageEx, 2) // 0x11fb
|
||||
SVC_(UserRedrawWindow, 4) // 0x11fc
|
||||
SVC_(UserRegisterClassExWOW, 7) // 0x11fd
|
||||
SVC_(UserRegisterErrorReportingDialog, 2) // 0x11fe
|
||||
SVC_(UserRegisterUserApiHook, 4) // 0x11ff
|
||||
SVC_(UserRegisterHotKey, 4) // 0x1200
|
||||
SVC_(UserRegisterRawInputDevices, 3) // 0x1201
|
||||
SVC_(UserRegisterTasklist, 1) // 0x1202
|
||||
SVC_(UserRegisterWindowMessage, 1) // 0x1203
|
||||
SVC_(UserRemoveClipboardFormatListener, 1) // 0x1204
|
||||
SVC_(UserRemoveMenu, 3) // 0x1205
|
||||
SVC_(UserRemoveProp, 2) // 0x1206
|
||||
SVC_(UserResolveDesktop, 4) // 0x1207
|
||||
SVC_(UserResolveDesktopForWOW, 1) // 0x1208
|
||||
SVC_(UserSBGetParms, 4) // 0x1209
|
||||
SVC_(UserScrollDC, 7) // 0x120a
|
||||
SVC_(UserScrollWindowEx, 8) // 0x120b
|
||||
SVC_(UserSelectPalette, 3) // 0x120c
|
||||
SVC_(UserSendInput, 3) // 0x120d
|
||||
SVC_(UserSetActiveWindow, 1) // 0x120e
|
||||
SVC_(UserSetAppImeLevel, 2) // 0x120f
|
||||
SVC_(UserSetCapture, 1) // 0x1210
|
||||
SVC_(UserSetClassLong, 4) // 0x1211
|
||||
SVC_(UserSetClassWord, 3) // 0x1212
|
||||
SVC_(UserSetClipboardData, 3) // 0x1213
|
||||
SVC_(UserSetClipboardViewer, 1) // 0x1214
|
||||
SVC_(UserSetConsoleReserveKeys, 2) // 0x1215
|
||||
SVC_(UserSetCursor, 1) // 0x1216
|
||||
SVC_(UserSetCursorContents, 2) // 0x1217
|
||||
SVC_(UserSetCursorIconData, 4) // 0x1218
|
||||
SVC_(UserSetFocus, 1) // 0x1219
|
||||
SVC_(UserSetImeHotKey, 5) // 0x121a
|
||||
SVC_(UserSetImeInfoEx, 1) // 0x121b
|
||||
SVC_(UserSetImeOwnerWindow, 2) // 0x121c
|
||||
SVC_(UserSetInformationProcess, 4) // 0x121d
|
||||
SVC_(UserSetInformationThread, 4) // 0x121e
|
||||
SVC_(UserSetInternalWindowPos, 4) // 0x121f
|
||||
SVC_(UserSetKeyboardState, 1) // 0x1220
|
||||
SVC_(UserSetMenu, 3) // 0x1221
|
||||
SVC_(UserSetMenuContextHelpId, 2) // 0x1222
|
||||
SVC_(UserSetMenuDefaultItem, 3) // 0x1223
|
||||
SVC_(UserSetMenuFlagRtoL, 1) // 0x1224
|
||||
SVC_(UserSetObjectInformation, 4) // 0x1225
|
||||
SVC_(UserSetParent, 2) // 0x1226
|
||||
SVC_(UserSetProcessWindowStation, 1) // 0x1227
|
||||
SVC_(UserGetProp, 2) // 0x1228
|
||||
SVC_(UserSetProp, 3) // 0x1229
|
||||
SVC_(UserSetScrollInfo, 4) // 0x122a
|
||||
SVC_(UserSetShellWindowEx, 2) // 0x122b
|
||||
SVC_(UserSetSysColors, 4) // 0x122c
|
||||
SVC_(UserSetSystemCursor, 2) // 0x122d
|
||||
SVC_(UserSetSystemMenu, 2) // 0x122e
|
||||
SVC_(UserSetSystemTimer, 4) // 0x122f
|
||||
SVC_(UserSetThreadDesktop, 1) // 0x1230
|
||||
SVC_(UserSetThreadLayoutHandles, 2) // 0x1231
|
||||
SVC_(UserSetThreadState, 2) // 0x1232
|
||||
SVC_(UserSetTimer, 4) // 0x1233
|
||||
SVC_(UserSetProcessDPIAware, 0) // 0x1234
|
||||
SVC_(UserSetWindowFNID, 2) // 0x1235
|
||||
SVC_(UserSetWindowLong, 4) // 0x1236
|
||||
SVC_(UserSetWindowPlacement, 2) // 0x1237
|
||||
SVC_(UserSetWindowPos, 7) // 0x1238
|
||||
SVC_(UserSetWindowRgn, 3) // 0x1239
|
||||
SVC_(UserGetWindowRgnEx, 3) // 0x123a
|
||||
SVC_(UserSetWindowRgnEx, 3) // 0x123b
|
||||
SVC_(UserSetWindowsHookAW, 3) // 0x123c
|
||||
SVC_(UserSetWindowsHookEx, 6) // 0x123d
|
||||
SVC_(UserSetWindowStationUser, 4) // 0x123e
|
||||
SVC_(UserSetWindowWord, 3) // 0x123f
|
||||
SVC_(UserSetWinEventHook, 8) // 0x1240
|
||||
SVC_(UserShowCaret, 1) // 0x1241
|
||||
SVC_(UserShowScrollBar, 3) // 0x1242
|
||||
SVC_(UserShowWindow, 2) // 0x1243
|
||||
SVC_(UserShowWindowAsync, 2) // 0x1244
|
||||
SVC_(UserSoundSentry, 0) // 0x1245
|
||||
SVC_(UserSwitchDesktop, 2) // 0x1246
|
||||
SVC_(UserSystemParametersInfo, 4) // 0x1247
|
||||
SVC_(UserTestForInteractiveUser, 1) // 0x1248
|
||||
SVC_(UserThunkedMenuInfo, 2) // 0x1249
|
||||
SVC_(UserThunkedMenuItemInfo, 6) // 0x124a
|
||||
SVC_(UserToUnicodeEx, 7) // 0x124b
|
||||
SVC_(UserTrackMouseEvent, 1) // 0x124c
|
||||
SVC_(UserTrackPopupMenuEx, 6) // 0x124d
|
||||
SVC_(UserCalcMenuBar, 5) // 0x124e
|
||||
SVC_(UserPaintMenuBar, 6) // 0x124f
|
||||
SVC_(UserTranslateAccelerator, 3) // 0x1250
|
||||
SVC_(UserTranslateMessage, 2) // 0x1251
|
||||
SVC_(UserUnhookWindowsHookEx, 1) // 0x1252
|
||||
SVC_(UserUnhookWinEvent, 1) // 0x1253
|
||||
SVC_(UserUnloadKeyboardLayout, 1) // 0x1254
|
||||
SVC_(UserUnlockWindowStation, 1) // 0x1255
|
||||
SVC_(UserUnregisterClass, 3) // 0x1256
|
||||
SVC_(UserUnregisterUserApiHook, 0) // 0x1257
|
||||
SVC_(UserUnregisterHotKey, 2) // 0x1258
|
||||
SVC_(UserUpdateInputContext, 3) // 0x1259
|
||||
SVC_(UserUpdateInstance, 3) // 0x125a
|
||||
SVC_(UserUpdateLayeredWindow, 10) // 0x125b
|
||||
SVC_(UserGetLayeredWindowAttributes, 4) // 0x125c
|
||||
SVC_(UserSetLayeredWindowAttributes, 4) // 0x125d
|
||||
SVC_(UserUpdatePerUserSystemParameters, 2) // 0x125e
|
||||
SVC_(UserUserHandleGrantAccess, 3) // 0x125f
|
||||
SVC_(UserValidateHandleSecure, 1) // 0x1260
|
||||
SVC_(UserValidateRect, 2) // 0x1261
|
||||
SVC_(UserValidateTimerCallback, 1) // 0x1262
|
||||
SVC_(UserVkKeyScanEx, 3) // 0x1263
|
||||
SVC_(UserWaitForInputIdle, 3) // 0x1264
|
||||
SVC_(UserWaitForMsgAndEvent, 1) // 0x1265
|
||||
SVC_(UserWaitMessage, 0) // 0x1266
|
||||
SVC_(UserWin32PoolAllocationStats, 6) // 0x1267
|
||||
SVC_(UserWindowFromPhysicalPoint, 2) // 0x1268
|
||||
SVC_(UserWindowFromPoint, 2) // 0x1269
|
||||
SVC_(UserYieldTask, 0) // 0x126a
|
||||
SVC_(UserRemoteConnect, 3) // 0x126b
|
||||
SVC_(UserRemoteRedrawRectangle, 4) // 0x126c
|
||||
SVC_(UserRemoteRedrawScreen, 0) // 0x126d
|
||||
SVC_(UserRemoteStopScreenUpdates, 0) // 0x126e
|
||||
SVC_(UserCtxDisplayIOCtl, 3) // 0x126f
|
||||
SVC_(UserRegisterSessionPort, 1) // 0x1270
|
||||
SVC_(UserUnregisterSessionPort, 0) // 0x1271
|
||||
SVC_(UserUpdateWindowTransform, 3) // 0x1272
|
||||
SVC_(UserDwmStartRedirection, 1) // 0x1273
|
||||
SVC_(UserDwmStopRedirection, 0) // 0x1274
|
||||
SVC_(UserDwmHintDxUpdate, 2) // 0x1275
|
||||
SVC_(UserDwmGetDxRgn, 3) // 0x1276
|
||||
SVC_(UserGetWindowMinimizeRect, 2) // 0x1277
|
||||
SVC_(GdiEngAssociateSurface, 3) // 0x1278
|
||||
SVC_(GdiEngCreateBitmap, 6) // 0x1279
|
||||
SVC_(GdiEngCreateDeviceSurface, 4) // 0x127a
|
||||
SVC_(GdiEngCreateDeviceBitmap, 4) // 0x127b
|
||||
SVC_(GdiEngCreatePalette, 6) // 0x127c
|
||||
SVC_(GdiEngComputeGlyphSet, 3) // 0x127d
|
||||
SVC_(GdiEngCopyBits, 6) // 0x127e
|
||||
SVC_(GdiEngDeletePalette, 1) // 0x127f
|
||||
SVC_(GdiEngDeleteSurface, 1) // 0x1280
|
||||
SVC_(GdiEngEraseSurface, 3) // 0x1281
|
||||
SVC_(GdiEngUnlockSurface, 1) // 0x1282
|
||||
SVC_(GdiEngLockSurface, 1) // 0x1283
|
||||
SVC_(GdiEngBitBlt, 11) // 0x1284
|
||||
SVC_(GdiEngStretchBlt, 11) // 0x1285
|
||||
SVC_(GdiEngPlgBlt, 11) // 0x1286
|
||||
SVC_(GdiEngMarkBandingSurface, 1) // 0x1287
|
||||
SVC_(GdiEngStrokePath, 8) // 0x1288
|
||||
SVC_(GdiEngFillPath, 7) // 0x1289
|
||||
SVC_(GdiEngStrokeAndFillPath, 10) // 0x128a
|
||||
SVC_(GdiEngPaint, 5) // 0x128b
|
||||
SVC_(GdiEngLineTo, 9) // 0x128c
|
||||
SVC_(GdiEngAlphaBlend, 7) // 0x128d
|
||||
SVC_(GdiEngGradientFill, 10) // 0x128e
|
||||
SVC_(GdiEngTransparentBlt, 8) // 0x128f
|
||||
SVC_(GdiEngTextOut, 10) // 0x1290
|
||||
SVC_(GdiEngStretchBltROP, 13) // 0x1291
|
||||
SVC_(GdiXLATEOBJ_cGetPalette, 4) // 0x1292
|
||||
SVC_(GdiXLATEOBJ_iXlate, 2) // 0x1293
|
||||
SVC_(GdiXLATEOBJ_hGetColorTransform, 1) // 0x1294
|
||||
SVC_(GdiCLIPOBJ_bEnum, 3) // 0x1295
|
||||
SVC_(GdiCLIPOBJ_cEnumStart, 5) // 0x1296
|
||||
SVC_(GdiCLIPOBJ_ppoGetPath, 1) // 0x1297
|
||||
SVC_(GdiEngDeletePath, 1) // 0x1298
|
||||
SVC_(GdiEngCreateClip, 0) // 0x1299
|
||||
SVC_(GdiEngDeleteClip, 1) // 0x129a
|
||||
SVC_(GdiBRUSHOBJ_ulGetBrushColor, 1) // 0x129b
|
||||
SVC_(GdiBRUSHOBJ_pvAllocRbrush, 2) // 0x129c
|
||||
SVC_(GdiBRUSHOBJ_pvGetRbrush, 1) // 0x129d
|
||||
SVC_(GdiBRUSHOBJ_hGetColorTransform, 1) // 0x129e
|
||||
SVC_(GdiXFORMOBJ_bApplyXform, 5) // 0x129f
|
||||
SVC_(GdiXFORMOBJ_iGetXform, 2) // 0x12a0
|
||||
SVC_(GdiFONTOBJ_vGetInfo, 3) // 0x12a1
|
||||
SVC_(GdiFONTOBJ_pxoGetXform, 1) // 0x12a2
|
||||
SVC_(GdiFONTOBJ_cGetGlyphs, 5) // 0x12a3
|
||||
SVC_(GdiFONTOBJ_pifi, 1) // 0x12a4
|
||||
SVC_(GdiFONTOBJ_pfdg, 1) // 0x12a5
|
||||
SVC_(GdiFONTOBJ_pQueryGlyphAttrs, 2) // 0x12a6
|
||||
SVC_(GdiFONTOBJ_pvTrueTypeFontFile, 2) // 0x12a7
|
||||
SVC_(GdiFONTOBJ_cGetAllGlyphHandles, 2) // 0x12a8
|
||||
SVC_(GdiSTROBJ_bEnum, 3) // 0x12a9
|
||||
SVC_(GdiSTROBJ_bEnumPositionsOnly, 3) // 0x12aa
|
||||
SVC_(GdiSTROBJ_bGetAdvanceWidths, 4) // 0x12ab
|
||||
SVC_(GdiSTROBJ_vEnumStart, 1) // 0x12ac
|
||||
SVC_(GdiSTROBJ_dwGetCodePage, 1) // 0x12ad
|
||||
SVC_(GdiPATHOBJ_vGetBounds, 2) // 0x12ae
|
||||
SVC_(GdiPATHOBJ_bEnum, 2) // 0x12af
|
||||
SVC_(GdiPATHOBJ_vEnumStart, 1) // 0x12b0
|
||||
SVC_(GdiPATHOBJ_vEnumStartClipLines, 4) // 0x12b1
|
||||
SVC_(GdiPATHOBJ_bEnumClipLines, 3) // 0x12b2
|
||||
SVC_(GdiGetDhpdev, 1) // 0x12b3
|
||||
SVC_(GdiEngCheckAbort, 1) // 0x12b4
|
||||
SVC_(GdiHT_Get8BPPFormatPalette, 4) // 0x12b5
|
||||
SVC_(GdiHT_Get8BPPMaskPalette, 6) // 0x12b6
|
||||
SVC_(GdiUpdateTransform, 1) // 0x12b7
|
||||
SVC_(GdiSetPUMPDOBJ, 4) // 0x12b8
|
||||
SVC_(GdiBRUSHOBJ_DeleteRbrush, 2) // 0x12b9
|
||||
SVC_(GdiUMPDEngFreeUserMem, 1) // 0x12ba
|
||||
SVC_(GdiDrawStream, 3) // 0x12bb
|
||||
SVC_(GdiDwmGetDirtyRgn, 5) // 0x12bc
|
||||
SVC_(GdiDwmGetSurfaceData, 2) // 0x12bd
|
||||
SVC_(GdiDdDDICreateAllocation, 1) // 0x12be
|
||||
SVC_(GdiDdDDIQueryResourceInfo, 1) // 0x12bf
|
||||
SVC_(GdiDdDDIOpenResource, 1) // 0x12c0
|
||||
SVC_(GdiDdDDIDestroyAllocation, 1) // 0x12c1
|
||||
SVC_(GdiDdDDISetAllocationPriority, 1) // 0x12c2
|
||||
SVC_(GdiDdDDIQueryAllocationResidency, 1) // 0x12c3
|
||||
SVC_(GdiDdDDICreateDevice, 1) // 0x12c4
|
||||
SVC_(GdiDdDDIDestroyDevice, 1) // 0x12c5
|
||||
SVC_(GdiDdDDICreateContext, 1) // 0x12c6
|
||||
SVC_(GdiDdDDIDestroyContext, 1) // 0x12c7
|
||||
SVC_(GdiDdDDICreateSynchronizationObject, 1) // 0x12c8
|
||||
SVC_(GdiDdDDIDestroySynchronizationObject, 1) // 0x12c9
|
||||
SVC_(GdiDdDDIWaitForSynchronizationObject, 1) // 0x12ca
|
||||
SVC_(GdiDdDDISignalSynchronizationObject, 1) // 0x12cb
|
||||
SVC_(GdiDdDDIGetRuntimeData, 1) // 0x12cc
|
||||
SVC_(GdiDdDDIQueryAdapterInfo, 1) // 0x12cd
|
||||
SVC_(GdiDdDDILock, 1) // 0x12ce
|
||||
SVC_(GdiDdDDIUnlock, 1) // 0x12cf
|
||||
SVC_(GdiDdDDIGetDisplayModeList, 1) // 0x12d0
|
||||
SVC_(GdiDdDDISetDisplayMode, 1) // 0x12d1
|
||||
SVC_(GdiDdDDIGetMultisampleMethodList, 1) // 0x12d2
|
||||
SVC_(GdiDdDDIPresent, 1) // 0x12d3
|
||||
SVC_(GdiDdDDIRender, 1) // 0x12d4
|
||||
SVC_(GdiDdDDIOpenAdapterFromDeviceName, 1) // 0x12d5
|
||||
SVC_(GdiDdDDIOpenAdapterFromHdc, 1) // 0x12d6
|
||||
SVC_(GdiDdDDICloseAdapter, 1) // 0x12d7
|
||||
SVC_(GdiDdDDIGetSharedPrimaryHandle, 1) // 0x12d8
|
||||
SVC_(GdiDdDDIEscape, 1) // 0x12d9
|
||||
SVC_(GdiDdDDIQueryStatistics, 1) // 0x12da
|
||||
SVC_(GdiDdDDISetVidPnSourceOwner, 1) // 0x12db
|
||||
SVC_(GdiDdDDIGetPresentHistory, 1) // 0x12dc
|
||||
SVC_(GdiDdDDICreateOverlay, 1) // 0x12dd
|
||||
SVC_(GdiDdDDIUpdateOverlay, 1) // 0x12de
|
||||
SVC_(GdiDdDDIFlipOverlay, 1) // 0x12df
|
||||
SVC_(GdiDdDDIDestroyOverlay, 1) // 0x12e0
|
||||
SVC_(GdiDdDDIWaitForVerticalBlankEvent, 1) // 0x12e1
|
||||
SVC_(GdiDdDDISetGammaRamp, 1) // 0x12e2
|
||||
SVC_(GdiDdDDIGetDeviceState, 1) // 0x12e3
|
||||
SVC_(GdiDdDDICreateDCFromMemory, 1) // 0x12e4
|
||||
SVC_(GdiDdDDIDestroyDCFromMemory, 1) // 0x12e5
|
||||
SVC_(GdiDdDDISetContextSchedulingPriority, 1) // 0x12e6
|
||||
SVC_(GdiDdDDIGetContextSchedulingPriority, 1) // 0x12e7
|
||||
SVC_(GdiDdDDISetProcessSchedulingPriorityClass, 2) // 0x12e8
|
||||
SVC_(GdiDdDDIGetProcessSchedulingPriorityClass, 2) // 0x12e9
|
||||
SVC_(GdiDdDDIReleaseProcessVidPnSourceOwners, 1) // 0x12ea
|
||||
SVC_(GdiDdDDIGetScanLine, 1) // 0x12eb
|
||||
SVC_(GdiDdDDISetQueuedLimit, 1) // 0x12ec
|
||||
SVC_(GdiDdDDIPollDisplayChildren, 1) // 0x12ed
|
||||
SVC_(GdiDdDDIInvalidateActiveVidPn, 1) // 0x12ee
|
||||
SVC_(GdiDdDDICheckOcclusion, 1) // 0x12ef
|
||||
SVC_(GdiDdDDIWaitForIdle, 1) // 0x12f0
|
||||
SVC_(GdiDdDDICheckMonitorPowerState, 1) // 0x12f1
|
||||
SVC_(GdiDdDDICheckExclusiveOwnership, 0) // 0x12f2
|
||||
SVC_(GdiDdDDISetDisplayPrivateDriverFormat, 1) // 0x12f3
|
||||
SVC_(GdiDdDDISharedPrimaryLockNotification, 1) // 0x12f4
|
||||
SVC_(GdiDdDDISharedPrimaryUnLockNotification, 1) // 0x12f5
|
||||
SVC_(GdiMakeObjectXferable, 2) // 0x12f6
|
||||
SVC_(GdiMakeObjectUnXferable, 1) // 0x12f7
|
||||
SVC_(GdiGetNumberOfPhysicalMonitors, 2) // 0x12f8
|
||||
SVC_(GdiGetPhysicalMonitors, 4) // 0x12f9
|
||||
SVC_(GdiGetPhysicalMonitorDescription, 3) // 0x12fa
|
||||
SVC_(GdiDestroyPhysicalMonitor, 1) // 0x12fb
|
||||
SVC_(GdiDDCCIGetVCPFeature, 5) // 0x12fc
|
||||
SVC_(GdiDDCCISetVCPFeature, 3) // 0x12fd
|
||||
SVC_(GdiDDCCISaveCurrentSettings, 1) // 0x12fe
|
||||
SVC_(GdiDDCCIGetCapabilitiesStringLength, 2) // 0x12ff
|
||||
SVC_(GdiDDCCIGetCapabilitiesString, 3) // 0x1300
|
||||
SVC_(GdiDDCCIGetTimingReport, 2) // 0x1301
|
||||
SVC_(UserSetMirrorRendering, 2) // 0x1302
|
||||
SVC_(UserShowSystemCursor, 1) // 0x1303
|
|
@ -0,0 +1,779 @@
|
|||
// SVC_(<NAME>, <ARG_COUNT>)
|
||||
//
|
||||
// Funcs order should match Windows Vista Service Pack 2 x64 Free
|
||||
// Note: these MUST be indented for the ARM assembler!
|
||||
//
|
||||
SVC_(UserGetThreadState, 1) // 0x1000
|
||||
SVC_(UserPeekMessage, 5) // 0x1001
|
||||
SVC_(UserCallOneParam, 2) // 0x1002
|
||||
SVC_(UserGetKeyState, 1) // 0x1003
|
||||
SVC_(UserInvalidateRect, 3) // 0x1004
|
||||
SVC_(UserCallNoParam, 1) // 0x1005
|
||||
SVC_(UserGetMessage, 4) // 0x1006
|
||||
SVC_(UserMessageCall, 7) // 0x1007
|
||||
SVC_(GdiBitBlt, 11) // 0x1008
|
||||
SVC_(GdiGetCharSet, 1) // 0x1009
|
||||
SVC_(UserGetDC, 1) // 0x100a
|
||||
SVC_(GdiSelectBitmap, 2) // 0x100b
|
||||
SVC_(UserWaitMessage, 0) // 0x100c
|
||||
SVC_(UserTranslateMessage, 2) // 0x100d
|
||||
SVC_(UserGetProp, 0) // 0x100e
|
||||
SVC_(UserPostMessage, 4) // 0x100f
|
||||
SVC_(UserQueryWindow, 2) // 0x1010
|
||||
SVC_(UserTranslateAccelerator, 3) // 0x1011
|
||||
SVC_(GdiFlush, 0) // 0x1012
|
||||
SVC_(UserRedrawWindow, 4) // 0x1013
|
||||
SVC_(UserWindowFromPoint, 2) // 0x1014
|
||||
SVC_(UserCallMsgFilter, 2) // 0x1015
|
||||
SVC_(UserValidateTimerCallback, 1) // 0x1016
|
||||
SVC_(UserBeginPaint, 2) // 0x1017
|
||||
SVC_(UserSetTimer, 4) // 0x1018
|
||||
SVC_(UserEndPaint, 2) // 0x1019
|
||||
SVC_(UserSetCursor, 1) // 0x101a
|
||||
SVC_(UserKillTimer, 2) // 0x101b
|
||||
SVC_(UserBuildHwndList, 7) // 0x101c
|
||||
SVC_(UserSelectPalette, 3) // 0x101d
|
||||
SVC_(UserCallNextHookEx, 4) // 0x101e
|
||||
SVC_(UserHideCaret, 1) // 0x101f
|
||||
SVC_(GdiIntersectClipRect, 5) // 0x1020
|
||||
SVC_(UserCallHwndLock, 2) // 0x1021
|
||||
SVC_(UserGetProcessWindowStation, 0) // 0x1022
|
||||
SVC_(GdiDeleteObjectApp, 1) // 0x1023
|
||||
SVC_(UserSetWindowPos, 7) // 0x1024
|
||||
SVC_(UserShowCaret, 1) // 0x1025
|
||||
SVC_(UserEndDeferWindowPosEx, 2) // 0x1026
|
||||
SVC_(UserCallHwndParamLock, 3) // 0x1027
|
||||
SVC_(UserVkKeyScanEx, 3) // 0x1028
|
||||
SVC_(GdiSetDIBitsToDeviceInternal, 16) // 0x1029
|
||||
SVC_(UserCallTwoParam, 3) // 0x102a
|
||||
SVC_(GdiGetRandomRgn, 3) // 0x102b
|
||||
SVC_(UserCopyAcceleratorTable, 3) // 0x102c
|
||||
SVC_(UserNotifyWinEvent, 4) // 0x102d
|
||||
SVC_(GdiExtSelectClipRgn, 3) // 0x102e
|
||||
SVC_(UserIsClipboardFormatAvailable, 1) // 0x102f
|
||||
SVC_(UserSetScrollInfo, 4) // 0x1030
|
||||
SVC_(GdiStretchBlt, 12) // 0x1031
|
||||
SVC_(UserCreateCaret, 4) // 0x1032
|
||||
SVC_(GdiRectVisible, 2) // 0x1033
|
||||
SVC_(GdiCombineRgn, 4) // 0x1034
|
||||
SVC_(GdiGetDCObject, 2) // 0x1035
|
||||
SVC_(UserDispatchMessage, 1) // 0x1036
|
||||
SVC_(UserRegisterWindowMessage, 1) // 0x1037
|
||||
SVC_(GdiExtTextOutW, 9) // 0x1038
|
||||
SVC_(GdiSelectFont, 2) // 0x1039
|
||||
SVC_(GdiRestoreDC, 2) // 0x103a
|
||||
SVC_(GdiSaveDC, 1) // 0x103b
|
||||
SVC_(UserGetForegroundWindow, 0) // 0x103c
|
||||
SVC_(UserShowScrollBar, 3) // 0x103d
|
||||
SVC_(UserFindExistingCursorIcon, 3) // 0x103e
|
||||
SVC_(GdiGetDCDword, 3) // 0x103f
|
||||
SVC_(GdiGetRegionData, 3) // 0x1040
|
||||
SVC_(GdiLineTo, 3) // 0x1041
|
||||
SVC_(UserSystemParametersInfo, 4) // 0x1042
|
||||
SVC_(GdiGetAppClipBox, 2) // 0x1043
|
||||
SVC_(UserGetAsyncKeyState, 1) // 0x1044
|
||||
SVC_(UserGetCPD, 3) // 0x1045
|
||||
SVC_(UserRemoveProp, 2) // 0x1046
|
||||
SVC_(GdiDoPalette, 6) // 0x1047
|
||||
SVC_(GdiPolyPolyDraw, 5) // 0x1048
|
||||
SVC_(UserSetCapture, 1) // 0x1049
|
||||
SVC_(UserEnumDisplayMonitors, 5) /* FIXME: 4 on XP/2k3 */ // 0x104a
|
||||
SVC_(GdiCreateCompatibleBitmap, 3) // 0x104b
|
||||
SVC_(UserSetProp, 3) // 0x104c
|
||||
SVC_(GdiGetTextCharsetInfo, 3) // 0x104d
|
||||
SVC_(UserSBGetParms, 4) // 0x104e
|
||||
SVC_(UserGetIconInfo, 6) // 0x104f
|
||||
SVC_(UserExcludeUpdateRgn, 2) // 0x1050
|
||||
SVC_(UserSetFocus, 1) // 0x1051
|
||||
SVC_(GdiExtGetObjectW, 3) // 0x1052
|
||||
SVC_(UserDeferWindowPos, 8) // 0x1053
|
||||
SVC_(UserGetUpdateRect, 3) // 0x1054
|
||||
SVC_(GdiCreateCompatibleDC, 1) // 0x1055
|
||||
SVC_(UserGetClipboardSequenceNumber, 0) // 0x1056
|
||||
SVC_(GdiCreatePen, 4) // 0x1057
|
||||
SVC_(UserShowWindow, 2) // 0x1058
|
||||
SVC_(UserGetKeyboardLayoutList, 2) // 0x1059
|
||||
SVC_(GdiPatBlt, 6) // 0x105a
|
||||
SVC_(UserMapVirtualKeyEx, 4) // 0x105b
|
||||
SVC_(UserSetWindowLong, 4) // 0x105c
|
||||
SVC_(GdiHfontCreate, 5) // 0x105d
|
||||
SVC_(UserMoveWindow, 6) // 0x105e
|
||||
SVC_(UserPostThreadMessage, 4) // 0x105f
|
||||
SVC_(UserDrawIconEx, 11) // 0x1060
|
||||
SVC_(UserGetSystemMenu, 2) // 0x1061
|
||||
SVC_(GdiDrawStream, 3) // 0x1062
|
||||
SVC_(UserInternalGetWindowText, 3) // 0x1063
|
||||
SVC_(UserGetWindowDC, 1) // 0x1064
|
||||
SVC_(GdiD3dDrawPrimitives2, 7) // 0x1065
|
||||
SVC_(GdiInvertRgn, 2) // 0x1066
|
||||
SVC_(GdiGetRgnBox, 2) // 0x1067
|
||||
SVC_(GdiGetAndSetDCDword, 4) // 0x1068
|
||||
SVC_(GdiMaskBlt, 13) // 0x1069
|
||||
SVC_(GdiGetWidthTable, 7) // 0x106a
|
||||
SVC_(UserScrollDC, 7) // 0x106b
|
||||
SVC_(UserGetObjectInformation, 5) // 0x106c
|
||||
SVC_(GdiCreateBitmap, 5) // 0x106d
|
||||
SVC_(GdiConsoleTextOut, 4) // 0x106e
|
||||
SVC_(UserFindWindowEx, 5) // 0x106f
|
||||
SVC_(GdiPolyPatBlt, 5) // 0x1070
|
||||
SVC_(UserUnhookWindowsHookEx, 1) // 0x1071
|
||||
SVC_(GdiGetNearestColor, 2) // 0x1072
|
||||
SVC_(GdiTransformPoints, 5) // 0x1073
|
||||
SVC_(GdiGetDCPoint, 3) // 0x1074
|
||||
SVC_(UserCheckImeHotKey, 2) // 0x1075
|
||||
SVC_(GdiCreateDIBBrush, 6) // 0x1076
|
||||
SVC_(GdiGetTextMetricsW, 3) // 0x1077
|
||||
SVC_(UserCreateWindowEx, 15) // 0x1078
|
||||
SVC_(UserSetParent, 2) // 0x1079
|
||||
SVC_(UserGetKeyboardState, 1) // 0x107a
|
||||
SVC_(UserToUnicodeEx, 7) // 0x107b
|
||||
SVC_(UserGetControlBrush, 3) // 0x107c
|
||||
SVC_(UserGetClassName, 3) // 0x107d
|
||||
SVC_(GdiAlphaBlend, 12) // 0x107e
|
||||
SVC_(GdiDdBlt, 3) // 0x107f
|
||||
SVC_(GdiOffsetRgn, 3) // 0x1080
|
||||
SVC_(UserDefSetText, 2) // 0x1081
|
||||
SVC_(GdiGetTextFaceW, 4) // 0x1082
|
||||
SVC_(GdiStretchDIBitsInternal, 16) // 0x1083
|
||||
SVC_(UserSendInput, 3) // 0x1084
|
||||
SVC_(UserGetThreadDesktop, 2) // 0x1085
|
||||
SVC_(GdiCreateRectRgn, 4) // 0x1086
|
||||
SVC_(GdiGetDIBitsInternal, 9) // 0x1087
|
||||
SVC_(UserGetUpdateRgn, 3) // 0x1088
|
||||
SVC_(GdiDeleteClientObj, 1) // 0x1089
|
||||
SVC_(UserGetIconSize, 4) // 0x108a
|
||||
SVC_(UserFillWindow, 4) // 0x108b
|
||||
SVC_(GdiExtCreateRegion, 3) // 0x108c
|
||||
SVC_(GdiComputeXformCoefficients, 1) // 0x108d
|
||||
SVC_(UserSetWindowsHookEx, 6) // 0x108e
|
||||
SVC_(UserNotifyProcessCreate, 4) // 0x108f
|
||||
SVC_(GdiUnrealizeObject, 1) // 0x1090
|
||||
SVC_(UserGetTitleBarInfo, 2) // 0x1091
|
||||
SVC_(GdiRectangle, 5) // 0x1092
|
||||
SVC_(UserSetThreadDesktop, 1) // 0x1093
|
||||
SVC_(UserGetDCEx, 3) // 0x1094
|
||||
SVC_(UserGetScrollBarInfo, 3) // 0x1095
|
||||
SVC_(GdiGetTextExtent, 5) // 0x1096
|
||||
SVC_(UserSetWindowFNID, 2) // 0x1097
|
||||
SVC_(GdiSetLayout, 3) // 0x1098
|
||||
SVC_(UserCalcMenuBar, 5) // 0x1099
|
||||
SVC_(UserThunkedMenuItemInfo, 6) // 0x109a
|
||||
SVC_(GdiExcludeClipRect, 5) // 0x109b
|
||||
SVC_(GdiCreateDIBSection, 9) // 0x109c
|
||||
SVC_(GdiGetDCforBitmap, 1) // 0x109d
|
||||
SVC_(UserDestroyCursor, 2) // 0x109e
|
||||
SVC_(UserDestroyWindow, 1) // 0x109f
|
||||
SVC_(UserCallHwndParam, 3) // 0x10a0
|
||||
SVC_(GdiCreateDIBitmapInternal, 11) // 0x10a1
|
||||
SVC_(UserOpenWindowStation, 2) // 0x10a2
|
||||
SVC_(GdiDdDeleteSurfaceObject, 1) // 0x10a3
|
||||
SVC_(GdiEnumFontClose, 1) // 0x10a4
|
||||
SVC_(GdiEnumFontOpen, 7) // 0x10a5
|
||||
SVC_(GdiEnumFontChunk, 5) // 0x10a6
|
||||
SVC_(GdiDdCanCreateSurface, 2) // 0x10a7
|
||||
SVC_(GdiDdCreateSurface, 8) // 0x10a8
|
||||
SVC_(UserSetCursorIconData, 4) // 0x10a9
|
||||
SVC_(GdiDdDestroySurface, 2) // 0x10aa
|
||||
SVC_(UserCloseDesktop, 1) // 0x10ab
|
||||
SVC_(UserOpenDesktop, 3) // 0x10ac
|
||||
SVC_(UserSetProcessWindowStation, 1) // 0x10ad
|
||||
SVC_(UserGetAtomName, 2) // 0x10ae
|
||||
SVC_(GdiDdResetVisrgn, 2) // 0x10af
|
||||
SVC_(GdiExtCreatePen, 11) // 0x10b0
|
||||
SVC_(GdiCreatePaletteInternal, 2) // 0x10b1
|
||||
SVC_(GdiSetBrushOrg, 4) // 0x10b2
|
||||
SVC_(UserBuildNameList, 4) // 0x10b3
|
||||
SVC_(GdiSetPixel, 4) // 0x10b4
|
||||
SVC_(UserRegisterClassExWOW, 7) // 0x10b5
|
||||
SVC_(GdiCreatePatternBrushInternal, 3) // 0x10b6
|
||||
SVC_(UserGetAncestor, 2) // 0x10b7
|
||||
SVC_(GdiGetOutlineTextMetricsInternalW, 4) // 0x10b8
|
||||
SVC_(GdiSetBitmapBits, 3) // 0x10b9
|
||||
SVC_(UserCloseWindowStation, 1) // 0x10ba
|
||||
SVC_(UserGetDoubleClickTime, 0) // 0x10bb
|
||||
SVC_(UserEnableScrollBar, 3) // 0x10bc
|
||||
SVC_(GdiCreateSolidBrush, 2) // 0x10bd
|
||||
SVC_(UserGetClassInfo, 5) // 0x10be
|
||||
SVC_(GdiCreateClientObj, 1) // 0x10bf
|
||||
SVC_(UserUnregisterClass, 3) // 0x10c0
|
||||
SVC_(UserDeleteMenu, 3) // 0x10c1
|
||||
SVC_(GdiRectInRegion, 2) // 0x10c2
|
||||
SVC_(UserScrollWindowEx, 8) // 0x10c3
|
||||
SVC_(GdiGetPixel, 3) // 0x10c4
|
||||
SVC_(UserSetClassLong, 4) // 0x10c5
|
||||
SVC_(UserGetMenuBarInfo, 4) // 0x10c6
|
||||
SVC_(GdiDdCreateSurfaceEx, 3) // 0x10c7
|
||||
SVC_(GdiDdCreateSurfaceObject, 6) // 0x10c8
|
||||
SVC_(GdiGetNearestPaletteIndex, 2) // 0x10c9
|
||||
SVC_(GdiDdLockD3D, 2) // 0x10ca
|
||||
SVC_(GdiDdUnlockD3D, 2) // 0x10cb
|
||||
SVC_(GdiGetCharWidthW, 6) // 0x10cc
|
||||
SVC_(UserInvalidateRgn, 3) // 0x10cd
|
||||
SVC_(UserGetClipboardOwner, 0) // 0x10ce
|
||||
SVC_(UserSetWindowRgn, 3) // 0x10cf
|
||||
SVC_(UserBitBltSysBmp, 8) // 0x10d0
|
||||
SVC_(GdiGetCharWidthInfo, 2) // 0x10d1
|
||||
SVC_(UserValidateRect, 2) // 0x10d2
|
||||
SVC_(UserCloseClipboard, 0) // 0x10d3
|
||||
SVC_(UserOpenClipboard, 2) // 0x10d4
|
||||
SVC_(GdiGetStockObject, 1) // 0x10d5
|
||||
SVC_(UserSetClipboardData, 3) // 0x10d6
|
||||
SVC_(UserEnableMenuItem, 3) // 0x10d7
|
||||
SVC_(UserAlterWindowStyle, 3) // 0x10d8
|
||||
SVC_(GdiFillRgn, 3) // 0x10d9
|
||||
SVC_(UserGetWindowPlacement, 2) // 0x10da
|
||||
SVC_(GdiModifyWorldTransform, 3) // 0x10db
|
||||
SVC_(GdiGetFontData, 5) // 0x10dc
|
||||
SVC_(UserGetOpenClipboardWindow, 0) // 0x10dd
|
||||
SVC_(UserSetThreadState, 2) // 0x10de
|
||||
SVC_(GdiOpenDCW, 7) // 0x10df
|
||||
SVC_(UserTrackMouseEvent, 1) // 0x10e0
|
||||
SVC_(GdiGetTransform, 3) // 0x10e1
|
||||
SVC_(UserDestroyMenu, 1) // 0x10e2
|
||||
SVC_(GdiGetBitmapBits, 3) // 0x10e3
|
||||
SVC_(UserConsoleControl, 3) // 0x10e4
|
||||
SVC_(UserSetActiveWindow, 1) // 0x10e5
|
||||
SVC_(UserSetInformationThread, 4) // 0x10e6
|
||||
SVC_(UserSetWindowPlacement, 2) // 0x10e7
|
||||
SVC_(UserGetControlColor, 4) // 0x10e8
|
||||
SVC_(GdiSetMetaRgn, 1) // 0x10e9
|
||||
SVC_(GdiSetMiterLimit, 3) // 0x10ea
|
||||
SVC_(GdiSetVirtualResolution, 5) // 0x10eb
|
||||
SVC_(GdiGetRasterizerCaps, 2) // 0x10ec
|
||||
SVC_(UserSetWindowWord, 3) // 0x10ed
|
||||
SVC_(UserGetClipboardFormatName, 3) // 0x10ee
|
||||
SVC_(UserRealInternalGetMessage, 6) // 0x10ef
|
||||
SVC_(UserCreateLocalMemHandle, 4) // 0x10f0
|
||||
SVC_(UserAttachThreadInput, 3) // 0x10f1
|
||||
SVC_(GdiCreateHalftonePalette, 1) // 0x10f2
|
||||
SVC_(UserPaintMenuBar, 6) // 0x10f3
|
||||
SVC_(UserSetKeyboardState, 1) // 0x10f4
|
||||
SVC_(GdiCombineTransform, 3) // 0x10f5
|
||||
SVC_(UserCreateAcceleratorTable, 2) // 0x10f6
|
||||
SVC_(UserGetCursorFrameInfo, 4) // 0x10f7
|
||||
SVC_(UserGetAltTabInfo, 6) // 0x10f8
|
||||
SVC_(UserGetCaretBlinkTime, 0) // 0x10f9
|
||||
SVC_(GdiQueryFontAssocInfo, 1) // 0x10fa
|
||||
SVC_(UserProcessConnect, 3) // 0x10fb
|
||||
SVC_(UserEnumDisplayDevices, 4) // 0x10fc
|
||||
SVC_(UserEmptyClipboard, 0) // 0x10fd
|
||||
SVC_(UserGetClipboardData, 2) // 0x10fe
|
||||
SVC_(UserRemoveMenu, 3) // 0x10ff
|
||||
SVC_(GdiSetBoundsRect, 3) // 0x1100
|
||||
SVC_(UserSetInformationProcess, 4) // 0x1101
|
||||
SVC_(GdiGetBitmapDimension, 2) // 0x1102
|
||||
SVC_(UserConvertMemHandle, 2) // 0x1103
|
||||
SVC_(UserDestroyAcceleratorTable, 1) // 0x1104
|
||||
SVC_(UserGetGUIThreadInfo, 2) // 0x1105
|
||||
SVC_(GdiCloseFigure, 1) // 0x1106
|
||||
SVC_(UserSetWindowsHookAW, 3) // 0x1107
|
||||
SVC_(UserSetMenuDefaultItem, 3) // 0x1108
|
||||
SVC_(UserCheckMenuItem, 3) // 0x1109
|
||||
SVC_(UserSetWinEventHook, 8) // 0x110a
|
||||
SVC_(UserUnhookWinEvent, 1) // 0x110b
|
||||
SVC_(GdiSetupPublicCFONT, 3) // 0x110c
|
||||
SVC_(UserLockWindowUpdate, 1) // 0x110d
|
||||
SVC_(UserSetSystemMenu, 2) // 0x110e
|
||||
SVC_(UserThunkedMenuInfo, 2) // 0x110f
|
||||
SVC_(GdiBeginPath, 1) // 0x1110
|
||||
SVC_(GdiEndPath, 1) // 0x1111
|
||||
SVC_(GdiFillPath, 1) // 0x1112
|
||||
SVC_(UserCallHwnd, 2) // 0x1113
|
||||
SVC_(UserDdeInitialize, 5) // 0x1114
|
||||
SVC_(UserModifyUserStartupInfoFlags, 2) // 0x1115
|
||||
SVC_(UserCountClipboardFormats, 0) // 0x1116
|
||||
SVC_(GdiAddFontMemResourceEx, 5) // 0x1117
|
||||
SVC_(GdiEqualRgn, 2) // 0x1118
|
||||
SVC_(GdiGetSystemPaletteUse, 1) // 0x1119
|
||||
SVC_(GdiRemoveFontMemResourceEx, 1) // 0x111a
|
||||
SVC_(UserEnumDisplaySettings, 4) // 0x111b
|
||||
SVC_(UserPaintDesktop, 1) // 0x111c
|
||||
SVC_(GdiExtEscape, 8) // 0x111d
|
||||
SVC_(GdiSetBitmapDimension, 4) // 0x111e
|
||||
SVC_(GdiSetFontEnumeration, 1) // 0x111f
|
||||
SVC_(UserChangeClipboardChain, 2) // 0x1120
|
||||
SVC_(UserResolveDesktop, 4) // 0x1121
|
||||
SVC_(UserSetClipboardViewer, 1) // 0x1122
|
||||
SVC_(UserShowWindowAsync, 2) // 0x1123
|
||||
SVC_(UserSetConsoleReserveKeys, 2) // 0x1124
|
||||
SVC_(GdiCreateColorSpace, 1) // 0x1125
|
||||
SVC_(GdiDeleteColorSpace, 1) // 0x1126
|
||||
SVC_(UserActivateKeyboardLayout, 2) // 0x1127
|
||||
SVC_(GdiAbortDoc, 1) // 0x1128
|
||||
SVC_(GdiAbortPath, 1) // 0x1129
|
||||
SVC_(GdiAddEmbFontToDC, 2) // 0x112a
|
||||
SVC_(GdiAddFontResourceW, 6) // 0x112b
|
||||
SVC_(GdiAddRemoteFontToDC, 4) // 0x112c
|
||||
SVC_(GdiAddRemoteMMInstanceToDC, 3) // 0x112d
|
||||
SVC_(GdiAngleArc, 6) // 0x112e
|
||||
SVC_(GdiAnyLinkedFonts, 0) // 0x112f
|
||||
SVC_(GdiArcInternal, 10) // 0x1130
|
||||
SVC_(GdiBRUSHOBJ_DeleteRbrush, 2) // 0x1131
|
||||
SVC_(GdiBRUSHOBJ_hGetColorTransform, 1) // 0x1132
|
||||
SVC_(GdiBRUSHOBJ_pvAllocRbrush, 2) // 0x1133
|
||||
SVC_(GdiBRUSHOBJ_pvGetRbrush, 1) // 0x1134
|
||||
SVC_(GdiBRUSHOBJ_ulGetBrushColor, 1) // 0x1135
|
||||
SVC_(GdiCLIPOBJ_bEnum, 3) // 0x1136
|
||||
SVC_(GdiCLIPOBJ_cEnumStart, 5) // 0x1137
|
||||
SVC_(GdiCLIPOBJ_ppoGetPath, 1) // 0x1138
|
||||
SVC_(GdiCancelDC, 1) // 0x1139
|
||||
SVC_(GdiChangeGhostFont, 2) // 0x113a
|
||||
SVC_(GdiCheckBitmapBits, 8) // 0x113b
|
||||
SVC_(GdiClearBitmapAttributes, 2) // 0x113c
|
||||
SVC_(GdiClearBrushAttributes, 2) // 0x113d
|
||||
SVC_(GdiColorCorrectPalette, 6) // 0x113e
|
||||
SVC_(GdiConfigureOPMProtectedOutput, 0) // 0x113f
|
||||
SVC_(GdiConvertMetafileRect, 2) // 0x1140
|
||||
SVC_(GdiCreateColorTransform, 8) // 0x1141
|
||||
SVC_(GdiCreateEllipticRgn, 4) // 0x1142
|
||||
SVC_(GdiCreateHatchBrushInternal, 3) // 0x1143
|
||||
SVC_(GdiCreateMetafileDC, 1) // 0x1144
|
||||
SVC_(GdiCreateOPMProtectedOutputs, 0) // 0x1145
|
||||
SVC_(GdiCreateRoundRectRgn, 6) // 0x1146
|
||||
SVC_(GdiCreateServerMetaFile, 6) // 0x1147
|
||||
SVC_(GdiD3dContextCreate, 4) // 0x1148
|
||||
SVC_(GdiD3dContextDestroy, 1) // 0x1149
|
||||
SVC_(GdiD3dContextDestroyAll, 1) // 0x114a
|
||||
SVC_(GdiD3dValidateTextureStageState, 1) // 0x114b
|
||||
SVC_(GdiDDCCIGetCapabilitiesString, 0) // 0x114c
|
||||
SVC_(GdiDDCCIGetCapabilitiesStringLength, 0) // 0x114d
|
||||
SVC_(GdiDDCCIGetTimingReport, 0) // 0x114e
|
||||
SVC_(GdiDDCCIGetVCPFeature, 0) // 0x114f
|
||||
SVC_(GdiDDCCISaveCurrentSettings, 0) // 0x1150
|
||||
SVC_(GdiDDCCISetVCPFeature, 0) // 0x1151
|
||||
SVC_(GdiDdAddAttachedSurface, 3) // 0x1152
|
||||
SVC_(GdiDdAlphaBlt, 3) // 0x1153
|
||||
SVC_(GdiDdAttachSurface, 2) // 0x1154
|
||||
SVC_(GdiDdBeginMoCompFrame, 2) // 0x1155
|
||||
SVC_(GdiDdCanCreateD3DBuffer, 2) // 0x1156
|
||||
SVC_(GdiDdColorControl, 2) // 0x1157
|
||||
SVC_(GdiDdCreateD3DBuffer, 8) // 0x1158
|
||||
SVC_(GdiDdCreateDirectDrawObject, 1) // 0x1159
|
||||
SVC_(GdiDdCreateMoComp, 2) // 0x115a
|
||||
SVC_(GdiDdDDICheckExclusiveOwnership, 0) // 0x115b
|
||||
SVC_(GdiDdDDICheckMonitorPowerState, 0) // 0x115c
|
||||
SVC_(GdiDdDDICheckOcclusion, 0) // 0x115d
|
||||
SVC_(GdiDdDDICloseAdapter, 0) // 0x115e
|
||||
SVC_(GdiDdDDICreateAllocation, 0) // 0x115f
|
||||
SVC_(GdiDdDDICreateContext, 0) // 0x1160
|
||||
SVC_(GdiDdDDICreateDCFromMemory, 0) // 0x1161
|
||||
SVC_(GdiDdDDICreateDevice, 0) // 0x1162
|
||||
SVC_(GdiDdDDICreateOverlay, 0) // 0x1163
|
||||
SVC_(GdiDdDDICreateSynchronizationObject, 0) // 0x1164
|
||||
SVC_(GdiDdDDIDestroyAllocation, 0) // 0x1165
|
||||
SVC_(GdiDdDDIDestroyContext, 0) // 0x1166
|
||||
SVC_(GdiDdDDIDestroyDCFromMemory, 0) // 0x1167
|
||||
SVC_(GdiDdDDIDestroyDevice, 0) // 0x1168
|
||||
SVC_(GdiDdDDIDestroyOverlay, 0) // 0x1169
|
||||
SVC_(GdiDdDDIDestroySynchronizationObject, 0) // 0x116a
|
||||
SVC_(GdiDdDDIEscape, 0) // 0x116b
|
||||
SVC_(GdiDdDDIFlipOverlay, 0) // 0x116c
|
||||
SVC_(GdiDdDDIGetContextSchedulingPriority, 0) // 0x116d
|
||||
SVC_(GdiDdDDIGetDeviceState, 0) // 0x116e
|
||||
SVC_(GdiDdDDIGetDisplayModeList, 0) // 0x116f
|
||||
SVC_(GdiDdDDIGetMultisampleMethodList, 0) // 0x1170
|
||||
SVC_(GdiDdDDIGetPresentHistory, 0) // 0x1171
|
||||
SVC_(GdiDdDDIGetProcessSchedulingPriorityClass, 0) // 0x1172
|
||||
SVC_(GdiDdDDIGetRuntimeData, 0) // 0x1173
|
||||
SVC_(GdiDdDDIGetScanLine, 0) // 0x1174
|
||||
SVC_(GdiDdDDIGetSharedPrimaryHandle, 0) // 0x1175
|
||||
SVC_(GdiDdDDIInvalidateActiveVidPn, 0) // 0x1176
|
||||
SVC_(GdiDdDDILock, 0) // 0x1177
|
||||
SVC_(GdiDdDDIOpenAdapterFromDeviceName, 0) // 0x1178
|
||||
SVC_(GdiDdDDIOpenAdapterFromHdc, 0) // 0x1179
|
||||
SVC_(GdiDdDDIOpenResource, 0) // 0x117a
|
||||
SVC_(GdiDdDDIPollDisplayChildren, 0) // 0x117b
|
||||
SVC_(GdiDdDDIPresent, 0) // 0x117c
|
||||
SVC_(GdiDdDDIQueryAdapterInfo, 0) // 0x117d
|
||||
SVC_(GdiDdDDIQueryAllocationResidency, 0) // 0x117e
|
||||
SVC_(GdiDdDDIQueryResourceInfo, 0) // 0x117f
|
||||
SVC_(GdiDdDDIQueryStatistics, 0) // 0x1180
|
||||
SVC_(GdiDdDDIReleaseProcessVidPnSourceOwners, 0) // 0x1181
|
||||
SVC_(GdiDdDDIRender, 0) // 0x1182
|
||||
SVC_(GdiDdDDISetAllocationPriority, 0) // 0x1183
|
||||
SVC_(GdiDdDDISetContextSchedulingPriority, 0) // 0x1184
|
||||
SVC_(GdiDdDDISetDisplayMode, 0) // 0x1185
|
||||
SVC_(GdiDdDDISetDisplayPrivateDriverFormat, 0) // 0x1186
|
||||
SVC_(GdiDdDDISetGammaRamp, 0) // 0x1187
|
||||
SVC_(GdiDdDDISetProcessSchedulingPriorityClass, 0) // 0x1188
|
||||
SVC_(GdiDdDDISetQueuedLimit, 0) // 0x1189
|
||||
SVC_(GdiDdDDISetVidPnSourceOwner, 0) // 0x118a
|
||||
SVC_(GdiDdDDISharedPrimaryLockNotification, 0) // 0x118b
|
||||
SVC_(GdiDdDDISharedPrimaryUnLockNotification, 0) // 0x118c
|
||||
SVC_(GdiDdDDISignalSynchronizationObject, 0) // 0x118d
|
||||
SVC_(GdiDdDDIUnlock, 0) // 0x118e
|
||||
SVC_(GdiDdDDIUpdateOverlay, 0) // 0x118f
|
||||
SVC_(GdiDdDDIWaitForIdle, 0) // 0x1190
|
||||
SVC_(GdiDdDDIWaitForSynchronizationObject, 0) // 0x1191
|
||||
SVC_(GdiDdDDIWaitForVerticalBlankEvent, 0) // 0x1192
|
||||
SVC_(GdiDdDeleteDirectDrawObject, 1) // 0x1193
|
||||
SVC_(GdiDdDestroyD3DBuffer, 1) // 0x1194
|
||||
SVC_(GdiDdDestroyMoComp, 2) // 0x1195
|
||||
SVC_(GdiDdEndMoCompFrame, 2) // 0x1196
|
||||
SVC_(GdiDdFlip, 5) // 0x1197
|
||||
SVC_(GdiDdFlipToGDISurface, 2) // 0x1198
|
||||
SVC_(GdiDdGetAvailDriverMemory, 2) // 0x1199
|
||||
SVC_(GdiDdGetBltStatus, 2) // 0x119a
|
||||
SVC_(GdiDdGetDC, 2) // 0x119b
|
||||
SVC_(GdiDdGetDriverInfo, 2) // 0x119c
|
||||
SVC_(GdiDdGetDriverState, 1) // 0x119d
|
||||
SVC_(GdiDdGetDxHandle, 3) // 0x119e
|
||||
SVC_(GdiDdGetFlipStatus, 2) // 0x119f
|
||||
SVC_(GdiDdGetInternalMoCompInfo, 2) // 0x11a0
|
||||
SVC_(GdiDdGetMoCompBuffInfo, 2) // 0x11a1
|
||||
SVC_(GdiDdGetMoCompFormats, 2) // 0x11a2
|
||||
SVC_(GdiDdGetMoCompGuids, 2) // 0x11a3
|
||||
SVC_(GdiDdGetScanLine, 2) // 0x11a4
|
||||
SVC_(GdiDdLock, 3) // 0x11a5
|
||||
SVC_(GdiDdQueryDirectDrawObject, 11) // 0x11a6
|
||||
SVC_(GdiDdQueryMoCompStatus, 2) // 0x11a7
|
||||
SVC_(GdiDdReenableDirectDrawObject, 2) // 0x11a8
|
||||
SVC_(GdiDdReleaseDC, 1) // 0x11a9
|
||||
SVC_(GdiDdRenderMoComp, 2) // 0x11aa
|
||||
SVC_(GdiDdSetColorKey, 2) // 0x11ab
|
||||
SVC_(GdiDdSetExclusiveMode, 2) // 0x11ac
|
||||
SVC_(GdiDdSetGammaRamp, 3) // 0x11ad
|
||||
SVC_(GdiDdSetOverlayPosition, 3) // 0x11ae
|
||||
SVC_(GdiDdUnattachSurface, 2) // 0x11af
|
||||
SVC_(GdiDdUnlock, 2) // 0x11b0
|
||||
SVC_(GdiDdUpdateOverlay, 3) // 0x11b1
|
||||
SVC_(GdiDdWaitForVerticalBlank, 2) // 0x11b2
|
||||
SVC_(GdiDeleteColorTransform, 2) // 0x11b3
|
||||
SVC_(GdiDescribePixelFormat, 4) // 0x11b4
|
||||
SVC_(GdiDestroyOPMProtectedOutput, 0) // 0x11b5
|
||||
SVC_(GdiDestroyPhysicalMonitor, 0) // 0x11b6
|
||||
SVC_(GdiDoBanding, 4) // 0x11b7
|
||||
SVC_(GdiDrawEscape, 4) // 0x11b8
|
||||
SVC_(GdiDvpAcquireNotification, 3) // 0x11b9
|
||||
SVC_(GdiDvpCanCreateVideoPort, 2) // 0x11ba
|
||||
SVC_(GdiDvpColorControl, 2) // 0x11bb
|
||||
SVC_(GdiDvpCreateVideoPort, 2) // 0x11bc
|
||||
SVC_(GdiDvpDestroyVideoPort, 2) // 0x11bd
|
||||
SVC_(GdiDvpFlipVideoPort, 4) // 0x11be
|
||||
SVC_(GdiDvpGetVideoPortBandwidth, 2) // 0x11bf
|
||||
SVC_(GdiDvpGetVideoPortConnectInfo, 2) // 0x11c0
|
||||
SVC_(GdiDvpGetVideoPortField, 2) // 0x11c1
|
||||
SVC_(GdiDvpGetVideoPortFlipStatus, 2) // 0x11c2
|
||||
SVC_(GdiDvpGetVideoPortInputFormats, 2) // 0x11c3
|
||||
SVC_(GdiDvpGetVideoPortLine, 2) // 0x11c4
|
||||
SVC_(GdiDvpGetVideoPortOutputFormats, 2) // 0x11c5
|
||||
SVC_(GdiDvpGetVideoSignalStatus, 2) // 0x11c6
|
||||
SVC_(GdiDvpReleaseNotification, 2) // 0x11c7
|
||||
SVC_(GdiDvpUpdateVideoPort, 4) // 0x11c8
|
||||
SVC_(GdiDvpWaitForVideoPortSync, 2) // 0x11c9
|
||||
SVC_(GdiDwmGetDirtyRgn, 0) // 0x11ca
|
||||
SVC_(GdiDwmGetSurfaceData, 0) // 0x11cb
|
||||
SVC_(GdiDxgGenericThunk, 6) // 0x11cc
|
||||
SVC_(GdiEllipse, 5) // 0x11cd
|
||||
SVC_(GdiEnableEudc, 1) // 0x11ce
|
||||
SVC_(GdiEndDoc, 1) // 0x11cf
|
||||
SVC_(GdiEndPage, 1) // 0x11d0
|
||||
SVC_(GdiEngAlphaBlend, 7) // 0x11d1
|
||||
SVC_(GdiEngAssociateSurface, 3) // 0x11d2
|
||||
SVC_(GdiEngBitBlt, 11) // 0x11d3
|
||||
SVC_(GdiEngCheckAbort, 1) // 0x11d4
|
||||
SVC_(GdiEngComputeGlyphSet, 3) // 0x11d5
|
||||
SVC_(GdiEngCopyBits, 6) // 0x11d6
|
||||
SVC_(GdiEngCreateBitmap, 6) // 0x11d7
|
||||
SVC_(GdiEngCreateClip, 0) // 0x11d8
|
||||
SVC_(GdiEngCreateDeviceBitmap, 4) // 0x11d9
|
||||
SVC_(GdiEngCreateDeviceSurface, 4) // 0x11da
|
||||
SVC_(GdiEngCreatePalette, 6) // 0x11db
|
||||
SVC_(GdiEngDeleteClip, 1) // 0x11dc
|
||||
SVC_(GdiEngDeletePalette, 1) // 0x11dd
|
||||
SVC_(GdiEngDeletePath, 1) // 0x11de
|
||||
SVC_(GdiEngDeleteSurface, 1) // 0x11df
|
||||
SVC_(GdiEngEraseSurface, 3) // 0x11e0
|
||||
SVC_(GdiEngFillPath, 7) // 0x11e1
|
||||
SVC_(GdiEngGradientFill, 10) // 0x11e2
|
||||
SVC_(GdiEngLineTo, 9) // 0x11e3
|
||||
SVC_(GdiEngLockSurface, 1) // 0x11e4
|
||||
SVC_(GdiEngMarkBandingSurface, 1) // 0x11e5
|
||||
SVC_(GdiEngPaint, 5) // 0x11e6
|
||||
SVC_(GdiEngPlgBlt, 11) // 0x11e7
|
||||
SVC_(GdiEngStretchBlt, 11) // 0x11e8
|
||||
SVC_(GdiEngStretchBltROP, 13) // 0x11e9
|
||||
SVC_(GdiEngStrokeAndFillPath, 10) // 0x11ea
|
||||
SVC_(GdiEngStrokePath, 8) // 0x11eb
|
||||
SVC_(GdiEngTextOut, 10) // 0x11ec
|
||||
SVC_(GdiEngTransparentBlt, 8) // 0x11ed
|
||||
SVC_(GdiEngUnlockSurface, 1) // 0x11ee
|
||||
SVC_(GdiEnumObjects, 4) // 0x11ef
|
||||
SVC_(GdiEudcLoadUnloadLink, 7) // 0x11f0
|
||||
SVC_(GdiExtFloodFill, 5) // 0x11f1
|
||||
SVC_(GdiFONTOBJ_cGetAllGlyphHandles, 2) // 0x11f2
|
||||
SVC_(GdiFONTOBJ_cGetGlyphs, 5) // 0x11f3
|
||||
SVC_(GdiFONTOBJ_pQueryGlyphAttrs, 2) // 0x11f4
|
||||
SVC_(GdiFONTOBJ_pfdg, 1) // 0x11f5
|
||||
SVC_(GdiFONTOBJ_pifi, 1) // 0x11f6
|
||||
SVC_(GdiFONTOBJ_pvTrueTypeFontFile, 2) // 0x11f7
|
||||
SVC_(GdiFONTOBJ_pxoGetXform, 1) // 0x11f8
|
||||
SVC_(GdiFONTOBJ_vGetInfo, 3) // 0x11f9
|
||||
SVC_(GdiFlattenPath, 1) // 0x11fa
|
||||
SVC_(GdiFontIsLinked, 1) // 0x11fb
|
||||
SVC_(GdiForceUFIMapping, 2) // 0x11fc
|
||||
SVC_(GdiFrameRgn, 5) // 0x11fd
|
||||
SVC_(GdiFullscreenControl, 5) // 0x11fe
|
||||
SVC_(GdiGetBoundsRect, 3) // 0x11ff
|
||||
SVC_(GdiGetCOPPCompatibleOPMInformation, 0) // 0x1200
|
||||
SVC_(GdiGetCertificate, 0) // 0x1201
|
||||
SVC_(GdiGetCertificateSize, 0) // 0x1202
|
||||
SVC_(GdiGetCharABCWidthsW, 6) // 0x1203
|
||||
SVC_(GdiGetCharacterPlacementW, 6) // 0x1204
|
||||
SVC_(GdiGetColorAdjustment, 2) // 0x1205
|
||||
SVC_(GdiGetColorSpaceforBitmap, 1) // 0x1206
|
||||
SVC_(GdiGetDeviceCaps, 2) // 0x1207
|
||||
SVC_(GdiGetDeviceCapsAll, 2) // 0x1208
|
||||
SVC_(GdiGetDeviceGammaRamp, 2) // 0x1209
|
||||
SVC_(GdiGetDeviceWidth, 1) // 0x120a
|
||||
SVC_(GdiGetDhpdev, 1) // 0x120b
|
||||
SVC_(GdiGetETM, 2) // 0x120c
|
||||
SVC_(GdiGetEmbUFI, 7) // 0x120d
|
||||
SVC_(GdiGetEmbedFonts, 0) // 0x120e
|
||||
SVC_(GdiGetEudcTimeStampEx, 3) // 0x120f
|
||||
SVC_(GdiGetFontResourceInfoInternalW, 7) // 0x1210
|
||||
SVC_(GdiGetFontUnicodeRanges, 2) // 0x1211
|
||||
SVC_(GdiGetGlyphIndicesW, 5) // 0x1212
|
||||
SVC_(GdiGetGlyphIndicesWInternal, 6) // 0x1213
|
||||
SVC_(GdiGetGlyphOutline, 8) // 0x1214
|
||||
SVC_(GdiGetKerningPairs, 3) // 0x1215
|
||||
SVC_(GdiGetLinkedUFIs, 3) // 0x1216
|
||||
SVC_(GdiGetMiterLimit, 2) // 0x1217
|
||||
SVC_(GdiGetMonitorID, 3) // 0x1218
|
||||
SVC_(GdiGetNumberOfPhysicalMonitors, 0) // 0x1219
|
||||
SVC_(GdiGetOPMInformation, 0) // 0x121a
|
||||
SVC_(GdiGetOPMRandomNumber, 0) // 0x121b
|
||||
SVC_(GdiGetObjectBitmapHandle, 2) // 0x121c
|
||||
SVC_(GdiGetPath, 4) // 0x121d
|
||||
SVC_(GdiGetPerBandInfo, 2) // 0x121e
|
||||
SVC_(GdiGetPhysicalMonitorDescription, 0) // 0x121f
|
||||
SVC_(GdiGetPhysicalMonitors, 0) // 0x1220
|
||||
SVC_(GdiGetRealizationInfo, 3) // 0x1221
|
||||
SVC_(GdiGetServerMetaFileBits, 7) // 0x1222
|
||||
SVC_(GdiGetSpoolMessage, 4) // 0x1223
|
||||
SVC_(GdiGetStats, 5) // 0x1224
|
||||
SVC_(GdiGetStringBitmapW, 5) // 0x1225
|
||||
SVC_(GdiGetSuggestedOPMProtectedOutputArraySize, 0) // 0x1226
|
||||
SVC_(GdiGetTextExtentExW, 8) // 0x1227
|
||||
SVC_(GdiGetUFI, 6) // 0x1228
|
||||
SVC_(GdiGetUFIPathname, 10) // 0x1229
|
||||
SVC_(GdiGradientFill, 6) // 0x122a
|
||||
SVC_(GdiHT_Get8BPPFormatPalette, 4) // 0x122b
|
||||
SVC_(GdiHT_Get8BPPMaskPalette, 6) // 0x122c
|
||||
SVC_(GdiIcmBrushInfo, 8) // 0x122d
|
||||
SVC_(GdiInit, 0) // 0x122e
|
||||
SVC_(GdiInitSpool, 0) // 0x122f
|
||||
SVC_(GdiMakeFontDir, 5) // 0x1230
|
||||
SVC_(GdiMakeInfoDC, 2) // 0x1231
|
||||
SVC_(GdiMakeObjectUnXferable, 0) // 0x1232
|
||||
SVC_(GdiMakeObjectXferable, 2) // 0x1233
|
||||
SVC_(GdiMirrorWindowOrg, 1) // 0x1234
|
||||
SVC_(GdiMonoBitmap, 1) // 0x1235
|
||||
SVC_(GdiMoveTo, 4) // 0x1236
|
||||
SVC_(GdiOffsetClipRgn, 3) // 0x1237
|
||||
SVC_(GdiPATHOBJ_bEnum, 2) // 0x1238
|
||||
SVC_(GdiPATHOBJ_bEnumClipLines, 3) // 0x1239
|
||||
SVC_(GdiPATHOBJ_vEnumStart, 1) // 0x123a
|
||||
SVC_(GdiPATHOBJ_vEnumStartClipLines, 4) // 0x123b
|
||||
SVC_(GdiPATHOBJ_vGetBounds, 2) // 0x123c
|
||||
SVC_(GdiPathToRegion, 1) // 0x123d
|
||||
SVC_(GdiPlgBlt, 11) // 0x123e
|
||||
SVC_(GdiPolyDraw, 4) // 0x123f
|
||||
SVC_(GdiPolyTextOutW, 4) // 0x1240
|
||||
SVC_(GdiPtInRegion, 3) // 0x1241
|
||||
SVC_(GdiPtVisible, 3) // 0x1242
|
||||
SVC_(GdiQueryFonts, 3) // 0x1243
|
||||
SVC_(GdiRemoveFontResourceW, 6) // 0x1244
|
||||
SVC_(GdiRemoveMergeFont, 2) // 0x1245
|
||||
SVC_(GdiResetDC, 5) // 0x1246
|
||||
SVC_(GdiResizePalette, 2) // 0x1247
|
||||
SVC_(GdiRoundRect, 7) // 0x1248
|
||||
SVC_(GdiSTROBJ_bEnum, 3) // 0x1249
|
||||
SVC_(GdiSTROBJ_bEnumPositionsOnly, 3) // 0x124a
|
||||
SVC_(GdiSTROBJ_bGetAdvanceWidths, 4) // 0x124b
|
||||
SVC_(GdiSTROBJ_dwGetCodePage, 1) // 0x124c
|
||||
SVC_(GdiSTROBJ_vEnumStart, 1) // 0x124d
|
||||
SVC_(GdiScaleViewportExtEx, 6) // 0x124e
|
||||
SVC_(GdiScaleWindowExtEx, 6) // 0x124f
|
||||
SVC_(GdiSelectBrush, 2) // 0x1250
|
||||
SVC_(GdiSelectClipPath, 2) // 0x1251
|
||||
SVC_(GdiSelectPen, 2) // 0x1252
|
||||
SVC_(GdiSetBitmapAttributes, 2) // 0x1253
|
||||
SVC_(GdiSetBrushAttributes, 2) // 0x1254
|
||||
SVC_(GdiSetColorAdjustment, 2) // 0x1255
|
||||
SVC_(GdiSetColorSpace, 2) // 0x1256
|
||||
SVC_(GdiSetDeviceGammaRamp, 2) // 0x1257
|
||||
SVC_(GdiSetFontXform, 3) // 0x1258
|
||||
SVC_(GdiSetIcmMode, 3) // 0x1259
|
||||
SVC_(GdiSetLinkedUFIs, 3) // 0x125a
|
||||
SVC_(GdiSetMagicColors, 3) // 0x125b
|
||||
SVC_(GdiSetOPMSigningKeyAndSequenceNumbers, 0) // 0x125c
|
||||
SVC_(GdiSetPUMPDOBJ, 4) // 0x125d
|
||||
SVC_(GdiSetPixelFormat, 2) // 0x125e
|
||||
SVC_(GdiSetRectRgn, 5) // 0x125f
|
||||
SVC_(GdiSetSizeDevice, 3) // 0x1260
|
||||
SVC_(GdiSetSystemPaletteUse, 2) // 0x1261
|
||||
SVC_(GdiSetTextJustification, 3) // 0x1262
|
||||
SVC_(GdiStartDoc, 4) // 0x1263
|
||||
SVC_(GdiStartPage, 1) // 0x1264
|
||||
SVC_(GdiStrokeAndFillPath, 1) // 0x1265
|
||||
SVC_(GdiStrokePath, 1) // 0x1266
|
||||
SVC_(GdiSwapBuffers, 1) // 0x1267
|
||||
SVC_(GdiTransparentBlt, 11) // 0x1268
|
||||
SVC_(GdiUMPDEngFreeUserMem, 1) // 0x1269
|
||||
SVC_(GdiUnloadPrinterDriver, 2) // 0x126a
|
||||
SVC_(GdiUnmapMemFont, 1) // 0x126b
|
||||
SVC_(GdiUpdateColors, 1) // 0x126c
|
||||
SVC_(GdiUpdateTransform, 1) // 0x126d
|
||||
SVC_(GdiWidenPath, 1) // 0x126e
|
||||
SVC_(GdiXFORMOBJ_bApplyXform, 5) // 0x126f
|
||||
SVC_(GdiXFORMOBJ_iGetXform, 2) // 0x1270
|
||||
SVC_(GdiXLATEOBJ_cGetPalette, 4) // 0x1271
|
||||
SVC_(GdiXLATEOBJ_hGetColorTransform, 1) // 0x1272
|
||||
SVC_(GdiXLATEOBJ_iXlate, 2) // 0x1273
|
||||
SVC_(UserAddClipboardFormatListener, 0) // 0x1274
|
||||
SVC_(UserAssociateInputContext, 3) // 0x1275
|
||||
SVC_(UserBlockInput, 1) // 0x1276
|
||||
SVC_(UserBuildHimcList, 4) // 0x1277
|
||||
SVC_(UserBuildPropList, 4) // 0x1278
|
||||
SVC_(UserCallHwndOpt, 2) // 0x1279
|
||||
SVC_(UserChangeDisplaySettings, 4) // 0x127a
|
||||
SVC_(UserCheckAccessForIntegrityLevel, 0) // 0x127b
|
||||
SVC_(UserCheckDesktopByThreadId, 0) // 0x127c
|
||||
SVC_(UserCheckWindowThreadDesktop, 0) // 0x127d
|
||||
SVC_(UserChildWindowFromPointEx, 4) // 0x127e
|
||||
SVC_(UserClipCursor, 1) // 0x127f
|
||||
SVC_(UserCreateDesktopEx, 0) // 0x1280
|
||||
SVC_(UserCreateInputContext, 1) // 0x1281
|
||||
SVC_(UserCreateWindowStation, 7) // 0x1282
|
||||
SVC_(UserCtxDisplayIOCtl, 3) // 0x1283
|
||||
SVC_(UserDestroyInputContext, 1) // 0x1284
|
||||
SVC_(UserDisableThreadIme, 1) // 0x1285
|
||||
SVC_(UserDoSoundConnect, 0) // 0x1286
|
||||
SVC_(UserDoSoundDisconnect, 0) // 0x1287
|
||||
SVC_(UserDragDetect, 3) // 0x1288
|
||||
SVC_(UserDragObject, 5) // 0x1289
|
||||
SVC_(UserDrawAnimatedRects, 4) // 0x128a
|
||||
SVC_(UserDrawCaption, 4) // 0x128b
|
||||
SVC_(UserDrawCaptionTemp, 7) // 0x128c
|
||||
SVC_(UserDrawMenuBarTemp, 5) // 0x128d
|
||||
SVC_(UserDwmGetDxRgn, 0) // 0x128e
|
||||
SVC_(UserDwmHintDxUpdate, 0) // 0x128f
|
||||
SVC_(UserDwmStartRedirection, 0) // 0x1290
|
||||
SVC_(UserDwmStopRedirection, 0) // 0x1291
|
||||
SVC_(UserEndMenu, 0) // 0x1292
|
||||
SVC_(UserEvent, 1) // 0x1293
|
||||
SVC_(UserFlashWindowEx, 1) // 0x1294
|
||||
SVC_(UserFrostCrashedWindow, 0) // 0x1295
|
||||
SVC_(UserGetAppImeLevel, 1) // 0x1296
|
||||
SVC_(UserGetCaretPos, 1) // 0x1297
|
||||
SVC_(UserGetClipCursor, 1) // 0x1298
|
||||
SVC_(UserGetClipboardViewer, 0) // 0x1299
|
||||
SVC_(UserGetComboBoxInfo, 2) // 0x129a
|
||||
SVC_(UserGetCursorInfo, 1) // 0x129b
|
||||
SVC_(UserGetGuiResources, 2) // 0x129c
|
||||
SVC_(UserGetImeHotKey, 4) // 0x129d
|
||||
SVC_(UserGetImeInfoEx, 2) // 0x129e
|
||||
SVC_(UserGetInternalWindowPos, 3) // 0x129f
|
||||
SVC_(UserGetKeyNameText, 3) // 0x12a0
|
||||
SVC_(UserGetKeyboardLayoutName, 1) // 0x12a1
|
||||
SVC_(UserGetLayeredWindowAttributes, 4) // 0x12a2
|
||||
SVC_(UserGetListBoxInfo, 1) // 0x12a3
|
||||
SVC_(UserGetMenuIndex, 2) // 0x12a4
|
||||
SVC_(UserGetMenuItemRect, 4) // 0x12a5
|
||||
SVC_(UserGetMouseMovePointsEx, 5) // 0x12a6
|
||||
SVC_(UserGetPriorityClipboardFormat, 2) // 0x12a7
|
||||
SVC_(UserGetRawInputBuffer, 3) // 0x12a8
|
||||
SVC_(UserGetRawInputData, 5) // 0x12a9
|
||||
SVC_(UserGetRawInputDeviceInfo, 4) // 0x12aa
|
||||
SVC_(UserGetRawInputDeviceList, 3) // 0x12ab
|
||||
SVC_(UserGetRegisteredRawInputDevices, 3) // 0x12ac
|
||||
SVC_(UserGetUpdatedClipboardFormats, 0) // 0x12ad
|
||||
SVC_(UserGetWOWClass, 2) // 0x12ae
|
||||
SVC_(UserGetWindowMinimizeRect, 0) // 0x12af
|
||||
SVC_(UserGetWindowRgnEx, 0) // 0x12b0
|
||||
SVC_(UserGhostWindowFromHungWindow, 0) // 0x12b1
|
||||
SVC_(UserHardErrorControl, 3) // 0x12b2
|
||||
SVC_(UserHiliteMenuItem, 4) // 0x12b3
|
||||
SVC_(UserHungWindowFromGhostWindow, 0) // 0x12b4
|
||||
SVC_(UserImpersonateDdeClientWindow, 2) // 0x12b5
|
||||
SVC_(UserInitTask, 12) // 0x12b6
|
||||
SVC_(UserInitialize, 3) // 0x12b7
|
||||
SVC_(UserInitializeClientPfnArrays, 4) // 0x12b8
|
||||
SVC_(UserInternalGetWindowIcon, 0) // 0x12b9
|
||||
SVC_(UserLoadKeyboardLayoutEx, 7) // 0x12ba
|
||||
SVC_(UserLockWindowStation, 1) // 0x12bb
|
||||
SVC_(UserLockWorkStation, 0) // 0x12bc
|
||||
SVC_(UserLogicalToPhysicalPoint, 0) // 0x12bd
|
||||
SVC_(UserMNDragLeave, 0) // 0x12be
|
||||
SVC_(UserMNDragOver, 2) // 0x12bf
|
||||
SVC_(UserMenuItemFromPoint, 4) // 0x12c0
|
||||
SVC_(UserMinMaximize, 3) // 0x12c1
|
||||
SVC_(UserNotifyIMEStatus, 3) // 0x12c2
|
||||
SVC_(UserOpenInputDesktop, 3) // 0x12c3
|
||||
SVC_(UserOpenThreadDesktop, 0) // 0x12c4
|
||||
SVC_(UserPaintMonitor, 0) // 0x12c5
|
||||
SVC_(UserPhysicalToLogicalPoint, 0) // 0x12c6
|
||||
SVC_(UserPrintWindow, 3) // 0x12c7
|
||||
SVC_(UserQueryInformationThread, 4) // 0x12c8
|
||||
SVC_(UserQueryInputContext, 2) // 0x12c9
|
||||
SVC_(UserQuerySendMessage, 1) // 0x12ca
|
||||
SVC_(UserRealChildWindowFromPoint, 3) // 0x12cb
|
||||
SVC_(UserRealWaitMessageEx, 2) // 0x12cc
|
||||
SVC_(UserRegisterErrorReportingDialog, 0) // 0x12cd
|
||||
SVC_(UserRegisterHotKey, 4) // 0x12ce
|
||||
SVC_(UserRegisterRawInputDevices, 3) // 0x12cf
|
||||
SVC_(UserRegisterSessionPort, 0) // 0x12d0
|
||||
SVC_(UserRegisterTasklist, 1) // 0x12d1
|
||||
SVC_(UserRegisterUserApiHook, 4) // 0x12d2
|
||||
SVC_(UserRemoteConnect, 3) // 0x12d3
|
||||
SVC_(UserRemoteRedrawRectangle, 4) // 0x12d4
|
||||
SVC_(UserRemoteRedrawScreen, 0) // 0x12d5
|
||||
SVC_(UserRemoteStopScreenUpdates, 0) // 0x12d6
|
||||
SVC_(UserRemoveClipboardFormatListener, 0) // 0x12d7
|
||||
SVC_(UserResolveDesktopForWOW, 1) // 0x12d8
|
||||
SVC_(UserSetAppImeLevel, 2) // 0x12d9
|
||||
SVC_(UserSetClassWord, 3) // 0x12da
|
||||
SVC_(UserSetCursorContents, 2) // 0x12db
|
||||
SVC_(UserSetImeHotKey, 5) // 0x12dc
|
||||
SVC_(UserSetImeInfoEx, 1) // 0x12dd
|
||||
SVC_(UserSetImeOwnerWindow, 2) // 0x12de
|
||||
SVC_(UserSetInternalWindowPos, 4) // 0x12df
|
||||
SVC_(UserSetLayeredWindowAttributes, 4) // 0x12e0
|
||||
SVC_(UserSetMenu, 3) // 0x12e1
|
||||
SVC_(UserSetMenuContextHelpId, 2) // 0x12e2
|
||||
SVC_(UserSetMenuFlagRtoL, 1) // 0x12e3
|
||||
SVC_(UserSetMirrorRendering, 0) // 0x12e4
|
||||
SVC_(UserSetObjectInformation, 4) // 0x12e5
|
||||
SVC_(UserSetProcessDPIAware, 0) // 0x12e6
|
||||
SVC_(UserSetShellWindowEx, 2) // 0x12e7
|
||||
SVC_(UserSetSysColors, 4) // 0x12e8
|
||||
SVC_(UserSetSystemCursor, 2) // 0x12e9
|
||||
SVC_(UserSetSystemTimer, 4) // 0x12ea
|
||||
SVC_(UserSetThreadLayoutHandles, 2) // 0x12eb
|
||||
SVC_(UserSetWindowRgnEx, 0) // 0x12ec
|
||||
SVC_(UserSetWindowStationUser, 4) // 0x12ed
|
||||
SVC_(UserShowSystemCursor, 0) // 0x12ee
|
||||
SVC_(UserSoundSentry, 0) // 0x12ef
|
||||
SVC_(UserSwitchDesktop, 1) // 0x12f0
|
||||
SVC_(UserTestForInteractiveUser, 1) // 0x12f1
|
||||
SVC_(UserTrackPopupMenuEx, 6) // 0x12f2
|
||||
SVC_(UserUnloadKeyboardLayout, 1) // 0x12f3
|
||||
SVC_(UserUnlockWindowStation, 1) // 0x12f4
|
||||
SVC_(UserUnregisterHotKey, 2) // 0x12f5
|
||||
SVC_(UserUnregisterSessionPort, 0) // 0x12f6
|
||||
SVC_(UserUnregisterUserApiHook, 0) // 0x12f7
|
||||
SVC_(UserUpdateInputContext, 3) // 0x12f8
|
||||
SVC_(UserUpdateInstance, 3) // 0x12f9
|
||||
SVC_(UserUpdateLayeredWindow, 10) // 0x12fa
|
||||
SVC_(UserUpdatePerUserSystemParameters, 2) // 0x12fb
|
||||
SVC_(UserUpdateWindowTransform, 0) // 0x12fc
|
||||
SVC_(UserUserHandleGrantAccess, 3) // 0x12fd
|
||||
SVC_(UserValidateHandleSecure, 1) // 0x12fe
|
||||
SVC_(UserWaitForInputIdle, 3) // 0x12ff
|
||||
SVC_(UserWaitForMsgAndEvent, 1) // 0x1300
|
||||
SVC_(UserWin32PoolAllocationStats, 0) // 0x1301
|
||||
SVC_(UserWindowFromPhysicalPoint, 0) // 0x1302
|
||||
SVC_(UserYieldTask, 0) // 0x1303
|
||||
SVC_(UserSetClassLongPtr, 0) // 0x1304
|
||||
SVC_(UserSetWindowLongPtr, 0) // 0x1305
|
File diff suppressed because it is too large
Load Diff
|
@ -6,23 +6,31 @@
|
|||
|
||||
@ stdcall NtGdiAbortDoc(ptr)
|
||||
@ stdcall NtGdiAbortPath(ptr)
|
||||
@ stdcall NtGdiAddEmbFontToDC(ptr ptr)
|
||||
@ stdcall NtGdiAddFontMemResourceEx(ptr long ptr long ptr)
|
||||
@ stdcall NtGdiAddFontResourceW(wstr long long long long ptr)
|
||||
@ stdcall NtGdiAddRemoteFontToDC(ptr ptr long ptr)
|
||||
@ stdcall NtGdiAddFontMemResourceEx(ptr long ptr long ptr)
|
||||
@ stdcall NtGdiRemoveMergeFont(ptr ptr)
|
||||
@ stdcall NtGdiAddRemoteMMInstanceToDC(ptr ptr long)
|
||||
@ stdcall NtGdiAlphaBlend(ptr long long long long ptr long long long long long ptr)
|
||||
@ stdcall NtGdiAngleArc(ptr long long long long long)
|
||||
@ stdcall NtGdiAnyLinkedFonts()
|
||||
@ stdcall NtGdiFontIsLinked(ptr)
|
||||
@ stdcall NtGdiArcInternal(long ptr long long long long long long long long)
|
||||
@ stdcall NtGdiBeginPath(ptr)
|
||||
@ stdcall NtGdiBitBlt(ptr long long long long ptr long long long long long)
|
||||
@ stdcall NtGdiBRUSHOBJ_DeleteRbrush(ptr ptr)
|
||||
@ stdcall NtGdiBRUSHOBJ_hGetColorTransform(ptr)
|
||||
@ stdcall NtGdiBRUSHOBJ_pvAllocRbrush(ptr long)
|
||||
@ stdcall NtGdiBRUSHOBJ_pvGetRbrush(ptr)
|
||||
@ stdcall NtGdiBRUSHOBJ_ulGetBrushColor(ptr)
|
||||
@ stdcall NtGdiCancelDC(ptr)
|
||||
@ stdcall NtGdiChangeGhostFont(ptr long)
|
||||
@ stdcall NtGdiCheckBitmapBits(ptr ptr ptr long long long long ptr)
|
||||
@ stdcall NtGdiCloseFigure(ptr)
|
||||
@ stdcall NtGdiClearBitmapAttributes(ptr long)
|
||||
@ stdcall NtGdiClearBrushAttributes(ptr long)
|
||||
@ stdcall NtGdiCLIPOBJ_bEnum(ptr long long)
|
||||
@ stdcall NtGdiCLIPOBJ_cEnumStart(ptr long long long long)
|
||||
@ stdcall NtGdiCLIPOBJ_ppoGetPath(ptr)
|
||||
@ stdcall NtGdiCloseFigure(ptr)
|
||||
@ stdcall NtGdiColorCorrectPalette(ptr ptr long long ptr long)
|
||||
@ stdcall NtGdiCombineRgn(ptr ptr ptr long)
|
||||
@ stdcall NtGdiCombineTransform(ptr ptr ptr)
|
||||
|
@ -54,27 +62,89 @@
|
|||
@ stdcall NtGdiD3dContextCreate(ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiD3dContextDestroy(ptr)
|
||||
@ stdcall NtGdiD3dContextDestroyAll(ptr)
|
||||
@ stdcall NtGdiD3dValidateTextureStageState(ptr)
|
||||
@ stdcall NtGdiD3dDrawPrimitives2(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDdGetDriverState(ptr)
|
||||
@ stdcall NtGdiD3dValidateTextureStageState(ptr)
|
||||
@ stdcall NtGdiDdAddAttachedSurface(ptr ptr ptr)
|
||||
@ stdcall NtGdiDdAlphaBlt(ptr ptr ptr)
|
||||
@ stdcall NtGdiDdAttachSurface(ptr ptr)
|
||||
@ stdcall NtGdiDdBeginMoCompFrame(ptr ptr)
|
||||
@ stdcall NtGdiDdBlt(ptr ptr ptr)
|
||||
@ stdcall NtGdiDdCanCreateSurface(ptr ptr)
|
||||
@ stdcall NtGdiDdCanCreateD3DBuffer(ptr ptr)
|
||||
@ stdcall NtGdiDdCanCreateSurface(ptr ptr)
|
||||
@ stdcall NtGdiDDCCIGetCapabilitiesString(ptr ptr long)
|
||||
@ stdcall NtGdiDDCCIGetCapabilitiesStringLength(ptr ptr)
|
||||
@ stdcall NtGdiDDCCIGetTimingReport(ptr ptr)
|
||||
@ stdcall NtGdiDDCCIGetVCPFeature(ptr long ptr ptr ptr)
|
||||
@ stdcall NtGdiDDCCISaveCurrentSettings(ptr)
|
||||
@ stdcall NtGdiDDCCISetVCPFeature(ptr long long)
|
||||
@ stdcall NtGdiDdColorControl(ptr ptr)
|
||||
@ stdcall NtGdiDdCreateDirectDrawObject(ptr)
|
||||
@ stdcall NtGdiDdCreateSurface(ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDdCreateD3DBuffer(ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDdCreateDirectDrawObject(ptr)
|
||||
@ stdcall NtGdiDdCreateMoComp(ptr ptr)
|
||||
@ stdcall NtGdiDdCreateSurface(ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDdCreateSurfaceEx(ptr ptr long)
|
||||
@ stdcall NtGdiDdCreateSurfaceObject(ptr ptr ptr ptr ptr long)
|
||||
@ stdcall NtGdiDdDDICheckExclusiveOwnership()
|
||||
@ stdcall NtGdiDdDDICheckMonitorPowerState(ptr)
|
||||
@ stdcall NtGdiDdDDICheckOcclusion(ptr)
|
||||
@ stdcall NtGdiDdDDICloseAdapter(ptr)
|
||||
@ stdcall NtGdiDdDDICreateAllocation(ptr)
|
||||
@ stdcall NtGdiDdDDICreateContext(ptr)
|
||||
@ stdcall NtGdiDdDDICreateDCFromMemory(ptr)
|
||||
@ stdcall NtGdiDdDDICreateDevice(ptr)
|
||||
@ stdcall NtGdiDdDDICreateOverlay(ptr)
|
||||
@ stdcall NtGdiDdDDICreateSynchronizationObject(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyAllocation(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyContext(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyDCFromMemory(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyDevice(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyOverlay(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroySynchronizationObject(ptr)
|
||||
@ stdcall NtGdiDdDDIEscape(ptr)
|
||||
@ stdcall NtGdiDdDDIFlipOverlay(ptr)
|
||||
@ stdcall NtGdiDdDDIGetContextSchedulingPriority(ptr)
|
||||
@ stdcall NtGdiDdDDIGetDeviceState(ptr)
|
||||
@ stdcall NtGdiDdDDIGetDisplayModeList(ptr)
|
||||
@ stdcall NtGdiDdDDIGetMultisampleMethodList(ptr)
|
||||
@ stdcall NtGdiDdDDIGetPresentHistory(ptr)
|
||||
@ stdcall NtGdiDdDDIGetProcessSchedulingPriorityClass(ptr ptr)
|
||||
@ stdcall NtGdiDdDDIGetRuntimeData(ptr)
|
||||
@ stdcall NtGdiDdDDIGetScanLine(ptr)
|
||||
@ stdcall NtGdiDdDDIGetSharedPrimaryHandle(ptr)
|
||||
@ stdcall NtGdiDdDDIInvalidateActiveVidPn(ptr)
|
||||
@ stdcall NtGdiDdDDILock(ptr)
|
||||
@ stdcall NtGdiDdDDIOpenAdapterFromDeviceName(ptr)
|
||||
@ stdcall NtGdiDdDDIOpenAdapterFromHdc(ptr)
|
||||
@ stdcall NtGdiDdDDIOpenResource(ptr)
|
||||
@ stdcall NtGdiDdDDIPollDisplayChildren(ptr)
|
||||
@ stdcall NtGdiDdDDIPresent(ptr)
|
||||
@ stdcall NtGdiDdDDIQueryAdapterInfo(ptr)
|
||||
@ stdcall NtGdiDdDDIQueryAllocationResidency(ptr)
|
||||
@ stdcall NtGdiDdDDIQueryResourceInfo(ptr)
|
||||
@ stdcall NtGdiDdDDIQueryStatistics(ptr)
|
||||
@ stdcall NtGdiDdDDIReleaseProcessVidPnSourceOwners(ptr)
|
||||
@ stdcall NtGdiDdDDIRender(ptr)
|
||||
@ stdcall NtGdiDdDDISetAllocationPriority(ptr)
|
||||
@ stdcall NtGdiDdDDISetContextSchedulingPriority(ptr)
|
||||
@ stdcall NtGdiDdDDISetDisplayMode(ptr)
|
||||
@ stdcall NtGdiDdDDISetDisplayPrivateDriverFormat(ptr)
|
||||
@ stdcall NtGdiDdDDISetGammaRamp(ptr)
|
||||
@ stdcall NtGdiDdDDISetProcessSchedulingPriorityClass(ptr long)
|
||||
@ stdcall NtGdiDdDDISetQueuedLimit(ptr)
|
||||
@ stdcall NtGdiDdDDISetVidPnSourceOwner(ptr)
|
||||
@ stdcall NtGdiDdDDISharedPrimaryLockNotification(ptr)
|
||||
@ stdcall NtGdiDdDDISharedPrimaryUnLockNotification(ptr)
|
||||
@ stdcall NtGdiDdDDISignalSynchronizationObject(ptr)
|
||||
@ stdcall NtGdiDdDDIUnlock(ptr)
|
||||
@ stdcall NtGdiDdDDIUpdateOverlay(ptr)
|
||||
@ stdcall NtGdiDdDDIWaitForIdle(ptr)
|
||||
@ stdcall NtGdiDdDDIWaitForSynchronizationObject(ptr)
|
||||
@ stdcall NtGdiDdDDIWaitForVerticalBlankEvent(ptr)
|
||||
@ stdcall NtGdiDdDeleteDirectDrawObject(ptr)
|
||||
@ stdcall NtGdiDdDeleteSurfaceObject(ptr)
|
||||
@ stdcall NtGdiDdDestroyD3DBuffer(ptr)
|
||||
@ stdcall NtGdiDdDestroyMoComp(ptr ptr)
|
||||
@ stdcall NtGdiDdDestroySurface(ptr long)
|
||||
@ stdcall NtGdiDdDestroyD3DBuffer(ptr)
|
||||
@ stdcall NtGdiDdEndMoCompFrame(ptr ptr)
|
||||
@ stdcall NtGdiDdFlip(ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDdFlipToGDISurface(ptr ptr)
|
||||
|
@ -82,12 +152,13 @@
|
|||
@ stdcall NtGdiDdGetBltStatus(ptr ptr)
|
||||
@ stdcall NtGdiDdGetDC(ptr ptr)
|
||||
@ stdcall NtGdiDdGetDriverInfo(ptr ptr)
|
||||
@ stdcall NtGdiDdGetDriverState(ptr)
|
||||
@ stdcall NtGdiDdGetDxHandle(ptr ptr long)
|
||||
@ stdcall NtGdiDdGetFlipStatus(ptr ptr)
|
||||
@ stdcall NtGdiDdGetInternalMoCompInfo(ptr ptr)
|
||||
@ stdcall NtGdiDdGetMoCompBuffInfo(ptr ptr)
|
||||
@ stdcall NtGdiDdGetMoCompGuids(ptr ptr)
|
||||
@ stdcall NtGdiDdGetMoCompFormats(ptr ptr)
|
||||
@ stdcall NtGdiDdGetMoCompGuids(ptr ptr)
|
||||
@ stdcall NtGdiDdGetScanLine(ptr ptr)
|
||||
@ stdcall NtGdiDdLock(ptr ptr ptr)
|
||||
@ stdcall NtGdiDdLockD3D(ptr ptr)
|
||||
|
@ -100,46 +171,78 @@
|
|||
@ stdcall NtGdiDdSetColorKey(ptr ptr)
|
||||
@ stdcall NtGdiDdSetExclusiveMode(ptr ptr)
|
||||
@ stdcall NtGdiDdSetGammaRamp(ptr ptr ptr)
|
||||
@ stdcall NtGdiDdCreateSurfaceEx(ptr ptr long)
|
||||
@ stdcall NtGdiDdSetOverlayPosition(ptr ptr ptr)
|
||||
@ stdcall NtGdiDdUnattachSurface(ptr ptr)
|
||||
@ stdcall NtGdiDdUnlock(ptr ptr)
|
||||
@ stdcall NtGdiDdUnlockD3D(ptr ptr)
|
||||
@ stdcall NtGdiDdUpdateOverlay(ptr ptr ptr)
|
||||
@ stdcall NtGdiDdWaitForVerticalBlank(ptr ptr)
|
||||
@ stdcall NtGdiDvpCanCreateVideoPort(ptr ptr)
|
||||
@ stdcall NtGdiDvpColorControl(ptr ptr)
|
||||
@ stdcall NtGdiDvpCreateVideoPort(ptr ptr)
|
||||
@ stdcall NtGdiDvpDestroyVideoPort(ptr ptr)
|
||||
@ stdcall NtGdiDvpFlipVideoPort(ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortBandwidth(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortField(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortFlipStatus(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortInputFormats(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortLine(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortOutputFormats(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortConnectInfo(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoSignalStatus(ptr ptr)
|
||||
@ stdcall NtGdiDvpUpdateVideoPort(ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDvpWaitForVideoPortSync(ptr ptr)
|
||||
@ stdcall NtGdiDvpAcquireNotification(ptr ptr ptr)
|
||||
@ stdcall NtGdiDvpReleaseNotification(ptr ptr)
|
||||
@ stdcall NtGdiDxgGenericThunk(ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDeleteClientObj(ptr)
|
||||
@ stdcall NtGdiDeleteColorSpace(ptr)
|
||||
@ stdcall NtGdiDeleteColorTransform(ptr ptr)
|
||||
@ stdcall NtGdiDeleteObjectApp(ptr)
|
||||
@ stdcall NtGdiDescribePixelFormat(ptr long long ptr)
|
||||
@ stdcall NtGdiDestroyOPMProtectedOutput(ptr)
|
||||
@ stdcall NtGdiGetPerBandInfo(ptr ptr)
|
||||
@ stdcall NtGdiDestroyPhysicalMonitor(ptr)
|
||||
@ stdcall NtGdiDoBanding(ptr long ptr ptr)
|
||||
@ stdcall NtGdiDoPalette(ptr long long ptr long long)
|
||||
@ stdcall NtGdiDrawEscape(ptr long long ptr)
|
||||
@ stdcall NtGdiDrawStream(ptr long ptr)
|
||||
@ stdcall NtGdiDvpAcquireNotification(ptr ptr ptr)
|
||||
@ stdcall NtGdiDvpCanCreateVideoPort(ptr ptr)
|
||||
@ stdcall NtGdiDvpColorControl(ptr ptr)
|
||||
@ stdcall NtGdiDvpCreateVideoPort(ptr ptr)
|
||||
@ stdcall NtGdiDvpDestroyVideoPort(ptr ptr)
|
||||
@ stdcall NtGdiDvpFlipVideoPort(ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortBandwidth(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortConnectInfo(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortField(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortFlipStatus(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortInputFormats(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortLine(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoPortOutputFormats(ptr ptr)
|
||||
@ stdcall NtGdiDvpGetVideoSignalStatus(ptr ptr)
|
||||
@ stdcall NtGdiDvpReleaseNotification(ptr ptr)
|
||||
@ stdcall NtGdiDvpUpdateVideoPort(ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiDvpWaitForVideoPortSync(ptr ptr)
|
||||
@ stdcall NtGdiDwmGetDirtyRgn(long long long long long)
|
||||
@ stdcall NtGdiDwmGetSurfaceData(long long)
|
||||
@ stdcall NtGdiDxgGenericThunk(ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEllipse(ptr long long long long)
|
||||
@ stdcall NtGdiEnableEudc(long)
|
||||
@ stdcall NtGdiEndDoc(ptr)
|
||||
@ stdcall NtGdiEndPage(ptr)
|
||||
@ stdcall NtGdiEndPath(ptr)
|
||||
@ stdcall NtGdiEngAlphaBlend(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngAssociateSurface(ptr ptr long)
|
||||
@ stdcall NtGdiEngBitBlt(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngCheckAbort(ptr)
|
||||
@ stdcall NtGdiEngComputeGlyphSet(ptr ptr ptr)
|
||||
@ stdcall NtGdiEngCopyBits(ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngCreateBitmap(long long long long long ptr)
|
||||
@ stdcall NtGdiEngCreateClip()
|
||||
@ stdcall NtGdiEngCreateDeviceBitmap(ptr long long long)
|
||||
@ stdcall NtGdiEngCreateDeviceSurface(ptr long long long)
|
||||
@ stdcall NtGdiEngCreatePalette(long long ptr long long long)
|
||||
@ stdcall NtGdiEngDeleteClip(ptr)
|
||||
@ stdcall NtGdiEngDeletePalette(ptr)
|
||||
@ stdcall NtGdiEngDeletePath(ptr)
|
||||
@ stdcall NtGdiEngDeleteSurface(ptr)
|
||||
@ stdcall NtGdiEngEraseSurface(ptr ptr long)
|
||||
@ stdcall NtGdiEngFillPath(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngGradientFill(ptr ptr ptr ptr long ptr long ptr ptr long)
|
||||
@ stdcall NtGdiEngLineTo(ptr ptr ptr long long long long ptr ptr)
|
||||
@ stdcall NtGdiEngLockSurface(ptr)
|
||||
@ stdcall NtGdiEngMarkBandingSurface(ptr)
|
||||
@ stdcall NtGdiEngPaint(ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngPlgBlt(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr long)
|
||||
@ stdcall NtGdiEngStretchBlt(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr long)
|
||||
@ stdcall NtGdiEngStretchBltROP(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr long ptr long)
|
||||
@ stdcall NtGdiEngStrokeAndFillPath(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngStrokePath(ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngTextOut(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngTransparentBlt(ptr ptr ptr ptr ptr ptr long long)
|
||||
@ stdcall NtGdiEngUnlockSurface(ptr)
|
||||
@ stdcall NtGdiEnumFontChunk(ptr ptr long ptr ptr)
|
||||
@ stdcall NtGdiEnumFontClose(ptr)
|
||||
@ stdcall NtGdiEnumFontOpen(ptr long long long wstr long ptr)
|
||||
|
@ -158,6 +261,15 @@
|
|||
@ stdcall NtGdiFillRgn(ptr ptr ptr)
|
||||
@ stdcall NtGdiFlattenPath(ptr)
|
||||
@ stdcall NtGdiFlush()
|
||||
@ stdcall NtGdiFontIsLinked(ptr)
|
||||
@ stdcall NtGdiFONTOBJ_cGetAllGlyphHandles(ptr ptr)
|
||||
@ stdcall NtGdiFONTOBJ_cGetGlyphs(ptr long long ptr ptr)
|
||||
@ stdcall NtGdiFONTOBJ_pfdg(ptr)
|
||||
@ stdcall NtGdiFONTOBJ_pifi(ptr)
|
||||
@ stdcall NtGdiFONTOBJ_pQueryGlyphAttrs(ptr long)
|
||||
@ stdcall NtGdiFONTOBJ_pvTrueTypeFontFile(ptr ptr)
|
||||
@ stdcall NtGdiFONTOBJ_pxoGetXform(ptr)
|
||||
@ stdcall NtGdiFONTOBJ_vGetInfo(ptr long ptr)
|
||||
@ stdcall NtGdiForceUFIMapping(ptr ptr)
|
||||
@ stdcall NtGdiFrameRgn(ptr ptr ptr long long)
|
||||
@ stdcall NtGdiFullscreenControl(long ptr long ptr ptr)
|
||||
|
@ -171,8 +283,8 @@
|
|||
@ stdcall NtGdiGetCharABCWidthsW(ptr long long ptr long ptr)
|
||||
@ stdcall NtGdiGetCharacterPlacementW(ptr wstr long long ptr long)
|
||||
@ stdcall NtGdiGetCharSet(ptr)
|
||||
@ stdcall NtGdiGetCharWidthW(ptr long long ptr long ptr)
|
||||
@ stdcall NtGdiGetCharWidthInfo(ptr ptr)
|
||||
@ stdcall NtGdiGetCharWidthW(ptr long long ptr long ptr)
|
||||
@ stdcall NtGdiGetColorAdjustment(ptr ptr)
|
||||
@ stdcall NtGdiGetColorSpaceforBitmap(ptr)
|
||||
@ stdcall NtGdiGetCOPPCompatibleOPMInformation(ptr ptr ptr)
|
||||
|
@ -181,27 +293,36 @@
|
|||
@ stdcall NtGdiGetDCObject(ptr long)
|
||||
@ stdcall NtGdiGetDCPoint(ptr long ptr)
|
||||
@ stdcall NtGdiGetDeviceCaps(ptr long)
|
||||
@ stdcall NtGdiGetDeviceGammaRamp(ptr ptr)
|
||||
@ stdcall NtGdiGetDeviceCapsAll(ptr ptr)
|
||||
@ stdcall NtGdiGetDeviceGammaRamp(ptr ptr)
|
||||
@ stdcall NtGdiGetDeviceWidth(ptr)
|
||||
@ stdcall NtGdiGetDhpdev(ptr)
|
||||
@ stdcall NtGdiGetDIBitsInternal(ptr ptr long long ptr ptr long long long)
|
||||
@ stdcall NtGdiGetEmbedFonts()
|
||||
@ stdcall NtGdiGetEmbUFI(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiGetETM(ptr ptr)
|
||||
@ stdcall NtGdiGetEudcTimeStampEx(wstr long long)
|
||||
@ stdcall NtGdiGetFontData(ptr long long ptr long)
|
||||
@ stdcall NtGdiGetFontResourceInfoInternalW(wstr long long long ptr ptr long)
|
||||
@ stdcall NtGdiGetFontUnicodeRanges(ptr ptr)
|
||||
@ stdcall NtGdiGetGlyphIndicesW(ptr wstr long ptr long)
|
||||
@ stdcall NtGdiGetGlyphIndicesWInternal(ptr wstr long ptr long long)
|
||||
@ stdcall NtGdiGetGlyphOutline(ptr long long ptr long ptr ptr long)
|
||||
@ stdcall NtGdiGetOPMInformation(ptr ptr ptr)
|
||||
@ stdcall NtGdiGetKerningPairs(ptr long ptr)
|
||||
@ stdcall NtGdiGetLinkedUFIs(ptr ptr long)
|
||||
@ stdcall NtGdiGetMiterLimit(ptr ptr)
|
||||
@ stdcall NtGdiGetMonitorID(ptr long ptr)
|
||||
@ stdcall NtGdiGetNearestColor(ptr ptr)
|
||||
@ stdcall NtGdiGetNearestPaletteIndex(ptr ptr)
|
||||
@ stdcall NtGdiGetNumberOfPhysicalMonitors(ptr ptr)
|
||||
@ stdcall NtGdiGetObjectBitmapHandle(ptr ptr)
|
||||
@ stdcall NtGdiGetOPMInformation(ptr ptr ptr)
|
||||
@ stdcall NtGdiGetOPMRandomNumber(ptr ptr)
|
||||
@ stdcall NtGdiGetOutlineTextMetricsInternalW(ptr long ptr ptr)
|
||||
@ stdcall NtGdiGetPath(ptr ptr ptr long)
|
||||
@ stdcall NtGdiGetPerBandInfo(ptr ptr)
|
||||
@ stdcall NtGdiGetPhysicalMonitorDescription(ptr long ptr)
|
||||
@ stdcall NtGdiGetPhysicalMonitors(ptr long ptr ptr)
|
||||
@ stdcall NtGdiGetPixel(ptr long long)
|
||||
@ stdcall NtGdiGetRandomRgn(ptr ptr long)
|
||||
@ stdcall NtGdiGetRasterizerCaps(ptr long)
|
||||
|
@ -222,15 +343,12 @@
|
|||
@ stdcall NtGdiGetTextMetricsW(ptr ptr long)
|
||||
@ stdcall NtGdiGetTransform(ptr long ptr)
|
||||
@ stdcall NtGdiGetUFI(ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiGetEmbUFI(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiGetUFIPathname(ptr ptr wstr ptr long ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiGetEmbedFonts()
|
||||
@ stdcall NtGdiChangeGhostFont(ptr long)
|
||||
@ stdcall NtGdiAddEmbFontToDC(ptr ptr)
|
||||
@ stdcall NtGdiGetFontUnicodeRanges(ptr ptr)
|
||||
@ stdcall NtGdiGetWidthTable(ptr long ptr long ptr ptr ptr)
|
||||
@ stdcall NtGdiGradientFill(ptr ptr long ptr long long)
|
||||
@ stdcall NtGdiHfontCreate(ptr long long long ptr)
|
||||
@ stdcall NtGdiHT_Get8BPPFormatPalette(ptr long long long)
|
||||
@ stdcall NtGdiHT_Get8BPPMaskPalette(ptr long long long long long)
|
||||
@ stdcall NtGdiIcmBrushInfo(ptr ptr ptr ptr ptr ptr ptr long)
|
||||
@ stdcall NtGdiInit()
|
||||
@ stdcall NtGdiInitSpool()
|
||||
|
@ -239,29 +357,38 @@
|
|||
@ stdcall NtGdiLineTo(ptr long long)
|
||||
@ stdcall NtGdiMakeFontDir(long ptr long wstr long)
|
||||
@ stdcall NtGdiMakeInfoDC(ptr long)
|
||||
@ stdcall NtGdiMakeObjectUnXferable(ptr)
|
||||
@ stdcall NtGdiMakeObjectXferable(ptr long)
|
||||
@ stdcall NtGdiMaskBlt(ptr long long long long ptr long long ptr long long long long)
|
||||
@ stdcall NtGdiMirrorWindowOrg(ptr)
|
||||
@ stdcall NtGdiModifyWorldTransform(ptr ptr long)
|
||||
@ stdcall NtGdiMonoBitmap(ptr)
|
||||
@ stdcall NtGdiMoveTo(ptr long long ptr)
|
||||
@ stdcall NtGdiOffsetClipRgn(ptr long long)
|
||||
@ stdcall NtGdiOffsetRgn(ptr long long)
|
||||
@ stdcall NtGdiOpenDCW(ptr ptr ptr long long ptr ptr ptr)
|
||||
@ stdcall NtGdiOpenDCW(ptr ptr ptr long long ptr ptr)
|
||||
@ stdcall NtGdiPatBlt(ptr long long long long long)
|
||||
@ stdcall NtGdiPolyPatBlt(ptr long ptr long long)
|
||||
@ stdcall NtGdiPATHOBJ_bEnum(ptr ptr)
|
||||
@ stdcall NtGdiPATHOBJ_bEnumClipLines(ptr long ptr)
|
||||
@ stdcall NtGdiPATHOBJ_vEnumStart(ptr)
|
||||
@ stdcall NtGdiPATHOBJ_vEnumStartClipLines(ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiPATHOBJ_vGetBounds(ptr ptr)
|
||||
@ stdcall NtGdiPathToRegion(ptr)
|
||||
@ stdcall NtGdiPlgBlt(ptr ptr ptr long long long long ptr long long long)
|
||||
@ stdcall NtGdiPolyDraw(ptr ptr ptr long)
|
||||
@ stdcall NtGdiPolyPatBlt(ptr long ptr long long)
|
||||
@ stdcall NtGdiPolyPolyDraw(ptr ptr ptr long long)
|
||||
@ stdcall NtGdiPolyTextOutW(ptr ptr long long)
|
||||
@ stdcall NtGdiPtInRegion(ptr long long)
|
||||
@ stdcall NtGdiPtVisible(ptr long long)
|
||||
@ stdcall NtGdiQueryFonts(ptr long ptr)
|
||||
@ stdcall NtGdiQueryFontAssocInfo(ptr)
|
||||
@ stdcall NtGdiQueryFonts(ptr long ptr)
|
||||
@ stdcall NtGdiRectangle(ptr long long long long)
|
||||
@ stdcall NtGdiRectInRegion(ptr ptr)
|
||||
@ stdcall NtGdiRectVisible(ptr ptr)
|
||||
@ stdcall NtGdiRemoveFontResourceW(ptr long long long long ptr)
|
||||
@ stdcall NtGdiRemoveFontMemResourceEx(ptr)
|
||||
@ stdcall NtGdiRemoveFontResourceW(ptr long long long long ptr)
|
||||
@ stdcall NtGdiRemoveMergeFont(ptr ptr)
|
||||
@ stdcall NtGdiResetDC(ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiResizePalette(ptr long)
|
||||
@ stdcall NtGdiRestoreDC(ptr long)
|
||||
|
@ -287,36 +414,47 @@
|
|||
@ stdcall NtGdiSetFontEnumeration(long)
|
||||
@ stdcall NtGdiSetFontXform(ptr long long)
|
||||
@ stdcall NtGdiSetIcmMode(ptr long long)
|
||||
@ stdcall NtGdiSetLayout(ptr long long)
|
||||
@ stdcall NtGdiSetLinkedUFIs(ptr ptr long)
|
||||
@ stdcall NtGdiSetMagicColors(ptr long long)
|
||||
@ stdcall NtGdiSetMetaRgn(ptr)
|
||||
@ stdcall NtGdiSetMiterLimit(ptr long ptr)
|
||||
@ stdcall NtGdiGetDeviceWidth(ptr)
|
||||
@ stdcall NtGdiMirrorWindowOrg(ptr)
|
||||
@ stdcall NtGdiSetLayout(ptr long long)
|
||||
@ stdcall NtGdiSetOPMSigningKeyAndSequenceNumbers(ptr ptr)
|
||||
@ stdcall NtGdiSetPixel(ptr long long long)
|
||||
@ stdcall NtGdiSetPixelFormat(ptr long)
|
||||
@ stdcall NtGdiSetPUMPDOBJ(ptr long ptr ptr)
|
||||
@ stdcall NtGdiSetRectRgn(ptr long long long long)
|
||||
@ stdcall NtGdiSetSizeDevice(ptr long long)
|
||||
@ stdcall NtGdiSetSystemPaletteUse(ptr long)
|
||||
@ stdcall NtGdiSetTextJustification(ptr long long)
|
||||
@ stdcall NtGdiSetupPublicCFONT(ptr ptr long)
|
||||
@ stdcall NtGdiSetVirtualResolution(ptr long long long long)
|
||||
@ stdcall NtGdiSetSizeDevice(ptr long long)
|
||||
@ stdcall NtGdiStartDoc(ptr ptr ptr long)
|
||||
@ stdcall NtGdiStartPage(ptr)
|
||||
@ stdcall NtGdiStretchBlt(ptr long long long long ptr long long long long long long)
|
||||
@ stdcall NtGdiStretchDIBitsInternal(ptr long long long long long long long long ptr ptr long long long long ptr)
|
||||
@ stdcall NtGdiSTROBJ_bEnum(ptr ptr ptr)
|
||||
@ stdcall NtGdiSTROBJ_bEnumPositionsOnly(ptr ptr ptr)
|
||||
@ stdcall NtGdiSTROBJ_bGetAdvanceWidths(ptr long long ptr)
|
||||
@ stdcall NtGdiSTROBJ_dwGetCodePage(ptr)
|
||||
@ stdcall NtGdiSTROBJ_vEnumStart(ptr)
|
||||
@ stdcall NtGdiStrokeAndFillPath(ptr)
|
||||
@ stdcall NtGdiStrokePath(ptr)
|
||||
@ stdcall NtGdiSwapBuffers(ptr)
|
||||
@ stdcall NtGdiTransformPoints(ptr ptr ptr long long)
|
||||
@ stdcall NtGdiTransparentBlt(ptr long long long long ptr long long long long long)
|
||||
@ stdcall NtGdiUMPDEngFreeUserMem(ptr)
|
||||
@ stdcall NtGdiUnloadPrinterDriver(wstr long)
|
||||
@ stdcall NtGdiUnmapMemFont(ptr)
|
||||
@ stdcall NtGdiUnrealizeObject(ptr)
|
||||
@ stdcall NtGdiUpdateColors(ptr)
|
||||
@ stdcall NtGdiUpdateTransform(ptr)
|
||||
@ stdcall NtGdiWidenPath(ptr)
|
||||
@ stdcall NtGdiXFORMOBJ_bApplyXform(ptr ptr long long ptr)
|
||||
@ stdcall NtGdiXFORMOBJ_iGetXform(ptr ptr)
|
||||
@ stdcall NtGdiXLATEOBJ_cGetPalette(ptr long long ptr)
|
||||
@ stdcall NtGdiXLATEOBJ_hGetColorTransform(ptr)
|
||||
@ stdcall NtGdiXLATEOBJ_iXlate(ptr long)
|
||||
@ stdcall NtUserActivateKeyboardLayout(ptr long)
|
||||
@ stdcall NtUserAddClipboardFormatListener(ptr)
|
||||
@ stdcall NtUserAlterWindowStyle(long long long)
|
||||
|
@ -329,6 +467,7 @@
|
|||
@ stdcall NtUserBuildHwndList(ptr ptr long long long ptr ptr)
|
||||
@ stdcall NtUserBuildNameList(ptr long ptr ptr)
|
||||
@ stdcall NtUserBuildPropList(ptr ptr long ptr)
|
||||
@ stdcall NtUserCalcMenuBar(long long long long long)
|
||||
@ stdcall NtUserCallHwnd(ptr long)
|
||||
@ stdcall NtUserCallHwndLock(ptr long)
|
||||
@ stdcall NtUserCallHwndOpt(ptr long)
|
||||
|
@ -343,9 +482,9 @@
|
|||
@ stdcall NtUserChangeDisplaySettings(ptr ptr ptr long)
|
||||
@ stdcall NtUserCheckAccessForIntegrityLevel(long long ptr)
|
||||
@ stdcall NtUserCheckDesktopByThreadId(long)
|
||||
@ stdcall NtUserCheckWindowThreadDesktop(ptr long long)
|
||||
@ stdcall NtUserCheckImeHotKey(long long)
|
||||
@ stdcall NtUserCheckMenuItem(ptr long long)
|
||||
@ stdcall NtUserCheckWindowThreadDesktop(ptr long long)
|
||||
@ stdcall NtUserChildWindowFromPointEx(ptr long long long)
|
||||
@ stdcall NtUserClipCursor(ptr)
|
||||
@ stdcall NtUserCloseClipboard()
|
||||
|
@ -362,6 +501,7 @@
|
|||
@ stdcall NtUserCreateLocalMemHandle(ptr ptr long ptr)
|
||||
@ stdcall NtUserCreateWindowEx(long ptr ptr ptr long long long long long ptr ptr ptr ptr long ptr)
|
||||
@ stdcall NtUserCreateWindowStation(ptr long long long long long long)
|
||||
@ stdcall NtUserCtxDisplayIOCtl(long long long)
|
||||
@ stdcall NtUserDdeInitialize(long long long long long)
|
||||
@ stdcall NtUserDeferWindowPos(ptr ptr ptr long long long long long)
|
||||
@ stdcall NtUserDefSetText(ptr ptr)
|
||||
|
@ -382,6 +522,10 @@
|
|||
@ stdcall NtUserDrawCaptionTemp(ptr ptr ptr ptr ptr ptr long)
|
||||
@ stdcall NtUserDrawIconEx(ptr long long ptr long long long ptr long long ptr)
|
||||
@ stdcall NtUserDrawMenuBarTemp(ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtUserDwmGetDxRgn(long long long)
|
||||
@ stdcall NtUserDwmHintDxUpdate(long long)
|
||||
@ stdcall NtUserDwmStartRedirection(long)
|
||||
@ stdcall NtUserDwmStopRedirection()
|
||||
@ stdcall NtUserEmptyClipboard()
|
||||
@ stdcall NtUserEnableMenuItem(ptr long long)
|
||||
@ stdcall NtUserEnableScrollBar(ptr long long)
|
||||
|
@ -405,7 +549,8 @@
|
|||
@ stdcall NtUserGetAtomName(long ptr)
|
||||
@ stdcall NtUserGetCaretBlinkTime()
|
||||
@ stdcall NtUserGetCaretPos(ptr)
|
||||
@ stdcall NtUserGetClassInfoEx(ptr ptr ptr ptr long)
|
||||
@ stdcall -arch=i386 NtUserGetClassInfoEx(ptr ptr ptr ptr long)
|
||||
@ stdcall -arch=x86_64 NtUserGetClassInfo(ptr ptr ptr ptr long)
|
||||
@ stdcall NtUserGetClassName(ptr long ptr)
|
||||
@ stdcall NtUserGetClipboardData(long ptr)
|
||||
@ stdcall NtUserGetClipboardFormatName(long wstr ptr)
|
||||
|
@ -435,6 +580,7 @@
|
|||
@ stdcall NtUserGetKeyboardState(ptr)
|
||||
@ stdcall NtUserGetKeyNameText(long wstr long)
|
||||
@ stdcall NtUserGetKeyState(long)
|
||||
@ stdcall NtUserGetLayeredWindowAttributes(ptr ptr ptr ptr)
|
||||
@ stdcall NtUserGetListBoxInfo(ptr)
|
||||
@ stdcall NtUserGetMenuBarInfo(ptr long long ptr)
|
||||
@ stdcall NtUserGetMenuIndex(ptr ptr)
|
||||
|
@ -445,6 +591,7 @@
|
|||
@ stdcall NtUserGetOpenClipboardWindow()
|
||||
@ stdcall NtUserGetPriorityClipboardFormat(ptr long)
|
||||
@ stdcall NtUserGetProcessWindowStation()
|
||||
@ stdcall NtUserGetProp(ptr long)
|
||||
@ stdcall NtUserGetRawInputBuffer(ptr ptr long)
|
||||
@ stdcall NtUserGetRawInputData(ptr long ptr ptr long)
|
||||
@ stdcall NtUserGetRawInputDeviceInfo(ptr long ptr ptr)
|
||||
|
@ -459,7 +606,9 @@
|
|||
@ stdcall NtUserGetUpdateRect(ptr ptr long)
|
||||
@ stdcall NtUserGetUpdateRgn(ptr ptr long)
|
||||
@ stdcall NtUserGetWindowDC(ptr)
|
||||
@ stdcall NtUserGetWindowMinimizeRect(long long)
|
||||
@ stdcall NtUserGetWindowPlacement(ptr ptr)
|
||||
@ stdcall NtUserGetWindowRgnEx(ptr ptr long)
|
||||
@ stdcall NtUserGetWOWClass(ptr ptr)
|
||||
@ stdcall NtUserGhostWindowFromHungWindow(ptr)
|
||||
@ stdcall NtUserHardErrorControl(long long long)
|
||||
|
@ -467,11 +616,11 @@
|
|||
@ stdcall NtUserHiliteMenuItem(ptr ptr long long)
|
||||
@ stdcall NtUserHungWindowFromGhostWindow(ptr)
|
||||
@ stdcall NtUserImpersonateDdeClientWindow(ptr ptr)
|
||||
@ stdcall NtUserInitialize(long ptr)
|
||||
@ stdcall NtUserInitialize(long ptr ptr)
|
||||
@ stdcall NtUserInitializeClientPfnArrays(ptr ptr ptr ptr)
|
||||
@ stdcall NtUserInitTask(long long long long long long long long long long long long)
|
||||
@ stdcall NtUserInternalGetWindowText(ptr wstr ptr)
|
||||
@ stdcall NtUserInternalGetWindowIcon(ptr long)
|
||||
@ stdcall NtUserInternalGetWindowText(ptr wstr ptr)
|
||||
@ stdcall NtUserInvalidateRect(ptr ptr long)
|
||||
@ stdcall NtUserInvalidateRgn(ptr ptr long)
|
||||
@ stdcall NtUserIsClipboardFormatAvailable(long)
|
||||
|
@ -498,13 +647,14 @@
|
|||
@ stdcall NtUserOpenThreadDesktop(ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtUserOpenWindowStation(ptr long)
|
||||
@ stdcall NtUserPaintDesktop(ptr)
|
||||
@ stdcall NtUserPaintMenuBar(long long long long long long)
|
||||
@ stdcall NtUserPaintMonitor(long long long)
|
||||
@ stdcall NtUserPeekMessage(ptr ptr long long long)
|
||||
@ stdcall NtUserPhysicalToLogicalPoint(ptr ptr)
|
||||
@ stdcall NtUserPostMessage(ptr long long long)
|
||||
@ stdcall NtUserPostThreadMessage(long long long long)
|
||||
@ stdcall NtUserPrintWindow(ptr ptr long)
|
||||
@ stdcall NtUserProcessConnect(ptr ptr)
|
||||
@ stdcall NtUserProcessConnect(ptr ptr long)
|
||||
@ stdcall NtUserQueryInformationThread(long long long long)
|
||||
@ stdcall NtUserQueryInputContext(long long)
|
||||
@ stdcall NtUserQuerySendMessage(long)
|
||||
|
@ -515,11 +665,16 @@
|
|||
@ stdcall NtUserRedrawWindow(ptr ptr ptr long)
|
||||
@ stdcall NtUserRegisterClassExWOW(ptr ptr ptr ptr long long ptr)
|
||||
@ stdcall NtUserRegisterErrorReportingDialog(long long)
|
||||
@ stdcall NtUserRegisterUserApiHook(ptr ptr long long)
|
||||
@ stdcall NtUserRegisterHotKey(ptr long long long)
|
||||
@ stdcall NtUserRegisterRawInputDevices(ptr long long)
|
||||
@ stdcall NtUserRegisterSessionPort(long)
|
||||
@ stdcall NtUserRegisterTasklist(long)
|
||||
@ stdcall NtUserRegisterUserApiHook(ptr ptr long long)
|
||||
@ stdcall NtUserRegisterWindowMessage(ptr)
|
||||
@ stdcall NtUserRemoteConnect(long long long)
|
||||
@ stdcall NtUserRemoteRedrawRectangle(long long long long)
|
||||
@ stdcall NtUserRemoteRedrawScreen()
|
||||
@ stdcall NtUserRemoteStopScreenUpdates()
|
||||
@ stdcall NtUserRemoveClipboardFormatListener(ptr)
|
||||
@ stdcall NtUserRemoveMenu(ptr long long)
|
||||
@ stdcall NtUserRemoveProp(ptr long)
|
||||
|
@ -534,6 +689,7 @@
|
|||
@ stdcall NtUserSetAppImeLevel(long long)
|
||||
@ stdcall NtUserSetCapture(ptr)
|
||||
@ stdcall NtUserSetClassLong(ptr long ptr long)
|
||||
@ stdcall -arch=x86_64 NtUserSetClassLongPtr(ptr long ptr long)
|
||||
@ stdcall NtUserSetClassWord(ptr long long)
|
||||
@ stdcall NtUserSetClipboardData(long ptr ptr)
|
||||
@ stdcall NtUserSetClipboardViewer(ptr)
|
||||
|
@ -549,32 +705,33 @@
|
|||
@ stdcall NtUserSetInformationThread(ptr long ptr long)
|
||||
@ stdcall NtUserSetInternalWindowPos(ptr long ptr ptr)
|
||||
@ stdcall NtUserSetKeyboardState(ptr)
|
||||
@ stdcall NtUserSetLayeredWindowAttributes(ptr long long long)
|
||||
@ stdcall NtUserSetMenu(ptr ptr long)
|
||||
@ stdcall NtUserSetMenuContextHelpId(ptr long)
|
||||
@ stdcall NtUserSetMenuDefaultItem(ptr long long)
|
||||
@ stdcall NtUserSetMenuFlagRtoL(ptr)
|
||||
@ stdcall NtUserSetMirrorRendering(long long)
|
||||
@ stdcall NtUserSetObjectInformation(ptr long ptr long)
|
||||
@ stdcall NtUserSetParent(ptr ptr)
|
||||
@ stdcall NtUserSetProcessDPIAware()
|
||||
@ stdcall NtUserSetProcessWindowStation(ptr)
|
||||
@ stdcall NtUserGetProp(ptr long)
|
||||
@ stdcall NtUserSetProp(ptr long ptr)
|
||||
@ stdcall NtUserSetScrollInfo(ptr long ptr long)
|
||||
@ stdcall NtUserSetShellWindowEx(ptr ptr)
|
||||
@ stdcall NtUserSetSysColors(long ptr ptr long)
|
||||
@ stdcall NtUserSetSystemCursor(ptr long)
|
||||
@ stdcall NtUserSetSystemMenu(ptr ptr)
|
||||
@ stdcall NtUserSetSystemTimer(ptr ptr ptr)
|
||||
@ stdcall NtUserSetSystemTimer(ptr ptr long ptr)
|
||||
@ stdcall NtUserSetThreadDesktop(ptr)
|
||||
@ stdcall NtUserSetThreadLayoutHandles(long long)
|
||||
@ stdcall NtUserSetThreadState(long long)
|
||||
@ stdcall NtUserSetTimer(ptr ptr long ptr)
|
||||
@ stdcall NtUserSetProcessDPIAware()
|
||||
@ stdcall NtUserSetWindowFNID(ptr long)
|
||||
@ stdcall NtUserSetWindowLong(ptr long long long)
|
||||
@ stdcall -arch=x86_64 NtUserSetWindowLongPtr(ptr long long long)
|
||||
@ stdcall NtUserSetWindowPlacement(ptr ptr)
|
||||
@ stdcall NtUserSetWindowPos(ptr ptr long long long long long)
|
||||
@ stdcall NtUserSetWindowRgn(ptr ptr long)
|
||||
@ stdcall NtUserGetWindowRgnEx(ptr ptr long)
|
||||
@ stdcall NtUserSetWindowRgnEx(ptr ptr long)
|
||||
@ stdcall NtUserSetWindowsHookAW(long ptr long)
|
||||
@ stdcall NtUserSetWindowsHookEx(ptr ptr long long ptr long)
|
||||
|
@ -583,6 +740,7 @@
|
|||
@ stdcall NtUserSetWinEventHook(long long ptr ptr ptr long long long)
|
||||
@ stdcall NtUserShowCaret(ptr)
|
||||
@ stdcall NtUserShowScrollBar(ptr long long)
|
||||
@ stdcall NtUserShowSystemCursor(long)
|
||||
@ stdcall NtUserShowWindow(ptr long)
|
||||
@ stdcall NtUserShowWindowAsync(ptr long)
|
||||
@ stdcall NtUserSoundSentry()
|
||||
|
@ -594,8 +752,6 @@
|
|||
@ stdcall NtUserToUnicodeEx(long long ptr wstr long long ptr)
|
||||
@ stdcall NtUserTrackMouseEvent(ptr)
|
||||
@ stdcall NtUserTrackPopupMenuEx(ptr long long long ptr ptr)
|
||||
@ stdcall NtUserCalcMenuBar(long long long long long)
|
||||
@ stdcall NtUserPaintMenuBar(long long long long long long)
|
||||
@ stdcall NtUserTranslateAccelerator(ptr ptr ptr)
|
||||
@ stdcall NtUserTranslateMessage(ptr long)
|
||||
@ stdcall NtUserUnhookWindowsHookEx(ptr)
|
||||
|
@ -603,14 +759,14 @@
|
|||
@ stdcall NtUserUnloadKeyboardLayout(ptr)
|
||||
@ stdcall NtUserUnlockWindowStation(ptr)
|
||||
@ stdcall NtUserUnregisterClass(ptr ptr ptr)
|
||||
@ stdcall NtUserUnregisterUserApiHook()
|
||||
@ stdcall NtUserUnregisterHotKey(ptr long)
|
||||
@ stdcall NtUserUnregisterSessionPort()
|
||||
@ stdcall NtUserUnregisterUserApiHook()
|
||||
@ stdcall NtUserUpdateInputContext(long long long)
|
||||
@ stdcall NtUserUpdateInstance(long long long)
|
||||
@ stdcall NtUserUpdateLayeredWindow(ptr ptr ptr ptr ptr ptr long ptr long ptr)
|
||||
@ stdcall NtUserGetLayeredWindowAttributes(ptr ptr ptr ptr)
|
||||
@ stdcall NtUserSetLayeredWindowAttributes(ptr long long long)
|
||||
@ stdcall NtUserUpdatePerUserSystemParameters(long)
|
||||
@ stdcall NtUserUpdatePerUserSystemParameters(long long)
|
||||
@ stdcall NtUserUpdateWindowTransform(ptr ptr long)
|
||||
@ stdcall NtUserUserHandleGrantAccess(ptr ptr long)
|
||||
@ stdcall NtUserValidateHandleSecure(ptr)
|
||||
@ stdcall NtUserValidateRect(ptr ptr)
|
||||
|
@ -623,156 +779,3 @@
|
|||
@ stdcall NtUserWindowFromPhysicalPoint(long long)
|
||||
@ stdcall NtUserWindowFromPoint(long long)
|
||||
@ stdcall NtUserYieldTask()
|
||||
@ stdcall NtUserRemoteConnect(long long long)
|
||||
@ stdcall NtUserRemoteRedrawRectangle(long long long long)
|
||||
@ stdcall NtUserRemoteRedrawScreen()
|
||||
@ stdcall NtUserRemoteStopScreenUpdates()
|
||||
@ stdcall NtUserCtxDisplayIOCtl(long long long)
|
||||
@ stdcall NtUserRegisterSessionPort(long)
|
||||
@ stdcall NtUserUnregisterSessionPort()
|
||||
@ stdcall NtUserUpdateWindowTransform(ptr ptr long)
|
||||
@ stdcall NtUserDwmStartRedirection(long)
|
||||
@ stdcall NtUserDwmStopRedirection()
|
||||
@ stdcall NtUserDwmHintDxUpdate(long long)
|
||||
@ stdcall NtUserDwmGetDxRgn(long long long)
|
||||
@ stdcall NtUserGetWindowMinimizeRect(long long)
|
||||
@ stdcall NtGdiEngAssociateSurface(ptr ptr long)
|
||||
@ stdcall NtGdiEngCreateBitmap(long long long long long ptr)
|
||||
@ stdcall NtGdiEngCreateDeviceSurface(ptr long long long)
|
||||
@ stdcall NtGdiEngCreateDeviceBitmap(ptr long long long)
|
||||
@ stdcall NtGdiEngCreatePalette(long long ptr long long long)
|
||||
@ stdcall NtGdiEngComputeGlyphSet(ptr ptr ptr)
|
||||
@ stdcall NtGdiEngCopyBits(ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngDeletePalette(ptr)
|
||||
@ stdcall NtGdiEngDeleteSurface(ptr)
|
||||
@ stdcall NtGdiEngEraseSurface(ptr ptr long)
|
||||
@ stdcall NtGdiEngUnlockSurface(ptr)
|
||||
@ stdcall NtGdiEngLockSurface(ptr)
|
||||
@ stdcall NtGdiEngBitBlt(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngStretchBlt(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr long)
|
||||
@ stdcall NtGdiEngPlgBlt(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr long)
|
||||
@ stdcall NtGdiEngMarkBandingSurface(ptr)
|
||||
@ stdcall NtGdiEngStrokePath(ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngFillPath(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngStrokeAndFillPath(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngPaint(ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngLineTo(ptr ptr ptr long long long long ptr ptr)
|
||||
@ stdcall NtGdiEngAlphaBlend(ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngGradientFill(ptr ptr ptr ptr long ptr long ptr ptr long)
|
||||
@ stdcall NtGdiEngTransparentBlt(ptr ptr ptr ptr ptr ptr long long)
|
||||
@ stdcall NtGdiEngTextOut(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiEngStretchBltROP(ptr ptr ptr ptr ptr ptr ptr ptr ptr ptr long ptr long)
|
||||
@ stdcall NtGdiXLATEOBJ_cGetPalette(ptr long long ptr)
|
||||
@ stdcall NtGdiXLATEOBJ_iXlate(ptr long)
|
||||
@ stdcall NtGdiXLATEOBJ_hGetColorTransform(ptr)
|
||||
@ stdcall NtGdiCLIPOBJ_bEnum(ptr long long)
|
||||
@ stdcall NtGdiCLIPOBJ_cEnumStart(ptr long long long long)
|
||||
@ stdcall NtGdiCLIPOBJ_ppoGetPath(ptr)
|
||||
@ stdcall NtGdiEngDeletePath(ptr)
|
||||
@ stdcall NtGdiEngCreateClip()
|
||||
@ stdcall NtGdiEngDeleteClip(ptr)
|
||||
@ stdcall NtGdiBRUSHOBJ_ulGetBrushColor(ptr)
|
||||
@ stdcall NtGdiBRUSHOBJ_pvAllocRbrush(ptr long)
|
||||
@ stdcall NtGdiBRUSHOBJ_pvGetRbrush(ptr)
|
||||
@ stdcall NtGdiBRUSHOBJ_hGetColorTransform(ptr)
|
||||
@ stdcall NtGdiXFORMOBJ_bApplyXform(ptr ptr long long ptr)
|
||||
@ stdcall NtGdiXFORMOBJ_iGetXform(ptr ptr)
|
||||
@ stdcall NtGdiFONTOBJ_vGetInfo(ptr long ptr)
|
||||
@ stdcall NtGdiFONTOBJ_pxoGetXform(ptr)
|
||||
@ stdcall NtGdiFONTOBJ_cGetGlyphs(ptr long long ptr ptr)
|
||||
@ stdcall NtGdiFONTOBJ_pifi(ptr)
|
||||
@ stdcall NtGdiFONTOBJ_pfdg(ptr)
|
||||
@ stdcall NtGdiFONTOBJ_pQueryGlyphAttrs(ptr long)
|
||||
@ stdcall NtGdiFONTOBJ_pvTrueTypeFontFile(ptr ptr)
|
||||
@ stdcall NtGdiFONTOBJ_cGetAllGlyphHandles(ptr ptr)
|
||||
@ stdcall NtGdiSTROBJ_bEnum(ptr ptr ptr)
|
||||
@ stdcall NtGdiSTROBJ_bEnumPositionsOnly(ptr ptr ptr)
|
||||
@ stdcall NtGdiSTROBJ_bGetAdvanceWidths(ptr long long ptr)
|
||||
@ stdcall NtGdiSTROBJ_vEnumStart(ptr)
|
||||
@ stdcall NtGdiSTROBJ_dwGetCodePage(ptr)
|
||||
@ stdcall NtGdiPATHOBJ_vGetBounds(ptr ptr)
|
||||
@ stdcall NtGdiPATHOBJ_bEnum(ptr ptr)
|
||||
@ stdcall NtGdiPATHOBJ_vEnumStart(ptr)
|
||||
@ stdcall NtGdiPATHOBJ_vEnumStartClipLines(ptr ptr ptr ptr)
|
||||
@ stdcall NtGdiPATHOBJ_bEnumClipLines(ptr long ptr)
|
||||
@ stdcall NtGdiGetDhpdev(ptr)
|
||||
@ stdcall NtGdiEngCheckAbort(ptr)
|
||||
@ stdcall NtGdiHT_Get8BPPFormatPalette(ptr long long long)
|
||||
@ stdcall NtGdiHT_Get8BPPMaskPalette(ptr long long long long long)
|
||||
@ stdcall NtGdiUpdateTransform(ptr)
|
||||
@ stdcall NtGdiSetPUMPDOBJ(ptr long ptr ptr)
|
||||
@ stdcall NtGdiBRUSHOBJ_DeleteRbrush(ptr ptr)
|
||||
@ stdcall NtGdiUMPDEngFreeUserMem(ptr)
|
||||
@ stdcall NtGdiDrawStream(ptr long ptr)
|
||||
@ stdcall NtGdiDwmGetDirtyRgn(long long long long long)
|
||||
@ stdcall NtGdiDwmGetSurfaceData(long long)
|
||||
@ stdcall NtGdiDdDDICreateAllocation(ptr)
|
||||
@ stdcall NtGdiDdDDIQueryResourceInfo(ptr)
|
||||
@ stdcall NtGdiDdDDIOpenResource(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyAllocation(ptr)
|
||||
@ stdcall NtGdiDdDDISetAllocationPriority(ptr)
|
||||
@ stdcall NtGdiDdDDIQueryAllocationResidency(ptr)
|
||||
@ stdcall NtGdiDdDDICreateDevice(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyDevice(ptr)
|
||||
@ stdcall NtGdiDdDDICreateContext(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyContext(ptr)
|
||||
@ stdcall NtGdiDdDDICreateSynchronizationObject(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroySynchronizationObject(ptr)
|
||||
@ stdcall NtGdiDdDDIWaitForSynchronizationObject(ptr)
|
||||
@ stdcall NtGdiDdDDISignalSynchronizationObject(ptr)
|
||||
@ stdcall NtGdiDdDDIGetRuntimeData(ptr)
|
||||
@ stdcall NtGdiDdDDIQueryAdapterInfo(ptr)
|
||||
@ stdcall NtGdiDdDDILock(ptr)
|
||||
@ stdcall NtGdiDdDDIUnlock(ptr)
|
||||
@ stdcall NtGdiDdDDIGetDisplayModeList(ptr)
|
||||
@ stdcall NtGdiDdDDISetDisplayMode(ptr)
|
||||
@ stdcall NtGdiDdDDIGetMultisampleMethodList(ptr)
|
||||
@ stdcall NtGdiDdDDIPresent(ptr)
|
||||
@ stdcall NtGdiDdDDIRender(ptr)
|
||||
@ stdcall NtGdiDdDDIOpenAdapterFromDeviceName(ptr)
|
||||
@ stdcall NtGdiDdDDIOpenAdapterFromHdc(ptr)
|
||||
@ stdcall NtGdiDdDDICloseAdapter(ptr)
|
||||
@ stdcall NtGdiDdDDIGetSharedPrimaryHandle(ptr)
|
||||
@ stdcall NtGdiDdDDIEscape(ptr)
|
||||
@ stdcall NtGdiDdDDIQueryStatistics(ptr)
|
||||
@ stdcall NtGdiDdDDISetVidPnSourceOwner(ptr)
|
||||
@ stdcall NtGdiDdDDIGetPresentHistory(ptr)
|
||||
@ stdcall NtGdiDdDDICreateOverlay(ptr)
|
||||
@ stdcall NtGdiDdDDIUpdateOverlay(ptr)
|
||||
@ stdcall NtGdiDdDDIFlipOverlay(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyOverlay(ptr)
|
||||
@ stdcall NtGdiDdDDIWaitForVerticalBlankEvent(ptr)
|
||||
@ stdcall NtGdiDdDDISetGammaRamp(ptr)
|
||||
@ stdcall NtGdiDdDDIGetDeviceState(ptr)
|
||||
@ stdcall NtGdiDdDDICreateDCFromMemory(ptr)
|
||||
@ stdcall NtGdiDdDDIDestroyDCFromMemory(ptr)
|
||||
@ stdcall NtGdiDdDDISetContextSchedulingPriority(ptr)
|
||||
@ stdcall NtGdiDdDDIGetContextSchedulingPriority(ptr)
|
||||
@ stdcall NtGdiDdDDISetProcessSchedulingPriorityClass(ptr long)
|
||||
@ stdcall NtGdiDdDDIGetProcessSchedulingPriorityClass(ptr ptr)
|
||||
@ stdcall NtGdiDdDDIReleaseProcessVidPnSourceOwners(ptr)
|
||||
@ stdcall NtGdiDdDDIGetScanLine(ptr)
|
||||
@ stdcall NtGdiDdDDISetQueuedLimit(ptr)
|
||||
@ stdcall NtGdiDdDDIPollDisplayChildren(ptr)
|
||||
@ stdcall NtGdiDdDDIInvalidateActiveVidPn(ptr)
|
||||
@ stdcall NtGdiDdDDICheckOcclusion(ptr)
|
||||
@ stdcall NtGdiDdDDIWaitForIdle(ptr)
|
||||
@ stdcall NtGdiDdDDICheckMonitorPowerState(ptr)
|
||||
@ stdcall NtGdiDdDDICheckExclusiveOwnership()
|
||||
@ stdcall NtGdiDdDDISetDisplayPrivateDriverFormat(ptr)
|
||||
@ stdcall NtGdiDdDDISharedPrimaryLockNotification(ptr)
|
||||
@ stdcall NtGdiDdDDISharedPrimaryUnLockNotification(ptr)
|
||||
@ stdcall NtGdiMakeObjectXferable(ptr long)
|
||||
@ stdcall NtGdiMakeObjectUnXferable(ptr)
|
||||
@ stdcall NtGdiGetNumberOfPhysicalMonitors(ptr ptr)
|
||||
@ stdcall NtGdiGetPhysicalMonitors(ptr long ptr ptr)
|
||||
@ stdcall NtGdiGetPhysicalMonitorDescription(ptr long ptr)
|
||||
@ stdcall NtGdiDestroyPhysicalMonitor(ptr)
|
||||
@ stdcall NtGdiDDCCIGetVCPFeature(ptr long ptr ptr ptr)
|
||||
@ stdcall NtGdiDDCCISetVCPFeature(ptr long long)
|
||||
@ stdcall NtGdiDDCCISaveCurrentSettings(ptr)
|
||||
@ stdcall NtGdiDDCCIGetCapabilitiesStringLength(ptr ptr)
|
||||
@ stdcall NtGdiDDCCIGetCapabilitiesString(ptr ptr long)
|
||||
@ stdcall NtGdiDDCCIGetTimingReport(ptr ptr)
|
||||
@ stdcall NtUserSetMirrorRendering(long long)
|
||||
@ stdcall NtUserShowSystemCursor(long)
|
||||
|
|
|
@ -91,6 +91,10 @@ static __inline__ __attribute__((always_inline)) void __str(unsigned short *Dest
|
|||
__asm__ __volatile__("str %0" : : "m"(*Destination) : "memory");
|
||||
}
|
||||
|
||||
static __inline__ __attribute__((always_inline)) void __swapgs(void)
|
||||
{
|
||||
__asm__ __volatile__("swapgs" : : : "memory");
|
||||
}
|
||||
|
||||
#elif defined(_MSC_VER)
|
||||
|
||||
|
@ -106,6 +110,7 @@ void __ltr(unsigned short Source);
|
|||
|
||||
void __str(unsigned short *Destination);
|
||||
|
||||
void __swapgs(void);
|
||||
|
||||
#else
|
||||
#error Unknown compiler for inline assembler
|
||||
|
|
|
@ -480,6 +480,11 @@ VOID
|
|||
KiUserCallbackExit(
|
||||
_In_ PKTRAP_FRAME TrapFrame);
|
||||
|
||||
BOOLEAN
|
||||
KiProcessorFreezeHandler(
|
||||
_In_ PKTRAP_FRAME TrapFrame,
|
||||
_In_ PKEXCEPTION_FRAME ExceptionFrame);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
@ -72,14 +72,6 @@ BOOLEAN
|
|||
IN BOOLEAN SecondChance
|
||||
);
|
||||
|
||||
typedef
|
||||
BOOLEAN
|
||||
(NTAPI *PKDEBUG_SWITCH_ROUTINE)(
|
||||
IN PEXCEPTION_RECORD ExceptionRecord,
|
||||
IN PCONTEXT Context,
|
||||
IN BOOLEAN SecondChance
|
||||
);
|
||||
|
||||
//
|
||||
// Initialization Routines
|
||||
//
|
||||
|
@ -110,13 +102,10 @@ KdIsThisAKdTrap(
|
|||
//
|
||||
// Multi-Processor Switch Support
|
||||
//
|
||||
BOOLEAN
|
||||
KCONTINUE_STATUS
|
||||
NTAPI
|
||||
KdpSwitchProcessor(
|
||||
IN PEXCEPTION_RECORD ExceptionRecord,
|
||||
IN OUT PCONTEXT ContextRecord,
|
||||
IN BOOLEAN SecondChanceException
|
||||
);
|
||||
KdReportProcessorChange(
|
||||
VOID);
|
||||
|
||||
//
|
||||
// Time Slip Support
|
||||
|
@ -540,7 +529,6 @@ extern LARGE_INTEGER KdTimerStart;
|
|||
extern ULONG KdDisableCount;
|
||||
extern KD_CONTEXT KdpContext;
|
||||
extern PKDEBUG_ROUTINE KiDebugRoutine;
|
||||
extern PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;
|
||||
extern BOOLEAN KdBreakAfterSymbolLoad;
|
||||
extern BOOLEAN KdPitchDebugger;
|
||||
extern BOOLEAN KdAutoEnableOnEvent;
|
||||
|
|
|
@ -982,6 +982,16 @@ VOID
|
|||
NTAPI
|
||||
KiInitMachineDependent(VOID);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KxFreezeExecution(
|
||||
VOID);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KxThawExecution(
|
||||
VOID);
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
|
||||
|
@ -991,6 +1001,11 @@ VOID
|
|||
NTAPI
|
||||
KeThawExecution(IN BOOLEAN Enable);
|
||||
|
||||
KCONTINUE_STATUS
|
||||
NTAPI
|
||||
KxSwitchKdProcessor(
|
||||
_In_ ULONG ProcessorIndex);
|
||||
|
||||
_IRQL_requires_min_(DISPATCH_LEVEL)
|
||||
_Acquires_nonreentrant_lock_(*LockHandle->Lock)
|
||||
_Acquires_exclusive_lock_(*LockHandle->Lock)
|
||||
|
@ -1024,9 +1039,14 @@ KiSaveProcessorControlState(
|
|||
VOID
|
||||
NTAPI
|
||||
KiSaveProcessorState(
|
||||
IN PKTRAP_FRAME TrapFrame,
|
||||
IN PKEXCEPTION_FRAME ExceptionFrame
|
||||
);
|
||||
_In_ PKTRAP_FRAME TrapFrame,
|
||||
_In_ PKEXCEPTION_FRAME ExceptionFrame);
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KiRestoreProcessorState(
|
||||
_Out_ PKTRAP_FRAME TrapFrame,
|
||||
_Out_ PKEXCEPTION_FRAME ExceptionFrame);
|
||||
|
||||
VOID
|
||||
FASTCALL
|
||||
|
|
|
@ -1260,6 +1260,28 @@ KdpNotSupported(IN PDBGKD_MANIPULATE_STATE64 State)
|
|||
&KdpContext);
|
||||
}
|
||||
|
||||
static
|
||||
KCONTINUE_STATUS
|
||||
KdpSwitchProcessor(
|
||||
_In_ USHORT ProcessorIndex)
|
||||
{
|
||||
/* Make sure that the processor index is valid */
|
||||
if (ProcessorIndex >= KeNumberProcessors)
|
||||
{
|
||||
KdpDprintf("%u is not a valid processor number\n", ProcessorIndex);
|
||||
return ContinueProcessorReselected;
|
||||
}
|
||||
|
||||
/* If the new processor is the current one, there is nothing to do */
|
||||
if (ProcessorIndex == KeGetCurrentProcessorNumber())
|
||||
{
|
||||
return ContinueProcessorReselected;
|
||||
}
|
||||
|
||||
/* Call the architecture specific Ke routine */
|
||||
return KxSwitchKdProcessor(ProcessorIndex);
|
||||
}
|
||||
|
||||
KCONTINUE_STATUS
|
||||
NTAPI
|
||||
KdpSendWaitContinue(IN ULONG PacketType,
|
||||
|
@ -1470,10 +1492,8 @@ SendPacket:
|
|||
|
||||
case DbgKdSwitchProcessor:
|
||||
|
||||
/* TODO */
|
||||
KdpDprintf("Processor Switch support is unimplemented!\n");
|
||||
KdpNotSupported(&ManipulateState);
|
||||
break;
|
||||
/* Switch the processor and return */
|
||||
return KdpSwitchProcessor(ManipulateState.Processor);
|
||||
|
||||
case DbgKdPageInApi:
|
||||
|
||||
|
@ -1785,6 +1805,33 @@ KdpReportExceptionStateChange(IN PEXCEPTION_RECORD ExceptionRecord,
|
|||
return Status;
|
||||
}
|
||||
|
||||
KCONTINUE_STATUS
|
||||
NTAPI
|
||||
KdReportProcessorChange(
|
||||
VOID)
|
||||
{
|
||||
PKPRCB CurrentPrcb = KeGetCurrentPrcb();
|
||||
PCONTEXT ContextRecord = &CurrentPrcb->ProcessorState.ContextFrame;
|
||||
EXCEPTION_RECORD ExceptionRecord = {0};
|
||||
KCONTINUE_STATUS Status;
|
||||
|
||||
/* Save the port data */
|
||||
KdSave(FALSE);
|
||||
|
||||
ExceptionRecord.ExceptionAddress = (PVOID)KeGetContextPc(ContextRecord);
|
||||
ExceptionRecord.ExceptionCode = STATUS_WAKE_SYSTEM_DEBUGGER;
|
||||
|
||||
/* Report the new state */
|
||||
Status = KdpReportExceptionStateChange(&ExceptionRecord,
|
||||
ContextRecord,
|
||||
FALSE);
|
||||
|
||||
/* Restore the port data */
|
||||
KdRestore(FALSE);
|
||||
|
||||
return Status;
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KdpTimeSlipDpcRoutine(IN PKDPC Dpc,
|
||||
|
@ -1833,27 +1880,6 @@ KdpTimeSlipWork(IN PVOID Context)
|
|||
KeSetTimer(&KdpTimeSlipTimer, DueTime, &KdpTimeSlipDpc);
|
||||
}
|
||||
|
||||
BOOLEAN
|
||||
NTAPI
|
||||
KdpSwitchProcessor(IN PEXCEPTION_RECORD ExceptionRecord,
|
||||
IN OUT PCONTEXT ContextRecord,
|
||||
IN BOOLEAN SecondChanceException)
|
||||
{
|
||||
BOOLEAN Status;
|
||||
|
||||
/* Save the port data */
|
||||
KdSave(FALSE);
|
||||
|
||||
/* Report a state change */
|
||||
Status = KdpReportExceptionStateChange(ExceptionRecord,
|
||||
ContextRecord,
|
||||
SecondChanceException);
|
||||
|
||||
/* Restore the port data and return */
|
||||
KdRestore(FALSE);
|
||||
return Status;
|
||||
}
|
||||
|
||||
LARGE_INTEGER
|
||||
NTAPI
|
||||
KdpQueryPerformanceCounter(IN PKTRAP_FRAME TrapFrame)
|
||||
|
|
|
@ -72,7 +72,6 @@ BOOLEAN KdpContextSent;
|
|||
// Debug Trap Handlers
|
||||
//
|
||||
PKDEBUG_ROUTINE KiDebugRoutine = KdpStub;
|
||||
PKDEBUG_SWITCH_ROUTINE KiDebugSwitchRoutine;
|
||||
|
||||
//
|
||||
// Debugger Configuration Settings
|
||||
|
|
|
@ -360,9 +360,8 @@ KdInitSystem(
|
|||
/* Check if we've already initialized our structures */
|
||||
if (!KdpDebuggerStructuresInitialized)
|
||||
{
|
||||
/* Set the Debug Switch Routine and Retries */
|
||||
/* Set Retries */
|
||||
KdpContext.KdpDefaultRetries = 20;
|
||||
KiDebugSwitchRoutine = KdpSwitchProcessor;
|
||||
|
||||
/* Initialize breakpoints owed flag and table */
|
||||
KdpOweBreakpoint = FALSE;
|
||||
|
|
|
@ -612,6 +612,41 @@ KiSaveProcessorControlState(OUT PKPROCESSOR_STATE ProcessorState)
|
|||
ProcessorState->SpecialRegisters.MsrSyscallMask = __readmsr(X86_MSR_SFMASK);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KiSaveProcessorState(
|
||||
_In_ PKTRAP_FRAME TrapFrame,
|
||||
_In_ PKEXCEPTION_FRAME ExceptionFrame)
|
||||
{
|
||||
PKPRCB Prcb = KeGetCurrentPrcb();
|
||||
|
||||
/* Save all context */
|
||||
Prcb->ProcessorState.ContextFrame.ContextFlags = CONTEXT_ALL;
|
||||
KeTrapFrameToContext(TrapFrame, ExceptionFrame, &Prcb->ProcessorState.ContextFrame);
|
||||
|
||||
/* Save control registers */
|
||||
KiSaveProcessorControlState(&Prcb->ProcessorState);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KiRestoreProcessorState(
|
||||
_Out_ PKTRAP_FRAME TrapFrame,
|
||||
_Out_ PKEXCEPTION_FRAME ExceptionFrame)
|
||||
{
|
||||
PKPRCB Prcb = KeGetCurrentPrcb();
|
||||
|
||||
/* Restore all context */
|
||||
KeContextToTrapFrame(&Prcb->ProcessorState.ContextFrame,
|
||||
ExceptionFrame,
|
||||
TrapFrame,
|
||||
CONTEXT_ALL,
|
||||
TrapFrame->PreviousMode);
|
||||
|
||||
/* Restore control registers */
|
||||
KiRestoreProcessorControlState(&Prcb->ProcessorState);
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KeFlushEntireTb(IN BOOLEAN Invalid,
|
||||
|
|
|
@ -0,0 +1,223 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Kernel
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Processor freeze support for x64
|
||||
* COPYRIGHT: Copyright 2023 Timo Kreuzer <timo.kreuzer@reactos.org>
|
||||
*/
|
||||
|
||||
/* INCLUDES *******************************************************************/
|
||||
|
||||
#include <ntoskrnl.h>
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
/* NOT INCLUDES ANYMORE ******************************************************/
|
||||
|
||||
PKPRCB KiFreezeOwner;
|
||||
|
||||
/* FUNCTIONS *****************************************************************/
|
||||
|
||||
BOOLEAN
|
||||
KiProcessorFreezeHandler(
|
||||
_In_ PKTRAP_FRAME TrapFrame,
|
||||
_In_ PKEXCEPTION_FRAME ExceptionFrame)
|
||||
{
|
||||
PKPRCB CurrentPrcb = KeGetCurrentPrcb();
|
||||
|
||||
/* Make sure this is a freeze request */
|
||||
if (CurrentPrcb->IpiFrozen != IPI_FROZEN_STATE_TARGET_FREEZE)
|
||||
{
|
||||
/* Not a freeze request, return FALSE to signal it is unhandled */
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
/* We are frozen now */
|
||||
CurrentPrcb->IpiFrozen = IPI_FROZEN_STATE_FROZEN;
|
||||
|
||||
/* Save the processor state */
|
||||
KiSaveProcessorState(TrapFrame, ExceptionFrame);
|
||||
|
||||
/* Wait for the freeze owner to release us */
|
||||
while (CurrentPrcb->IpiFrozen != IPI_FROZEN_STATE_THAW)
|
||||
{
|
||||
/* Check for Kd processor switch */
|
||||
if (CurrentPrcb->IpiFrozen & IPI_FROZEN_FLAG_ACTIVE)
|
||||
{
|
||||
KCONTINUE_STATUS ContinueStatus;
|
||||
|
||||
/* Enter the debugger */
|
||||
ContinueStatus = KdReportProcessorChange();
|
||||
|
||||
/* Set the state back to frozen */
|
||||
CurrentPrcb->IpiFrozen = IPI_FROZEN_STATE_FROZEN;
|
||||
|
||||
/* If the status is ContinueSuccess, we need to release the freeze owner */
|
||||
if (ContinueStatus == ContinueSuccess)
|
||||
{
|
||||
/* Release the freeze owner */
|
||||
KiFreezeOwner->IpiFrozen = IPI_FROZEN_STATE_THAW;
|
||||
}
|
||||
}
|
||||
|
||||
YieldProcessor();
|
||||
KeMemoryBarrier();
|
||||
}
|
||||
|
||||
/* Restore the processor state */
|
||||
KiRestoreProcessorState(TrapFrame, ExceptionFrame);
|
||||
|
||||
/* We are running again now */
|
||||
CurrentPrcb->IpiFrozen = IPI_FROZEN_STATE_RUNNING;
|
||||
|
||||
/* Return TRUE to signal that we handled the freeze */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KxFreezeExecution(
|
||||
VOID)
|
||||
{
|
||||
PKPRCB CurrentPrcb = KeGetCurrentPrcb();
|
||||
|
||||
/* Avoid blocking on recursive debug action */
|
||||
if (KiFreezeOwner == CurrentPrcb)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
/* Try to acquire the freeze owner */
|
||||
while (InterlockedCompareExchangePointer(&KiFreezeOwner, CurrentPrcb, NULL))
|
||||
{
|
||||
/* Someone else was faster. We expect an NMI to freeze any time.
|
||||
Spin here until the freeze owner is available. */
|
||||
while (KiFreezeOwner != NULL)
|
||||
{
|
||||
YieldProcessor();
|
||||
KeMemoryBarrier();
|
||||
}
|
||||
}
|
||||
|
||||
/* We are the owner now */
|
||||
CurrentPrcb->IpiFrozen = IPI_FROZEN_STATE_OWNER;
|
||||
|
||||
/* Loop all processors */
|
||||
for (ULONG i = 0; i < KeNumberProcessors; i++)
|
||||
{
|
||||
PKPRCB TargetPrcb = KiProcessorBlock[i];
|
||||
if (TargetPrcb != CurrentPrcb)
|
||||
{
|
||||
/* Nobody else is allowed to change IpiFrozen, except the freeze owner */
|
||||
ASSERT(TargetPrcb->IpiFrozen == IPI_FROZEN_STATE_RUNNING);
|
||||
|
||||
/* Request target to freeze */
|
||||
TargetPrcb->IpiFrozen = IPI_FROZEN_STATE_TARGET_FREEZE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Send the freeze IPI */
|
||||
KiIpiSend(KeActiveProcessors & ~CurrentPrcb->SetMember, IPI_FREEZE);
|
||||
|
||||
/* Wait for all targets to be frozen */
|
||||
for (ULONG i = 0; i < KeNumberProcessors; i++)
|
||||
{
|
||||
PKPRCB TargetPrcb = KiProcessorBlock[i];
|
||||
if (TargetPrcb != CurrentPrcb)
|
||||
{
|
||||
/* Wait for the target to be frozen */
|
||||
while (TargetPrcb->IpiFrozen != IPI_FROZEN_STATE_FROZEN)
|
||||
{
|
||||
YieldProcessor();
|
||||
KeMemoryBarrier();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* All targets are frozen, we can continue */
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KxThawExecution(
|
||||
VOID)
|
||||
{
|
||||
PKPRCB CurrentPrcb = KeGetCurrentPrcb();
|
||||
|
||||
/* Loop all processors */
|
||||
for (ULONG i = 0; i < KeNumberProcessors; i++)
|
||||
{
|
||||
PKPRCB TargetPrcb = KiProcessorBlock[i];
|
||||
if (TargetPrcb != CurrentPrcb)
|
||||
{
|
||||
/* Make sure they are still frozen */
|
||||
ASSERT(TargetPrcb->IpiFrozen == IPI_FROZEN_STATE_FROZEN);
|
||||
|
||||
/* Request target to thaw */
|
||||
TargetPrcb->IpiFrozen = IPI_FROZEN_STATE_THAW;
|
||||
}
|
||||
}
|
||||
|
||||
/* Wait for all targets to be running */
|
||||
for (ULONG i = 0; i < KeNumberProcessors; i++)
|
||||
{
|
||||
PKPRCB TargetPrcb = KiProcessorBlock[i];
|
||||
if (TargetPrcb != CurrentPrcb)
|
||||
{
|
||||
/* Wait for the target to be running again */
|
||||
while (TargetPrcb->IpiFrozen != IPI_FROZEN_STATE_RUNNING)
|
||||
{
|
||||
YieldProcessor();
|
||||
KeMemoryBarrier();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* We are running again now */
|
||||
CurrentPrcb->IpiFrozen = IPI_FROZEN_STATE_RUNNING;
|
||||
|
||||
/* Release the freeze owner */
|
||||
InterlockedExchangePointer(&KiFreezeOwner, NULL);
|
||||
}
|
||||
|
||||
KCONTINUE_STATUS
|
||||
NTAPI
|
||||
KxSwitchKdProcessor(
|
||||
_In_ ULONG ProcessorIndex)
|
||||
{
|
||||
PKPRCB CurrentPrcb = KeGetCurrentPrcb();
|
||||
PKPRCB TargetPrcb;
|
||||
|
||||
/* Make sure that the processor index is valid */
|
||||
ASSERT(ProcessorIndex < KeNumberProcessors);
|
||||
|
||||
/* Inform the target processor that it's his turn now */
|
||||
TargetPrcb = KiProcessorBlock[ProcessorIndex];
|
||||
TargetPrcb->IpiFrozen |= IPI_FROZEN_FLAG_ACTIVE;
|
||||
|
||||
/* If we are not the freeze owner, we return back to the freeze loop */
|
||||
if (KiFreezeOwner != CurrentPrcb)
|
||||
{
|
||||
return ContinueNextProcessor;
|
||||
}
|
||||
|
||||
/* Loop until it's our turn again */
|
||||
while (CurrentPrcb->IpiFrozen == IPI_FROZEN_STATE_OWNER)
|
||||
{
|
||||
YieldProcessor();
|
||||
KeMemoryBarrier();
|
||||
}
|
||||
|
||||
/* Check if we have been thawed */
|
||||
if (CurrentPrcb->IpiFrozen == IPI_FROZEN_STATE_THAW)
|
||||
{
|
||||
/* Another CPU has completed, we can leave the debugger now */
|
||||
KdpDprintf("[%u] KxSwitchKdProcessor: ContinueSuccess\n", KeGetCurrentProcessorNumber());
|
||||
CurrentPrcb->IpiFrozen = IPI_FROZEN_STATE_OWNER;
|
||||
return ContinueSuccess;
|
||||
}
|
||||
|
||||
/* We have been reselected, return to Kd to continue in the debugger */
|
||||
CurrentPrcb->IpiFrozen = IPI_FROZEN_STATE_OWNER;
|
||||
|
||||
return ContinueProcessorReselected;
|
||||
}
|
|
@ -192,14 +192,30 @@ KiDebugTrapOrFaultKMode:
|
|||
ExitTrap TF_SAVE_ALL
|
||||
ENDFUNC
|
||||
|
||||
EXTERN KiNmiInterruptHandler:PROC
|
||||
|
||||
FUNC KiNmiInterruptWithEf
|
||||
/* Generate a KEXCEPTION_FRAME on the stack */
|
||||
GENERATE_EXCEPTION_FRAME
|
||||
|
||||
/* Call the C handler */
|
||||
lea rcx, [rsp + KEXCEPTION_FRAME_LENGTH]
|
||||
lea rdx, [rsp]
|
||||
call KiNmiInterruptHandler
|
||||
|
||||
/* Restore the registers from the KEXCEPTION_FRAME */
|
||||
RESTORE_EXCEPTION_STATE
|
||||
|
||||
/* Return */
|
||||
ret
|
||||
ENDFUNC
|
||||
|
||||
PUBLIC KiNmiInterrupt
|
||||
FUNC KiNmiInterrupt
|
||||
/* Push pseudo error code */
|
||||
EnterTrap TF_SAVE_ALL
|
||||
|
||||
UNIMPLEMENTED KiNmiInterrupt
|
||||
int 3
|
||||
call KiNmiInterruptWithEf
|
||||
|
||||
/* Return */
|
||||
ExitTrap TF_SAVE_ALL
|
||||
|
|
|
@ -84,6 +84,46 @@ KiDpcInterruptHandler(VOID)
|
|||
KeLowerIrql(OldIrql);
|
||||
}
|
||||
|
||||
VOID
|
||||
KiNmiInterruptHandler(
|
||||
_In_ PKTRAP_FRAME TrapFrame,
|
||||
_In_ PKEXCEPTION_FRAME ExceptionFrame)
|
||||
{
|
||||
BOOLEAN ManualSwapGs = FALSE;
|
||||
|
||||
/* Check if the NMI came from kernel mode */
|
||||
if ((TrapFrame->SegCs & MODE_MASK) == 0)
|
||||
{
|
||||
/* Check if GS base is already kernel mode. This is needed, because
|
||||
we might be interrupted during an interrupt/exception from user-mode
|
||||
before the swapgs instruction. */
|
||||
if ((LONG64)__readmsr(MSR_GS_BASE) >= 0)
|
||||
{
|
||||
/* Swap GS to kernel */
|
||||
__swapgs();
|
||||
ManualSwapGs = TRUE;
|
||||
}
|
||||
}
|
||||
|
||||
/* Check if this is a freeze */
|
||||
if (KiProcessorFreezeHandler(TrapFrame, ExceptionFrame))
|
||||
{
|
||||
/* NMI was handled */
|
||||
goto Exit;
|
||||
}
|
||||
|
||||
/* Handle the NMI */
|
||||
KiHandleNmi();
|
||||
|
||||
Exit:
|
||||
/* Check if we need to swap GS back */
|
||||
if (ManualSwapGs)
|
||||
{
|
||||
/* Swap GS back to user */
|
||||
__swapgs();
|
||||
}
|
||||
}
|
||||
|
||||
#define MAX_SYSCALL_PARAMS 16
|
||||
|
||||
NTSTATUS
|
||||
|
|
|
@ -727,9 +727,6 @@ KeBugCheckWithTf(IN ULONG BugCheckCode,
|
|||
PLDR_DATA_TABLE_ENTRY LdrEntry;
|
||||
PULONG_PTR HardErrorParameters;
|
||||
KIRQL OldIrql;
|
||||
#ifdef CONFIG_SMP
|
||||
LONG i = 0;
|
||||
#endif
|
||||
|
||||
/* Set active bugcheck */
|
||||
KeBugCheckActive = TRUE;
|
||||
|
@ -1083,15 +1080,17 @@ KeBugCheckWithTf(IN ULONG BugCheckCode,
|
|||
KeBugCheckOwner = Prcb->Number;
|
||||
|
||||
/* Freeze the other CPUs */
|
||||
for (i = 0; i < KeNumberProcessors; i++)
|
||||
for (ULONG i = 0; i < KeNumberProcessors; i++)
|
||||
{
|
||||
if (i != (LONG)KeGetCurrentProcessorNumber())
|
||||
if (i != Prcb->Number)
|
||||
{
|
||||
/* Send the IPI and give them one second to catch up */
|
||||
KiIpiSend(1 << i, IPI_FREEZE);
|
||||
KeStallExecutionProcessor(1000000);
|
||||
/* Send the IPI */
|
||||
KiIpiSend(AFFINITY_MASK(i), IPI_FREEZE);
|
||||
}
|
||||
}
|
||||
|
||||
/* Give the other CPUs one second to catch up */
|
||||
KeStallExecutionProcessor(1000000);
|
||||
#endif
|
||||
|
||||
/* Display the BSOD */
|
||||
|
|
|
@ -49,7 +49,8 @@ KeFreezeExecution(IN PKTRAP_FRAME TrapFrame,
|
|||
#endif
|
||||
|
||||
#ifdef CONFIG_SMP
|
||||
// TODO: Add SMP support.
|
||||
/* Architecture specific freeze code */
|
||||
KxFreezeExecution();
|
||||
#endif
|
||||
|
||||
/* Save the old IRQL to be restored on unfreeze */
|
||||
|
@ -64,7 +65,8 @@ NTAPI
|
|||
KeThawExecution(IN BOOLEAN Enable)
|
||||
{
|
||||
#ifdef CONFIG_SMP
|
||||
// TODO: Add SMP support.
|
||||
/* Architecture specific thaw code */
|
||||
KxThawExecution();
|
||||
#endif
|
||||
|
||||
/* Clear the freeze flag */
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* PROJECT: ReactOS Kernel
|
||||
* LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
|
||||
* PURPOSE: Processor freeze support for i386
|
||||
* COPYRIGHT:
|
||||
*/
|
||||
|
||||
/* INCLUDES *******************************************************************/
|
||||
|
||||
#include <ntoskrnl.h>
|
||||
#define NDEBUG
|
||||
#include <debug.h>
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KxFreezeExecution(
|
||||
VOID)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
VOID
|
||||
NTAPI
|
||||
KxThawExecution(
|
||||
VOID)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
}
|
||||
|
||||
KCONTINUE_STATUS
|
||||
NTAPI
|
||||
KxSwitchKdProcessor(
|
||||
_In_ ULONG ProcessorIndex)
|
||||
{
|
||||
UNIMPLEMENTED;
|
||||
return ContinueError;
|
||||
}
|
|
@ -316,6 +316,7 @@ if(ARCH STREQUAL "i386")
|
|||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/cpu.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/context.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/exp.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/freeze.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/irqobj.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/kiinit.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/i386/ldt.c
|
||||
|
@ -350,6 +351,7 @@ elseif(ARCH STREQUAL "amd64")
|
|||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/amd64/context.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/amd64/cpu.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/amd64/except.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/amd64/freeze.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/amd64/interrupt.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/amd64/ipi.c
|
||||
${REACTOS_SOURCE_DIR}/ntoskrnl/ke/amd64/irql.c
|
||||
|
|
|
@ -54,7 +54,12 @@ extern "C" {
|
|||
#define _CRT_TERMINATE_DEFINED
|
||||
__declspec(noreturn) void __cdecl exit(_In_ int _Code);
|
||||
_CRTIMP __declspec(noreturn) void __cdecl _exit(_In_ int _Code);
|
||||
|
||||
#if !defined __NO_ISOCEXT /* extern stub in static libmingwex.a */
|
||||
/* C99 function name */
|
||||
__declspec(noreturn) void __cdecl _Exit(int); /* Declare to get noreturn attribute. */
|
||||
__CRT_INLINE void __cdecl _Exit(int status)
|
||||
{ _exit(status); }
|
||||
#endif
|
||||
#if __MINGW_GNUC_PREREQ(4,4)
|
||||
#pragma push_macro("abort")
|
||||
#undef abort
|
||||
|
@ -62,7 +67,6 @@ extern "C" {
|
|||
__declspec(noreturn) void __cdecl abort(void);
|
||||
#if __MINGW_GNUC_PREREQ(4,4)
|
||||
#pragma pop_macro("abort")
|
||||
#undef abort
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
|
|
@ -300,6 +300,21 @@ typedef enum
|
|||
#define IPI_PACKET_READY 8
|
||||
#define IPI_SYNCH_REQUEST 16
|
||||
|
||||
//
|
||||
// Flags for KPRCB::IpiFrozen
|
||||
//
|
||||
// Values shown with !ipi extension in WinDbg:
|
||||
// 0 = [Running], 1 = [Unknown], 2 = [Frozen], 3 = [Thaw], 4 = [Freeze Owner]
|
||||
// 5 = [Target Freeze], 6-15 = [Unknown]
|
||||
// 0x20 = [Active] (flag)
|
||||
//
|
||||
#define IPI_FROZEN_STATE_RUNNING 0
|
||||
#define IPI_FROZEN_STATE_FROZEN 2
|
||||
#define IPI_FROZEN_STATE_THAW 3
|
||||
#define IPI_FROZEN_STATE_OWNER 4
|
||||
#define IPI_FROZEN_STATE_TARGET_FREEZE 5
|
||||
#define IPI_FROZEN_FLAG_ACTIVE 0x20
|
||||
|
||||
//
|
||||
// PRCB Flags
|
||||
//
|
||||
|
|
|
@ -120,7 +120,6 @@ typedef struct _SOUND_OVERLAPPED
|
|||
OVERLAPPED Standard;
|
||||
struct _SOUND_DEVICE_INSTANCE* SoundDeviceInstance;
|
||||
PWAVEHDR Header;
|
||||
BOOL PerformCompletion;
|
||||
|
||||
LPOVERLAPPED_COMPLETION_ROUTINE OriginalCompletionRoutine;
|
||||
PVOID CompletionContext;
|
||||
|
|
|
@ -240,17 +240,12 @@ list(APPEND CRT_MATH_SOURCE
|
|||
math/ldiv.c
|
||||
math/logf.c
|
||||
math/powf.c
|
||||
math/rand.c
|
||||
)
|
||||
|
||||
list(APPEND CRT_MATH_ASM_SOURCE
|
||||
${LIBCNTPR_MATH_ASM_SOURCE}
|
||||
)
|
||||
|
||||
list(APPEND LIBCNTPR_MATH_SOURCE
|
||||
math/rand_nt.c
|
||||
)
|
||||
|
||||
if(ARCH STREQUAL "i386")
|
||||
list(APPEND ATAN2_ASM_SOURCE math/i386/atan2_asm.s)
|
||||
elseif(ARCH STREQUAL "amd64")
|
||||
|
|
|
@ -1,73 +0,0 @@
|
|||
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
|
||||
#include <precomp.h>
|
||||
#include <ntsecapi.h>
|
||||
#include <internal/tls.h>
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
int
|
||||
rand(void)
|
||||
{
|
||||
thread_data_t *data = msvcrt_get_thread_data();
|
||||
|
||||
/* this is the algorithm used by MSVC, according to
|
||||
* http://en.wikipedia.org/wiki/List_of_pseudorandom_number_generators */
|
||||
data->random_seed = data->random_seed * 214013 + 2531011;
|
||||
return (data->random_seed >> 16) & RAND_MAX;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
void
|
||||
srand(unsigned int seed)
|
||||
{
|
||||
thread_data_t *data = msvcrt_get_thread_data();
|
||||
data->random_seed = seed;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* rand_s (MSVCRT.@)
|
||||
*/
|
||||
int CDECL rand_s(unsigned int *pval)
|
||||
{
|
||||
BOOLEAN (WINAPI *pSystemFunction036)(PVOID, ULONG); // RtlGenRandom
|
||||
HINSTANCE hadvapi32;
|
||||
|
||||
if (!pval)
|
||||
{
|
||||
_invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0);
|
||||
*_errno() = EINVAL;
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
*pval = 0;
|
||||
hadvapi32 = LoadLibraryA("advapi32.dll");
|
||||
if (!hadvapi32)
|
||||
{
|
||||
_invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0);
|
||||
*_errno() = EINVAL;
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
pSystemFunction036 = (void*)GetProcAddress(hadvapi32, "SystemFunction036");
|
||||
if (!pSystemFunction036)
|
||||
{
|
||||
_invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0);
|
||||
*_errno() = EINVAL;
|
||||
FreeLibrary(hadvapi32);
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
if (!pSystemFunction036(pval, sizeof(*pval)))
|
||||
{
|
||||
_invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0);
|
||||
*_errno() = EINVAL;
|
||||
FreeLibrary(hadvapi32);
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
FreeLibrary(hadvapi32);
|
||||
return 0;
|
||||
}
|
|
@ -11,6 +11,13 @@ list(APPEND MSVCRTEX_SOURCE
|
|||
misc/ofmt_stub.c
|
||||
stdio/acrt_iob_func.c)
|
||||
|
||||
if(DLL_EXPORT_VERSION LESS 0x600)
|
||||
list(APPEND MSVCRTEX_SOURCE
|
||||
stdlib/_invalid_parameter.c
|
||||
stdlib/rand_s.c
|
||||
)
|
||||
endif()
|
||||
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
# Clang performs some optimizations requiring those funtions
|
||||
list(APPEND MSVCRTEX_SOURCE
|
||||
|
|
|
@ -0,0 +1,52 @@
|
|||
/*
|
||||
* PROJECT: ReactOS CRT library
|
||||
* LICENSE: MIT (https://spdx.org/licenses/MIT)
|
||||
* PURPOSE: _invalid_parameter implementation
|
||||
* COPYRIGHT: Timo Kreuzer <timo.kreuzer@reactos.org>
|
||||
*/
|
||||
|
||||
#include <precomp.h>
|
||||
|
||||
#ifdef _MSVCRTEX_
|
||||
#undef TRACE
|
||||
#undef ERR
|
||||
#define TRACE(...)
|
||||
#define ERR(...)
|
||||
#endif
|
||||
|
||||
static _invalid_parameter_handler invalid_parameter_handler = NULL;
|
||||
|
||||
/******************************************************************************
|
||||
* _invalid_parameter (MSVCRT.@)
|
||||
*/
|
||||
void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func,
|
||||
const wchar_t *file, unsigned int line, uintptr_t arg)
|
||||
{
|
||||
if (invalid_parameter_handler) invalid_parameter_handler( expr, func, file, line, arg );
|
||||
else
|
||||
{
|
||||
ERR( "%s:%u %s: %s %lx\n", debugstr_w(file), line, debugstr_w(func), debugstr_w(expr), arg );
|
||||
#if _MSVCR_VER > 0 // FIXME: possible improvement: use a global variable in the DLL
|
||||
RaiseException( STATUS_INVALID_CRUNTIME_PARAMETER, EXCEPTION_NONCONTINUABLE, 0, NULL );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/* _get_invalid_parameter_handler - not exported in native msvcrt, added in msvcr80 */
|
||||
_invalid_parameter_handler CDECL _get_invalid_parameter_handler(void)
|
||||
{
|
||||
TRACE("\n");
|
||||
return invalid_parameter_handler;
|
||||
}
|
||||
|
||||
/* _set_invalid_parameter_handler - not exproted in native msvcrt, added in msvcr80 */
|
||||
_invalid_parameter_handler CDECL _set_invalid_parameter_handler(
|
||||
_invalid_parameter_handler handler)
|
||||
{
|
||||
_invalid_parameter_handler old = invalid_parameter_handler;
|
||||
|
||||
TRACE("(%p)\n", handler);
|
||||
|
||||
invalid_parameter_handler = handler;
|
||||
return old;
|
||||
}
|
|
@ -11,8 +11,6 @@
|
|||
#include <errno.h>
|
||||
#include <internal/wine/msvcrt.h>
|
||||
|
||||
static _invalid_parameter_handler invalid_parameter_handler = NULL;
|
||||
|
||||
/*********************************************************************
|
||||
* _errno (MSVCRT.@)
|
||||
*/
|
||||
|
@ -130,38 +128,3 @@ void CDECL _seterrormode(int mode)
|
|||
{
|
||||
SetErrorMode( mode );
|
||||
}
|
||||
|
||||
/******************************************************************************
|
||||
* _invalid_parameter (MSVCRT.@)
|
||||
*/
|
||||
void __cdecl _invalid_parameter(const wchar_t *expr, const wchar_t *func,
|
||||
const wchar_t *file, unsigned int line, uintptr_t arg)
|
||||
{
|
||||
if (invalid_parameter_handler) invalid_parameter_handler( expr, func, file, line, arg );
|
||||
else
|
||||
{
|
||||
ERR( "%s:%u %s: %s %lx\n", debugstr_w(file), line, debugstr_w(func), debugstr_w(expr), arg );
|
||||
#if _MSVCR_VER > 0 // FIXME: possible improvement: use a global variable in the DLL
|
||||
RaiseException( STATUS_INVALID_CRUNTIME_PARAMETER, EXCEPTION_NONCONTINUABLE, 0, NULL );
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
/* _get_invalid_parameter_handler - not exported in native msvcrt, added in msvcr80 */
|
||||
_invalid_parameter_handler CDECL _get_invalid_parameter_handler(void)
|
||||
{
|
||||
TRACE("\n");
|
||||
return invalid_parameter_handler;
|
||||
}
|
||||
|
||||
/* _set_invalid_parameter_handler - not exproted in native msvcrt, added in msvcr80 */
|
||||
_invalid_parameter_handler CDECL _set_invalid_parameter_handler(
|
||||
_invalid_parameter_handler handler)
|
||||
{
|
||||
_invalid_parameter_handler old = invalid_parameter_handler;
|
||||
|
||||
TRACE("(%p)\n", handler);
|
||||
|
||||
invalid_parameter_handler = handler;
|
||||
return old;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,28 @@
|
|||
/* Copyright (C) 1994 DJ Delorie, see COPYING.DJ for details */
|
||||
#include <precomp.h>
|
||||
#include <ntsecapi.h>
|
||||
#include <internal/tls.h>
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
int
|
||||
rand(void)
|
||||
{
|
||||
thread_data_t *data = msvcrt_get_thread_data();
|
||||
|
||||
/* this is the algorithm used by MSVC, according to
|
||||
* http://en.wikipedia.org/wiki/List_of_pseudorandom_number_generators */
|
||||
data->random_seed = data->random_seed * 214013 + 2531011;
|
||||
return (data->random_seed >> 16) & RAND_MAX;
|
||||
}
|
||||
|
||||
/*
|
||||
* @implemented
|
||||
*/
|
||||
void
|
||||
srand(unsigned int seed)
|
||||
{
|
||||
thread_data_t *data = msvcrt_get_thread_data();
|
||||
data->random_seed = seed;
|
||||
}
|
|
@ -0,0 +1,72 @@
|
|||
/*
|
||||
* PROJECT: ReactOS CRT library
|
||||
* LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
|
||||
* PURPOSE: rand_s implementation
|
||||
* COPYRIGHT: Copyright 2010 Sylvain Petreolle <spetreolle@yahoo.fr>
|
||||
* Copyright 2015 Christoph von Wittich <christoph_vw@reactos.org>
|
||||
* Copyright 2015 Pierre Schweitzer <pierre@reactos.org>
|
||||
*/
|
||||
|
||||
#include <precomp.h>
|
||||
|
||||
typedef BOOLEAN (WINAPI *PFN_SystemFunction036)(PVOID, ULONG); // RtlGenRandom
|
||||
PFN_SystemFunction036 g_pfnSystemFunction036 = NULL;
|
||||
|
||||
/*********************************************************************
|
||||
* rand_s (MSVCRT.@)
|
||||
*/
|
||||
int CDECL rand_s(unsigned int *pval)
|
||||
{
|
||||
HINSTANCE hadvapi32;
|
||||
|
||||
if (!pval)
|
||||
{
|
||||
_invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0);
|
||||
*_errno() = EINVAL;
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
*pval = 0;
|
||||
|
||||
if (g_pfnSystemFunction036 == NULL)
|
||||
{
|
||||
PFN_SystemFunction036 pSystemFunction036;
|
||||
|
||||
hadvapi32 = LoadLibraryA("advapi32.dll");
|
||||
if (!hadvapi32)
|
||||
{
|
||||
_invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0);
|
||||
*_errno() = EINVAL;
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
pSystemFunction036 = (void*)GetProcAddress(hadvapi32, "SystemFunction036");
|
||||
if (!pSystemFunction036)
|
||||
{
|
||||
_invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0);
|
||||
*_errno() = EINVAL;
|
||||
FreeLibrary(hadvapi32);
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
g_pfnSystemFunction036 = pSystemFunction036;
|
||||
}
|
||||
|
||||
if (!g_pfnSystemFunction036(pval, sizeof(*pval)))
|
||||
{
|
||||
_invalid_parameter(NULL,_CRT_WIDE("rand_s"),_CRT_WIDE(__FILE__),__LINE__, 0);
|
||||
*_errno() = EINVAL;
|
||||
return EINVAL;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Small hack: import stub to allow GCC's stdc++ to link
|
||||
#if defined(__GNUC__) && (DLL_EXPORT_VERSION < 0x600)
|
||||
#ifdef WIN64
|
||||
const void* __imp_rand_s = rand_s;
|
||||
#else
|
||||
const void* _imp_rand_s = rand_s;
|
||||
#endif
|
||||
#endif
|
|
@ -1,11 +1,17 @@
|
|||
|
||||
list(APPEND LIBCNTPR_STDLIB_SOURCE
|
||||
list(APPEND COMMON_STDLIB_SOURCE
|
||||
stdlib/qsort.c
|
||||
)
|
||||
|
||||
list(APPEND LIBCNTPR_STDLIB_SOURCE
|
||||
${COMMON_STDLIB_SOURCE}
|
||||
stdlib/rand_nt.c
|
||||
)
|
||||
|
||||
list(APPEND CRT_STDLIB_SOURCE
|
||||
${LIBCNTPR_STDLIB_SOURCE}
|
||||
${COMMON_STDLIB_SOURCE}
|
||||
stdlib/_exit.c
|
||||
stdlib/_invalid_parameter.c
|
||||
stdlib/_set_abort_behavior.c
|
||||
stdlib/abort.c
|
||||
stdlib/atexit.c
|
||||
|
@ -22,6 +28,8 @@ list(APPEND CRT_STDLIB_SOURCE
|
|||
stdlib/mbstowcs.c
|
||||
stdlib/obsol.c
|
||||
stdlib/putenv.c
|
||||
stdlib/rand.c
|
||||
stdlib/rand_s.c
|
||||
stdlib/rot.c
|
||||
stdlib/senv.c
|
||||
stdlib/swab.c
|
||||
|
|
|
@ -26,7 +26,7 @@ Unsupported MME messages:
|
|||
* Any not mentioned above
|
||||
|
||||
Notes/Bugs:
|
||||
* WHDR_BEGINLOOP and WHDR_ENDLOOP are ignored
|
||||
* WHDR_BEGINLOOP and WHDR_ENDLOOP are not working for looping multiple wave headers, only for a single header.
|
||||
* Not possible to pause/restart playback
|
||||
|
||||
|
||||
|
|
|
@ -10,7 +10,6 @@
|
|||
|
||||
#include "precomp.h"
|
||||
|
||||
|
||||
/*
|
||||
DoWaveStreaming
|
||||
Check if there is streaming to be done, and if so, do it.
|
||||
|
@ -54,6 +53,22 @@ DoWaveStreaming(
|
|||
return;
|
||||
}
|
||||
|
||||
/* Do we need to loop a header? */
|
||||
if (DeviceType == WAVE_OUT_DEVICE_TYPE && (Header->dwFlags & WHDR_BEGINLOOP))
|
||||
{
|
||||
if ((Header->dwFlags & WHDR_ENDLOOP))
|
||||
{
|
||||
/* Get loop count */
|
||||
SoundDeviceInstance->LoopsRemaining = Header->dwLoops;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Report and help notice such a case */
|
||||
SND_WARN(L"Looping multiple headers is UNIMPLEMENTED. Will play once only\n");
|
||||
SND_ASSERT((Header->dwFlags & (WHDR_BEGINLOOP | WHDR_ENDLOOP)) == (WHDR_BEGINLOOP | WHDR_ENDLOOP));
|
||||
}
|
||||
}
|
||||
|
||||
while ( ( SoundDeviceInstance->OutstandingBuffers < SoundDeviceInstance->BufferCount ) &&
|
||||
( Header ) && SoundDeviceInstance->ResetInProgress == FALSE)
|
||||
{
|
||||
|
@ -106,10 +121,6 @@ DoWaveStreaming(
|
|||
Overlap->SoundDeviceInstance = SoundDeviceInstance;
|
||||
Overlap->Header = Header;
|
||||
|
||||
/* Don't complete this header if it's part of a loop */
|
||||
Overlap->PerformCompletion = TRUE;
|
||||
// ( SoundDeviceInstance->LoopsRemaining > 0 );
|
||||
|
||||
/* Adjust the commit-related counters */
|
||||
HeaderExtension->BytesCommitted += BytesToCommit;
|
||||
++ SoundDeviceInstance->OutstandingBuffers;
|
||||
|
@ -189,8 +200,8 @@ CompleteIO(
|
|||
-- SoundDeviceInstance->OutstandingBuffers;
|
||||
|
||||
/* Did we finish a WAVEHDR and aren't looping? */
|
||||
if ( HdrExtension->BytesCompleted + dwNumberOfBytesTransferred >= WaveHdr->dwBufferLength &&
|
||||
SoundOverlapped->PerformCompletion )
|
||||
if (HdrExtension->BytesCompleted + dwNumberOfBytesTransferred >= WaveHdr->dwBufferLength &&
|
||||
SoundDeviceInstance->LoopsRemaining == 0)
|
||||
{
|
||||
/* Wave buffer fully completed */
|
||||
Bytes = WaveHdr->dwBufferLength - HdrExtension->BytesCompleted;
|
||||
|
@ -203,9 +214,24 @@ CompleteIO(
|
|||
}
|
||||
else
|
||||
{
|
||||
/* Partially completed */
|
||||
HdrExtension->BytesCompleted += dwNumberOfBytesTransferred;
|
||||
SND_TRACE(L"%d/%d bytes of wavehdr completed\n", HdrExtension->BytesCompleted, WaveHdr->dwBufferLength);
|
||||
/* Do we loop a header? */
|
||||
if (HdrExtension->BytesCommitted == WaveHdr->dwBufferLength &&
|
||||
SoundDeviceInstance->LoopsRemaining != 0)
|
||||
{
|
||||
/* Reset amount of bytes and decrement loop count, to play next iteration */
|
||||
HdrExtension->BytesCommitted = 0;
|
||||
|
||||
if (SoundDeviceInstance->LoopsRemaining != INFINITE)
|
||||
--SoundDeviceInstance->LoopsRemaining;
|
||||
SND_TRACE(L"Looping the header, remaining loops %u\n", SoundDeviceInstance->LoopsRemaining);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* Partially completed */
|
||||
HdrExtension->BytesCompleted += dwNumberOfBytesTransferred;
|
||||
SND_TRACE(L"%u/%u bytes of wavehdr completed\n", HdrExtension->BytesCompleted, WaveHdr->dwBufferLength);
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
|
@ -1205,7 +1205,7 @@ ElfReadRecord(
|
|||
NTSTATUS Status;
|
||||
LARGE_INTEGER FileOffset;
|
||||
ULONG RecOffset;
|
||||
SIZE_T RecSize;
|
||||
ULONG RecSize;
|
||||
SIZE_T ReadLength;
|
||||
|
||||
ASSERT(LogFile);
|
||||
|
|
|
@ -261,18 +261,20 @@ BOOL UserSetCursorPos( INT x, INT y, DWORD flags, ULONG_PTR dwExtraInfo, BOOL Ho
|
|||
if (y >= rcClip.bottom) y = rcClip.bottom - 1;
|
||||
if (y < rcClip.top) y = rcClip.top;
|
||||
|
||||
/* Nothing to do if position did not actually change */
|
||||
if (x == gpsi->ptCursor.x && y == gpsi->ptCursor.y)
|
||||
return TRUE;
|
||||
|
||||
pt.x = x;
|
||||
pt.y = y;
|
||||
|
||||
if ((gpsi->ptCursor.x != x) || (gpsi->ptCursor.y != y))
|
||||
{
|
||||
/* 1. Generate a mouse move message, this sets the htEx and Track Window too. */
|
||||
Msg.message = WM_MOUSEMOVE;
|
||||
Msg.wParam = UserGetMouseButtonsState();
|
||||
Msg.lParam = MAKELPARAM(x, y);
|
||||
Msg.pt = pt;
|
||||
co_MsqInsertMouseMessage(&Msg, flags, dwExtraInfo, Hook);
|
||||
}
|
||||
/* 1. Generate a mouse move message, this sets the htEx and Track Window too */
|
||||
Msg.message = WM_MOUSEMOVE;
|
||||
Msg.wParam = UserGetMouseButtonsState();
|
||||
Msg.lParam = MAKELPARAM(x, y);
|
||||
Msg.pt = pt;
|
||||
co_MsqInsertMouseMessage(&Msg, flags, dwExtraInfo, Hook);
|
||||
|
||||
/* 2. Store the new cursor position */
|
||||
gpsi->ptCursor = pt;
|
||||
|
||||
|
|
|
@ -341,6 +341,9 @@ IntDeactivateWindow(PTHREADINFO pti, HANDLE tid)
|
|||
UserDerefObjectCo(pwndFocus);
|
||||
}
|
||||
|
||||
/* Check for keyboard modifiers and release them (CORE-14768) */
|
||||
MsqReleaseModifierKeys(pti->MessageQueue);
|
||||
|
||||
if (InAAPM) pti->TIF_flags &= ~TIF_INACTIVATEAPPMSG;
|
||||
if (ptiCurrent != pti)
|
||||
{
|
||||
|
|
|
@ -2530,6 +2530,21 @@ MsqSetStateWindow(PTHREADINFO pti, ULONG Type, HWND hWnd)
|
|||
return NULL;
|
||||
}
|
||||
|
||||
VOID FASTCALL
|
||||
MsqReleaseModifierKeys(PUSER_MESSAGE_QUEUE MessageQueue)
|
||||
{
|
||||
WORD ModifierKeys[] = { VK_LCONTROL, VK_RCONTROL, VK_CONTROL,
|
||||
VK_LMENU, VK_RMENU, VK_MENU,
|
||||
VK_LSHIFT, VK_RSHIFT, VK_SHIFT };
|
||||
UINT i;
|
||||
|
||||
for (i = 0; i < _countof(ModifierKeys); ++i)
|
||||
{
|
||||
if (IS_KEY_DOWN(MessageQueue->afKeyState, ModifierKeys[i]))
|
||||
SET_KEY_DOWN(MessageQueue->afKeyState, ModifierKeys[i], FALSE);
|
||||
}
|
||||
}
|
||||
|
||||
SHORT
|
||||
APIENTRY
|
||||
NtUserGetKeyState(INT key)
|
||||
|
|
|
@ -288,4 +288,7 @@ co_IntWaitMessage( PWND Window,
|
|||
UINT MsgFilterMin,
|
||||
UINT MsgFilterMax );
|
||||
|
||||
VOID FASTCALL
|
||||
MsqReleaseModifierKeys(PUSER_MESSAGE_QUEUE MessageQueue);
|
||||
|
||||
/* EOF */
|
||||
|
|
Loading…
Reference in New Issue