Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "WinAPI";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];

Вниз

OPEN_IF для секции   Найти похожие ветки 

 
guav ©   (2008-05-29 22:50) [40]

Вот код. Могу для ясносит бинарник выслать.
program Project1;

{$APPTYPE CONSOLE}

uses
 Windows ,  SysUtils;

type
 PUNICODE_STRING = ^UNICODE_STRING;
 UNICODE_STRING = record
   Length: WORD;
   MaximumLength: WORD;
   Buffer: PWideChar;
 end;

 POBJECT_ATTRIBUTES = ^OBJECT_ATTRIBUTES;
 {$EXTERNALSYM POBJECT_ATTRIBUTES}
 OBJECT_ATTRIBUTES = record
   Length: ULONG;
   RootDirectory: THandle;
   ObjectName: PUNICODE_STRING;
   Attributes: ULONG;
   SecurityDescriptor: Pointer;
   SecurityQualityOfService: Pointer;
 end;

 NTSTATUS = Longint;

const
 STATUS_OBJECT_NAME_EXISTS  =   $40000000;
 OBJ_CASE_INSENSITIVE       =   $00000040;
 OBJ_OPENIF                 =   $00000080;
 DIRECTORY_TRAVERSE         =       $0002;
 DIRECTORY_CREATE_OBJECT    =       $0004;

function NT_SUCCESS(Status: NTSTATUS): Boolean;
begin
 Result := Status >= 0;
end;

procedure RtlInitUnicodeString(
 var DestinationString : UNICODE_STRING;
 SourceString : PWideChar); stdcall; external "ntdll.dll";

function  NtCreateSection(
   SectionHandle : PHANDLE;
   DesiredAccess : ACCESS_MASK;
   ObjectAttributes : POBJECT_ATTRIBUTES;
   SectionSize : PLARGEINTEGER;
   Protect : ULONG;
   Attributes : ULONG;
   FileHandle : THandle
 ): NTSTATUS; stdcall; external "ntdll.dll";

function  NtOpenDirectoryObject(
   DirectoryHandle : PHANDLE;
   DesiredAccess : ACCESS_MASK;
   ObjectAttributes : POBJECT_ATTRIBUTES
 ): NTSTATUS; stdcall; stdcall; external "ntdll.dll";

procedure InitializeObjectAttributes(
 p: POBJECT_ATTRIBUTES;
 Name: PUNICODE_STRING;
 Attr: ULONG;
 Root: THandle;
 SD: Pointer);
begin
 p^.Length := SizeOf(OBJECT_ATTRIBUTES);
 p^.RootDirectory := Root;
 p^.Attributes := Attr;
 p^.ObjectName := Name;
 p^.SecurityDescriptor := SD;
 p^.SecurityQualityOfService := nil;
end;

procedure RaiseNtError(status: NTSTATUS);
begin
 raise EOSError.CreateFmt(
   "Nt error %.8x , i""m, too lazy to format it properly",
   [status]);
end;

function CreateorOpenSection(): THandle;
var
us, uss: UNICODE_STRING;
oa, oas: OBJECT_ATTRIBUTES;
status: NTSTATUS;
dir: THANDLE;
secsize: LARGE_INTEGER;
begin
RtlInitUnicodeString(us, "\BaseNamedObjects");
InitializeObjectAttributes(@oa, @us, OBJ_CASE_INSENSITIVE, 0, nil);
status := NtOpenDirectoryObject(@dir,
  DIRECTORY_TRAVERSE or DIRECTORY_CREATE_OBJECT, @oa);
if not NT_SUCCESS(status) then
  RaiseNtError(status);
try
  RtlInitUnicodeString(uss, "AAASuperPuperSection");
  InitializeObjectAttributes(@oas, @uss, OBJ_OPENIF,
    dir, nil);
  secsize.QuadPart := $20000;
  status := NtCreateSection(@Result, SECTION_MAP_WRITE or SECTION_MAP_READ,
    @oas, @secsize, PAGE_READWRITE, SEC_COMMIT, 0);
  if not NT_SUCCESS(status) then
  begin
    RaiseNtError(status);
  end;
  if status = STATUS_OBJECT_NAME_EXISTS then
  begin
    WriteLn("Reopen");
  end;
finally
  CloseHandle(dir);
end;
end;

