need help with Windows CreateNamedPipe Security attributes process with undefined symbols at compile time

Nicholas Wilson via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Mon Nov 30 21:26:22 PST 2015


On Tuesday, 1 December 2015 at 04:10:55 UTC, Jonathan Villa wrote:
> Hi,
>
> I've been trying to create a NamedPipe with security attributes 
> but at compile time throws:
> Error 42: Symbol Undefined _InitializeSecurityDescriptor at 8
> Error 42: Symbol Undefined _SetSecurityDescriptorDacl at 16
>
What is causing this: Is this a compile or a linker error?

> This is my code, I'm trying to do it using a class:
>
>
> module asi.pipe;
>
> import core.sys.windows.windows;
> import core.sys.windows.winbase;
> import core.stdc.stdlib;
>
> class Pipe
> {
> 	private HANDLE hPipe;
> 	private SECURITY_ATTRIBUTES sa;
>
> 	this(string name)
> 	{
> 		CreatePipe(name);
> 	}
>
> 	private void CreatePipe(string pipename)
> 	{
>
> 		sa.lpSecurityDescriptor = malloc(SECURITY_DESCRIPTOR.sizeof);
> 		InitializeSecurityDescriptor(cast(PSECURITY_DESCRIPTOR)sa.lpSecurityDescriptor, 1);
is the cast necessary?
> 		SetSecurityDescriptorDacl(cast(PSECURITY_DESCRIPTOR)sa.lpSecurityDescriptor, TRUE, cast(ACL*)0, FALSE);
> 		sa.nLength = sa.sizeof;
> 		sa.bInheritHandle = TRUE;
>
> 		CreateNamedPipeA(cast(char*)pipename,
you want toStringz(pipename) or if you know pipename is a null 
terminated string pipename.ptr
> 						 PIPE_ACCESS_DUPLEX,
> 						 (PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT),
> 						 PIPE_UNLIMITED_INSTANCES,
> 						 4096,
> 						 1536,
> 						 0,
> 						 &sa);
> 	}
> }
>
>
> Additional Info:
> The installer came with just a few files to handle with 
> Windows, comparing the the huge files that are in the 
> repository of druntime: 
> https://github.com/D-Programming-Language/druntime/tree/master/src/core/sys/windows
> So I renamed the old import to Windows2 and copied this whole 
> github/windows folder there and used its winbase.d because 
> there are the functions definitions that I needed.
>
> This functions that throw me errors belongs to the advapi32.dll 
> file. I tried to add pragma(lib "advapi32"); but it didn't work.
this needs a comma i.e.
pragma(lib ,"advapi32");
it may also require the appropriate file suffix (.dll or .lib)
>
> I'm new/noob dealing with D and I would appreciate any help.
>
> thanks.



More information about the Digitalmars-d-learn mailing list