cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
wimcolgate
Level 4

Function entry point name for custom C++ DLL?

I have moved all the heavy lifting of some security operations into a C++ DLL.

I have put the dll into a binary table in the Basic MSI.

I have created a MSI type 1 custom action, Immediate Execution, to call my DLL's only function.

My question is because this is a C++ DLL, the name is mangled. The definition of the function is:

INT __stdcall MSIHelper::SetSeLogon( MSIHANDLE hModule )


I've tried to use demangled variants as the custom actions function name:

SetSeLogin
MSIHelper::SetSeLogon

I've also tried a mangled name (gotten from the VS linker dump of the .dll):

?SetSeLogon@MSIHelper@@SGHK@Z

None work, and all give the same 1723 pop-up error.


For completeness, here is a dump of the .lib and .dll portions that are relevant:

  Section contains the following exports for MSIHelperDLL.dll

00000000 characteristics
515DDF7B time date stamp Thu Apr 04 13:15:55 2013
0.00 version
1 ordinal base
1 number of functions
1 number of names

ordinal hint RVA name

1 0 00011019 ?SetSeLogon@MSIHelper@@SGHK@Z = @ILT+20(?SetSeLogon@MSIHelper@@SGHK@Z)


And the .lib:

  

5 public symbols

4 ?SetSeLogon@MSIHelper@@SGHK@Z
1 __IMPORT_DESCRIPTOR_MSIHelper
2 __NULL_IMPORT_DESCRIPTOR
4 __imp_?SetSeLogon@MSIHelper@@SGHK@Z
3 ⌂MSIHelper_NULL_THUNK_DATA

...

Version : 0
Machine : 14C (x86)
TimeDateStamp: 515DE308 Thu Apr 04 13:31:04 2013
SizeOfData : 00000038
DLL name : MSIHelper.dll
Symbol name : ?SetSeLogon@MSIHelper@@SGHK@Z (public: static int __stdcall MSIHelper::SetSeLogon(unsigned
long))
Type : code
Name type : name
Hint : 0
Name : ?SetSeLogon@MSIHelper@@SGHK@Z

Exports

ordinal name

?SetSeLogon@MSIHelper@@SGHK@Z (public: static int __stdcall MSIHelper::SetSeLogon(unsigned long))


I'm not sure what other options to try. Any suggestions is appreciated.

Wim
Labels (1)
0 Kudos
(2) Replies
wimcolgate
Level 4

I whacked the routine time to be *exactly* SetSeLogon.

Using that name in my custom action still gives me the a 1723 error pop-up.

Can anyone share their positive experience on putting a home built .dll into a binary table, and using a custom action to invoke the method properly?

Thanks,

Wim
0 Kudos
wimcolgate
Level 4

OK, Solved the major problem -- the .dll was built on a dev machine and the installshield install on a different machine -- it turns out the runtimes were not the same. So changing the linker to generate a statically linked .dll (project->properties->project defaults->Use of MFC->"Use MFC in a static library".
0 Kudos