Sync with trunk r63887.

svn path=/branches/shell-experiments/; revision=63888
This commit is contained in:
David Quintana 2014-08-14 23:55:08 +00:00
parent 810048d98e
commit b77b9b9b7d
34 changed files with 537 additions and 543 deletions

View file

@ -117,7 +117,8 @@ InitConsoleDefaults(PCONSOLE_PROPS pConInfo)
GuiInfo->FontFamily = FF_DONTCARE;
GuiInfo->FontSize.X = 0;
GuiInfo->FontSize.Y = 0;
GuiInfo->FontWeight = FW_DONTCARE;
GuiInfo->FontWeight = FW_NORMAL; // HACK: !!
// GuiInfo->FontWeight = FW_DONTCARE;
GuiInfo->FullScreen = FALSE;
GuiInfo->ShowWindow = SW_SHOWNORMAL;

View file

@ -121,7 +121,7 @@ PaintText(LPDRAWITEMSTRUCT drawItem,
if (!hBrush) return FALSE;
Font = CreateFontW(GuiInfo->FontSize.Y,
0, // GuiInfo->FontSize.X,
GuiInfo->FontSize.X,
0,
TA_BASELINE,
GuiInfo->FontWeight,
@ -131,8 +131,8 @@ PaintText(LPDRAWITEMSTRUCT drawItem,
OEM_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
NONANTIALIASED_QUALITY,
FIXED_PITCH | GuiInfo->FontFamily /* FF_DONTCARE */,
DEFAULT_QUALITY, // NONANTIALIASED_QUALITY ; ANTIALIASED_QUALITY
FIXED_PITCH | GuiInfo->FontFamily,
GuiInfo->FaceName);
if (Font == NULL)
{

View file

@ -561,7 +561,7 @@ InvalidateConsoleDIBits(IN HANDLE hConsoleOutput,
/*
* @unimplemented (Undocumented)
* @implemented (Undocumented)
*/
HANDLE
WINAPI

View file

@ -37,9 +37,11 @@ class CDefaultContextMenu :
public IContextMenu2
{
private:
DEFCONTEXTMENU m_Dcm;
IShellFolder *m_psf;
UINT m_cidl;
PCUITEMID_CHILD_ARRAY m_apidl;
IDataObject *m_pDataObj;
LPCITEMIDLIST m_pidlFolder;
PIDLIST_ABSOLUTE m_pidlFolder;
DWORD m_bGroupPolicyActive;
PDynamicShellEntry m_pDynamicEntries; /* first dynamic shell extension entry */
UINT m_iIdSHEFirst; /* first used id */
@ -92,18 +94,20 @@ class CDefaultContextMenu :
END_COM_MAP()
};
CDefaultContextMenu::CDefaultContextMenu()
CDefaultContextMenu::CDefaultContextMenu() :
m_psf(NULL),
m_cidl(0),
m_apidl(NULL),
m_pDataObj(NULL),
m_pidlFolder(NULL),
m_bGroupPolicyActive(0),
m_pDynamicEntries(NULL),
m_iIdSHEFirst(0),
m_iIdSHELast(0),
m_pStaticEntries(NULL),
m_iIdSCMFirst(0),
m_iIdSCMLast(0)
{
memset(&m_Dcm, 0, sizeof(m_Dcm));
m_pDataObj = NULL;
m_pidlFolder = NULL;
m_bGroupPolicyActive = 0;
m_pDynamicEntries = NULL;
m_iIdSHEFirst = 0;
m_iIdSHELast = 0;
m_pStaticEntries = NULL;
m_iIdSCMFirst = 0;
m_iIdSCMLast = 0;
}
CDefaultContextMenu::~CDefaultContextMenu()
@ -130,9 +134,12 @@ CDefaultContextMenu::~CDefaultContextMenu()
}
if (m_pidlFolder)
ILFree((_ITEMIDLIST*)m_pidlFolder);
CoTaskMemFree(m_pidlFolder);
if (m_pDataObj)
m_pDataObj->Release();
_ILFreeaPidl(const_cast<PITEMID_CHILD *>(m_apidl), m_cidl);
if (m_psf)
m_psf->Release();
}
HRESULT WINAPI CDefaultContextMenu::Initialize(const DEFCONTEXTMENU *pdcm)
@ -140,28 +147,33 @@ HRESULT WINAPI CDefaultContextMenu::Initialize(const DEFCONTEXTMENU *pdcm)
IDataObject *pDataObj;
TRACE("cidl %u\n", pdcm->cidl);
m_cidl = pdcm->cidl;
m_apidl = const_cast<PCUITEMID_CHILD_ARRAY>(_ILCopyaPidl(pdcm->apidl, m_cidl));
if (m_cidl && !m_apidl)
return E_OUTOFMEMORY;
m_psf = pdcm->psf;
m_psf->AddRef();
if (SUCCEEDED(SHCreateDataObject(pdcm->pidlFolder, pdcm->cidl, pdcm->apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
m_pDataObj = pDataObj;
if (!pdcm->cidl)
if (pdcm->pidlFolder)
{
/* Init pidlFolder only if it is background context menu. See IShellExtInit::Initialize */
if (pdcm->pidlFolder)
m_pidlFolder = ILClone(pdcm->pidlFolder);
else
m_pidlFolder = ILClone(pdcm->pidlFolder);
}
else
{
IPersistFolder2 *pf = NULL;
if (SUCCEEDED(m_psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &pf))))
{
IPersistFolder2 *pf = NULL;
if (SUCCEEDED(pdcm->psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &pf))))
{
if (FAILED(pf->GetCurFolder((_ITEMIDLIST**)&m_pidlFolder)))
ERR("GetCurFolder failed\n");
pf->Release();
}
if (FAILED(pf->GetCurFolder(reinterpret_cast<LPITEMIDLIST*>(&m_pidlFolder))))
ERR("GetCurFolder failed\n");
pf->Release();
}
TRACE("pidlFolder %p\n", m_pidlFolder);
}
CopyMemory(&m_Dcm, pdcm, sizeof(DEFCONTEXTMENU));
return S_OK;
}
@ -714,14 +726,14 @@ CDefaultContextMenu::BuildShellItemContextMenu(
HRESULT hr;
TRACE("BuildShellItemContextMenu entered\n");
ASSERT(m_Dcm.cidl >= 1);
ASSERT(m_cidl >= 1);
STRRET strFile;
hr = m_Dcm.psf->GetDisplayNameOf(m_Dcm.apidl[0], SHGDN_FORPARSING, &strFile);
hr = m_psf->GetDisplayNameOf(m_apidl[0], SHGDN_FORPARSING, &strFile);
if (hr == S_OK)
{
WCHAR wszPath[MAX_PATH];
hr = StrRetToBufW(&strFile, m_Dcm.apidl[0], wszPath, _countof(wszPath));
hr = StrRetToBufW(&strFile, m_apidl[0], wszPath, _countof(wszPath));
if (hr == S_OK)
{
LPCWSTR pwszExt = PathFindExtensionW(wszPath);
@ -765,7 +777,7 @@ CDefaultContextMenu::BuildShellItemContextMenu(
else
ERR("GetDisplayNameOf failed: %x\n", hr);
GUID *pGuid = _ILGetGUIDPointer(m_Dcm.apidl[0]);
GUID *pGuid = _ILGetGUIDPointer(m_apidl[0]);
if (pGuid)
{
LPOLESTR pwszCLSID;
@ -787,7 +799,7 @@ CDefaultContextMenu::BuildShellItemContextMenu(
}
}
if (_ILIsDrive(m_Dcm.apidl[0]))
if (_ILIsDrive(m_apidl[0]))
{
AddStaticEntryForFileClass(L"Drive");
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Drive", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
@ -800,7 +812,7 @@ CDefaultContextMenu::BuildShellItemContextMenu(
/* add static actions */
SFGAOF rfg = SFGAO_BROWSABLE | SFGAO_CANCOPY | SFGAO_CANLINK | SFGAO_CANMOVE | SFGAO_CANDELETE | SFGAO_CANRENAME | SFGAO_HASPROPSHEET | SFGAO_FILESYSTEM | SFGAO_FOLDER;
hr = m_Dcm.psf->GetAttributesOf(m_Dcm.cidl, m_Dcm.apidl, &rfg);
hr = m_psf->GetAttributesOf(m_cidl, m_apidl, &rfg);
if (FAILED(hr))
{
ERR("GetAttributesOf failed: %x\n", hr);
@ -818,7 +830,7 @@ CDefaultContextMenu::BuildShellItemContextMenu(
}
/* Directory is only loaded for real filesystem directories */
if (_ILIsFolder(m_Dcm.apidl[0]))
if (_ILIsFolder(m_apidl[0]))
{
AddStaticEntryForFileClass(L"Directory");
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"Directory", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
@ -830,7 +842,7 @@ CDefaultContextMenu::BuildShellItemContextMenu(
}
/* AllFilesystemObjects class is loaded only for files and directories */
if (_ILIsFolder(m_Dcm.apidl[0]) || _ILIsValue(m_Dcm.apidl[0]))
if (_ILIsFolder(m_apidl[0]) || _ILIsValue(m_apidl[0]))
{
if (RegOpenKeyExW(HKEY_CLASSES_ROOT, L"AllFilesystemObjects", 0, KEY_READ, &hKey) == ERROR_SUCCESS)
{
@ -848,7 +860,7 @@ CDefaultContextMenu::BuildShellItemContextMenu(
IndexMenu = InsertMenuItemsOfDynamicContextMenuExtension(hMenu, IndexMenu, iIdCmdFirst, iIdCmdLast);
TRACE("IndexMenu %d\n", IndexMenu);
if (_ILIsDrive(m_Dcm.apidl[0]))
if (_ILIsDrive(m_apidl[0]))
{
/* The 'Format' option must be always available,
* thus it is not registered as a static shell extension */
@ -916,7 +928,7 @@ CDefaultContextMenu::QueryContextMenu(
UINT idCmdLast,
UINT uFlags)
{
if (m_Dcm.cidl)
if (m_cidl)
idCmdFirst = BuildShellItemContextMenu(hMenu, idCmdFirst, idCmdLast, uFlags);
else
idCmdFirst = BuildBackgroundContextMenu(hMenu, idCmdFirst, idCmdLast, uFlags);
@ -951,7 +963,7 @@ CDefaultContextMenu::DoRefresh(
{
CComPtr<IPersistFolder2> ppf2 = NULL;
LPITEMIDLIST pidl;
HRESULT hr = m_Dcm.psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
HRESULT hr = m_psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
if (SUCCEEDED(hr))
{
hr = ppf2->GetCurFolder(&pidl);
@ -984,9 +996,9 @@ CDefaultContextMenu::DoPaste(
return hr;
/* Find target folder */
if (m_Dcm.cidl)
if (m_cidl)
{
hr = m_Dcm.psf->BindToObject(m_Dcm.apidl[0], NULL, IID_PPV_ARG(IShellFolder, &psfTarget));
hr = m_psf->BindToObject(m_apidl[0], NULL, IID_PPV_ARG(IShellFolder, &psfTarget));
}
else
{
@ -994,7 +1006,7 @@ CDefaultContextMenu::DoPaste(
LPITEMIDLIST pidl;
/* cidl is zero due to explorer view */
hr = m_Dcm.psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
hr = m_psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
if (SUCCEEDED(hr))
{
hr = ppf2->GetCurFolder(&pidl);
@ -1087,9 +1099,9 @@ CDefaultContextMenu::DoCreateLink(
if (FAILED(hr))
return hr;
if (SUCCEEDED(hr = SHCreateDataObject(m_Dcm.pidlFolder, m_Dcm.cidl, m_Dcm.apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
if (SUCCEEDED(hr = SHCreateDataObject(m_pidlFolder, m_cidl, m_apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
{
hr = m_Dcm.psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
hr = m_psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &ppf2));
if (SUCCEEDED(hr))
{
hr = ppf2->GetCurFolder(&pidl);
@ -1134,7 +1146,7 @@ HRESULT CDefaultContextMenu::DoDelete(LPCMINVOKECOMMANDINFO lpcmi) {
LPDATAOBJECT pDataObj;
if (SUCCEEDED(SHCreateDataObject(m_Dcm.pidlFolder, m_Dcm.cidl, m_Dcm.apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
if (SUCCEEDED(SHCreateDataObject(m_pidlFolder, m_cidl, m_apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
{
pDataObj->AddRef();
SHCreateThread(DoDeleteThreadProc, pDataObj, NULL, NULL);
@ -1154,7 +1166,7 @@ CDefaultContextMenu::DoCopyOrCut(
LPDATAOBJECT pDataObj;
HRESULT hr;
if (SUCCEEDED(SHCreateDataObject(m_Dcm.pidlFolder, m_Dcm.cidl, m_Dcm.apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
if (SUCCEEDED(SHCreateDataObject(m_pidlFolder, m_cidl, m_apidl, NULL, IID_PPV_ARG(IDataObject, &pDataObj))))
{
if (!bCopy)
{
@ -1233,7 +1245,7 @@ CDefaultContextMenu::DoRename(
return hr;
}
lpSV->SelectItem(m_Dcm.apidl[0],
lpSV->SelectItem(m_apidl[0],
SVSI_DESELECTOTHERS | SVSI_EDIT | SVSI_ENSUREVISIBLE | SVSI_FOCUSED | SVSI_SELECT);
lpSV->Release();
return S_OK;
@ -1244,26 +1256,26 @@ CDefaultContextMenu::DoProperties(
LPCMINVOKECOMMANDINFO lpcmi)
{
HRESULT hr = S_OK;
const ITEMIDLIST *pidlParent = m_Dcm.pidlFolder, *pidlChild;
const ITEMIDLIST *pidlParent = m_pidlFolder, *pidlChild;
if (!pidlParent)
{
IPersistFolder2 *pf;
/* pidlFolder is optional */
if (SUCCEEDED(m_Dcm.psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &pf))))
if (SUCCEEDED(m_psf->QueryInterface(IID_PPV_ARG(IPersistFolder2, &pf))))
{
pf->GetCurFolder((_ITEMIDLIST**)&pidlParent);
pf->Release();
}
}
if (m_Dcm.cidl > 0)
pidlChild = m_Dcm.apidl[0];
if (m_cidl > 0)
pidlChild = m_apidl[0];
else
{
/* Set pidlChild to last pidl of current folder */
if (pidlParent == m_Dcm.pidlFolder)
if (pidlParent == m_pidlFolder)
pidlParent = (ITEMIDLIST*)ILClone(pidlParent);
pidlChild = (ITEMIDLIST*)ILClone(ILFindLastID(pidlParent));
@ -1303,11 +1315,11 @@ CDefaultContextMenu::DoProperties(
}
else
{
if (m_Dcm.cidl > 1)
if (m_cidl > 1)
WARN("SHMultiFileProperties is not yet implemented\n");
STRRET strFile;
hr = m_Dcm.psf->GetDisplayNameOf(pidlChild, SHGDN_FORPARSING, &strFile);
hr = m_psf->GetDisplayNameOf(pidlChild, SHGDN_FORPARSING, &strFile);
if (SUCCEEDED(hr))
{
WCHAR wszBuf[MAX_PATH];
@ -1322,9 +1334,9 @@ CDefaultContextMenu::DoProperties(
}
/* Free allocated PIDLs */
if (pidlParent != m_Dcm.pidlFolder)
if (pidlParent != m_pidlFolder)
ILFree((ITEMIDLIST*)pidlParent);
if (m_Dcm.cidl < 1 || pidlChild != m_Dcm.apidl[0])
if (m_cidl < 1 || pidlChild != m_apidl[0])
ILFree((ITEMIDLIST*)pidlChild);
return hr;
@ -1336,7 +1348,7 @@ CDefaultContextMenu::DoFormat(
{
char szDrive[8] = {0};
if (!_ILGetDrive(m_Dcm.apidl[0], szDrive, sizeof(szDrive)))
if (!_ILGetDrive(m_apidl[0], szDrive, sizeof(szDrive)))
{
ERR("pidl is not a drive\n");
return E_FAIL;
@ -1417,7 +1429,7 @@ CDefaultContextMenu::TryToBrowse(
if (lpSB == NULL)
return E_FAIL;
hr = lpSB->BrowseObject(ILCombine(m_Dcm.pidlFolder, pidl), wFlags);
hr = lpSB->BrowseObject(ILCombine(m_pidlFolder, pidl), wFlags);
return hr;
}
@ -1425,7 +1437,7 @@ CDefaultContextMenu::TryToBrowse(
HRESULT
CDefaultContextMenu::InvokePidl(LPCMINVOKECOMMANDINFO lpcmi, LPCITEMIDLIST pidl, PStaticShellEntry pEntry)
{
LPITEMIDLIST pidlFull = ILCombine(m_Dcm.pidlFolder, pidl);
LPITEMIDLIST pidlFull = ILCombine(m_pidlFolder, pidl);
if (pidlFull == NULL)
{
return E_FAIL;
@ -1442,7 +1454,7 @@ CDefaultContextMenu::InvokePidl(LPCMINVOKECOMMANDINFO lpcmi, LPCITEMIDLIST pidl,
}
else
{
SHGetPathFromIDListW(m_Dcm.pidlFolder, wszDir);
SHGetPathFromIDListW(m_pidlFolder, wszDir);
}
HKEY hkeyClass;
@ -1491,7 +1503,7 @@ CDefaultContextMenu::DoStaticShellExtensions(
DWORD wFlags = BrowserFlagsFromVerb(lpcmi, pEntry);
BOOL bBrowsed = FALSE;
for (i=0; i < m_Dcm.cidl; i++)
for (i=0; i < m_cidl; i++)
{
/* Check if we need to browse */
if (wFlags > 0)
@ -1502,7 +1514,7 @@ CDefaultContextMenu::DoStaticShellExtensions(
if (bBrowsed)
continue;
hr = TryToBrowse(lpcmi, m_Dcm.apidl[i], wFlags);
hr = TryToBrowse(lpcmi, m_apidl[i], wFlags);
if (SUCCEEDED(hr))
{
bBrowsed = TRUE;
@ -1510,7 +1522,7 @@ CDefaultContextMenu::DoStaticShellExtensions(
}
}
InvokePidl(lpcmi, m_Dcm.apidl[i], pEntry);
InvokePidl(lpcmi, m_apidl[i], pEntry);
}
return S_OK;

View file

@ -166,7 +166,7 @@ class CDefView :
virtual HRESULT STDMETHODCALLTYPE GetDefaultSpacing(POINT *ppt);
virtual HRESULT STDMETHODCALLTYPE GetAutoArrange();
virtual HRESULT STDMETHODCALLTYPE SelectItem(int iItem, DWORD dwFlags);
virtual HRESULT STDMETHODCALLTYPE SelectAndPositionItems(UINT cidl, LPCITEMIDLIST *apidl, POINT *apt, DWORD dwFlags);
virtual HRESULT STDMETHODCALLTYPE SelectAndPositionItems(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, POINT *apt, DWORD dwFlags);
// *** IShellFolderView methods ***
virtual HRESULT STDMETHODCALLTYPE Rearrange(LPARAM sort);
@ -2422,7 +2422,7 @@ HRESULT STDMETHODCALLTYPE CDefView::SelectItem(int iItem, DWORD dwFlags)
return S_OK;
}
HRESULT STDMETHODCALLTYPE CDefView::SelectAndPositionItems(UINT cidl, LPCITEMIDLIST *apidl, POINT *apt, DWORD dwFlags)
HRESULT STDMETHODCALLTYPE CDefView::SelectAndPositionItems(UINT cidl, PCUITEMID_CHILD_ARRAY apidl, POINT *apt, DWORD dwFlags)
{
return E_NOTIMPL;
}

View file

@ -26,11 +26,11 @@ NpCancelWaitQueueIrp(IN PDEVICE_OBJECT DeviceObject,
IoReleaseCancelSpinLock(Irp->CancelIrql);
WaitQueue = (PNP_WAIT_QUEUE)Irp->Tail.Overlay.DriverContext[0];
WaitQueue = Irp->Tail.Overlay.DriverContext[0];
KeAcquireSpinLock(&WaitQueue->WaitLock, &OldIrql);
WaitEntry = (PNP_WAIT_QUEUE_ENTRY)Irp->Tail.Overlay.DriverContext[1];
WaitEntry = Irp->Tail.Overlay.DriverContext[1];
if (WaitEntry)
{
RemoveEntryList(&Irp->Tail.Overlay.ListEntry);
@ -102,94 +102,91 @@ NpInitializeWaitQueue(IN PNP_WAIT_QUEUE WaitQueue)
NTSTATUS
NTAPI
NpCancelWaiter(IN PNP_WAIT_QUEUE WaitQueue,
IN PUNICODE_STRING PipeName,
IN PUNICODE_STRING PipePath,
IN NTSTATUS Status,
IN PLIST_ENTRY List)
{
UNICODE_STRING DestinationString;
UNICODE_STRING PipePathUpper;
KIRQL OldIrql;
PWCHAR Buffer;
PLIST_ENTRY NextEntry;
PNP_WAIT_QUEUE_ENTRY WaitEntry, Linkage;
PIRP WaitIrp;
PFILE_PIPE_WAIT_FOR_BUFFER WaitBuffer;
ULONG i, NameLength;
UNICODE_STRING WaitName, PipeName;
Linkage = NULL;
Buffer = ExAllocatePoolWithTag(NonPagedPool,
PipeName->Length,
PipePath->Length,
NPFS_WAIT_BLOCK_TAG);
if (!Buffer) return STATUS_INSUFFICIENT_RESOURCES;
RtlInitEmptyUnicodeString(&DestinationString, Buffer, PipeName->Length);
RtlUpcaseUnicodeString(&DestinationString, PipeName, FALSE);
RtlInitEmptyUnicodeString(&PipePathUpper, Buffer, PipePath->Length);
RtlUpcaseUnicodeString(&PipePathUpper, PipePath, FALSE);
KeAcquireSpinLock(&WaitQueue->WaitLock, &OldIrql);
for (NextEntry = WaitQueue->WaitList.Flink;
NextEntry != &WaitQueue->WaitList;
NextEntry = NextEntry->Flink)
NextEntry = WaitQueue->WaitList.Flink;
while (NextEntry != &WaitQueue->WaitList)
{
WaitIrp = CONTAINING_RECORD(NextEntry, IRP, Tail.Overlay.ListEntry);
NextEntry = NextEntry->Flink;
WaitEntry = WaitIrp->Tail.Overlay.DriverContext[1];
if (WaitEntry->AliasName.Length)
{
ASSERT(FALSE);
if (DestinationString.Length == WaitEntry->AliasName.Length)
{
if (RtlCompareMemory(WaitEntry->AliasName.Buffer,
DestinationString.Buffer,
DestinationString.Length) ==
DestinationString.Length)
{
CancelWait:
RemoveEntryList(&WaitIrp->Tail.Overlay.ListEntry);
if (KeCancelTimer(&WaitEntry->Timer))
{
WaitEntry->WaitQueue = (PNP_WAIT_QUEUE)Linkage;
Linkage = WaitEntry;
}
else
{
WaitEntry->Irp = NULL;
WaitIrp->Tail.Overlay.DriverContext[1] = NULL;
}
if (IoSetCancelRoutine(WaitIrp, NULL))
{
WaitIrp->IoStatus.Information = 0;
WaitIrp->IoStatus.Status = Status;
InsertTailList(List, &WaitIrp->Tail.Overlay.ListEntry);
}
else
{
WaitIrp->Tail.Overlay.DriverContext[1] = NULL;
}
}
}
/* We have an alias. Use that for comparison */
WaitName = WaitEntry->AliasName;
PipeName = PipePathUpper;
}
else
{
/* Use the name from the wait buffer to compare */
WaitBuffer = WaitIrp->AssociatedIrp.SystemBuffer;
WaitName.Buffer = WaitBuffer->Name;
WaitName.Length = WaitBuffer->NameLength;
WaitName.MaximumLength = WaitName.Length;
if (WaitBuffer->NameLength + sizeof(WCHAR) == DestinationString.Length)
/* WaitName doesn't have a leading backslash,
* so skip the one in PipePathUpper for the comparison */
PipeName.Buffer = PipePathUpper.Buffer + 1;
PipeName.Length = PipePathUpper.Length - sizeof(WCHAR);
PipeName.MaximumLength = PipeName.Length;
}
if (RtlEqualUnicodeString(&WaitName, &PipeName, FALSE))
{
/* Found a matching wait. Cancel it */
RemoveEntryList(&WaitIrp->Tail.Overlay.ListEntry);
if (KeCancelTimer(&WaitEntry->Timer))
{
NameLength = WaitBuffer->NameLength / sizeof(WCHAR);
for (i = 0; i < NameLength; i++)
{
if (WaitBuffer->Name[i] != DestinationString.Buffer[i + 1]) break;
}
WaitEntry->WaitQueue = (PNP_WAIT_QUEUE)Linkage;
Linkage = WaitEntry;
}
else
{
WaitEntry->Irp = NULL;
WaitIrp->Tail.Overlay.DriverContext[1] = NULL;
}
if (i >= NameLength) goto CancelWait;
if (IoSetCancelRoutine(WaitIrp, NULL))
{
WaitIrp->IoStatus.Information = 0;
WaitIrp->IoStatus.Status = Status;
InsertTailList(List, &WaitIrp->Tail.Overlay.ListEntry);
}
else
{
WaitIrp->Tail.Overlay.DriverContext[1] = NULL;
}
}
}
KeReleaseSpinLock(&WaitQueue->WaitLock, OldIrql);
ExFreePool(DestinationString.Buffer);
ExFreePoolWithTag(Buffer, NPFS_WAIT_BLOCK_TAG);
while (Linkage)
{

View file

@ -224,21 +224,21 @@ interface IShellFolder : IUnknown
[out] IEnumIDList **ppenumIDList);
HRESULT BindToObject(
[in] LPCITEMIDLIST pidl,
[in] PCUIDLIST_RELATIVE pidl,
[in] LPBC pbcReserved,
[in] REFIID riid,
[out, iid_is(riid)] void **ppvOut);
HRESULT BindToStorage(
[in] LPCITEMIDLIST pidl,
[in] PCUIDLIST_RELATIVE pidl,
[in] LPBC pbcReserved,
[in] REFIID riid,
[out, iid_is(riid)] void **ppvObj);
HRESULT CompareIDs(
[in] LPARAM lParam,
[in] LPCITEMIDLIST pidl1,
[in] LPCITEMIDLIST pidl2);
[in] PCUIDLIST_RELATIVE pidl1,
[in] PCUIDLIST_RELATIVE pidl2);
HRESULT CreateViewObject(
[in] HWND hwndOwner,
@ -247,28 +247,28 @@ interface IShellFolder : IUnknown
HRESULT GetAttributesOf(
[in] UINT cidl,
[in, size_is(cidl)] LPCITEMIDLIST *apidl,
[in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
[in, out] SFGAOF *rgfInOut);
HRESULT GetUIObjectOf(
[in] HWND hwndOwner,
[in] UINT cidl,
[in, size_is(cidl)] LPCITEMIDLIST *apidl,
[in, size_is(cidl)] PCUITEMID_CHILD_ARRAY apidl,
[in] REFIID riid,
[in, out, unique] UINT *prgfInOut,
[out, iid_is(riid)] void **ppvOut);
HRESULT GetDisplayNameOf(
[in] LPCITEMIDLIST pidl,
[in] PCUITEMID_CHILD pidl,
[in] SHGDNF uFlags,
[out] STRRET *lpName);
HRESULT SetNameOf(
[in] HWND hwnd,
[in] LPCITEMIDLIST pidl,
[in] PCUITEMID_CHILD pidl,
[in, string] LPCOLESTR lpszName,
[in] SHGDNF uFlags,
[out] LPITEMIDLIST *ppidlOut);
[out] PITEMID_CHILD *ppidlOut);
}

View file

@ -656,6 +656,8 @@ void UserDbgAssertThreadInfo(BOOL showCaller)
ASSERT(pci->ulClientDelta == DesktopHeapGetUserDelta());
if (pti->pcti && pci->pDeskInfo)
ASSERT(pci->pClientThreadInfo == (PVOID)((ULONG_PTR)pti->pcti - pci->ulClientDelta));
if (pti->pcti && IsListEmpty(&pti->SentMessagesListHead))
ASSERT((pti->pcti->fsChangeBits & QS_SENDMESSAGE) == 0);
if (pti->KeyboardLayout)
ASSERT(pci->hKL == pti->KeyboardLayout->hkl);
if(pti->rpdesk != NULL)

View file

@ -102,7 +102,7 @@ ConvertInputUnicodeToAnsi(PCONSOLE Console,
/* PRIVATE FUNCTIONS **********************************************************/
static PALIAS_HEADER
IntFindAliasHeader(PCONSOLE Console,
IntFindAliasHeader(PCONSRV_CONSOLE Console,
PVOID ExeName,
USHORT ExeLength,
BOOLEAN UnicodeExe)
@ -149,7 +149,7 @@ IntFindAliasHeader(PCONSOLE Console,
}
static PALIAS_HEADER
IntCreateAliasHeader(PCONSOLE Console,
IntCreateAliasHeader(PCONSRV_CONSOLE Console,
PVOID ExeName,
USHORT ExeLength,
BOOLEAN UnicodeExe)
@ -217,7 +217,7 @@ IntInsertAliasHeader(PALIAS_HEADER* RootHeader,
}
static PALIAS_ENTRY
IntGetAliasEntry(PCONSOLE Console,
IntGetAliasEntry(PCONSRV_CONSOLE Console,
PALIAS_HEADER Header,
PVOID Source,
USHORT SourceLength,
@ -266,7 +266,7 @@ IntGetAliasEntry(PCONSOLE Console,
}
static PALIAS_ENTRY
IntCreateAliasEntry(PCONSOLE Console,
IntCreateAliasEntry(PCONSRV_CONSOLE Console,
PVOID Source,
USHORT SourceLength,
PVOID Target,
@ -425,7 +425,7 @@ IntGetAllConsoleAliasesLength(PALIAS_HEADER Header,
}
VOID
IntDeleteAllAliases(PCONSOLE Console)
IntDeleteAllAliases(PCONSRV_CONSOLE Console)
{
PALIAS_HEADER Header, NextHeader;
PALIAS_ENTRY Entry, NextEntry;
@ -449,7 +449,7 @@ CSR_API(SrvAddConsoleAlias)
{
NTSTATUS Status;
PCONSOLE_ADDGETALIAS ConsoleAliasRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleAliasRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PALIAS_HEADER Header;
PALIAS_ENTRY Entry;
PVOID lpTarget;
@ -538,7 +538,7 @@ CSR_API(SrvGetConsoleAlias)
{
NTSTATUS Status;
PCONSOLE_ADDGETALIAS ConsoleAliasRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ConsoleAliasRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PALIAS_HEADER Header;
PALIAS_ENTRY Entry;
UINT Length;
@ -629,7 +629,7 @@ CSR_API(SrvGetConsoleAliases)
{
NTSTATUS Status;
PCONSOLE_GETALLALIASES GetAllAliasesRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetAllAliasesRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
ULONG BytesWritten = 0;
PALIAS_HEADER Header;
@ -734,7 +734,7 @@ CSR_API(SrvGetConsoleAliasesLength)
{
NTSTATUS Status;
PCONSOLE_GETALLALIASESLENGTH GetAllAliasesLengthRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetAllAliasesLengthRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PALIAS_HEADER Header;
DPRINT1("SrvGetConsoleAliasesLength entered ApiMessage %p\n", ApiMessage);
@ -774,7 +774,7 @@ CSR_API(SrvGetConsoleAliasExes)
{
NTSTATUS Status;
PCONSOLE_GETALIASESEXES GetAliasesExesRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetAliasesExesRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
UINT BytesWritten = 0;
DPRINT1("SrvGetConsoleAliasExes entered\n");
@ -860,7 +860,7 @@ CSR_API(SrvGetConsoleAliasExesLength)
{
NTSTATUS Status;
PCONSOLE_GETALIASESEXESLENGTH GetAliasesExesLengthRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetAliasesExesLengthRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
DPRINT1("SrvGetConsoleAliasExesLength entered ApiMessage %p\n", ApiMessage);

View file

@ -9,4 +9,4 @@
#pragma once
VOID IntDeleteAllAliases(PCONSOLE Console);
VOID IntDeleteAllAliases(PCONSRV_CONSOLE Console);

View file

@ -233,7 +233,6 @@ ConDrvInitConsole(OUT PCONSOLE* NewConsole,
/* Initialize the terminal interface */
ResetTerminal(Console);
memcpy(Console->Colors, ConsoleInfo->Colors, sizeof(ConsoleInfo->Colors));
Console->ConsoleSize = ConsoleInfo->ConsoleSize;
Console->FixedSize = FALSE; // Value by default; is reseted by the terminals if needed.

View file

@ -40,7 +40,7 @@ typedef struct _GET_INPUT_INFO
* This pre-processing code MUST be IN consrv ONLY
*/
/* static */ ULONG
PreprocessInput(PCONSOLE Console,
PreprocessInput(PCONSRV_CONSOLE Console,
PINPUT_RECORD InputEvent,
ULONG NumEventsToWrite)
{
@ -102,7 +102,7 @@ PreprocessInput(PCONSOLE Console,
* This post-processing code MUST be IN consrv ONLY
*/
/* static */ VOID
PostprocessInput(PCONSOLE Console)
PostprocessInput(PCONSRV_CONSOLE Console)
{
CsrNotifyWait(&Console->ReadWaitQueue,
FALSE,

View file

@ -170,7 +170,7 @@ CSR_API(SrvCreateConsoleScreenBuffer)
NTSTATUS Status = STATUS_INVALID_PARAMETER;
PCONSOLE_CREATESCREENBUFFER CreateScreenBufferRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.CreateScreenBufferRequest;
PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process);
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PCONSOLE_SCREEN_BUFFER Buff;
PVOID ScreenBufferInfo = NULL;

View file

@ -26,7 +26,7 @@ NTSTATUS NTAPI RtlGetLastNtStatus(VOID);
/* GLOBALS ********************************************************************/
static ULONG ConsoleListSize;
static PCONSOLE* ConsoleList; /* The list of the ConSrv consoles */
static PCONSRV_CONSOLE* ConsoleList; /* The list of the ConSrv consoles */
static RTL_RESOURCE ListLock;
#define ConSrvLockConsoleListExclusive() \
@ -41,13 +41,13 @@ static RTL_RESOURCE ListLock;
static NTSTATUS
InsertConsole(OUT PHANDLE Handle,
IN PCONSOLE Console)
IN PCONSRV_CONSOLE Console)
{
#define CONSOLE_HANDLES_INCREMENT 2 * 3
NTSTATUS Status = STATUS_SUCCESS;
ULONG i = 0;
PCONSOLE* Block;
PCONSRV_CONSOLE* Block;
ASSERT( (ConsoleList == NULL && ConsoleListSize == 0) ||
(ConsoleList != NULL && ConsoleListSize != 0) );
@ -70,7 +70,7 @@ InsertConsole(OUT PHANDLE Handle,
/* Allocate a new handles table */
Block = ConsoleAllocHeap(HEAP_ZERO_MEMORY,
(ConsoleListSize +
CONSOLE_HANDLES_INCREMENT) * sizeof(PCONSOLE));
CONSOLE_HANDLES_INCREMENT) * sizeof(PCONSRV_CONSOLE));
if (Block == NULL)
{
Status = STATUS_UNSUCCESSFUL;
@ -83,7 +83,7 @@ InsertConsole(OUT PHANDLE Handle,
/* Copy the handles from the old table to the new one */
RtlCopyMemory(Block,
ConsoleList,
ConsoleListSize * sizeof(PCONSOLE));
ConsoleListSize * sizeof(PCONSRV_CONSOLE));
ConsoleFreeHeap(ConsoleList);
}
ConsoleList = Block;
@ -105,7 +105,7 @@ static NTSTATUS
RemoveConsoleByHandle(IN HANDLE Handle)
{
NTSTATUS Status = STATUS_SUCCESS;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
BOOLEAN ValidHandle = ((HandleToULong(Handle) & 0x3) == 0x3);
ULONG Index = HandleToULong(Handle) >> 2;
@ -135,7 +135,7 @@ Quit:
#endif
static NTSTATUS
RemoveConsoleByPointer(IN PCONSOLE Console)
RemoveConsoleByPointer(IN PCONSRV_CONSOLE Console)
{
ULONG i = 0;
@ -162,13 +162,13 @@ RemoveConsoleByPointer(IN PCONSOLE Console)
}
BOOLEAN NTAPI
ConSrvValidateConsole(OUT PCONSOLE* Console,
ConSrvValidateConsole(OUT PCONSRV_CONSOLE* Console,
IN HANDLE ConsoleHandle,
IN CONSOLE_STATE ExpectedState,
IN BOOLEAN LockConsole)
{
BOOLEAN RetVal = FALSE;
PCONSOLE ValidatedConsole;
PCONSRV_CONSOLE ValidatedConsole;
BOOLEAN ValidHandle = ((HandleToULong(ConsoleHandle) & 0x3) == 0x3);
ULONG Index = HandleToULong(ConsoleHandle) >> 2;
@ -210,14 +210,14 @@ ConSrvValidateConsole(OUT PCONSOLE* Console,
/* PRIVATE FUNCTIONS **********************************************************/
VOID
ConioPause(PCONSOLE Console, UINT Flags)
ConioPause(PCONSRV_CONSOLE Console, UINT Flags)
{
Console->PauseFlags |= Flags;
ConDrvPause(Console);
}
VOID
ConioUnpause(PCONSOLE Console, UINT Flags)
ConioUnpause(PCONSRV_CONSOLE Console, UINT Flags)
{
Console->PauseFlags &= ~Flags;
@ -239,11 +239,11 @@ ConioUnpause(PCONSOLE Console, UINT Flags)
NTSTATUS
ConSrvGetConsole(IN PCONSOLE_PROCESS_DATA ProcessData,
OUT PCONSOLE* Console,
OUT PCONSRV_CONSOLE* Console,
IN BOOLEAN LockConsole)
{
NTSTATUS Status = STATUS_INVALID_HANDLE;
PCONSOLE GrabConsole;
PCONSRV_CONSOLE GrabConsole;
// if (Console == NULL) return STATUS_INVALID_PARAMETER;
ASSERT(Console);
@ -266,7 +266,7 @@ ConSrvGetConsole(IN PCONSOLE_PROCESS_DATA ProcessData,
}
VOID
ConSrvReleaseConsole(IN PCONSOLE Console,
ConSrvReleaseConsole(IN PCONSRV_CONSOLE Console,
IN BOOLEAN WasConsoleLocked)
{
LONG RefCount = 0;
@ -319,13 +319,13 @@ ConSrvDeinitTerminal(IN OUT PTERMINAL Terminal);
NTSTATUS NTAPI
ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
OUT PCONSOLE* NewConsole,
OUT PCONSRV_CONSOLE* NewConsole,
IN OUT PCONSOLE_START_INFO ConsoleStartInfo,
IN ULONG ConsoleLeaderProcessId)
{
NTSTATUS Status;
HANDLE ConsoleHandle;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
CONSOLE_INFO ConsoleInfo;
SIZE_T Length = 0;
@ -429,6 +429,9 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
Console->QuickEdit = ConsoleInfo.QuickEdit;
/* Colour table */
memcpy(Console->Colors, ConsoleInfo.Colors, sizeof(ConsoleInfo.Colors));
/* Attach the ConSrv terminal to the console */
Status = ConDrvRegisterTerminal(Console, &Terminal);
if (!NT_SUCCESS(Status))
@ -450,7 +453,7 @@ ConSrvInitConsole(OUT PHANDLE NewConsoleHandle,
}
VOID NTAPI
ConSrvDeleteConsole(PCONSOLE Console)
ConSrvDeleteConsole(PCONSRV_CONSOLE Console)
{
DPRINT("ConSrvDeleteConsole\n");
@ -528,7 +531,7 @@ ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
}
PCONSOLE_PROCESS_DATA NTAPI
ConSrvGetConsoleLeaderProcess(IN PCONSOLE Console)
ConSrvGetConsoleLeaderProcess(IN PCONSRV_CONSOLE Console)
{
if (Console == NULL) return NULL;
@ -538,7 +541,7 @@ ConSrvGetConsoleLeaderProcess(IN PCONSOLE Console)
}
NTSTATUS NTAPI
ConSrvGetConsoleProcessList(IN PCONSOLE Console,
ConSrvGetConsoleProcessList(IN PCONSRV_CONSOLE Console,
IN OUT PULONG ProcessIdsList,
IN ULONG MaxIdListItems,
OUT PULONG ProcessIdsTotal)
@ -567,7 +570,7 @@ ConSrvGetConsoleProcessList(IN PCONSOLE Console,
// ConSrvGenerateConsoleCtrlEvent
NTSTATUS NTAPI
ConSrvConsoleProcessCtrlEvent(IN PCONSOLE Console,
ConSrvConsoleProcessCtrlEvent(IN PCONSRV_CONSOLE Console,
IN ULONG ProcessGroupId,
IN ULONG CtrlEvent)
{
@ -795,7 +798,7 @@ CSR_API(SrvGetConsoleTitle)
{
NTSTATUS Status;
PCONSOLE_GETSETCONSOLETITLE TitleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.TitleRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
if (!CsrValidateMessageBuffer(ApiMessage,
(PVOID)&TitleRequest->Title,
@ -830,7 +833,7 @@ CSR_API(SrvSetConsoleTitle)
{
NTSTATUS Status;
PCONSOLE_GETSETCONSOLETITLE TitleRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.TitleRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
if (!CsrValidateMessageBuffer(ApiMessage,
(PVOID)&TitleRequest->Title,
@ -865,7 +868,7 @@ CSR_API(SrvGetConsoleCP)
{
NTSTATUS Status;
PCONSOLE_GETINPUTOUTPUTCP GetConsoleCPRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetConsoleCPRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
DPRINT("SrvGetConsoleCP, getting %s Code Page\n",
GetConsoleCPRequest->OutputCP ? "Output" : "Input");
@ -889,7 +892,7 @@ CSR_API(SrvSetConsoleCP)
{
NTSTATUS Status = STATUS_INVALID_PARAMETER;
PCONSOLE_SETINPUTOUTPUTCP SetConsoleCPRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetConsoleCPRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
DPRINT("SrvSetConsoleCP, setting %s Code Page\n",
SetConsoleCPRequest->OutputCP ? "Output" : "Input");
@ -909,7 +912,7 @@ CSR_API(SrvGetConsoleProcessList)
{
NTSTATUS Status;
PCONSOLE_GETPROCESSLIST GetProcessListRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetProcessListRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
if (!CsrValidateMessageBuffer(ApiMessage,
(PVOID)&GetProcessListRequest->ProcessIdsList,
@ -935,7 +938,7 @@ CSR_API(SrvGenerateConsoleCtrlEvent)
{
NTSTATUS Status;
PCONSOLE_GENERATECTRLEVENT GenerateCtrlEventRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GenerateCtrlEventRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
if (!NT_SUCCESS(Status)) return Status;
@ -952,7 +955,7 @@ CSR_API(SrvConsoleNotifyLastClose)
{
NTSTATUS Status;
PCONSOLE_PROCESS_DATA ProcessData = ConsoleGetPerProcessData(CsrGetClientThread()->Process);
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ProcessData, &Console, TRUE);
if (!NT_SUCCESS(Status)) return Status;
@ -979,7 +982,7 @@ CSR_API(SrvGetConsoleMouseInfo)
{
NTSTATUS Status;
PCONSOLE_GETMOUSEINFO GetMouseInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetMouseInfoRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
if (!NT_SUCCESS(Status)) return Status;
@ -1001,7 +1004,7 @@ CSR_API(SrvGetConsoleKeyboardLayoutName)
{
NTSTATUS Status;
PCONSOLE_GETKBDLAYOUTNAME GetKbdLayoutNameRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetKbdLayoutNameRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
if (!NT_SUCCESS(Status)) return Status;

View file

@ -67,6 +67,7 @@ typedef struct _CONSOLE_PROCESS_DATA
} CONSOLE_PROCESS_DATA, *PCONSOLE_PROCESS_DATA;
#include "include/conio.h"
// #include "include/conio_winsrv.h"
#include "include/console.h"
#include "include/settings.h"
#include "include/term.h"

View file

@ -31,7 +31,7 @@
*/
#if 0
static NTSTATUS
SetConsoleHardwareState(PCONSOLE Console, ULONG ConsoleHwState)
SetConsoleHardwareState(PCONSRV_CONSOLE Console, ULONG ConsoleHwState)
{
DPRINT1("Console Hardware State: %d\n", ConsoleHwState);
@ -58,7 +58,7 @@ CSR_API(SrvGetConsoleHardwareState)
NTSTATUS Status;
PCONSOLE_GETSETHWSTATE HardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.HardwareStateRequest;
PCONSOLE_SCREEN_BUFFER Buff;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
HardwareStateRequest->OutputHandle,
@ -88,7 +88,7 @@ CSR_API(SrvSetConsoleHardwareState)
NTSTATUS Status;
PCONSOLE_GETSETHWSTATE HardwareStateRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.HardwareStateRequest;
PCONSOLE_SCREEN_BUFFER Buff;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
HardwareStateRequest->OutputHandle,
@ -117,7 +117,7 @@ CSR_API(SrvGetConsoleDisplayMode)
{
NTSTATUS Status;
PCONSOLE_GETDISPLAYMODE GetDisplayModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetDisplayModeRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
&Console, TRUE);
@ -133,7 +133,7 @@ CSR_API(SrvSetConsoleDisplayMode)
{
NTSTATUS Status;
PCONSOLE_SETDISPLAYMODE SetDisplayModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetDisplayModeRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PCONSOLE_SCREEN_BUFFER Buff;
Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@ -164,7 +164,7 @@ CSR_API(SrvGetLargestConsoleWindowSize)
NTSTATUS Status;
PCONSOLE_GETLARGESTWINDOWSIZE GetLargestWindowSizeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetLargestWindowSizeRequest;
PCONSOLE_SCREEN_BUFFER Buff;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetTextModeBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
GetLargestWindowSizeRequest->OutputHandle,
@ -184,7 +184,7 @@ CSR_API(SrvShowConsoleCursor)
{
NTSTATUS Status;
PCONSOLE_SHOWCURSOR ShowCursorRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ShowCursorRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PCONSOLE_SCREEN_BUFFER Buff;
Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@ -207,7 +207,7 @@ CSR_API(SrvSetConsoleCursor)
NTSTATUS Status;
BOOL Success;
PCONSOLE_SETCURSOR SetCursorRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetCursorRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PCONSOLE_SCREEN_BUFFER Buff;
// FIXME: Tests show that this function is used only for graphics screen buffers
@ -232,7 +232,7 @@ CSR_API(SrvConsoleMenuControl)
{
NTSTATUS Status;
PCONSOLE_MENUCONTROL MenuControlRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.MenuControlRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PCONSOLE_SCREEN_BUFFER Buff;
Status = ConSrvGetScreenBuffer(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
@ -257,7 +257,7 @@ CSR_API(SrvSetConsoleMenuClose)
NTSTATUS Status;
BOOL Success;
PCONSOLE_SETMENUCLOSE SetMenuCloseRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetMenuCloseRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process),
&Console, TRUE);
@ -273,7 +273,7 @@ CSR_API(SrvGetConsoleWindow)
{
NTSTATUS Status;
PCONSOLE_GETWINDOW GetWindowRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetWindowRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
if (!NT_SUCCESS(Status)) return Status;
@ -288,7 +288,7 @@ CSR_API(SrvSetConsoleIcon)
{
NTSTATUS Status;
PCONSOLE_SETICON SetIconRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetIconRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
if (!NT_SUCCESS(Status)) return Status;
@ -305,7 +305,7 @@ CSR_API(SrvGetConsoleSelectionInfo)
{
NTSTATUS Status;
PCONSOLE_GETSELECTIONINFO GetSelectionInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetSelectionInfoRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
if (!NT_SUCCESS(Status)) return Status;

View file

@ -282,7 +282,7 @@ CreateSysMenu(HWND hWnd)
}
static VOID
SendMenuEvent(PCONSOLE Console, UINT CmdId)
SendMenuEvent(PCONSRV_CONSOLE Console, UINT CmdId)
{
INPUT_RECORD er;
@ -366,7 +366,7 @@ static LRESULT
OnCommand(PGUI_CONSOLE_DATA GuiData, WPARAM wParam, LPARAM lParam)
{
LRESULT Ret = TRUE;
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
/*
* In case the selected menu item belongs to the user-reserved menu id range,
@ -486,15 +486,166 @@ ResizeConWnd(PGUI_CONSOLE_DATA GuiData, DWORD WidthUnit, DWORD HeightUnit)
// to: InvalidateRect(GuiData->hWindow, NULL, TRUE);
}
VOID
DeleteFonts(PGUI_CONSOLE_DATA GuiData)
{
ULONG i;
for (i = 0; i < sizeof(GuiData->Font) / sizeof(GuiData->Font[0]); ++i)
{
if (GuiData->Font[i] != NULL) DeleteObject(GuiData->Font[i]);
GuiData->Font[i] = NULL;
}
}
static HFONT
CreateDerivedFont(HFONT OrgFont,
// COORD FontSize,
ULONG FontWeight,
// BOOLEAN bItalic,
BOOLEAN bUnderline,
BOOLEAN bStrikeOut)
{
LOGFONT lf;
/* Initialize the LOGFONT structure */
RtlZeroMemory(&lf, sizeof(lf));
/* Retrieve the details of the current font */
if (GetObject(OrgFont, sizeof(lf), &lf) == 0)
return NULL;
/* Change the font attributes */
// lf.lfHeight = FontSize.Y;
// lf.lfWidth = FontSize.X;
lf.lfWeight = FontWeight;
// lf.lfItalic = bItalic;
lf.lfUnderline = bUnderline;
lf.lfStrikeOut = bStrikeOut;
/* Build a new font */
return CreateFontIndirect(&lf);
}
BOOL
InitFonts(PGUI_CONSOLE_DATA GuiData,
LPWSTR FaceName, // Points to a WCHAR array of LF_FACESIZE elements.
ULONG FontFamily,
COORD FontSize,
ULONG FontWeight)
{
HDC hDC;
HFONT OldFont, NewFont;
TEXTMETRICW Metrics;
SIZE CharSize;
/*
* Initialize a new NORMAL font and get its metrics.
*/
NewFont = CreateFontW(FontSize.Y,
FontSize.X,
0,
TA_BASELINE,
FontWeight,
FALSE,
FALSE,
FALSE,
OEM_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
DEFAULT_QUALITY, // NONANTIALIASED_QUALITY ; ANTIALIASED_QUALITY
FIXED_PITCH | FontFamily,
FaceName);
if (NewFont == NULL)
{
DPRINT1("InitFonts: CreateFontW failed\n");
return FALSE;
}
hDC = GetDC(GuiData->hWindow);
if (hDC == NULL)
{
DPRINT1("InitFonts: GetDC failed\n");
DeleteObject(NewFont);
return FALSE;
}
OldFont = SelectObject(hDC, NewFont);
if (OldFont == NULL)
{
DPRINT1("InitFonts: SelectObject failed\n");
ReleaseDC(GuiData->hWindow, hDC);
DeleteObject(NewFont);
return FALSE;
}
if (!GetTextMetricsW(hDC, &Metrics))
{
DPRINT1("InitFonts: GetTextMetrics failed\n");
SelectObject(hDC, OldFont);
ReleaseDC(GuiData->hWindow, hDC);
DeleteObject(NewFont);
return FALSE;
}
GuiData->CharWidth = Metrics.tmMaxCharWidth;
GuiData->CharHeight = Metrics.tmHeight + Metrics.tmExternalLeading;
/* Measure real char width more precisely if possible. */
if (GetTextExtentPoint32W(hDC, L"R", 1, &CharSize))
GuiData->CharWidth = CharSize.cx;
SelectObject(hDC, OldFont);
ReleaseDC(GuiData->hWindow, hDC);
/*
* Initialization succeeded.
*/
// Delete all the old fonts first.
DeleteFonts(GuiData);
GuiData->Font[FONT_NORMAL] = NewFont;
/*
* Now build the other fonts (bold, underlined, mixed).
*/
GuiData->Font[FONT_BOLD] =
CreateDerivedFont(GuiData->Font[FONT_NORMAL],
FontWeight < FW_BOLD ? FW_BOLD : FontWeight,
FALSE,
FALSE);
GuiData->Font[FONT_UNDERLINE] =
CreateDerivedFont(GuiData->Font[FONT_NORMAL],
FontWeight,
TRUE,
FALSE);
GuiData->Font[FONT_BOLD | FONT_UNDERLINE] =
CreateDerivedFont(GuiData->Font[FONT_NORMAL],
FontWeight < FW_BOLD ? FW_BOLD : FontWeight,
TRUE,
FALSE);
/*
* Save the settings.
*/
if (FaceName != GuiData->GuiInfo.FaceName)
{
SIZE_T Length = min(wcslen(FaceName) + 1, LF_FACESIZE); // wcsnlen
wcsncpy(GuiData->GuiInfo.FaceName, FaceName, LF_FACESIZE);
GuiData->GuiInfo.FaceName[Length] = L'\0'; // NULL-terminate
}
GuiData->GuiInfo.FontFamily = FontFamily;
GuiData->GuiInfo.FontSize = FontSize;
GuiData->GuiInfo.FontWeight = FontWeight;
return TRUE;
}
static BOOL
OnNcCreate(HWND hWnd, LPCREATESTRUCTW Create)
{
PGUI_CONSOLE_DATA GuiData = (PGUI_CONSOLE_DATA)Create->lpCreateParams;
PCONSOLE Console;
HDC hDC;
HFONT OldFont;
TEXTMETRICW Metrics;
SIZE CharSize;
PCONSRV_CONSOLE Console;
if (NULL == GuiData)
{
@ -506,67 +657,18 @@ OnNcCreate(HWND hWnd, LPCREATESTRUCTW Create)
GuiData->hWindow = hWnd;
GuiData->Font = CreateFontW(GuiData->GuiInfo.FontSize.Y,
0, // GuiData->GuiInfo.FontSize.X,
0,
TA_BASELINE,
GuiData->GuiInfo.FontWeight,
FALSE,
FALSE,
FALSE,
OEM_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
NONANTIALIASED_QUALITY,
FIXED_PITCH | GuiData->GuiInfo.FontFamily /* FF_DONTCARE */,
GuiData->GuiInfo.FaceName);
if (NULL == GuiData->Font)
/* Initialize the fonts */
if (!InitFonts(GuiData,
GuiData->GuiInfo.FaceName,
GuiData->GuiInfo.FontFamily,
GuiData->GuiInfo.FontSize,
GuiData->GuiInfo.FontWeight))
{
DPRINT1("GuiConsoleNcCreate: CreateFont failed\n");
DPRINT1("GuiConsoleNcCreate: InitFonts failed\n");
GuiData->hWindow = NULL;
SetEvent(GuiData->hGuiInitEvent);
return FALSE;
}
hDC = GetDC(GuiData->hWindow);
if (NULL == hDC)
{
DPRINT1("GuiConsoleNcCreate: GetDC failed\n");
DeleteObject(GuiData->Font);
GuiData->hWindow = NULL;
SetEvent(GuiData->hGuiInitEvent);
return FALSE;
}
OldFont = SelectObject(hDC, GuiData->Font);
if (NULL == OldFont)
{
DPRINT1("GuiConsoleNcCreate: SelectObject failed\n");
ReleaseDC(GuiData->hWindow, hDC);
DeleteObject(GuiData->Font);
GuiData->hWindow = NULL;
SetEvent(GuiData->hGuiInitEvent);
return FALSE;
}
if (!GetTextMetricsW(hDC, &Metrics))
{
DPRINT1("GuiConsoleNcCreate: GetTextMetrics failed\n");
SelectObject(hDC, OldFont);
ReleaseDC(GuiData->hWindow, hDC);
DeleteObject(GuiData->Font);
GuiData->hWindow = NULL;
SetEvent(GuiData->hGuiInitEvent);
return FALSE;
}
GuiData->CharWidth = Metrics.tmMaxCharWidth;
GuiData->CharHeight = Metrics.tmHeight + Metrics.tmExternalLeading;
/* Measure real char width more precisely if possible. */
if (GetTextExtentPoint32W(hDC, L"R", 1, &CharSize))
GuiData->CharWidth = CharSize.cx;
SelectObject(hDC, OldFont);
ReleaseDC(GuiData->hWindow, hDC);
/* Initialize the terminal framebuffer */
GuiData->hMemDC = CreateCompatibleDC(NULL);
@ -647,7 +749,7 @@ OnActivate(PGUI_CONSOLE_DATA GuiData, WPARAM wParam)
static VOID
OnFocus(PGUI_CONSOLE_DATA GuiData, BOOL SetFocus)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
INPUT_RECORD er;
if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE)) return;
@ -814,7 +916,7 @@ UpdateSelection(PGUI_CONSOLE_DATA GuiData,
PCOORD SelectionAnchor OPTIONAL,
PCOORD coord)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
HRGN oldRgn = CreateSelectionRgn(GuiData, GuiData->LineSelection,
&GuiData->Selection.dwSelectionAnchor,
&GuiData->Selection.srSelection);
@ -1039,7 +1141,7 @@ IsSystemKey(WORD VirtualKeyCode)
static VOID
OnKey(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM lParam)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
PCONSOLE_SCREEN_BUFFER ActiveBuffer;
if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE)) return;
@ -1204,7 +1306,7 @@ InvalidateCell(PGUI_CONSOLE_DATA GuiData,
static VOID
OnTimer(PGUI_CONSOLE_DATA GuiData)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
PCONSOLE_SCREEN_BUFFER Buff;
SetTimer(GuiData->hWindow, CONGUI_UPDATE_TIMER, CURSOR_BLINK_TIME, NULL);
@ -1309,7 +1411,7 @@ OnTimer(PGUI_CONSOLE_DATA GuiData)
static BOOL
OnClose(PGUI_CONSOLE_DATA GuiData)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE))
return TRUE;
@ -1341,7 +1443,7 @@ OnNcDestroy(HWND hWnd)
if (GuiData->hMemDC ) DeleteDC(GuiData->hMemDC);
if (GuiData->hBitmap) DeleteObject(GuiData->hBitmap);
// if (GuiData->hSysPalette) DeleteObject(GuiData->hSysPalette);
if (GuiData->Font) DeleteObject(GuiData->Font);
DeleteFonts(GuiData);
}
/* Free the GuiData registration */
@ -1380,7 +1482,7 @@ static LRESULT
OnMouse(PGUI_CONSOLE_DATA GuiData, UINT msg, WPARAM wParam, LPARAM lParam)
{
BOOL Err = FALSE;
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
// FIXME: It's here that we need to check whether we has focus or not
// and whether we are in edit mode or not, to know if we need to deal
@ -1735,7 +1837,7 @@ Paste(PGUI_CONSOLE_DATA GuiData)
static VOID
OnGetMinMaxInfo(PGUI_CONSOLE_DATA GuiData, PMINMAXINFO minMaxInfo)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
PCONSOLE_SCREEN_BUFFER ActiveBuffer;
DWORD windx, windy;
UINT WidthUnit, HeightUnit;
@ -1767,7 +1869,7 @@ OnGetMinMaxInfo(PGUI_CONSOLE_DATA GuiData, PMINMAXINFO minMaxInfo)
static VOID
OnSize(PGUI_CONSOLE_DATA GuiData, WPARAM wParam, LPARAM lParam)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE)) return;
@ -1872,7 +1974,7 @@ GuiConsoleHandleScrollbarMenu(VOID)
static LRESULT
OnScroll(PGUI_CONSOLE_DATA GuiData, UINT uMsg, WPARAM wParam)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
PCONSOLE_SCREEN_BUFFER Buff;
SCROLLINFO sInfo;
int fnBar;
@ -1983,7 +2085,7 @@ ConWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
LRESULT Result = 0;
PGUI_CONSOLE_DATA GuiData = NULL;
PCONSOLE Console = NULL;
PCONSRV_CONSOLE Console = NULL;
/*
* - If it's the first time we create a window for the terminal,

View file

@ -21,6 +21,17 @@
#define PM_CONSOLE_BEEP (WM_APP + 4)
#define PM_CONSOLE_SET_TITLE (WM_APP + 5)
/*
typedef struct _CONSOLE_FONT
{
HFONT Font;
ULONG Flag;
} CONSOLE_FONT, *PCONSOLE_FONT;
*/
#define FONT_NORMAL 0x00
#define FONT_BOLD 0x01
#define FONT_UNDERLINE 0x02
#define FONT_MAXNO 0x04
typedef struct _GUI_CONSOLE_DATA
{
@ -56,12 +67,12 @@ typedef struct _GUI_CONSOLE_DATA
// PVOID ScreenBuffer; /* Hardware screen buffer */
HFONT Font;
UINT CharWidth;
UINT CharHeight;
HFONT Font[FONT_MAXNO];
UINT CharWidth; /* The character width and height should be the same for */
UINT CharHeight; /* both normal and bold/underlined fonts... */
/*****************************************************/
PCONSOLE Console; /* Pointer to the owned console */
PCONSRV_CONSOLE Console; /* Pointer to the owned console */
PCONSOLE_SCREEN_BUFFER ActiveBuffer; /* Pointer to the active screen buffer (then maybe the previous Console member is redundant?? Or not...) */
CONSOLE_SELECTION_INFO Selection; /* Contains information about the selection */
COORD dwSelectionCursor; /* Selection cursor position, most of the time different from Selection.dwSelectionAnchor */

View file

@ -48,7 +48,7 @@ LeaveFullScreen(PGUI_CONSOLE_DATA GuiData)
VOID
SwitchFullScreen(PGUI_CONSOLE_DATA GuiData, BOOL FullScreen)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
/*
* See:
@ -174,7 +174,7 @@ SwitchFullScreen(PGUI_CONSOLE_DATA GuiData, BOOL FullScreen)
VOID
GuiConsoleSwitchFullScreen(PGUI_CONSOLE_DATA GuiData)
{
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
BOOL FullScreen;
if (!ConDrvValidateConsoleUnsafe(Console, CONSOLE_RUNNING, TRUE)) return;

View file

@ -115,7 +115,7 @@ GuiPasteToGraphicsBuffer(PGRAPHICS_SCREEN_BUFFER Buffer,
* This function supposes that the system clipboard was opened.
*/
// PCONSOLE Console = Buffer->Header.Console;
// PCONSRV_CONSOLE Console = Buffer->Header.Console;
UNIMPLEMENTED;
}
@ -126,7 +126,7 @@ GuiPaintGraphicsBuffer(PGRAPHICS_SCREEN_BUFFER Buffer,
PRECT rcView,
PRECT rcFramebuffer)
{
PCONSOLE Console = Buffer->Header.Console;
PCONSRV_CONSOLE Console = Buffer->Header.Console;
// ASSERT(Console == GuiData->Console);
if (Buffer->BitMap == NULL) return;

View file

@ -17,9 +17,6 @@
#include "guiterm.h"
#include "guisettings.h"
VOID GuiConsoleMoveWindow(PGUI_CONSOLE_DATA GuiData);
VOID SwitchFullScreen(PGUI_CONSOLE_DATA GuiData, BOOL FullScreen);
/* FUNCTIONS ******************************************************************/
BOOL
@ -199,14 +196,14 @@ GuiConsoleGetDefaultSettings(IN OUT PGUI_CONSOLE_INFO TermInfo,
// wcsncpy(TermInfo->FaceName, L"DejaVu Sans Mono", LF_FACESIZE);
// TermInfo->FontSize = MAKELONG(8, 12); // 0x000C0008; // font is 8x12
// TermInfo->FontSize = MAKELONG(16, 16); // font is 16x16
// TermInfo->FontWeight = FW_NORMAL;
wcsncpy(TermInfo->FaceName, L"VGA", LF_FACESIZE); // HACK: !!
// TermInfo->FaceName[0] = L'\0';
TermInfo->FontFamily = FF_DONTCARE;
TermInfo->FontSize.X = 0;
TermInfo->FontSize.Y = 0;
TermInfo->FontWeight = FW_DONTCARE;
TermInfo->FontWeight = FW_NORMAL; // HACK: !!
// TermInfo->FontWeight = FW_DONTCARE;
TermInfo->FullScreen = FALSE;
TermInfo->ShowWindow = SW_SHOWNORMAL;
@ -230,7 +227,7 @@ GuiConsoleShowConsoleProperties(PGUI_CONSOLE_DATA GuiData,
BOOL Defaults)
{
NTSTATUS Status;
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
PCONSOLE_SCREEN_BUFFER ActiveBuffer = GuiData->ActiveBuffer;
PCONSOLE_PROCESS_DATA ProcessData;
HANDLE hSection = NULL, hClientSection = NULL;
@ -418,99 +415,13 @@ Quit:
return;
}
BOOL
ChangeFont(PGUI_CONSOLE_DATA GuiData,
LPWSTR FaceName, // Points to a WCHAR array of LF_FACESIZE elements.
ULONG FontFamily,
COORD FontSize,
ULONG FontWeight)
{
HDC hDC;
HFONT OldFont, NewFont;
TEXTMETRICW Metrics;
SIZE CharSize;
SIZE_T Length;
NewFont = CreateFontW(FontSize.Y,
0, // FontSize.X,
0,
TA_BASELINE,
FontWeight,
FALSE,
FALSE,
FALSE,
OEM_CHARSET,
OUT_DEFAULT_PRECIS,
CLIP_DEFAULT_PRECIS,
NONANTIALIASED_QUALITY,
FIXED_PITCH | FontFamily /* FF_DONTCARE */,
FaceName);
if (NewFont == NULL)
{
DPRINT1("ChangeFont: CreateFont failed\n");
return FALSE;
}
hDC = GetDC(GuiData->hWindow);
if (hDC == NULL)
{
DPRINT1("ChangeFont: GetDC failed\n");
DeleteObject(NewFont);
return FALSE;
}
OldFont = SelectObject(hDC, NewFont);
if (OldFont == NULL)
{
DPRINT1("ChangeFont: SelectObject failed\n");
ReleaseDC(GuiData->hWindow, hDC);
DeleteObject(NewFont);
return FALSE;
}
if (!GetTextMetricsW(hDC, &Metrics))
{
DPRINT1("ChangeFont: GetTextMetrics failed\n");
SelectObject(hDC, OldFont);
ReleaseDC(GuiData->hWindow, hDC);
DeleteObject(NewFont);
return FALSE;
}
GuiData->CharWidth = Metrics.tmMaxCharWidth;
GuiData->CharHeight = Metrics.tmHeight + Metrics.tmExternalLeading;
/* Measure real char width more precisely if possible. */
if (GetTextExtentPoint32W(hDC, L"R", 1, &CharSize))
GuiData->CharWidth = CharSize.cx;
SelectObject(hDC, OldFont);
ReleaseDC(GuiData->hWindow, hDC);
if (GuiData->Font != NULL) DeleteObject(GuiData->Font);
GuiData->Font = NewFont;
Length = min(wcslen(FaceName) + 1, LF_FACESIZE); // wcsnlen
wcsncpy(GuiData->GuiInfo.FaceName, FaceName, LF_FACESIZE);
GuiData->GuiInfo.FaceName[Length] = L'\0'; // NULL-terminate
GuiData->GuiInfo.FontFamily = FontFamily;
GuiData->GuiInfo.FontSize = FontSize;
GuiData->GuiInfo.FontWeight = FontWeight;
return TRUE;
}
VOID
GuiApplyUserSettings(PGUI_CONSOLE_DATA GuiData,
HANDLE hClientSection,
BOOL SaveSettings)
{
NTSTATUS Status = STATUS_SUCCESS;
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
PCONSOLE_PROCESS_DATA ProcessData;
HANDLE hSection = NULL;
ULONG ViewSize = 0;
@ -586,11 +497,11 @@ GuiApplyUserSettings(PGUI_CONSOLE_DATA GuiData,
// memcpy(&GuiData->GuiInfo, GuiInfo, sizeof(GUI_CONSOLE_INFO));
/* Change the font */
ChangeFont(GuiData,
GuiInfo->FaceName,
GuiInfo->FontFamily,
GuiInfo->FontSize,
GuiInfo->FontWeight);
InitFonts(GuiData,
GuiInfo->FaceName,
GuiInfo->FontFamily,
GuiInfo->FontSize,
GuiInfo->FontWeight);
// HACK, needed because changing font may change the size of the window
/**/TermResizeTerminal(Console);/**/
@ -654,7 +565,7 @@ GuiApplyWindowsConsoleSettings(PGUI_CONSOLE_DATA GuiData,
HANDLE hClientSection)
{
NTSTATUS Status = STATUS_SUCCESS;
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
PCONSOLE_PROCESS_DATA ProcessData;
HANDLE hSection = NULL;
ULONG ViewSize = 0;
@ -768,11 +679,11 @@ GuiApplyWindowsConsoleSettings(PGUI_CONSOLE_DATA GuiData,
// memcpy(&GuiData->GuiInfo, &GuiInfo, sizeof(GUI_CONSOLE_INFO));
/* Change the font */
ChangeFont(GuiData,
GuiInfo.FaceName,
GuiInfo.FontFamily,
GuiInfo.FontSize,
GuiInfo.FontWeight);
InitFonts(GuiData,
GuiInfo.FaceName,
GuiInfo.FontFamily,
GuiInfo.FontSize,
GuiInfo.FontWeight);
// HACK, needed because changing font may change the size of the window
/**/TermResizeTerminal(Console);/**/

View file

@ -29,7 +29,6 @@
typedef struct _GUI_CONSOLE_INFO
{
// FONTSIGNATURE FontSignature;
WCHAR FaceName[LF_FACESIZE];
ULONG FontFamily;
COORD FontSize;

View file

@ -160,7 +160,7 @@ GuiConsoleNotifyWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
case PM_CREATE_CONSOLE:
{
PGUI_CONSOLE_DATA GuiData = (PGUI_CONSOLE_DATA)lParam;
PCONSOLE Console = GuiData->Console;
PCONSRV_CONSOLE Console = GuiData->Console;
RECT rcWnd;
DPRINT("PM_CREATE_CONSOLE -- creating window\n");
@ -394,9 +394,9 @@ GuiInit(VOID)
static VOID NTAPI
GuiDeinitFrontEnd(IN OUT PFRONTEND This);
NTSTATUS NTAPI
static NTSTATUS NTAPI
GuiInitFrontEnd(IN OUT PFRONTEND This,
IN PCONSOLE Console)
IN PCONSRV_CONSOLE Console)
{
PGUI_INIT_INFO GuiInitInfo;
PCONSOLE_INFO ConsoleInfo;

View file

@ -15,8 +15,23 @@
#include "conwnd.h"
NTSTATUS GuiInitConsole(PCONSOLE Console,
/*IN*/ PCONSOLE_START_INFO ConsoleStartInfo,
PCONSOLE_INFO ConsoleInfo,
DWORD ProcessId,
LPCWSTR IconPath,
INT IconIndex);
/*IN*/ PCONSOLE_START_INFO ConsoleStartInfo,
PCONSOLE_INFO ConsoleInfo,
DWORD ProcessId,
LPCWSTR IconPath,
INT IconIndex);
VOID
GuiConsoleMoveWindow(PGUI_CONSOLE_DATA GuiData);
VOID
SwitchFullScreen(PGUI_CONSOLE_DATA GuiData, BOOL FullScreen);
BOOL
InitFonts(PGUI_CONSOLE_DATA GuiData,
LPWSTR FaceName, // Points to a WCHAR array of LF_FACESIZE elements.
ULONG FontFamily,
COORD FontSize,
ULONG FontWeight);
VOID
DeleteFonts(PGUI_CONSOLE_DATA GuiData);

View file

@ -25,7 +25,7 @@
/* FUNCTIONS ******************************************************************/
static COLORREF
PaletteRGBFromAttrib(PCONSOLE Console, WORD Attribute)
PaletteRGBFromAttrib(PCONSRV_CONSOLE Console, WORD Attribute)
{
HPALETTE hPalette = Console->ActiveBuffer->PaletteHandle;
PALETTEENTRY pe;
@ -36,44 +36,6 @@ PaletteRGBFromAttrib(PCONSOLE Console, WORD Attribute)
return PALETTERGB(pe.peRed, pe.peGreen, pe.peBlue);
}
static HFONT
ChangeFontAttributes(PGUI_CONSOLE_DATA GuiData,
// COORD FontSize,
ULONG FontWeight,
BOOLEAN bItalic,
BOOLEAN bUnderline,
BOOLEAN bStrikeOut)
{
HFONT NewFont;
LOGFONT lf;
/* Initialize the LOGFONT structure */
RtlZeroMemory(&lf, sizeof(lf));
/* Retrieve the details of the current font */
if (GetObject(GuiData->Font, sizeof(lf), &lf) == 0)
return NULL; // GuiData->Font;
/* Change the font attributes */
// lf.lfHeight = FontSize.Y;
// lf.lfWidth = FontSize.X;
lf.lfWeight = FontWeight;
lf.lfItalic = bItalic;
lf.lfUnderline = bUnderline;
lf.lfStrikeOut = bStrikeOut;
/* Build a new font */
NewFont = CreateFontIndirect(&lf);
if (NewFont == NULL)
return NULL; // GuiData->Font;
// FIXME: Do we need to update GuiData->CharWidth and GuiData->CharHeight ??
/* Select it (return the old font) */
// return SelectObject(GuiData->hMemDC, NewFont);
return NewFont;
}
static VOID
CopyBlock(PTEXTMODE_SCREEN_BUFFER Buffer,
PSMALL_RECT Selection)
@ -309,7 +271,7 @@ GuiPasteToTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
* This function supposes that the system clipboard was opened.
*/
PCONSOLE Console = Buffer->Header.Console;
PCONSRV_CONSOLE Console = Buffer->Header.Console;
HANDLE hData;
LPWSTR str;
@ -377,7 +339,7 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
PRECT rcView,
PRECT rcFramebuffer)
{
PCONSOLE Console = Buffer->Header.Console;
PCONSRV_CONSOLE Console = Buffer->Header.Console;
// ASSERT(Console == GuiData->Console);
ULONG TopLine, BottomLine, LeftChar, RightChar;
@ -388,7 +350,7 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
ULONG CursorX, CursorY, CursorHeight;
HBRUSH CursorBrush, OldBrush;
HFONT OldFont, NewFont;
BOOLEAN IsUnderscore;
BOOLEAN IsUnderline;
if (Buffer->Buffer == NULL) return;
@ -412,17 +374,10 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
SetTextColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, TextAttribFromAttrib(LastAttribute)));
SetBkColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, BkgdAttribFromAttrib(LastAttribute)));
// OldFont = ChangeFontAttributes(GuiData, /* {0}, */ GuiData->GuiInfo.FontWeight, FALSE, FALSE, FALSE);
IsUnderscore = !!(LastAttribute & COMMON_LVB_UNDERSCORE);
NewFont = ChangeFontAttributes(GuiData, /* {0}, */ GuiData->GuiInfo.FontWeight,
FALSE,
IsUnderscore,
FALSE);
if (NewFont == NULL)
{
DPRINT1("ChangeFontAttributes failed, use the original font\n");
NewFont = GuiData->Font;
}
/* We use the underscore flag as a underline flag */
IsUnderline = !!(LastAttribute & COMMON_LVB_UNDERSCORE);
/* Select the new font */
NewFont = GuiData->Font[IsUnderline ? FONT_BOLD : FONT_NORMAL];
OldFont = SelectObject(GuiData->hMemDC, NewFont);
for (Line = TopLine; Line <= BottomLine; Line++)
@ -454,25 +409,12 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
SetTextColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, TextAttribFromAttrib(LastAttribute)));
SetBkColor(GuiData->hMemDC, PaletteRGBFromAttrib(Console, BkgdAttribFromAttrib(LastAttribute)));
/* Change underscore state if needed */
if (!!(LastAttribute & COMMON_LVB_UNDERSCORE) != IsUnderscore)
/* Change underline state if needed */
if (!!(LastAttribute & COMMON_LVB_UNDERSCORE) != IsUnderline)
{
IsUnderscore = !!(LastAttribute & COMMON_LVB_UNDERSCORE);
/* Delete the font we used up to now */
// SelectObject(GuiData->hMemDC, OldFont);
if (NewFont != GuiData->Font) DeleteObject(NewFont);
/* Recreate it */
NewFont = ChangeFontAttributes(GuiData, /* {0}, */ GuiData->GuiInfo.FontWeight,
FALSE,
IsUnderscore,
FALSE);
if (NewFont == NULL)
{
DPRINT1("ChangeFontAttributes failed, use the original font\n");
NewFont = GuiData->Font;
}
/* Select it */
IsUnderline = !!(LastAttribute & COMMON_LVB_UNDERSCORE);
/* Select the new font */
NewFont = GuiData->Font[IsUnderline ? FONT_BOLD : FONT_NORMAL];
/* OldFont = */ SelectObject(GuiData->hMemDC, NewFont);
}
}
@ -488,6 +430,9 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
RightChar - Start + 1);
}
/* Restore the old font */
SelectObject(GuiData->hMemDC, OldFont);
/*
* Draw the caret
*/
@ -520,10 +465,6 @@ GuiPaintTextModeBuffer(PTEXTMODE_SCREEN_BUFFER Buffer,
}
}
/* Restore the old font and delete the font we used up to now */
SelectObject(GuiData->hMemDC, OldFont);
if (NewFont != GuiData->Font) DeleteObject(NewFont);
LeaveCriticalSection(&Console->Lock);
}

View file

@ -126,7 +126,7 @@ ConioGetShiftState(PBYTE KeyState, LPARAM lParam)
}
VOID NTAPI
ConioProcessKey(PCONSOLE Console, MSG* msg)
ConioProcessKey(PCONSRV_CONSOLE Console, MSG* msg)
{
static BYTE KeyState[256] = { 0 };
/* MSDN mentions that you should use the last virtual key code received
@ -205,7 +205,7 @@ ConioProcessKey(PCONSOLE Console, MSG* msg)
}
DWORD
ConioEffectiveCursorSize(PCONSOLE Console, DWORD Scale)
ConioEffectiveCursorSize(PCONSRV_CONSOLE Console, DWORD Scale)
{
DWORD Size = (Console->ActiveBuffer->CursorInfo.dwSize * Scale + 99) / 100;
/* If line input in progress, perhaps adjust for insert toggle */

View file

@ -35,7 +35,7 @@ typedef struct _TUI_CONSOLE_DATA
HWND hWindow; /* Handle to the console's window (used for the window's procedure */
PCONSOLE Console; /* Pointer to the owned console */
PCONSRV_CONSOLE Console; /* Pointer to the owned console */
// TUI_CONSOLE_INFO TuiInfo; /* TUI terminal settings */
} TUI_CONSOLE_DATA, *PTUI_CONSOLE_DATA;
@ -261,7 +261,7 @@ TuiConsoleWndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
/*
PTUI_CONSOLE_DATA TuiData = NULL;
PCONSOLE Console = NULL;
PCONSRV_CONSOLE Console = NULL;
TuiData = TuiGetGuiData(hWnd);
if (TuiData == NULL) return 0;
@ -330,7 +330,7 @@ static DWORD NTAPI
TuiConsoleThread(PVOID Data)
{
PTUI_CONSOLE_DATA TuiData = (PTUI_CONSOLE_DATA)Data;
PCONSOLE Console = TuiData->Console;
PCONSRV_CONSOLE Console = TuiData->Console;
HWND NewWindow;
MSG msg;
@ -458,11 +458,11 @@ Quit:
static VOID NTAPI
TuiDeinitFrontEnd(IN OUT PFRONTEND This /*,
IN PCONSOLE Console */);
IN PCONSRV_CONSOLE Console */);
NTSTATUS NTAPI
static NTSTATUS NTAPI
TuiInitFrontEnd(IN OUT PFRONTEND This,
IN PCONSOLE Console)
IN PCONSRV_CONSOLE Console)
{
PTUI_CONSOLE_DATA TuiData;
HANDLE ThreadHandle;
@ -539,7 +539,7 @@ TuiInitFrontEnd(IN OUT PFRONTEND This,
static VOID NTAPI
TuiDeinitFrontEnd(IN OUT PFRONTEND This)
{
// PCONSOLE Console = This->Console;
// PCONSRV_CONSOLE Console = This->Console;
PTUI_CONSOLE_DATA TuiData = This->Data; // Console->FrontEndIFace.Data;
/* Close the notification window */

View file

@ -12,8 +12,8 @@
#pragma once
NTSTATUS TuiInitConsole(PCONSOLE Console,
/*IN*/ PCONSOLE_START_INFO ConsoleStartInfo,
PCONSOLE_INFO ConsoleInfo,
DWORD ProcessId);
/*IN*/ PCONSOLE_START_INFO ConsoleStartInfo,
PCONSOLE_INFO ConsoleInfo,
DWORD ProcessId);
/* EOF */

View file

@ -482,7 +482,7 @@ ConSrvAllocateConsole(PCONSOLE_PROCESS_DATA ProcessData,
{
NTSTATUS Status = STATUS_SUCCESS;
HANDLE ConsoleHandle;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
/*
* We are about to create a new console. However when ConSrvNewProcess

View file

@ -12,21 +12,11 @@
#include "rect.h"
#define CSR_DEFAULT_CURSOR_SIZE 25
/* Default attributes */
#define DEFAULT_SCREEN_ATTRIB (FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED)
#define DEFAULT_POPUP_ATTRIB (FOREGROUND_BLUE | FOREGROUND_RED | \
BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_INTENSITY)
/* VGA character cell */
typedef struct _CHAR_CELL
{
CHAR Char;
BYTE Attributes;
} CHAR_CELL, *PCHAR_CELL;
C_ASSERT(sizeof(CHAR_CELL) == 2);
/* Object type magic numbers */
typedef enum _CONSOLE_IO_OBJECT_TYPE
@ -272,7 +262,6 @@ typedef enum _CONSOLE_STATE
// HACK!!
struct _CONSOLE;
struct _WINSRV_CONSOLE;
/* HACK: */ typedef struct _CONSOLE *PCONSOLE;
#include "conio_winsrv.h"
@ -294,7 +283,7 @@ typedef struct _CONSOLE
CONSOLE_INPUT_BUFFER InputBuffer; /* Input buffer of the console */
UINT InputCodePage;
/** Put those things in CONSOLE_INPUT_BUFFER ?? **/
/** Put those things in CONSOLE_INPUT_BUFFER in PWINSRV_CONSOLE ?? **/
PWCHAR LineBuffer; /* Current line being input, in line buffered mode */
ULONG LineMaxSize; /* Maximum size of line in characters (including CR+LF) */
ULONG LineSize; /* Current size of line */
@ -303,26 +292,16 @@ typedef struct _CONSOLE
BOOLEAN LineUpPressed;
BOOLEAN LineInsertToggle; /* Replace character over cursor instead of inserting */
ULONG LineWakeupMask; /* Bitmap of which control characters will end line input */
/*************************************************/
/** In PWINSRV_CONSOLE ?? **/
BOOLEAN InsertMode;
/*************************************************/
/******************************* Screen buffers *******************************/
LIST_ENTRY BufferList; /* List of all screen buffers for this console */
PCONSOLE_SCREEN_BUFFER ActiveBuffer; /* Pointer to currently active screen buffer */
UINT OutputCodePage;
/**** Per-console Virtual DOS Machine Text-mode Buffer ****/
COORD VDMBufferSize; /* Real size of the VDM buffer, in units of ??? */
HANDLE VDMBufferSection; /* Handle to the memory shared section for the VDM buffer */
PVOID VDMBuffer; /* Our VDM buffer */
PVOID ClientVDMBuffer; /* A copy of the client view of our VDM buffer */
HANDLE VDMClientProcess; /* Handle to the client process who opened the buffer, to unmap the view */
HANDLE StartHardwareEvent;
HANDLE EndHardwareEvent;
HANDLE ErrorHardwareEvent;
/****************************** Other properties ******************************/
UNICODE_STRING OriginalTitle; /* Original title of console, the one defined when the console leader is launched; it never changes. Always NULL-terminated */
UNICODE_STRING Title; /* Title of console. Always NULL-terminated */
@ -332,30 +311,19 @@ typedef struct _CONSOLE
COORD ConsoleSize; /* The current size of the console, for text-mode only */
BOOLEAN FixedSize; /* TRUE if the console is of fixed size */
COLORREF Colors[16]; /* Colour palette */
} CONSOLE; // , *PCONSOLE;
// #include "conio_winsrv.h"
/* console.c */
VOID NTAPI
ConDrvPause(PCONSOLE Console);
VOID NTAPI
ConDrvUnpause(PCONSOLE Console);
PCONSOLE_PROCESS_DATA NTAPI
ConSrvGetConsoleLeaderProcess(IN PCONSOLE Console);
NTSTATUS
ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
IN PCONSOLE_PROCESS_DATA ProcessData);
NTSTATUS NTAPI
ConSrvConsoleProcessCtrlEvent(IN PCONSOLE Console,
IN ULONG ProcessGroupId,
IN ULONG CtrlEvent);
/* coninput.c */
VOID NTAPI ConioProcessKey(PCONSOLE Console, MSG* msg);
NTSTATUS
ConioAddInputEvents(PCONSOLE Console,
PINPUT_RECORD InputRecords,
@ -392,7 +360,5 @@ NTSTATUS ConioWriteConsole(PCONSOLE Console,
PWCHAR Buffer,
DWORD Length,
BOOL Attrib);
DWORD ConioEffectiveCursorSize(PCONSOLE Console,
DWORD Scale);
/* EOF */

View file

@ -12,8 +12,28 @@
#include "rect.h"
// This is ALMOST a HACK!!!!!!!
// Helpers for code refactoring
#define _CONSRV_CONSOLE _CONSOLE
#define CONSRV_CONSOLE CONSOLE
#define PCONSRV_CONSOLE PCONSOLE
// #define _CONSRV_CONSOLE _WINSRV_CONSOLE
// #define CONSRV_CONSOLE WINSRV_CONSOLE
// #define PCONSRV_CONSOLE PWINSRV_CONSOLE
#define CSR_DEFAULT_CURSOR_SIZE 25
/* VGA character cell */
typedef struct _CHAR_CELL
{
CHAR Char;
BYTE Attributes;
} CHAR_CELL, *PCHAR_CELL;
C_ASSERT(sizeof(CHAR_CELL) == 2);
typedef struct _FRONTEND FRONTEND, *PFRONTEND;
/* HACK: */ typedef struct _CONSOLE_INFO *PCONSOLE_INFO;
typedef struct _FRONTEND_VTBL
@ -24,7 +44,7 @@ typedef struct _FRONTEND_VTBL
* Internal interface (functions called by the console server only)
*/
NTSTATUS (NTAPI *InitFrontEnd)(IN OUT PFRONTEND This,
IN struct _CONSOLE* Console);
IN struct _CONSRV_CONSOLE* Console);
VOID (NTAPI *DeinitFrontEnd)(IN OUT PFRONTEND This);
/* Interface used for both text-mode and graphics screen buffers */
@ -83,8 +103,7 @@ struct _FRONTEND
PFRONTEND_VTBL Vtbl; /* Virtual table */
NTSTATUS (NTAPI *UnloadFrontEnd)(IN OUT PFRONTEND This);
// struct _WINSRV_CONSOLE*
struct _CONSOLE* Console; /* Console to which the frontend is attached to */
struct _CONSRV_CONSOLE* Console; /* Console to which the frontend is attached to */
PVOID Data; /* Private data */
PVOID OldData; /* Reserved */
};
@ -99,6 +118,7 @@ typedef struct _WINSRV_CONSOLE
/******************************* Console Set-up *******************************/
/* This **MUST** be FIRST!! */
// CONSOLE;
// PCONSOLE Console;
// LONG ReferenceCount; /* Is incremented each time a handle to something in the console (a screen-buffer or the input buffer of this console) gets referenced */
// CRITICAL_SECTION Lock;
@ -125,35 +145,49 @@ typedef struct _WINSRV_CONSOLE
ULONG NumberOfHistoryBuffers; /* Maximum number of history buffers allowed */
BOOLEAN HistoryNoDup; /* Remove old duplicate history entries */
/************************ Virtual DOS Machine support *************************/
COORD VDMBufferSize; /* Real size of the VDM buffer, in units of ??? */
HANDLE VDMBufferSection; /* Handle to the memory shared section for the VDM buffer */
PVOID VDMBuffer; /* Our VDM buffer */
PVOID ClientVDMBuffer; /* A copy of the client view of our VDM buffer */
HANDLE VDMClientProcess; /* Handle to the client process who opened the buffer, to unmap the view */
HANDLE StartHardwareEvent;
HANDLE EndHardwareEvent;
HANDLE ErrorHardwareEvent;
/****************************** Other properties ******************************/
COLORREF Colors[16]; /* Colour palette */
} WINSRV_CONSOLE, *PWINSRV_CONSOLE;
/* console.c */
VOID ConioPause(PCONSOLE Console, UINT Flags);
VOID ConioUnpause(PCONSOLE Console, UINT Flags);
VOID ConioPause(PCONSRV_CONSOLE Console, UINT Flags);
VOID ConioUnpause(PCONSRV_CONSOLE Console, UINT Flags);
PCONSOLE_PROCESS_DATA NTAPI
ConSrvGetConsoleLeaderProcess(IN PCONSOLE Console);
ConSrvGetConsoleLeaderProcess(IN PCONSRV_CONSOLE Console);
NTSTATUS
ConSrvConsoleCtrlEvent(IN ULONG CtrlEvent,
IN PCONSOLE_PROCESS_DATA ProcessData);
NTSTATUS NTAPI
ConSrvConsoleProcessCtrlEvent(IN PCONSOLE Console,
ConSrvConsoleProcessCtrlEvent(IN PCONSRV_CONSOLE Console,
IN ULONG ProcessGroupId,
IN ULONG CtrlEvent);
/* coninput.c */
VOID NTAPI ConioProcessKey(PCONSOLE Console, MSG* msg);
DWORD ConioEffectiveCursorSize(PCONSOLE Console,
VOID NTAPI ConioProcessKey(PCONSRV_CONSOLE Console, MSG* msg);
DWORD ConioEffectiveCursorSize(PCONSRV_CONSOLE Console,
DWORD Scale);
NTSTATUS
ConioAddInputEvents(PCONSOLE Console,
ConioAddInputEvents(PCONSRV_CONSOLE Console,
PINPUT_RECORD InputRecords,
ULONG NumEventsToWrite,
PULONG NumEventsWritten,
BOOLEAN AppendToEnd);
NTSTATUS
ConioProcessInputEvent(PCONSOLE Console,
ConioProcessInputEvent(PCONSRV_CONSOLE Console,
PINPUT_RECORD InputEvent);
/* conoutput.c */
@ -173,11 +207,11 @@ ConioProcessInputEvent(PCONSOLE Console,
MultiByteToWideChar((Console)->OutputCodePage, 0, (sChar), 1, (dWChar), 1)
PCHAR_INFO ConioCoordToPointer(PTEXTMODE_SCREEN_BUFFER Buff, ULONG X, ULONG Y);
VOID ConioDrawConsole(PCONSOLE Console);
NTSTATUS ConioResizeBuffer(PCONSOLE Console,
VOID ConioDrawConsole(PCONSRV_CONSOLE Console);
NTSTATUS ConioResizeBuffer(PCONSRV_CONSOLE Console,
PTEXTMODE_SCREEN_BUFFER ScreenBuffer,
COORD Size);
NTSTATUS ConioWriteConsole(PCONSOLE Console,
NTSTATUS ConioWriteConsole(PCONSRV_CONSOLE Console,
PTEXTMODE_SCREEN_BUFFER Buff,
PWCHAR Buffer,
DWORD Length,

View file

@ -43,7 +43,7 @@ ConvertInputUnicodeToAnsi(PCONSOLE Console,
/* PRIVATE FUNCTIONS **********************************************************/
static PHISTORY_BUFFER
HistoryCurrentBuffer(PCONSOLE Console,
HistoryCurrentBuffer(PCONSRV_CONSOLE Console,
PUNICODE_STRING ExeName)
{
PLIST_ENTRY Entry = Console->HistoryBuffers.Flink;
@ -75,7 +75,7 @@ HistoryCurrentBuffer(PCONSOLE Console,
}
static VOID
HistoryAddEntry(PCONSOLE Console,
HistoryAddEntry(PCONSRV_CONSOLE Console,
PUNICODE_STRING ExeName)
{
UNICODE_STRING NewEntry;
@ -127,7 +127,7 @@ HistoryAddEntry(PCONSOLE Console,
}
static VOID
HistoryGetCurrentEntry(PCONSOLE Console,
HistoryGetCurrentEntry(PCONSRV_CONSOLE Console,
PUNICODE_STRING ExeName,
PUNICODE_STRING Entry)
{
@ -140,7 +140,7 @@ HistoryGetCurrentEntry(PCONSOLE Console,
}
static PHISTORY_BUFFER
HistoryFindBuffer(PCONSOLE Console,
HistoryFindBuffer(PCONSRV_CONSOLE Console,
PVOID ExeName,
USHORT ExeLength,
BOOLEAN UnicodeExe)
@ -202,7 +202,7 @@ HistoryDeleteBuffer(PHISTORY_BUFFER Hist)
}
VOID
HistoryDeleteBuffers(PCONSOLE Console)
HistoryDeleteBuffers(PCONSRV_CONSOLE Console)
{
PLIST_ENTRY CurrentEntry;
PHISTORY_BUFFER HistoryBuffer;
@ -216,7 +216,7 @@ HistoryDeleteBuffers(PCONSOLE Console)
}
static VOID
LineInputSetPos(PCONSOLE Console, UINT Pos)
LineInputSetPos(PCONSRV_CONSOLE Console, UINT Pos)
{
if (Pos != Console->LinePos && Console->InputBuffer.Mode & ENABLE_ECHO_INPUT)
{
@ -240,7 +240,7 @@ LineInputSetPos(PCONSOLE Console, UINT Pos)
}
static VOID
LineInputEdit(PCONSOLE Console, UINT NumToDelete, UINT NumToInsert, PWCHAR Insertion)
LineInputEdit(PCONSRV_CONSOLE Console, UINT NumToDelete, UINT NumToInsert, PWCHAR Insertion)
{
PTEXTMODE_SCREEN_BUFFER ActiveBuffer;
UINT Pos = Console->LinePos;
@ -277,7 +277,7 @@ LineInputEdit(PCONSOLE Console, UINT NumToDelete, UINT NumToInsert, PWCHAR Inser
}
static VOID
LineInputRecallHistory(PCONSOLE Console,
LineInputRecallHistory(PCONSRV_CONSOLE Console,
PUNICODE_STRING ExeName,
INT Offset)
{
@ -297,7 +297,7 @@ LineInputRecallHistory(PCONSOLE Console,
}
VOID
LineInputKeyDown(PCONSOLE Console,
LineInputKeyDown(PCONSRV_CONSOLE Console,
PUNICODE_STRING ExeName,
KEY_EVENT_RECORD *KeyEvent)
{
@ -511,7 +511,7 @@ CSR_API(SrvGetConsoleCommandHistory)
{
NTSTATUS Status;
PCONSOLE_GETCOMMANDHISTORY GetCommandHistoryRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetCommandHistoryRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
ULONG BytesWritten = 0;
PHISTORY_BUFFER Hist;
@ -599,7 +599,7 @@ CSR_API(SrvGetConsoleCommandHistoryLength)
{
NTSTATUS Status;
PCONSOLE_GETCOMMANDHISTORYLENGTH GetCommandHistoryLengthRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.GetCommandHistoryLengthRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PHISTORY_BUFFER Hist;
ULONG Length = 0;
UINT i;
@ -641,7 +641,7 @@ CSR_API(SrvExpungeConsoleCommandHistory)
{
NTSTATUS Status;
PCONSOLE_EXPUNGECOMMANDHISTORY ExpungeCommandHistoryRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.ExpungeCommandHistoryRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PHISTORY_BUFFER Hist;
if (!CsrValidateMessageBuffer(ApiMessage,
@ -669,7 +669,7 @@ CSR_API(SrvSetConsoleNumberOfCommands)
{
NTSTATUS Status;
PCONSOLE_SETHISTORYNUMBERCOMMANDS SetHistoryNumberCommandsRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetHistoryNumberCommandsRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
PHISTORY_BUFFER Hist;
if (!CsrValidateMessageBuffer(ApiMessage,
@ -720,7 +720,7 @@ CSR_API(SrvGetConsoleHistory)
{
#if 0 // Vista+
PCONSOLE_GETSETHISTORYINFO HistoryInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.HistoryInfoRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
NTSTATUS Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
if (NT_SUCCESS(Status))
{
@ -740,7 +740,7 @@ CSR_API(SrvSetConsoleHistory)
{
#if 0 // Vista+
PCONSOLE_GETSETHISTORYINFO HistoryInfoRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.HistoryInfoRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
NTSTATUS Status = ConSrvGetConsole(ConsoleGetPerProcessData(CsrGetClientThread()->Process), &Console, TRUE);
if (NT_SUCCESS(Status))
{
@ -760,7 +760,7 @@ CSR_API(SrvSetConsoleCommandHistoryMode)
{
NTSTATUS Status;
PCONSOLE_SETHISTORYMODE SetHistoryModeRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.SetHistoryModeRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
DPRINT1("SrvSetConsoleCommandHistoryMode(Mode = %d) is not yet implemented\n",
SetHistoryModeRequest->Mode);

View file

@ -8,9 +8,9 @@
#pragma once
VOID HistoryDeleteBuffers(PCONSOLE Console);
VOID HistoryDeleteBuffers(PCONSRV_CONSOLE Console);
VOID
LineInputKeyDown(PCONSOLE Console,
LineInputKeyDown(PCONSRV_CONSOLE Console,
PUNICODE_STRING ExeName,
KEY_EVENT_RECORD *KeyEvent);

View file

@ -23,7 +23,7 @@ CSR_API(SrvRegisterConsoleVDM)
{
NTSTATUS Status;
PCONSOLE_REGISTERVDM RegisterVDMRequest = &((PCONSOLE_API_MESSAGE)ApiMessage)->Data.RegisterVDMRequest;
PCONSOLE Console;
PCONSRV_CONSOLE Console;
DPRINT1("SrvRegisterConsoleVDM(%d)\n", RegisterVDMRequest->RegisterFlags);