
/**
 * @file object_directory_w7.h
 *
 * Tento soubor je soucasti frameworku pro praci s datovymi strukturami spravce objektu.
 * Obsahuje definice internich struktur objektu adresare pro Windows 7 32bit a 64bit.
 * Jeho soucasti jsou dale makra, ktera umoznuji nektere polozky z techto internich
 * struktur "vytahnnout."
 */
 
#ifndef __OBJECT_DIRECTORY_W7_H_
#define __OBJECT_DIRECTORY_W7_H_

#include <ntddk.h>

// Struktura jedne polozky v hashovaci tabulce objektu adresare
typedef struct _OBJECT_DIRECTORY_ENTRY_W7
{           
  // Adresa nasledujici polozky ve spojovem seznamu      
  struct _OBJECT_DIRECTORY_ENTRY_W7 *ChainLink;
  // Adresa tela objektu
  PVOID Object;
  // Hash hodnota jmena polozky
  ULONG32 HashValue;
} OBJECT_DIRECTORY_ENTRY_W7, *POBJECT_DIRECTORY_ENTRY_W7;

// Struktura tela objektu adresare
typedef struct _OBJECT_DIRECTORY_W7
{
  // Hashovaci tabulka s polozkami
  POBJECT_DIRECTORY_ENTRY_W7 HashBuckets[37];
  // Zamek pro synchronizaci nad adresarem
  PVOID Lock;
  PVOID DeviceMap;
  ULONG32 SessionId;
  PVOID NamespaceEntry;
  ULONG32 Flags;
} OBJECT_DIRECTORY_W7, *POBJECT_DIRECTORY_W7;



// Makra pro zjisteni dulezitych clenu v internich strukturach adresare.
// Pouzivaji je rutiny v souboru object_directory.c pro zajisteni nezavislosti
// na verzi operacniho systemu.		
#define DOObjectHashBucketsW7(a)       (PVOID)&((POBJECT_DIRECTORY_W7)a)->HashBuckets
#define DOEntryChaingLinkW7(a)         ((POBJECT_DIRECTORY_ENTRY_W7)a)->ChainLink
#define DOEntryObjectW7(a)             ((POBJECT_DIRECTORY_ENTRY_W7)a)->Object
#define DOObjectLockW7(a)              &((POBJECT_DIRECTORY_W7)a)->Lock

#endif
