Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

827 lines
25 KiB

//-----------------------------------------------------------------------------
//
// DirectUser COM+ API
//
// Copyright (C) 2000 by Microsoft Corporation
//
//-----------------------------------------------------------------------------
namespace DUser
{
using System;
using System.Runtime.InteropServices;
public class Common
{
public enum StructFormat
{
Ansi = 1,
Unicode = 2,
Auto = 3,
}
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=StructFormat.Auto)]
public class INITGADGET
{
public uint cbSize;
public uint nThreadMode;
public uint nMsgMode;
public int hctxShare;
}
[dllimport("DUser.dll", EntryPoint="InitGadgets", SetLastError=true)]
public static extern bool InitGadgets(INITGADGET ig);
[dllimport("DUserCP.dll", EntryPoint="InitBridge", SetLastError=true)]
public static extern bool InitBridge();
[dllimport("kernel32.dll", EntryPoint="GetLastError")]
public static extern uint GetLastError();
public static void Init()
{
//
// Initialize DUser
//
INITGADGET ig = new INITGADGET();
ig.cbSize = 12;
ig.nThreadMode = 1;
ig.nMsgMode = 2;
ig.hctxShare = 0;
if (!InitGadgets(ig)) {
throw new DUserException(GetLastError(), "Unable to initialized DUser");
}
if (!InitBridge()) {
throw new DUserException(GetLastError(), "Unable to initialized DUser Bridge");
}
//
// Initialize all of the DUser classes
//
BaseGadget.InitBaseGadget();
MsgGadget.InitMsgGadget();
Extension.InitExtension();
DropTarget.InitDropTarget();
Visual.InitVisual();
Root.InitRoot();
}
public const int gmEvent = 32768;
public const int gmDestroy = gmEvent + 1;
public const int gmPaint = gmEvent + 2;
public const int gmInput = gmEvent + 3;
public const int gmChangeState = gmEvent + 4;
public const int gmChangeRect = gmEvent + 5;
public const int gmChangeStyle = gmEvent + 6;
public const int gmQuery = gmEvent + 7;
public const int gmSyncAdaptor = gmEvent + 8;
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=StructFormat.Auto)]
public class Msg
{
public uint cbSize;
public int nMsg;
public int hgadMsg;
}
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=StructFormat.Auto)]
public class EventMsg : Msg
{
public uint nMsgFlags;
}
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=StructFormat.Auto)]
public class MethodMsg : Msg
{
}
[dllimport("DUser.dll", EntryPoint="FindGadgetClass", SetLastError=true)]
public static extern int FindGadgetClass([marshal(UnmanagedType.LPWStr)] string sName, uint nVersion);
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=StructFormat.Auto)]
public class ContructInfo
{
}
public const uint gprFailed = 0xFFFFFFFF;
public const uint gprNotHandled = 0;
public const uint gprComplete = 1;
public const uint gprPartial = 2;
public delegate uint GadgetEventProc(Common.EventMsg pmsg);
public delegate void GadgetMethodProc(Common.MethodMsg pmsg);
[dllimport("DUser.dll", EntryPoint="BuildGadget", SetLastError=true)]
public static extern int BuildGadget(int hClass, ContructInfo ci);
[dllimport("DUserCP.dll", EntryPoint="BuildBridgeGadget", SetLastError=true)]
public static extern int BuildBridgeGadget(int hClass, ContructInfo ci,
GadgetEventProc pfnEvent, GadgetMethodProc pfnMethod);
[dllimport("DUser.dll", EntryPoint="CastGadgetDirect", SetLastError=true)]
public static extern int CastGadgetDirect(int hgad);
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=StructFormat.Auto)]
public class POINT
{
public int x;
public int y;
}
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=StructFormat.Auto)]
public class SIZE
{
public int cx;
public int cy;
}
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=StructFormat.Auto)]
public class RECT
{
public int left;
public int top;
public int right;
public int bottom;
}
[dllimport("DUser.dll", EntryPoint="GetStdColorBrushI")]
public static extern int GetStdColorBrush(int idColor);
};
public class Gadget
{
public int pgad;
protected int h(Gadget g)
{
return g != null ? g.pgad : 0;
}
protected bool s(uint hr)
{
return (hr & 0x80000000) == 0;
}
protected bool f(uint hr)
{
return (hr & 0x80000000) != 0;
}
public virtual uint OnEvent(Common.EventMsg pmsg)
{
return 0;
}
protected uint RawEventProc(Common.EventMsg pmsg)
{
return OnEvent(pmsg);
}
public virtual void OnMethod(Common.MethodMsg pmsg)
{
}
protected void RawMethodProc(Common.MethodMsg pmsg)
{
OnMethod(pmsg);
}
};
class DUserException : System.SystemException
{
public DUserException(uint error)
{
this.error = error;
}
public DUserException(uint error, string sReason) : base(sReason)
{
this.error = error;
}
public uint error;
};
//---------------------------------------------------------------------------
//
// Stub class BaseGadget
//
class BaseGadget : Gadget
{
private static int idBaseGadget;
public static void InitBaseGadget()
{
idBaseGadget = Common.FindGadgetClass("BaseGadgetBridge", 1);
if (idBaseGadget == 0) {
throw new DUserException(Common.GetLastError(), "Unable to find registered BaseGadget");
}
}
[dllimport("DUserCP.dll")]
public static extern uint SBaseGadgetOnEvent(Common.EventMsg pmsg);
public override uint OnEvent(Common.EventMsg pmsg)
{
return SBaseGadgetOnEvent(pmsg);
}
[dllimport("DUser.dll", EntryPoint="BaseGadgetOnEvent", SetLastError=true)]
public static extern uint BaseGadgetOnEvent(Common.EventMsg pmsg);
[dllimport("DUser.dll", EntryPoint="BaseGadgetGetFilter", SetLastError=true)]
public static extern uint BaseGadgetGetFilter([@out] uint pnFilter);
public const uint gmfiPaint = 0x00000001;
public const uint gmfiInputKeyboard = 0x00000002;
public const uint gmfiInputMouse = 0x00000004;
public const uint gmfiInputMouseMove = 0x00000008;
public const uint gmfiChangeState = 0x00000010;
public const uint gmfiChangeRect = 0x00000020;
public const uint gmfiChangeStyle = 0x00000040;
public const uint gmfiAll = 0xFFFFFFFF;
public void GetFilter(ref uint nFilter)
{
uint hr = BaseGadgetGetFilter(nFilter);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="BaseGadgetSetFilter", SetLastError=true)]
public static extern uint BaseGadgetSetFilter(uint nNewFilter, uint nMask);
public void SetFilter(uint nNewFilter, uint nMask)
{
uint hr = BaseGadgetSetFilter(nNewFilter, nMask);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="BaseGadgetAddHandler", SetLastError=true)]
public static extern uint BaseGadgetAddHandler(int nMsg, int pgbHandler);
public void AddHandler(int nMsg, BaseGadget vb)
{
uint hr = BaseGadgetAddHandler(nMsg, h(vb));
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="BaseGadgetRemoveHandler", SetLastError=true)]
public static extern uint BaseGadgetRemoveHandler(int nMsg, int pgbHandler);
public void RemoveHandler(int nMsg, BaseGadget vb)
{
uint hr = BaseGadgetRemoveHandler(nMsg, h(vb));
if (f(hr)) {
throw new DUserException(hr);
}
}
}
//---------------------------------------------------------------------------
//
// Stub class MsgGadget
//
class MsgGadget : BaseGadget
{
private static int idMsgGadget;
public static void InitMsgGadget()
{
idMsgGadget = Common.FindGadgetClass("MsgGadgetBridge", 1);
if (idMsgGadget == 0) {
throw new DUserException(Common.GetLastError(), "Unable to find registered MsgGadget");
}
}
[dllimport("DUserCP.dll")]
protected static extern uint SMsgGadgetOnEvent(Common.EventMsg pmsg);
public override uint OnEvent(Common.EventMsg pmsg)
{
return SMsgGadgetOnEvent(pmsg);
}
}
//---------------------------------------------------------------------------
//
// Stub class Extension
//
class Extension : MsgGadget
{
private static int idExtension;
public static void InitExtension()
{
idExtension = Common.FindGadgetClass("ExtensionBridge", 1);
if (idExtension == 0) {
throw new System.SystemException("Unable to find registered Extension");
}
}
[dllimport("DUser.dll", EntryPoint="ExtensionOnRemoveExisting", SetLastError=true)]
public static extern int ExtensionOnRemoveExisting();
[dllimport("DUser.dll", EntryPoint="ExtensionOnDestroySubject", SetLastError=true)]
public static extern int ExtensionOnDestroySubject();
[dllimport("DUser.dll", EntryPoint="ExtensionOnAsyncDestroy", SetLastError=true)]
public static extern int ExtensionOnAsyncDestroy();
}
//---------------------------------------------------------------------------
//
// Stub class DropTarget
//
class DropTarget : Extension
{
private static int idDropTarget;
public static void InitDropTarget()
{
idDropTarget = Common.FindGadgetClass("DropTargetBridge", 1);
if (idDropTarget == 0) {
throw new System.SystemException("Unable to find registered DropTarget");
}
}
}
//---------------------------------------------------------------------------
//
// Stub class Visual
//
class Visual : BaseGadget
{
private static int idVisual;
public static void InitVisual()
{
idVisual = Common.FindGadgetClass("VisualBridge", 1);
if (idVisual == 0) {
throw new System.SystemException("Unable to find registered Visual");
}
}
public class VisualCI : Common.ContructInfo
{
public int pgadParent;
};
public Visual(Visual vParent)
{
CommonBuild(vParent.pgad, idVisual);
}
public Visual(Visual vParent, int idClass)
{
CommonBuild(vParent.pgad, idClass);
}
public Visual(HGadget gadParent)
{
CommonBuild(Common.CastGadgetDirect(gadParent.hgad), idVisual);
}
public Visual(HGadget gadParent, int idClass)
{
CommonBuild(Common.CastGadgetDirect(gadParent.hgad), idClass);
}
protected Visual(int pgv)
{
this.pgad = pgv;
}
private void CommonBuild(int pgadParent, int idClass)
{
VisualCI ci = new VisualCI();
ci.pgadParent = pgadParent;
int pgvThis = Common.BuildBridgeGadget(idClass, ci,
new Common.GadgetEventProc(this.RawEventProc), new Common.GadgetMethodProc(this.RawMethodProc));
//int pgvThis = Common.BuildGadget(idClass, ci);
if (pgvThis != 0) {
this.pgad = pgvThis;
} else {
throw new DUserException(Common.GetLastError(), "Unable to create new Visual");
}
}
[dllimport("DUserCP.dll")]
public static extern uint SVisualOnEvent(Common.EventMsg pmsg);
public override uint OnEvent(Common.EventMsg pmsg)
{
return SVisualOnEvent(pmsg);
}
public enum EOrder
{
voAny = 0,
voBefore = 1,
voBehind = 2,
voTop = 3,
voBottom = 4,
};
[dllimport("DUser.dll", EntryPoint="VisualSetOrder", SetLastError=true)]
public static extern uint VisualSetOrder(int pgvThis, int pgvOther, uint nCmd);
public void SetOrder(Visual vOther, EOrder o)
{
uint hr = VisualSetOrder(this.pgad, h(vOther), (uint) o);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualSetParent", SetLastError=true)]
public static extern uint VisualSetParent(int pgvThis, int pgvParent, int pgvOther, uint nCmd);
public void SetParent(Visual vParent, Visual vOther, uint nCmd)
{
uint hr = VisualSetParent(this.pgad, h(vParent), h(vOther), nCmd);
if (f(hr)) {
throw new DUserException(hr);
}
}
public enum EGadget
{
vgParent = 0,
vgNext = 1,
vgPrev = 2,
vgTopChild = 3,
vgBottomChild = 4,
vgRoot = 5,
};
[dllimport("DUser.dll", EntryPoint="VisualGetGadget", SetLastError=true)]
public static extern uint VisualGetGadget(int pgvThis, uint nCmd, [@out] int ppgv);
public Visual GetGadget(EGadget nCmd)
{
int pgv = 0;
uint hr = VisualGetGadget(this.pgad, (uint) nCmd, pgv);
if (f(hr)) {
throw new DUserException(hr);
}
return new Visual(pgv);
}
public const uint gsRelative = 0x00000001;
public const uint gsVisible = 0x00000002;
public const uint gsEnabled = 0x00000004;
public const uint gsBuffered = 0x00000008;
public const uint gsAllowSubClass = 0x00000010;
public const uint gsKeyboardFocus = 0x00000020;
public const uint gsMouseFocus = 0x00000040;
public const uint gsClipInside = 0x00000080;
public const uint gsClipSiblings = 0x00000100;
public const uint gsHRedraw = 0x00000200;
public const uint gsVRedraw = 0x00000400;
public const uint gsOpaque = 0x00000800;
public const uint gsZeroOrigin = 0x00001000;
public const uint gsCustomHitTest = 0x00002000;
public const uint gsAdaptor = 0x00004000;
public const uint gsCached = 0x00008000;
[dllimport("DUser.dll", EntryPoint="VisualGetStyle", SetLastError=true)]
public static extern uint VisualGetStyle(int pgvThis, [@out] uint pnStyle);
public uint GetStyle()
{
uint nStyle = 0;
uint hr = VisualGetStyle(this.pgad, nStyle);
if (f(hr)) {
throw new DUserException(hr);
}
return nStyle;
}
[dllimport("DUser.dll", EntryPoint="VisualSetStyle", SetLastError=true)]
public static extern uint VisualSetStyle(int pgvThis, uint nNewStyle, uint nMask);
public void SetStyle(uint nNewStyle, uint nMask)
{
uint hr = VisualSetStyle(this.pgad, nNewStyle, nMask);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualSetKeyboardFocus", SetLastError=true)]
public static extern uint VisualSetKeyboardFocus(int pgvThis);
public void SetKeyboardFocus()
{
uint hr = VisualSetKeyboardFocus(this.pgad);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualIsParentChainStyle", SetLastError=true)]
public static extern uint VisualIsParentChainStyle(int pgvThis, uint nStyle, [@out] int pfResult, uint nFlags);
[dllimport("DUser.dll", EntryPoint="VisualGetProperty", SetLastError=true)]
public static extern uint VisualGetProperty(int pgvThis, int id, [@out] int ppvValue);
public int GetProperty(int id)
{
int pvValue = 0;
uint hr = VisualGetProperty(this.pgad, id, pvValue);
if (f(hr)) {
throw new DUserException(hr);
}
return pvValue;
}
[dllimport("DUser.dll", EntryPoint="VisualSetProperty", SetLastError=true)]
public static extern uint VisualSetProperty(int pgvThis, int id, int pvValue);
public void SetProperty(int id, int pvValue)
{
uint hr = VisualSetProperty(this.pgad, id, pvValue);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualRemoveProperty", SetLastError=true)]
public static extern uint VisualRemoveProperty(int pgvThis, int id);
public void RemoveProperty(int id)
{
uint hr = VisualRemoveProperty(this.pgad, id);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualInvalidate", SetLastError=true)]
public static extern uint VisualInvalidate(int pgvThis);
public void Invalidate()
{
uint hr = VisualInvalidate(this.pgad);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualSetFillI", SetLastError=true)]
public static extern uint VisualSetFillI(int pgvThis, int hbrFill, byte bAlpha, int w, int h);
public void SetFill(int hbrFill, byte bAlpha)
{
uint hr = VisualSetFillI(this.pgad, hbrFill, bAlpha, 0, 0);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualGetScale", SetLastError=true)]
public static extern uint VisualGetScale(int pgvThis, [@out] float pflX, [@out] float pflY);
public void GetScale(ref float flX, ref float flY)
{
uint hr = VisualGetScale(this.pgad, flX, flY);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualSetScale", SetLastError=true)]
public static extern uint VisualSetScale(int pgvThis, float flX, float flY);
public void VisualSetScale(float flX, float flY)
{
uint hr = VisualSetScale(this.pgad, flX, flY);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualGetRotation", SetLastError=true)]
public static extern uint VisualGetRotation(int pgvThis, [@out] float pflRotationRad);
public void GetRotation(ref float flRotationRad)
{
uint hr = VisualGetRotation(this.pgad, flRotationRad);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualSetRotation", SetLastError=true)]
public static extern uint VisualSetRotation(int pgvThis, float flRotationRad);
public void SetRotation(float flRotationRad)
{
uint hr = VisualSetRotation(this.pgad, flRotationRad);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualGetCenterPoint", SetLastError=true)]
public static extern uint VisualGetCenterPoint(int pgvThis, [@out] float pflX, [@out] float pflY);
public void GetCenterPoint(ref float flX, ref float flY)
{
uint hr = VisualGetCenterPoint(this.pgad, flX, flY);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualSetCenterPoint", SetLastError=true)]
public static extern uint VisualSetCenterPoint(int pgvThis, float flX, float flY);
public void SetCenterPoint(float flX, float flY)
{
uint hr = VisualSetCenterPoint(this.pgad, flX, flY);
if (f(hr)) {
throw new DUserException(hr);
}
}
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=Common.StructFormat.Auto)]
public class BUFFER_INFO
{
public uint cbSize;
public uint nMask;
public uint nStyle;
public byte bAlpha;
}
[dllimport("DUser.dll", EntryPoint="VisualGetBufferInfo", SetLastError=true)]
public static extern uint VisualGetBufferInfo(int pgvThis, [@out] BUFFER_INFO pbi);
[dllimport("DUser.dll", EntryPoint="VisualSetBufferInfo", SetLastError=true)]
public static extern uint VisualSetBufferInfo(int pgvThis, BUFFER_INFO pbi);
[dllimport("DUser.dll", EntryPoint="VisualGetSize", SetLastError=true)]
public static extern uint VisualGetSize(int pgvThis, [@out] Common.SIZE psizeLogicalPxl);
public const uint sgrMove = 0x00000001;
public const uint sgrSize = 0x00000002;
public const uint sgrClient = 0x00000004;
public const uint sgrParent = 0x00000008;
[dllimport("DUser.dll", EntryPoint="VisualGetRect", SetLastError=true)]
public static extern uint VisualGetRect(int pgvThis, uint nFlags, [@out] Common.RECT prcPxl);
public void GetRect(uint nFlags, ref Common.RECT rcPxl)
{
uint hr = VisualGetRect(this.pgad, nFlags, rcPxl);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualSetRect", SetLastError=true)]
public static extern uint VisualSetRect(int pgvThis, uint nFlags, Common.RECT prcPxl);
public void SetRect(uint nFlags, Common.RECT rc)
{
uint hr = VisualSetRect(this.pgad, nFlags, rc);
if (f(hr)) {
throw new DUserException(hr);
}
}
public void SetRect(uint nFlags, int x, int y, int w, int h)
{
Common.RECT rc = new Common.RECT();
rc.left = x;
rc.top = y;
rc.right = x + w;
rc.bottom = y + h;
uint hr = VisualSetRect(this.pgad, nFlags, rc);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="VisualMapPoints", SetLastError=true)]
public static extern uint VisualMapPoints(int pgvThis, Visual pgvTo, [@out] Common.POINT rgptClientPxl, int cPts);
}
//---------------------------------------------------------------------------
//
// Stub class Root
//
class Root : Visual
{
private static int idRoot;
public static void InitRoot()
{
idRoot = Common.FindGadgetClass("RootBridge", 1);
if (idRoot == 0) {
throw new DUserException(Common.GetLastError(), "Unable to find registered Root");
}
}
public Root(Visual vParent) : base(vParent, idRoot)
{
}
[dllimport("DUserCP.dll")]
public static extern uint SRootOnEvent(Common.EventMsg pmsg);
public override uint OnEvent(Common.EventMsg pmsg)
{
return SRootOnEvent(pmsg);
}
[dllimport("DUser.dll", EntryPoint="RootGetFocus", SetLastError=true)]
public static extern uint RootGetFocus(int pgvThis, [@out] int ppgvFocus);
public Visual GetFocus()
{
int pgvFocus = 0;
uint hr = RootGetFocus(this.pgad, pgvFocus);
if (f(hr)) {
throw new DUserException(hr);
}
return new Visual(pgvFocus);
}
[dllimport("DUser.dll", EntryPoint="RootFindFromPoint", SetLastError=true)]
public static extern uint RootFindFromPoint(int pgvThis, Common.POINT ptContainerPxl, uint nFlags, [@out] Common.POINT pptClientPxl, [@out] int ppgvFound);
public void FindFromPoint(Common.POINT ptContainerPxl, uint nFlags, ref Common.POINT ptClientPxl, ref Visual vFound)
{
int pgvFound = 0;
uint hr = RootFindFromPoint(this.pgad, ptContainerPxl, nFlags, ptClientPxl, pgvFound);
if (f(hr)) {
throw new DUserException(hr);
}
vFound = new Visual(pgvFound);
}
[System.Runtime.InteropServices.ComVisible(false), sysstruct(format=Common.StructFormat.Auto)]
public class ROOT_INFO
{
public uint cbSize;
public uint nMask;
public uint nOptions;
public uint nSurface;
public uint nDropTarget;
public int pal;
}
[dllimport("DUser.dll", EntryPoint="RootGetRootInfo", SetLastError=true)]
public static extern uint RootGetRootInfo(int pgvThis, ROOT_INFO pri);
public void GetRootInfo(ref ROOT_INFO ri)
{
uint hr = RootGetRootInfo(this.pgad, ri);
if (f(hr)) {
throw new DUserException(hr);
}
}
[dllimport("DUser.dll", EntryPoint="RootSetRootInfo", SetLastError=true)]
public static extern uint RootSetRootInfo(int pgvThis, ROOT_INFO pri);
public void SetRootInfo(ROOT_INFO ri)
{
uint hr = RootSetRootInfo(this.pgad, ri);
if (f(hr)) {
throw new DUserException(hr);
}
}
}
}