Как открыть на запись секцию "PhysicalMemory"?

Тема в разделе "WASM.WIN32", создана пользователем Clerk, 4 янв 2008.

  1. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Доброго времени суток!
    Посоветуйте пожалуйста как открыть секцию физической памяти "\Device\PhysicalMemory" на запись используя только функциональность ntdll.dll,
    не использую функции других модулей(например advapi32!SetEntriesInAcl)?
    Для этого нужно изменить поле DACL в дескрипторе безопасности, а ntdll содержит функции
    работы с ним(например RtlSetDaclSecurityDescriptor и др.), которые в принципе позволяют сделать это.

    Например для включения отладочной привилегии я делаю так(без вызова advapi32!LookupPrivilegeValue!).
    Код (Text):
    1. HidEnableDebugPrivilege proc uses ebx
    2. Local TokenHandle:HANDLE
    3. Local Token:TOKEN_PRIVILEGES
    4. Local ReturnLength:ULONG
    5. Local ObjAttr:OBJECT_ATTRIBUTES
    6. Local ClientId:CLIENT_ID
    7. Local ProcessHandle:HANDLE
    8.     _setseh_
    9.     invoke CsrGetProcessId
    10.     mov ClientId.UniqueProcess,eax
    11.     xor ebx,ebx
    12.     invoke ZwOpenProcessToken, NtCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, addr TokenHandle
    13.     test eax,eax
    14.     jnz exit_
    15.     mov ClientId.UniqueThread,eax
    16.     mov ObjAttr.uLength,SizeOf OBJECT_ATTRIBUTES   
    17.     mov ObjAttr.hRootDirectory,eax 
    18.     mov ObjAttr.pSecurityDescriptor,eax
    19.     mov ObjAttr.pSecurityQualityOfService,eax
    20.     mov ObjAttr.pObjectName,eax
    21.     mov ObjAttr.uAttributes,eax
    22. next_privilege_:
    23.     mov Token.PrivilegeCount,1
    24.     mov Token.Privileges.Luid.LowPart,ebx
    25.     mov Token.Privileges.Luid.HighPart, NULL
    26.     mov Token.Privileges.Attributes,SE_PRIVILEGE_ENABLED
    27.     invoke ZwAdjustPrivilegesToken, TokenHandle, FALSE, addr Token, SizeOf TOKEN_PRIVILEGES, addr Token, addr ReturnLength
    28.     invoke ZwOpenProcess, addr ProcessHandle, PROCESS_ALL_ACCESS, addr ObjAttr, addr ClientId
    29.     test eax,eax
    30.     jz success_
    31.     cmp eax,STATUS_ACCESS_DENIED
    32.     jnz err_process_
    33.     inc ebx
    34.     cmp ebx,27h
    35.     jc next_privilege_
    36. err_process_:
    37.     push eax
    38.     invoke ZwClose, TokenHandle
    39.     pop eax
    40. exit_:
    41.     _endseh_   
    42.     ret
    43. success_:
    44.     push eax
    45.     invoke ZwClose, ProcessHandle
    46.     pop eax
    47.     jmp err_process_
    48. HidEnableDebugPrivilege endp
    Но как быть с PhysicalMemory?
    Спасибо.
     
  2. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Открываешь устройство \Device\PhysicalMemory функцией ZwCreateFile с правами GENERIC_WRITE.
     
  3. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Мне нужно открыть СЕКЦИЮ посредством ZwOpenSection на запись, для того чтобы спроецировать её в память.
    Это даст возможность изменять ядерную память, мне не надо открывать устройство.
     
  4. Quark

    Quark New Member

    Публикаций:
    0
    Регистрация:
    7 авг 2007
    Сообщения:
    211
    Хм.. дело, конечно твоё, но почему нельзя изменять её при помощи ReadFile WriteFile
     
  5. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Ну ReadFile и WriteFile использовать для целей чтения/записи памяти - очень медленный и неудобный способ.
    Интересно, как ты себе представляешь чтение переменной ядра с помощью ReadFile? Куда адрес(запрос) писать?
    И открыть эту секцию с правами GENERIC_WRITE через ZwCreateFile не удастся. Прежде надо разрешить её открытие на запись текущему пользователю, а это я и хочу узнать.
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Никто не поможет?
     
  7. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    А в чем проблема. ZwOpenSection / ZwMapViewOfSection
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Открыть требуется на запись, возвращается STATUS_ACCESS_DENIED.
     
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    В чера весь вечер кавырял, не могу разобратся.
    Ктонибудь знает про RtlCreateAndSetSD ?
     
  10. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Уже теплее...
     
  11. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    через win32api это делается через GetSecurityInfo / SetEntriesInAcl / SetSecurityInfo
    посмотри как они реализованы на основе каких NativeAPI, я не вижу проблемы..
     
  12. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Уже неделю разбираю. Формат дескриптора безопасности зашит в коде, эти функции в сложны, вызов идёт
    к NTMARTA!AccRewriteSetEntriesInAcl. Сейчас запихнул DACL из CurrentProcess.TokenInformation в SecurityDescriptor,
    полученный через ZwQuerySecurityObject:
    Код (Text):
    1. ;ZwQueryInformationToken
    2.  0012FB2C  0012FB34 ;PSID
    3.  0012FB30  00000000 ;Attributes
    4.  0012FB34  00000501
    5.  0012FB38  05000000
    6.  0012FB3C  00000015
    7.  0012FB40  462B3D83
    8.  0012FB44  6980796C
    9.  0012FB48  5475B975
    10.  0012FB4C  000003EB
    11.  
    12. ;ZwQuerySecurityObject
    13. 00144F48  80040001
    14. 00144F4C  00000000
    15. 00144F50  00000000
    16. 00144F54  00000000
    17. 00144F58  00000014
    18. ------------------  ;Dacl
    19. 00144F5C  00440002
    20. 00144F60  00000002
    21. ------------------
    22.  00144F64  00140000
    23.  00144F68  000F001F
    24.  00144F6C  00000101
    25.  00144F70  05000000
    26.  00144F74  00000012
    27.  00144F78  00180000
    28.  00144F7C  0002000D
    29.  00144F80  00000201
    30.  00144F84  05000000
    31.  00144F88  00000020
    32.  00144F8C  00000220
    33.  
    34. ;SetEntriesInAcl
    35. ;SetSecurityObject
    36. 001436B0  00680002
    37. 001436B4  00000003
    38. 001436B8  00240000  ;PVOID if zero -> STATUS_INVALID_ACL
    39. 001436BC  00000006
    40. ------------------  ;TokenInformation.Sid
    41.  001436C0  00000501
    42.  001436C4  05000000
    43.  001436C8  00000015
    44.  001436CC  462B3D83
    45.  001436D0  6980796C
    46.  001436D4  5475B975
    47.  001436D8  000003EB
    48. ------------------
    49.  001436DC  00140000
    50.  001436E0  000F001F
    51.  001436E4  00000101
    52.  001436E8  05000000
    53.  001436EC  00000012
    54.  001436F0  00180000
    55.  001436F4  0002000D
    56.  001436F8  00000201
    57.  001436FC  05000000
    58.  00143700  00000020
    59.  00143704  00000220
    60.  
    61. SECURITY_DESCRIPTOR STRUCT
    62.   Revision  BYTE      ?
    63.   Sbz1      BYTE      ?
    64.   Control   WORD      ?
    65.   Owner     DWORD      ?
    66.   lGroup    DWORD      ?
    67.   Sacl      DWORD      ?
    68.   Dacl      PVOID      ?
    69. SECURITY_DESCRIPTOR ENDS
    70.  
    71. ;ZwSetSecurityObject
    72. 0012FE58  01040001
    73. 0012FE5C  00000000
    74. 0012FE60  00000000
    75. 0012FE64  00000000
    76. 0012FE68  001436B0
    Работает, если некоторые поля изменить как это в твоём варианте, но значения их ещё не определил:
    Код (Text):
    1. OpenPhysicalMemoryEx proc Access:ULONG
    2. Local SectionHandle:HANDLE, TokenHandle:HANDLE
    3. Local ObjAttr:OBJECT_ATTRIBUTES, OldAcl[100]:DWORD
    4. Local ReturnLength:ULONG, TokenInformation[32]:BYTE ;TOKEN_USER
    5. Local Sid:SECURITY_DESCRIPTOR, Buffer[208]:BYTE
    6. Local Sd:PVOID
    7. Local SD1:PVOID, SD2:PVOID, SD3:PVOID
    8. Local GenericMapping:ULONG
    9.     lea ebx, TokenInformation
    10.     mov ObjAttr.uLength, SizeOf OBJECT_ATTRIBUTES
    11.     mov ObjAttr.hRootDirectory, NULL
    12.     mov ObjAttr.uAttributes,OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE
    13.     mov ObjAttr.pSecurityDescriptor, NULL
    14.     mov ObjAttr.pSecurityQualityOfService, NULL
    15.     mov ObjAttr.pObjectName, OffSet UniPhysicalSectionName
    16.     invoke ZwOpenSection, addr SectionHandle, READ_CONTROL or WRITE_DAC, addr ObjAttr
    17.     test eax,eax
    18.     jnz exit_
    19.     invoke ZwQuerySecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, NULL, NULL, addr ReturnLength
    20.     invoke ZwQuerySecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, addr OldAcl, ReturnLength, addr ReturnLength
    21.     invoke ZwOpenProcessToken, NtCurrentProcess, TOKEN_QUERY, addr TokenHandle 
    22.     invoke ZwQueryInformationToken, TokenHandle, TokenUser, addr TokenInformation, 24h, addr ReturnLength
    23.     invoke RtlGetDaclSecurityDescriptor, addr OldAcl, addr SD1, addr SD2, addr SD3  ;SD2:PACL
    24.     invoke RtlLengthSecurityDescriptor, addr OldAcl
    25.     lea esi,[OldAcl+eax]    ;указатель на конец дескриптора
    26.     mov ebx,eax ;длина всего дескриптора  
    27.     invoke RtlLengthSid, SD2        ;длина DACL
    28.    
    29.     mov ecx,SD2
    30.     lea edx,OldAcl
    31.     sub ecx,edx ;длина поля до DACL 
    32.     add ecx,eax
    33.     sub ebx,eax ;размер части дескриптора после поля DACL
    34.    
    35.     mov edi,esi
    36.     sub edi,eax
    37.     invoke RtlLengthSid, SID_AND_ATTRIBUTES.Sid[TokenInformation]   ;длина Sid
    38.     add edi,eax
    39.     mov ecx,ebx
    40.     std
    41.     rep movsb       ;сдвигаем, чтобы влез Token.Sid вместо текущего поля DACL
    42.    
    43.     mov edi,SD2
    44.     mov esi,SID_AND_ATTRIBUTES.Sid[TokenInformation]
    45.     mov ecx,eax
    46.     cld
    47.     rep movsb       ;копируем Token.Sid
    48.    
    49.     lea edi,Buffer
    50.     mov dword ptr [edi],01040001h
    51.     mov dword ptr [edi+4],0
    52.     mov dword ptr [edi+8],0
    53.     mov dword ptr [edi+12],0
    54.     lea ebx,OldAcl
    55.     mov dword ptr [edi+16],ebx
    56.     mov dword ptr [edi+20],0
    Разбираю Rtl##, пока без результатно.
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Избавился от GetSecurityInfo и SetSecurityInfo. С SetEntriesInAcl проблема.
    Код (Text):
    1. .code
    2. TRUSTEE struct
    3. pMultipleTrustee        PVOID ?
    4. MultipleTrusteeOperation    ULONG ?
    5. TrusteeForm         ULONG ?
    6. TrusteeType         ULONG ?
    7. ptstrName               PSTR ?
    8. TRUSTEE ends
    9. PTRUSTEE  typedef ptr TRUSTEE
    10.  
    11. EXPLICIT_ACCESS struct
    12. grfAccessPermissions    ULONG ?
    13. grfAccessMode           ULONG ?
    14. grfInheritance          ULONG ?
    15. Trustee             TRUSTEE <>
    16. EXPLICIT_ACCESS ends
    17. PEXPLICIT_ACCESS typedef ptr EXPLICIT_ACCESS
    18.  
    19. GRANT_ACCESS            equ 1
    20. NO_INHERITANCE          equ 0
    21. NO_MULTIPLE_TRUSTEE     equ 0
    22. TRUSTEE_IS_USER     equ 1
    23. TRUSTEE_IS_NAME     equ 1
    24. SE_KERNEL_OBJECT        equ 6
    25.  
    26. SECURITY_DESCRIPTOR_REVISION    equ 1
    27.  
    28. SECURITY_DESCRIPTOR STRUCT
    29.   Revision  BYTE      ?
    30.   Sbz1      BYTE      ?
    31.   Control   WORD      ?
    32.   Owner     DWORD      ?
    33.   lGroup    DWORD      ?
    34.   Sacl      DWORD      ?
    35.   Dacl      PVOID      ?
    36. SECURITY_DESCRIPTOR ENDS
    37.  
    38. OpenPhysicalMemoryEx proc
    39. Local SectionHandle:HANDLE, ObjAttr:OBJECT_ATTRIBUTES, ReturnLength:ULONG
    40. Local OldAcl[100]:DWORD, NewAcl:PACL, Access:EXPLICIT_ACCESS
    41. Local SecurityDescriptor:SECURITY_DESCRIPTOR
    42. Local DaclPresent:BOOLEAN, Dacl:PACL, DaclDefaulted:BOOLEAN
    43.     xor ebx,ebx
    44.     mov ObjAttr.uLength, SizeOf OBJECT_ATTRIBUTES
    45.     mov ObjAttr.hRootDirectory, ebx
    46.     mov ObjAttr.uAttributes,OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE
    47.     mov ObjAttr.pSecurityDescriptor, ebx
    48.     mov ObjAttr.pSecurityQualityOfService, ebx
    49.     mov ObjAttr.pObjectName, OffSet UniPhysicalSectionName
    50.     invoke ZwOpenSection, addr SectionHandle, READ_CONTROL or WRITE_DAC, addr ObjAttr
    51.     invoke ZwQuerySecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, NULL, NULL, addr ReturnLength
    52.     invoke ZwQuerySecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, addr OldAcl, ReturnLength, addr ReturnLength
    53.     invoke RtlGetDaclSecurityDescriptor, addr OldAcl, addr DaclPresent, addr Dacl, addr DaclDefaulted
    54.     mov Access.grfAccessPermissions, SECTION_MAP_WRITE
    55.     mov Access.grfAccessMode, GRANT_ACCESS
    56.     mov Access.grfInheritance, NO_INHERITANCE
    57.     mov Access.Trustee.pMultipleTrustee, ebx
    58.     mov Access.Trustee.MultipleTrusteeOperation, NO_MULTIPLE_TRUSTEE
    59.     mov Access.Trustee.TrusteeForm, TRUSTEE_IS_NAME
    60.     mov Access.Trustee.TrusteeType, TRUSTEE_IS_USER
    61.     mov Access.Trustee.ptstrName, OffSet KeyName
    62.     invoke SetEntriesInAcl, 1, addr Access, Dacl, addr NewAcl
    63.     invoke RtlCreateSecurityDescriptor, addr SecurityDescriptor, SECURITY_DESCRIPTOR_REVISION
    64.     invoke RtlSetDaclSecurityDescriptor, addr SecurityDescriptor, TRUE, NewAcl, FALSE
    65.     invoke ZwSetSecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, addr SecurityDescriptor
    66.     invoke ZwOpenSection, addr SectionHandle, SECTION_MAP_WRITE, addr ObjAttr
    67.     ret
    68. KeyName CHAR 'CURRENT_USER',0  
    69. align 16
    70. WidePhysicalSectionName WCHAR "\","D","e","v","i","c","e","\","P","h","y","s","i","c","a","l","M","e","m","o","r","y"
    71. UniPhysicalSectionName  UNICODE_STRING <SizeOf WidePhysicalSectionName, SizeOf WidePhysicalSectionName + 2, offset WidePhysicalSectionName>
    72. OpenPhysicalMemoryEx endp
    73. end OpenPhysicalMemoryEx
    Может ктонибудь знает её псевдокод?
     
  14. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Сейчас периписал в рабочий код.
    Код (Text):
    1. OpenPhysicalMemorySection proc SectionAccess:ULONG, ResultSectionHandle:PHANDLE
    2. Local SectionHandle:HANDLE, ObjAttr:OBJECT_ATTRIBUTES, ReturnLength:ULONG
    3. Local NewAcl:PACL, Access:EXPLICIT_ACCESS
    4. Local SecurityDescriptor:SECURITY_DESCRIPTOR
    5. Local DaclPresent:BOOLEAN, Dacl:PACL, DaclDefaulted:BOOLEAN
    6.     xor ebx,ebx
    7.     mov ObjAttr.uLength, SizeOf OBJECT_ATTRIBUTES
    8.     mov ObjAttr.hRootDirectory, ebx
    9.     mov ObjAttr.uAttributes,OBJ_CASE_INSENSITIVE or OBJ_KERNEL_HANDLE
    10.     mov ObjAttr.pSecurityDescriptor, ebx
    11.     mov ObjAttr.pSecurityQualityOfService, ebx
    12.     mov ObjAttr.pObjectName, OffSet UniPhysicalSectionName
    13.     invoke ZwOpenSection, addr SectionHandle, READ_CONTROL or WRITE_DAC, addr ObjAttr
    14.     test eax,eax
    15.     jnz exit_
    16.     invoke ZwQuerySecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, NULL, NULL, addr ReturnLength
    17.     cmp eax,STATUS_BUFFER_TOO_SMALL
    18.     jnz err_query_size_
    19.     assume fs:nothing
    20.     mov eax,fs:[TEB.Peb]
    21.     mov esi,PEB.ProcessHeap[eax]
    22.     invoke RtlAllocateHeap, esi, HEAP_ZERO_MEMORY, ReturnLength
    23.     mov ebx,eax
    24.     invoke ZwQuerySecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, ebx, ReturnLength, addr ReturnLength
    25.     test eax,eax
    26.     jnz err_query_
    27.     invoke RtlGetDaclSecurityDescriptor, ebx, addr DaclPresent, addr Dacl, addr DaclDefaulted
    28.     test eax,eax
    29.     jnz err_query_
    30.     mov Access.grfAccessPermissions, SECTION_MAP_WRITE
    31.     mov Access.grfAccessMode, GRANT_ACCESS
    32.     mov Access.grfInheritance, NO_INHERITANCE
    33.     mov Access.Trustee.pMultipleTrustee, ebx
    34.     mov Access.Trustee.MultipleTrusteeOperation, NO_MULTIPLE_TRUSTEE
    35.     mov Access.Trustee.TrusteeForm, TRUSTEE_IS_NAME
    36.     mov Access.Trustee.TrusteeType, TRUSTEE_IS_USER
    37.     mov Access.Trustee.ptstrName, OffSet KeyName
    38.     invoke SetEntriesInAcl, 1, addr Access, Dacl, addr NewAcl
    39.     invoke RtlCreateSecurityDescriptor, addr SecurityDescriptor, SECURITY_DESCRIPTOR_REVISION
    40.     test eax,eax
    41.     jnz err_query_
    42.     invoke RtlSetDaclSecurityDescriptor, addr SecurityDescriptor, TRUE, NewAcl, FALSE
    43.     test eax,eax
    44.     jnz err_query_
    45.     invoke ZwSetSecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, addr SecurityDescriptor
    46.     test eax,eax
    47.     jnz err_query_
    48.     invoke ZwOpenSection, ResultSectionHandle, SectionAccess, addr ObjAttr
    49.     push eax
    50.     invoke RtlSetDaclSecurityDescriptor, addr SecurityDescriptor, TRUE, Dacl, FALSE
    51.     invoke ZwSetSecurityObject, SectionHandle, DACL_SECURITY_INFORMATION, addr SecurityDescriptor
    52.     pop eax
    53. err_query_:
    54.     push eax
    55.     invoke RtlFreeHeap, esi, 0, ebx
    56.     pop eax
    57. err_query_size_:
    58.     push eax
    59.     invoke ZwClose, SectionHandle
    60.     pop eax
    61. exit_:
    62.     _endseh_
    63.     ret
    64. KeyName CHAR 'CURRENT_USER',0  
    65. align 16
    66. WidePhysicalSectionName WCHAR "\","D","e","v","i","c","e","\","P","h","y","s","i","c","a","l","M","e","m","o","r","y"
    67. UniPhysicalSectionName  UNICODE_STRING <SizeOf WidePhysicalSectionName, SizeOf WidePhysicalSectionName + 2, offset WidePhysicalSectionName>
    68. OpenPhysicalMemorySection endp
    69.  
    70. Start proc
    71. Local SectionHandle:HANDLE
    72.     invoke OpenPhysicalMemorySection, SECTION_MAP_READ or SECTION_MAP_WRITE, addr SectionHandle
    73.     invoke ZwClose, SectionHandle
    74.     ret
    75. Start endp
    76. end Start
    Интересно, а FLASH EPROM BIOS удастся через это стереть?
     
  15. roman_pro

    roman_pro New Member

    Публикаций:
    0
    Регистрация:
    9 фев 2007
    Сообщения:
    291
    Скорее всего нет, ибо BIOS кэшируется в RAM (shadow bios), поэтому сотрём временную копию, а во FLASH'е всё останется. Хотя, могу и ошибаться.
     
  16. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Надо где-то проверить...
     
  17. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Продвижение. Осталось четыре поля в дескрипторе узнать.
     
  18. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    года 4 назад писал что-то подобное. формат ACL очень прост. даже есть вроде в хидере каком-то стадартном.
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    Осталось одно поле узнать: 250000h - HeapHandle ?
     
  20. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    в winnt.h поищи по такой фразу - "ACL and ACE". там все более или менее описано.