📄 shell.h
字号:
#define SGVMI_XMS_Lock 0x00010000 // XMS Hands Locked
#define SGVMI_EMS_Lock 0x00008000 // EMS Hands Locked
#define SGVMI_V86_Lock 0x00040000 // V86 Memory Locked
#define SGVMI_ClsExit 0x40000000 // Close on Exit Enab
/*
* Bits of returned ECX flags for SHELL_GetVMInfo service
* Currently no bits defined.
*/
#endif /* Not_VxD */
// EndDoc
#ifndef WIN31COMPAT
#ifndef Not_VxD
/* Local Memory Flags */
#define LMEM_FIXED 0x0000
#define LMEM_ZEROINIT 0x0040
#define LPTR (LMEM_FIXED | LMEM_ZEROINIT)
#define LMEM_STRING 0x00010000
#define LMEM_OEM2ANSI 0x00020000
/* Flags returned by SHELL_QueryAppyTimeAvailable */
#define QAAFL_APPYAVAIL 0x00000001 /* 'Appy-time server exists */
#define QAAFL_APPYNOW 0x00000002 /* It is now 'Appy-time */
/* Flags for SHELL_CallAtAppyTime */
#define CAAFL_RING0 0x00000001 /* Does not require GUI services */
#define CAAFL_TIMEOUT 0x00000002 /* Time out the event */
#endif /* Not_VxD */
/******************************************************************************
*
* Structure used for SHELL_ShellExecute, q.v.
*
*****************************************************************************/
/* H2INCSWITCHES -t */
typedef struct _SHEXPACKET { /* shex */
DWORD dwTotalSize;/* Size of packet, including all baggage */
DWORD dwSize; /* Size of SHEXPACKET */
DWORD ibOp; /* Operation to perform */
DWORD ibFile; /* File to open */
DWORD ibParams; /* Optional parameters */
DWORD ibDir; /* Directory in which to launch */
DWORD dwReserved; /* Must be zero */
DWORD nCmdShow; /* How to show the window */
/* char rgchBaggage[]; */ /* Arbitrary baggage appended here */
} SHEXPACKET, *PSHEXPACKET;
/* H2INCSWITCHES -t- */
/* EQUATES FOR _SHELL_GetDOSAppInfo */
// Function IDs
#define SGDAIF_COMPARENAME 0
#define SGDAIF_TESTAPPBIT 1
#define SGDAIF_LASTVALID 1 // Used internally
// Return values
#define SGDAIR_SUCCESS 0
#define SGDAIR_NOMATCH 1
#define SGDAIR_BADFUNCTION 2
#endif /* WIN31COMPAT */
/*XLATOFF*/
#ifndef Not_VxD
typedef DWORD APPY_HANDLE;
typedef VOID (__cdecl *APPY_CALLBACK)(DWORD dwRefData);
#define BSM_ERROR_SOMEONE_FAILED 0
#define BSM_ERROR_SUCCESS 1
#define BSM_ERROR_OUT_OF_MEMORY 0xFFFFFFFF
typedef DWORD SYSBHOOK_HANDLE;
typedef BOOL (__cdecl *SYSBHOOK_CALLBACK)(DWORD wMessage, DWORD wParam, DWORD lParam, DWORD dwRefData);
#pragma warning (disable:4035) // turn off no return code warning
DWORD VXDINLINE
SHELL_SYSMODAL_Message(HVM hvm, DWORD dwMBFlags, PCHAR pszMessage, PCHAR pszCaption)
{
_asm mov ebx, [hvm]
_asm mov eax, [dwMBFlags]
_asm or eax, MB_SYSTEMMODAL
_asm mov ecx, [pszMessage]
_asm mov edi, [pszCaption]
VxDCall(SHELL_SYSMODAL_Message);
}
DWORD VXDINLINE
SHELL_ShellExecute(PSHEXPACKET pShex)
{
_asm push pShex
Touch_Register(eax)
VxDCall(_SHELL_ShellExecute);
_asm add esp, 4*1
}
typedef VOID (_cdecl *SHELL_MESSAGE_COMPLETION_HANDLER)();
DWORD VXDINLINE
SHELL_Message(HVM hvm, DWORD dwMBFlags, PCHAR pszMessage, PCHAR pszCaption, SHELL_MESSAGE_COMPLETION_HANDLER CallBack, DWORD dwRefData)
{
_asm mov ebx, [hvm]
_asm mov eax, [dwMBFlags]
_asm mov ecx, [pszMessage]
_asm mov edi, [pszCaption]
_asm mov esi, [CallBack]
_asm mov edx, [dwRefData]
VxDCall(SHELL_Message);
}
#ifndef WANTVXDWRAPS
#ifndef WIN31COMPAT
APPY_HANDLE VXDINLINE
SHELL_CallAtAppyTime(APPY_CALLBACK pfnAppyCallBack, DWORD dwRefData, DWORD flAppy, ...)
{
_asm push flAppy[4]
_asm push flAppy
_asm push dwRefData
_asm push pfnAppyCallBack
Touch_Register(eax)
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_CallAtAppyTime);
_asm add esp, 4*4
}
VOID VXDINLINE
SHELL_CancelAppyTimeEvent(APPY_HANDLE hAppy)
{
_asm push hAppy
Touch_Register(eax)
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_CancelAppyTimeEvent);
_asm add esp, 4
}
BOOL VXDINLINE
SHELL_QueryAppyTimeAvailable(VOID)
{
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_QueryAppyTimeAvailable)
}
DWORD VXDINLINE
SHELL_LocalAllocEx(DWORD fl, DWORD cb, PVOID lpvBuf)
{
_asm push lpvBuf
_asm push cb
_asm push fl
Touch_Register(eax)
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_LocalAllocEx);
_asm add esp, 3*4
}
DWORD VXDINLINE
SHELL_LocalFree(DWORD hdata)
{
_asm push hdata
Touch_Register(eax)
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_LocalFree);
_asm add esp, 1*4
}
DWORD VXDINLINE
SHELL_CallDll(PCHAR lpszDll, PCHAR lpszProcName, DWORD cbArgs, PVOID lpvArgs)
{
_asm push lpvArgs
_asm push cbArgs
_asm push lpszProcName
_asm push lpszDll
Touch_Register(eax)
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_CallDll);
_asm add esp, 4*4
}
DWORD VXDINLINE
SHELL_BroadcastSystemMessage(DWORD dwFlags, PDWORD lpdwRecipients, DWORD uMsg, DWORD wparam, DWORD lparam)
{
_asm push lparam
_asm push wparam
_asm push uMsg
_asm push lpdwRecipients
_asm push dwFlags
Touch_Register(eax)
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_BroadcastSystemMessage);
_asm add esp, 5*4
}
SYSBHOOK_HANDLE VXDINLINE
SHELL_HookSystemBroadcast(SYSBHOOK_CALLBACK pfnSysBHookCallBack, DWORD dwRefData, DWORD dwCallOrder)
{
_asm push dwCallOrder
_asm push dwRefData
_asm push pfnSysBHookCallBack
Touch_Register(eax)
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_HookSystemBroadcast);
_asm add esp, 3*4
}
VOID VXDINLINE
SHELL_UnhookSystemBroadcast(SYSBHOOK_HANDLE SysBHookHandle)
{
_asm push SysBHookHandle
Touch_Register(eax)
Touch_Register(ecx)
Touch_Register(edx)
VxDCall(_SHELL_UnhookSystemBroadcast);
_asm add esp, 1*4
}
#endif // WIN31COMPAT
#endif // WANTVXDWRAPS
#pragma warning (default:4035) // turn on no return code warning
#endif // Not_VxD
/*XLATON*/
#endif // _SHELL_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -