PointerByReference hToken = new PointerByReference();
HANDLE hp = new HANDLE();
hp.setPointer(hProcess.getPointer());
if (MyAdvapi.INSTANCE.OpenProcessToken(hp, MyAdvapi.TOKEN_READ, hToken))
{
IntByReference dwSize = new IntByReference();
MyAdvapi.INSTANCE.GetTokenInformation(hToken.getValue(), MyAdvapi.TokenUser, null, 0, dwSize);
{
Memory pTokenUser = new Memory(dwSize.getValue());
if (MyAdvapi.INSTANCE.GetTokenInformation(hToken.getValue(), MyAdvapi.TokenUser, pTokenUser, dwSize.getValue(), dwSize))
{
MyAdvapi.TOKEN_USER tokenUser = new MyAdvapi.TOKEN_USER(pTokenUser);
Pointer lpSid = tokenUser.User.Sid;
Memory lpName = new Memory(256);
IntByReference cchName = new IntByReference();
cchName.setValue(256);
Memory lpReferencedDomainName = new Memory(256);
IntByReference cchReferencedDomainName = new IntByReference();
cchReferencedDomainName.setValue(256);
IntByReference peUse = new IntByReference();
if (MyAdvapi.INSTANCE.LookupAccountSidW(null, lpSid, lpName, cchName, lpReferencedDomainName, cchReferencedDomainName, peUse))
result._user = lpReferencedDomainName.getString(0, true) + "\\" + lpName.getString(0, true);
;
// System.out.println(result._user);