From 11a9b5f0303175acddec0b4afb873be9b9cbaa10 Mon Sep 17 00:00:00 2001 From: Bryan Roe Date: Mon, 28 Mar 2022 13:20:12 -0700 Subject: [PATCH] Added workaround/fix for __stdcall issue on 32 bit windows --- microscript/ILibDuktape_GenericMarshal.c | 308 ++++++++++++++++++----- microscript/ILibDuktape_GenericMarshal.h | 6 + microscript/ILibDuktape_Polyfills.c | 6 +- modules/win-dispatcher.js | 4 +- modules/win-tasks.js | 10 +- 5 files changed, 260 insertions(+), 74 deletions(-) diff --git a/microscript/ILibDuktape_GenericMarshal.c b/microscript/ILibDuktape_GenericMarshal.c index 03aaf36..7522d76 100644 --- a/microscript/ILibDuktape_GenericMarshal.c +++ b/microscript/ILibDuktape_GenericMarshal.c @@ -58,7 +58,7 @@ typedef uintptr_t PTRSIZE; #define ILibDuktape_GenericMarshal_Variable_EnableAutoFree(ctx, idx) duk_dup(ctx, idx);duk_push_true(ctx);duk_put_prop_string(ctx, -2, ILibDuktape_GenericMarshal_Variable_AutoFree);duk_pop(ctx) #define ILibDuktape_GenericMarshal_Variable_DisableAutoFree(ctx, idx) duk_dup(ctx, idx);duk_push_false(ctx);duk_put_prop_string(ctx, -2, ILibDuktape_GenericMarshal_Variable_AutoFree);duk_pop(ctx) #define WAITING_FOR_RESULT__DISPATCHER 2 - +#define ILibDuktape_GenericMarshal_MethodInvoke_Native(parms, fptr, vars) ILibDuktape_GenericMarshal_MethodInvoke_NativeEx(parms, fptr, vars, ILibDuktape_GenericMarshal_CallTypes_DEFAULT) typedef PTRSIZE(APICALLTYPE *R0)(); typedef PTRSIZE(APICALLTYPE *R1)(PTRSIZE V1); @@ -82,6 +82,67 @@ typedef PTRSIZE(APICALLTYPE *R18)(PTRSIZE V1, PTRSIZE V2, PTRSIZE V3, PTRSIZE V4 typedef PTRSIZE(APICALLTYPE *R19)(PTRSIZE V1, PTRSIZE V2, PTRSIZE V3, PTRSIZE V4, PTRSIZE V5, PTRSIZE V6, PTRSIZE V7, PTRSIZE V8, PTRSIZE V9, PTRSIZE V10, PTRSIZE V11, PTRSIZE V12, PTRSIZE V13, PTRSIZE V14, PTRSIZE V15, PTRSIZE V16, PTRSIZE V17, PTRSIZE V18, PTRSIZE V19); typedef PTRSIZE(APICALLTYPE *R20)(PTRSIZE V1, PTRSIZE V2, PTRSIZE V3, PTRSIZE V4, PTRSIZE V5, PTRSIZE V6, PTRSIZE V7, PTRSIZE V8, PTRSIZE V9, PTRSIZE V10, PTRSIZE V11, PTRSIZE V12, PTRSIZE V13, PTRSIZE V14, PTRSIZE V15, PTRSIZE V16, PTRSIZE V17, PTRSIZE V18, PTRSIZE V19, PTRSIZE V20); +#ifdef WIN32 +typedef PTRSIZE(APICALLTYPE *C2)(PTRSIZE V1, VARIANT V2); +typedef PTRSIZE(APICALLTYPE *C3)(PTRSIZE V1, VARIANT V2, VARIANT V3); +typedef PTRSIZE(APICALLTYPE *C4)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4); +typedef PTRSIZE(APICALLTYPE *C5)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5); +typedef PTRSIZE(APICALLTYPE *C6)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6); +typedef PTRSIZE(APICALLTYPE *C7)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7); +typedef PTRSIZE(APICALLTYPE *C8)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8); +typedef PTRSIZE(APICALLTYPE *C9)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9); +typedef PTRSIZE(APICALLTYPE *C10)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10); +typedef PTRSIZE(APICALLTYPE *C11)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11); +typedef PTRSIZE(APICALLTYPE *C12)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12); +typedef PTRSIZE(APICALLTYPE *C13)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12, VARIANT V13); +typedef PTRSIZE(APICALLTYPE *C14)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12, VARIANT V13, VARIANT V14); +typedef PTRSIZE(APICALLTYPE *C15)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12, VARIANT V13, VARIANT V14, VARIANT V15); +typedef PTRSIZE(APICALLTYPE *C16)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12, VARIANT V13, VARIANT V14, VARIANT V15, VARIANT V16); +typedef PTRSIZE(APICALLTYPE *C17)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12, VARIANT V13, VARIANT V14, VARIANT V15, VARIANT V16, VARIANT V17); +typedef PTRSIZE(APICALLTYPE *C18)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12, VARIANT V13, VARIANT V14, VARIANT V15, VARIANT V16, VARIANT V17, VARIANT V18); +typedef PTRSIZE(APICALLTYPE *C19)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12, VARIANT V13, VARIANT V14, VARIANT V15, VARIANT V16, VARIANT V17, VARIANT V18, VARIANT V19); +typedef PTRSIZE(APICALLTYPE *C20)(PTRSIZE V1, VARIANT V2, VARIANT V3, VARIANT V4, VARIANT V5, VARIANT V6, VARIANT V7, VARIANT V8, VARIANT V9, VARIANT V10, VARIANT V11, VARIANT V12, VARIANT V13, VARIANT V14, VARIANT V15, VARIANT V16, VARIANT V17, VARIANT V18, VARIANT V19, VARIANT V20); + +typedef uintptr_t(__stdcall *Z1)(uintptr_t V1, uintptr_t V2, uintptr_t V3, uintptr_t V4, VARIANT V5, VARIANT V6, uintptr_t V7, VARIANT V8, uintptr_t V9); +typedef uintptr_t(__stdcall *Z2)(uintptr_t V1, VARIANT V2, uintptr_t V3); + +#endif + +#define ILibDuktape_GenericMarshal_CUSTOM_HANDLER 0x80000000 +#define ILibDuktape_GenericMarshal_CUSTOM_HANDLER_VERIFY 0x40000000 +#define ILibDuktape_GenericMarshal_CUSTOM_HANDLER_MASK 0x3FFFFFFF + +uintptr_t ILibDuktape_GenericMarshal_MethodInvoke_CustomEx(int parms, void *fptr, uintptr_t *vars, int check, int index) +{ + uintptr_t retVal = 0; + + switch (index) + { +#ifdef WIN32 + case 1: + if (parms == 9) + { + if (check) { return(1); } + retVal = ((Z1)fptr)(vars[0], vars[1], vars[2], vars[3], ((VARIANT*)vars[4])[0], ((VARIANT*)vars[5])[0], vars[6], ((VARIANT*)vars[7])[0], vars[8]); + } + case 2: + if (parms == 3) + { + if (check) { return(1); } + retVal = ((Z2)fptr)(vars[0], ((VARIANT*)vars[1])[0], vars[2]); + } + break; +#endif + default: + retVal = 0; + break; + } + + return(retVal); +} + + + ILibLinkedList GlobalCallbackList = NULL; typedef struct Duktape_GenericMarshal_Proxy @@ -780,76 +841,161 @@ duk_ret_t ILibDuktape_GenericMarshal_CreateCallbackProxy(duk_context *ctx) return 1; } -PTRSIZE ILibDuktape_GenericMarshal_MethodInvoke_Native(int parms, void *fptr, PTRSIZE *vars) +PTRSIZE ILibDuktape_GenericMarshal_MethodInvoke_NativeEx(int parms, void *fptr, PTRSIZE *vars, ILibDuktape_GenericMarshal_CallTypes calltype) { PTRSIZE retVal = 0; - switch (parms) + if ((calltype & ILibDuktape_GenericMarshal_CUSTOM_HANDLER_VERIFY) == ILibDuktape_GenericMarshal_CUSTOM_HANDLER_VERIFY) { - case 0: - retVal = ((R0)fptr)(); - break; - case 1: - retVal = ((R1)fptr)(vars[0]); - break; - case 2: - retVal = ((R2)fptr)(vars[0], vars[1]); - break; - case 3: - retVal = ((R3)fptr)(vars[0], vars[1], vars[2]); - break; - case 4: - retVal = ((R4)fptr)(vars[0], vars[1], vars[2], vars[3]); - break; - case 5: - retVal = ((R5)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4]); - break; - case 6: - retVal = ((R6)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5]); - break; - case 7: - retVal = ((R7)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6]); - break; - case 8: - retVal = ((R8)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7]); - break; - case 9: - retVal = ((R9)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8]); - break; - case 10: - retVal = ((R10)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9]); - break; - case 11: - retVal = ((R11)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10]); - break; - case 12: - retVal = ((R12)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11]); - break; - case 13: - retVal = ((R13)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12]); - break; - case 14: - retVal = ((R14)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13]); - break; - case 15: - retVal = ((R15)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14]); - break; - case 16: - retVal = ((R16)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15]); - break; - case 17: - retVal = ((R17)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15], vars[16]); - break; - case 18: - retVal = ((R18)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15], vars[16], vars[17]); - break; - case 19: - retVal = ((R19)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15], vars[16], vars[17], vars[18]); - break; - case 20: - retVal = ((R20)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15], vars[16], vars[17], vars[18], vars[19]); - break; + return(ILibDuktape_GenericMarshal_MethodInvoke_CustomEx(parms, fptr, vars, 1, calltype & ILibDuktape_GenericMarshal_CUSTOM_HANDLER_MASK)); } + if ((calltype & ILibDuktape_GenericMarshal_CUSTOM_HANDLER) == ILibDuktape_GenericMarshal_CUSTOM_HANDLER) + { + return(ILibDuktape_GenericMarshal_MethodInvoke_CustomEx(parms, fptr, vars, 0, calltype & ILibDuktape_GenericMarshal_CUSTOM_HANDLER_MASK)); + } + + switch (calltype) + { + case ILibDuktape_GenericMarshal_CallTypes_DEFAULT: + switch (parms) + { + case 0: + retVal = ((R0)fptr)(); + break; + case 1: + retVal = ((R1)fptr)(vars[0]); + break; + case 2: + retVal = ((R2)fptr)(vars[0], vars[1]); + break; + case 3: + retVal = ((R3)fptr)(vars[0], vars[1], vars[2]); + break; + case 4: + retVal = ((R4)fptr)(vars[0], vars[1], vars[2], vars[3]); + break; + case 5: + retVal = ((R5)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4]); + break; + case 6: + retVal = ((R6)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5]); + break; + case 7: + retVal = ((R7)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6]); + break; + case 8: + retVal = ((R8)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7]); + break; + case 9: + retVal = ((R9)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8]); + break; + case 10: + retVal = ((R10)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9]); + break; + case 11: + retVal = ((R11)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10]); + break; + case 12: + retVal = ((R12)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11]); + break; + case 13: + retVal = ((R13)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12]); + break; + case 14: + retVal = ((R14)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13]); + break; + case 15: + retVal = ((R15)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14]); + break; + case 16: + retVal = ((R16)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15]); + break; + case 17: + retVal = ((R17)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15], vars[16]); + break; + case 18: + retVal = ((R18)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15], vars[16], vars[17]); + break; + case 19: + retVal = ((R19)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15], vars[16], vars[17], vars[18]); + break; + case 20: + retVal = ((R20)fptr)(vars[0], vars[1], vars[2], vars[3], vars[4], vars[5], vars[6], vars[7], vars[8], vars[9], vars[10], vars[11], vars[12], vars[13], vars[14], vars[15], vars[16], vars[17], vars[18], vars[19]); + break; + } + break; +#ifdef WIN32 + case ILibDuktape_GenericMarshal_CallTypes_COM_VARIANT: + switch (parms) + { + case 0: + retVal = ((R0)fptr)(); + break; + case 1: + retVal = ((R1)fptr)(vars[0]); + break; + case 2: + retVal = ((C2)fptr)(vars[0], ((VARIANT*)(vars[1]))[0]); + break; + case 3: + retVal = ((C3)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0]); + break; + case 4: + retVal = ((C4)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0]); + break; + case 5: + retVal = ((C5)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0]); + break; + case 6: + retVal = ((C6)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0]); + break; + case 7: + retVal = ((C7)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0]); + break; + case 8: + retVal = ((C8)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0]); + break; + case 9: + retVal = ((C9)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0]); + break; + case 10: + retVal = ((C10)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0]); + break; + case 11: + retVal = ((C11)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[9]))[0]); + break; + case 12: + retVal = ((C12)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0]); + break; + case 13: + retVal = ((C13)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0], ((VARIANT*)(vars[12]))[0]); + break; + case 14: + retVal = ((C14)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0], ((VARIANT*)(vars[12]))[0], ((VARIANT*)(vars[13]))[0]); + break; + case 15: + retVal = ((C15)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0], ((VARIANT*)(vars[12]))[0], ((VARIANT*)(vars[13]))[0], ((VARIANT*)(vars[14]))[0]); + break; + case 16: + retVal = ((C16)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0], ((VARIANT*)(vars[12]))[0], ((VARIANT*)(vars[13]))[0], ((VARIANT*)(vars[14]))[0], ((VARIANT*)(vars[15]))[0]); + break; + case 17: + retVal = ((C17)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0], ((VARIANT*)(vars[12]))[0], ((VARIANT*)(vars[13]))[0], ((VARIANT*)(vars[14]))[0], ((VARIANT*)(vars[15]))[0], ((VARIANT*)(vars[16]))[0]); + break; + case 18: + retVal = ((C18)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0], ((VARIANT*)(vars[12]))[0], ((VARIANT*)(vars[13]))[0], ((VARIANT*)(vars[14]))[0], ((VARIANT*)(vars[15]))[0], ((VARIANT*)(vars[16]))[0], ((VARIANT*)(vars[17]))[0]); + break; + case 19: + retVal = ((C19)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0], ((VARIANT*)(vars[12]))[0], ((VARIANT*)(vars[13]))[0], ((VARIANT*)(vars[14]))[0], ((VARIANT*)(vars[15]))[0], ((VARIANT*)(vars[16]))[0], ((VARIANT*)(vars[17]))[0], ((VARIANT*)(vars[18]))[0]); + break; + case 20: + retVal = ((C20)fptr)(vars[0], ((VARIANT*)(vars[1]))[0], ((VARIANT*)(vars[2]))[0], ((VARIANT*)(vars[3]))[0], ((VARIANT*)(vars[4]))[0], ((VARIANT*)(vars[5]))[0], ((VARIANT*)(vars[6]))[0], ((VARIANT*)(vars[7]))[0], ((VARIANT*)(vars[8]))[0], ((VARIANT*)(vars[9]))[0], ((VARIANT*)(vars[10]))[0], ((VARIANT*)(vars[11]))[0], ((VARIANT*)(vars[12]))[0], ((VARIANT*)(vars[13]))[0], ((VARIANT*)(vars[14]))[0], ((VARIANT*)(vars[15]))[0], ((VARIANT*)(vars[16]))[0], ((VARIANT*)(vars[17]))[0], ((VARIANT*)(vars[18]))[0], ((VARIANT*)(vars[19]))[0]); + break; + } + break; +#endif + } + return(retVal); } @@ -1341,10 +1487,18 @@ duk_ret_t ILibDuktape_GenericMarshal_MethodInvoke(duk_context *ctx) duk_push_current_function(ctx); // [func] exposedName = Duktape_GetStringPropertyValue(ctx, -1, "_exposedName", NULL); int spawnThread = Duktape_GetBooleanProperty(ctx, -1, "_spawnThread", 0); +#ifndef WIN32 + ILibDuktape_GenericMarshal_CallTypes calltypes = ILibDuktape_GenericMarshal_CallTypes_DEFAULT; +#else + ILibDuktape_GenericMarshal_CallTypes calltypes = Duktape_GetIntPropertyValue(ctx, -1, "_callType", ILibDuktape_GenericMarshal_CallTypes_DEFAULT); + if (sizeof(void*) != 4) { calltypes = ILibDuktape_GenericMarshal_CallTypes_DEFAULT; } +#endif PTRSIZE *vars = spawnThread == 0 ? ILibMemory_AllocateA(sizeof(PTRSIZE)*parms) : ILibMemory_SmartAllocateEx(sizeof(PTRSIZE)*parms, 6 * sizeof(void*)); duk_get_prop_string(ctx, -1, "_address"); // [func][addr] fptr = duk_to_pointer(ctx, -1); + + if (fptr == NULL || exposedName == NULL) { return(ILibDuktape_Error(ctx, "Invalid Method")); @@ -1379,7 +1533,21 @@ duk_ret_t ILibDuktape_GenericMarshal_MethodInvoke(duk_context *ctx) { if (spawnThread == 0) { - retVal = ILibDuktape_GenericMarshal_MethodInvoke_Native(parms, fptr, vars); + if ((calltypes & ILibDuktape_GenericMarshal_CUSTOM_HANDLER) == ILibDuktape_GenericMarshal_CUSTOM_HANDLER) + { + if (ILibDuktape_GenericMarshal_MethodInvoke_NativeEx(parms, fptr, vars, calltypes | ILibDuktape_GenericMarshal_CUSTOM_HANDLER_VERIFY) == 1) + { + retVal = ILibDuktape_GenericMarshal_MethodInvoke_NativeEx(parms, fptr, vars, calltypes); + } + else + { + return(ILibDuktape_Error(ctx, "Specified custom handler doesn't exit: %u", calltypes & ILibDuktape_GenericMarshal_CUSTOM_HANDLER_MASK)); + } + } + else + { + retVal = ILibDuktape_GenericMarshal_MethodInvoke_NativeEx(parms, fptr, vars, calltypes); + } #ifdef WIN32 DWORD err = GetLastError(); #else @@ -2674,6 +2842,10 @@ duk_ret_t ILibDuktape_GenericMarshal_MarshalFunction(duk_context *ctx) duk_remove(ctx, -2); // [func][ptr] } duk_put_prop_string(ctx, -2, "_address"); // [func] + if (duk_is_number(ctx, 2)) + { + duk_dup(ctx, 2); duk_put_prop_string(ctx, -2, "_callType"); + } duk_push_string(ctx, "_MarshalledFunction"); duk_put_prop_string(ctx, -2, "_exposedName"); return(1); } @@ -2695,6 +2867,8 @@ duk_ret_t ILibDuktape_GenericMarshal_MarshalFunctions(duk_context *ctx) duk_push_int(ctx, i++); // [array][ret][str][this][func][this][parm][val] duk_call_method(ctx, 2); // [array][ret][str][this][marshalled] duk_remove(ctx, -2); // [array][ret][str][marshalled] + duk_dup(ctx, -2); // [array][ret][str][marshalled][str] + duk_put_prop_string(ctx, -2, "_exposedName"); // [array][ret][str][marshalled] duk_put_prop(ctx, -3); // [array][ret] } return(1); diff --git a/microscript/ILibDuktape_GenericMarshal.h b/microscript/ILibDuktape_GenericMarshal.h index cf3fcd8..6e7c2a1 100644 --- a/microscript/ILibDuktape_GenericMarshal.h +++ b/microscript/ILibDuktape_GenericMarshal.h @@ -20,6 +20,12 @@ limitations under the License. #include "duktape.h" +typedef enum ILibDuktape_GenericMarshal_CallTypes +{ + ILibDuktape_GenericMarshal_CallTypes_DEFAULT = 0, + ILibDuktape_GenericMarshal_CallTypes_COM_VARIANT = 1 +}ILibDuktape_GenericMarshal_CallTypes; + void ILibDuktape_GenericMarshal_init(duk_context *ctx); diff --git a/microscript/ILibDuktape_Polyfills.c b/microscript/ILibDuktape_Polyfills.c index 5abd778..ed75bd5 100644 --- a/microscript/ILibDuktape_Polyfills.c +++ b/microscript/ILibDuktape_Polyfills.c @@ -2385,7 +2385,7 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('win-bcd', Buffer.from('eJzVV21v2zYQ/m7A/+HmD5XcqkqXFQPmIBi8xG2NJHYXpQ2COAho6SyzkUmXovyywP99R73Y8lvbtWix8oNFkce755473dEHT6uVEzmeKx4ONRy++PUPaAuNEZxINZaKaS5FtVKtnHMfRYwBJCJABXqI0Bwznx75jgPvUcUkDYfuC7CNQC3fqtWPqpW5TGDE5iCkhiRG0sBjGPAIAWc+jjVwAb4cjSPOhI8w5XqYWsl1uNXKTa5B9jUjYUbiY3oblMWAaYMWaAy1HjcODqbTqctSpK5U4UGUycUH5+2TVsdrPSe05sQ7EWEcg8KPCVfkZn8ObExgfNYniBGbglTAQoW0p6UBO1VccxE6EMuBnjKF1UrAY614P9FrPBXQyN+yADHFBNSaHrS9GvzV9NqeU61ct6/edN9dwXXz8rLZuWq3POhewkm3c9q+anc79PYKmp0bOGt3Th1AYoms4GysDHqCyA2DGBBdHuKa+YHM4MRj9PmA++SUCBMWIoRygkqQLzBGNeKxiWJM4IJqJeIjrtMkiLc9IiNPDwx5g0T4RgZC1Gc4j+16tfKYRWHCFJGq4RgeF0fZkj/kUUALOde2lS7cj5X0yQmr7uIM/VeUGXa+5KKY3FpTLgKurDt4BrVez5vHGke/HfZ6fT/AgGtzqubArZW/Ww5YByiSkZk8+olSKPTCuquXUbixDmSi6aEIkGUdrS9LYVsB04xULF20/To8ptmbnnp2DL6rpUdhFaFdP4LFlgFUarcmo2hDfMq4bs24ts3yisGIC4wJ4SZol8yO7LobU9C1bfVUT1iFwvSMGw/5wGjbeC2Um6SwjQVuUjqVqWc7efwKBFo+UMgJQipzy+8Km7A0WIg+4JzksgMlg2WRCYsSXAl9kFykmnJ/StKUO7ek8I6E00P51iJ70G6iiEl6mkOLrVS06ewqGQvxNHrLXE31bx6Pl8edzPB6Sv/AHCYk6ynswArVz5TOZXoDjFDjVoB+MLUZipTIHRT/ZNyW2EVhupbHBnghA/RQTahg23H27LARlj+JnGXi77nC0DSoOZF8Td0tjc8+gTdnrRv3XPosuqDmSkWBCPRuvKvWRa93kvF4IoVWMvJQ01I2p8gQqr6UtNRBPZXqodezKGYlcA6IJIqMumzN2kweHn+Ra1nrCcuptO7D0Uouq1mPlJcDlkS6AZaQAi0oehbJ024mRQrcvxNU84ye8DtSYZIEfKb9IdgfHzDNgvVSRpDcHDQcH+/njG4eX5wT5OxWD9iXBqfLD/nHJ0p9vRmkPNmz9f612Pw26KKkmdI2ffvs+1aeeJhQbZiKZekpFtLao9JfU4dSJL8cm6T/M52XikTDevG/urKkmny6DcoI3UiGdllT/eizJYoPYJUo969RoOL+BVPxkEVE8Fu6CGhUHv8HTTa/hCdPVtGQJgRMUYzraarPfn9prQI4kkFCmOgqLJWmi8pWBu8sio3dy87q2O4Pp7Fn3Snyq1FMnO1y1dheypM1owmjGD/j14ZvZuT3mUYxcfI7TCN/Oqum21hNna/l5Wu4CXNAYQ7oW7gq+Mreuv0P6GtTCanAvFWS/sjoub3OnQM1U0+MpprzKRob5ca7vrshvFYtPyNnRnr33d+Qym3lexXT7tg4ZopPNnuf3n7KV+7yiOl/uGk+k/ru/T1+muEz+tN52NgvYEbRxiyv+ap1f9E9bd13WlfX3cuzvZCK0VfIHj4hU7Ty/wrgmwwvdi8XVia7dO84k7f82Q7W9zC+9KPTvbxonu90YsNQ6TWt24t/ATXtbrU=', 'base64'));"); // win-dispatcher a helper to run JavaScript as a particular user. Refer to modules/win-dispatcher.js - duk_peval_string_noresult(ctx, "addCompressedModule('win-dispatcher', Buffer.from('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', 'base64'), '2022-03-08T10:57:12.000-08:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('win-dispatcher', Buffer.from('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', 'base64'), '2022-03-28T11:52:49.000-07:00');"); // win-firewall is a helper to Modify Windows Firewall Filters. Refer to modules/win-firewall.js duk_peval_string_noresult(ctx, "addCompressedModule('win-firewall', Buffer.from('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', 'base64'), '2021-11-09T11:49:08.000-08:00');"); @@ -2394,13 +2394,13 @@ void ILibDuktape_Polyfills_JS_Init(duk_context *ctx) duk_peval_string_noresult(ctx, "addCompressedModule('win-systray', Buffer.from('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', 'base64'));"); // win-com is a helper to add COM support. Refer to modules/win-com.js - duk_peval_string_noresult(ctx, "addCompressedModule('win-com', Buffer.from('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', 'base64'), '2021-11-09T15:16:19.000-08:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('win-com', Buffer.from('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', 'base64'), '2022-03-28T11:47:40.000-07:00');"); // win-wmi is a helper to add wmi support using win-com. Refer to modules/win-wmi.js duk_peval_string_noresult(ctx, "addCompressedModule('win-wmi', Buffer.from('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', 'base64'), '2021-11-09T11:50:29.000-08:00');"); // Simple COM BASED Task Scheduler for Windows. Refer to modules/win-tasks.js - duk_peval_string_noresult(ctx, "addCompressedModule('win-tasks', Buffer.from('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', 'base64'), '2021-12-03T17:34:14.000-08:00');"); + duk_peval_string_noresult(ctx, "addCompressedModule('win-tasks', Buffer.from('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', 'base64'), '2022-03-28T11:39:32.000-07:00');"); #endif diff --git a/modules/win-dispatcher.js b/modules/win-dispatcher.js index dfe34f7..f828a01 100644 --- a/modules/win-dispatcher.js +++ b/modules/win-dispatcher.js @@ -112,7 +112,9 @@ function dispatch(options) return (ret); } catch(xx) - {} + { + console.info1(xx); + } var taskoptions = { env: { _target: process.execPath, _args: '-b64exec ' + str, _user: '"' + options.user + '"' } }; for (var c1e in process.env) diff --git a/modules/win-tasks.js b/modules/win-tasks.js index 8fc01b3..2730b2a 100644 --- a/modules/win-tasks.js +++ b/modules/win-tasks.js @@ -15,6 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. */ +const CUSTOM_HANDLER = 0x80000000; const GM = require('_GenericMarshal'); const CLSID_TaskScheduler = '{0f87369f-a4e5-4cfc-bd3e-73e6154572dd}'; const IID_TimeTrigger = '{b45747e0-eba7-4276-9f29-85c5bb300006}'; @@ -475,6 +476,7 @@ function getTask(options) var taskService = require('win-com').createInstance(require('win-com').CLSIDFromString(CLSID_TaskScheduler), require('win-com').IID_IUnknown); taskService.funcs = require('win-com').marshalFunctions(taskService, TaskServiceFunctions); + taskService.funcs.Connect._callType = 1; hr = taskService.funcs.Connect(taskService, serverName, user, domain, password); if (hr.Val != 0) { @@ -497,7 +499,7 @@ function getTask(options) throw ('Failed to get Task: ' + options.name + ' [' + hr.Val + ']'); } task.funcs = require('win-com').marshalFunctions(task.Deref(), RegisteredTaskFunctions); - + task.funcs.Run._callType = CUSTOM_HANDLER | 2; task._rf = rootFolder; task._ts = taskService; @@ -515,7 +517,7 @@ function deleteTask(options) var taskService = require('win-com').createInstance(require('win-com').CLSIDFromString(CLSID_TaskScheduler), require('win-com').IID_IUnknown); taskService.funcs = require('win-com').marshalFunctions(taskService, TaskServiceFunctions); - + hr = taskService.funcs.Connect._callType = 1; hr = taskService.funcs.Connect(taskService, serverName, user, domain, password); if (hr.Val != 0) { @@ -571,6 +573,8 @@ function addTask(options) var execAction = GM.CreatePointer(); var registeredTask = GM.CreatePointer(); + + taskService.funcs.Connect._callType = 1; hr = taskService.funcs.Connect(taskService, serverName, user, domain, password); if (hr.Val != 0) { @@ -791,7 +795,7 @@ function addTask(options) } var vvar = GM.CreateVariable(GM.PointerSize == 8 ? 24 : 16); - + rootFolder.funcs.RegisterTaskDefinition._callType = 1 | CUSTOM_HANDLER; hr = rootFolder.funcs.RegisterTaskDefinition( rootFolder.Deref(), GM.CreateVariable(options.name, { wide: true }),