var H1, H2: THandle;
begin
 try
   H1 := CreateOrOpenSection();
   try
     WriteLn(Format("New section handle %.8x", [H1]));
     H2 := CreateOrOpenSection();
     try
       WriteLn(Format("Reopen section handle %.8x", [H2]));
     finally
       CloseHandle(H2);
     end;
   finally
     CloseHandle(H1);
   end;
 except
   on E: Exception do
     WriteLn("Error ", E.Message);
 end;
 ReadLn
end.


 
guav ©   (2008-05-29 22:54) [41]

Перевод API взят из Jedi Windows API, накопирован по минимуму, чтобы не было внешних ссылок.
Выводит
New section handle 00000FBC
Reopen
Reopen section handle 00000FB8


 
LightRipple ©   (2008-05-30 02:02) [42]

> [39] Игорь Шевченко ©   (29.05.08 11:37)
> [41] guav ©   (29.05.08 22:54)

Побитовое сравнение кода выявило "совсем маленькую" опечатку:
В моем проекте так определена константа: OBJ_OPENIF = 00000080;  

Я уж и не помню откуда я ее брала, копипастила или набивала вручную.

Как здорово, что мы не плюнули на это дело и довели его до конца !
И подумать страшно, на какие грабли бы я еще наступала
и какие бы делала выводы о работе, совсем ни в чем не виноватых, Nt-функций и системы :)

Спасибо мальчики ! Уря !


 
Игорь Шевченко ©   (2008-05-30 10:39) [43]

LightRipple ©   (30.05.08 02:02) [42]

Спасибо тебе огромное!!!
Это ж и у меня так...


 
guav ©   (2008-05-30 12:34) [44]

> [43] Игорь Шевченко ©   (30.05.08 10:39)


> [42] LightRipple ©   (30.05.08 02:02)

Используйте перевод, используемый не только вами http://jedi-apilib.sourceforge.net/ .
Или используйте С или С++ и копируйте из DDK напрямую.

Кстати, с правильным OBJ_OPENIF не откроется ли оно кодом [0] ?


 
Игорь Шевченко ©   (2008-05-30 13:10) [45]

guav ©   (30.05.08 12:34) [44]

Можно подумать, ты святее Аллаха и ни разу не ошибаешься :)
Можно подумать, что перевод Jedi гарантировано свободен от ошибок :)


 
guav ©   (2008-05-30 13:13) [46]

> [45] Игорь Шевченко ©   (30.05.08 13:10)
> Можно подумать, ты святее Аллаха и ни разу не ошибаешься
> :)

Куда уж нам до Аллаха :)


> [45] Игорь Шевченко ©   (30.05.08 13:10)
> Можно подумать, что перевод Jedi гарантировано свободен
> от ошибок :)

Нет. Но у него больше пользователей и ошибок скорее меньше чем больше.


 
Игорь Шевченко ©   (2008-05-30 13:37) [47]

guav ©   (30.05.08 13:13) [46]


> Нет. Но у него больше пользователей и ошибок скорее меньше
> чем больше.


Охотно верю. Но у меня как бы тоже пользователей есть, а ошибка грубая. Однако ж никто, кроме Александры, не натолкнулся.


 
LightRipple ©   (2008-05-30 16:56) [48]

> [43] Игорь Шевченко ©   (30.05.08 10:39)
> Спасибо тебе огромное!!!

Очень рада, что и от меня может быть польза :)

> [44] guav ©   (30.05.08 12:34)
> Кстати, с правильным OBJ_OPENIF не откроется ли оно кодом [0] ?

Проверила: все работает на ура.
(имеется ввиду использование имени с префиксом "\BaseNamedObjects" и нулевым парентом)
Т.е. нет необходимости в использовании NtOpenDirectoryObject :)



Страницы: 1 2 вся ветка

Форум: "WinAPI";
Текущий архив: 2009.06.28;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.55 MB
Время: 0.007 c
15-1240591691
Kolan
2009-04-24 20:48
2009.06.28
«Интерфейс пользователя» → Интерфейсная справка


2-1241894486
NaRuTo
2009-05-09 22:41
2009.06.28
Drag and Drop внутри листа.


2-1242228171
GibiW
2009-05-13 19:22
2009.06.28
Функция "Сохранить как"


2-1240985406
Лёша
2009-04-29 10:10
2009.06.28
Locate в отфильтрованных данных


2-1242046804
СДракон
2009-05-11 17:00
2009.06.28
Excel





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский