Конференция "WinAPI" » как определить владельца мьютекса (mutex owner) [D7, WinXP]
 
  • intlex (06.10.09 19:09) [0]
    по сабжу,
    пробовал NtQueryObject, но пока безуспешно, может кто поможет?
  • clickmaker © (07.10.09 12:14) [1]
    GetKernelObjectSecurity(MutexHandle, OWNER_SECURITY_INFORMATION, ... ?
  • intlex (07.10.09 15:09) [2]

     InitializeSecurityDescriptor(@sd, SECURITY_DESCRIPTOR_REVISION);
     SetSecurityDescriptorDacl(@sd, True, nil, False);
     sa.nLength := SizeOf(TSecurityAttributes);
     sa.lpSecurityDescriptor := @sd;
     sa.bInheritHandle := False;
     Mutex := CreateMutex(@sa, False, MutexName);
     if (Mutex = 0) then ...;
     if GetLastError = ERROR_ALREADY_EXISTS) then
     begin
       GetKernelObjectSecurity(Mutex, OWNER_SECURITY_INFORMATION, @sd, SizeOf(TSecurityDescriptor), l);
       //GetSecurityDescriptorOwner(@sd, MData, b);


    получается sd.Owner = nil, MData = nil
    если предварительно заполнить sd.Owner := Pointer(GetCurrentProcessId),
    то CreateMutex возвращает 0.
    наверное, я что-то не понимаю))
  • clickmaker © (07.10.09 16:14) [3]
    var sd: PSecurityDescriptor;

    GetKernelObjectSecurity(Mutex, OWNER_SECURITY_INFORMATION, nil, 0, len);
    sd := AllocMem(len);
    GetKernelObjectSecurity(Mutex, OWNER_SECURITY_INFORMATION, sd, len, len);

    а так?
  • intlex (07.10.09 16:25) [4]
    спасибо, так получилось)
 
Конференция "WinAPI" » как определить владельца мьютекса (mutex owner) [D7, WinXP]
Есть новые Нет новых   [134432   +19][b:0][p:0.001]