Electron, it is interesting that you should point out the DACL value. When I first created this app 5 years ago I was passing NULL as the DACL value. But I later found that when non-admins were running the app, their instance of the app could not see the shared memory from the Service app. Only admins couuld see it. So I set up a DACL string as follows-
TCHAR * szSD = TEXT("D:")
TEXT("(D;OICI;GA;;;BG)")
TEXT("(A;OICI;GA;;;BA)")
TEXT("(A;OICI;FA;;;BU)");
This has worked for 5 years but now it is not working in Windows 7. Is there a way I could modify the string to work properly in Windows 7?
Also, you said using a NULL DACL value is "not the same as passing NULL in as the parameter value". Can you explain this? Previous to using the DACL that is exactly what I did-
hMapObject = CreateFileMapping(
(HANDLE) 0xFFFFFFFF, // use paging file
<big>NULL</big>, // no security attributes
PAGE_READWRITE, // read/write access
0, // size: high 32-bits
sizeof(TsharedMem), // size: low 32-bits
"Global\\FileMapName"); // name of map object
So I basically have the same problem now that I had 5 years ago, except the DACL isn't working for any users, including admins.