
/**
 * @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 Server 2003 32bit a 64bit.
 * Jeho soucasti jsou dale makra, ktera umoznuji nektere polozky z techto internich
 * struktur "vytahnnout."
 */

#ifndef __OBJECT_DIRECTORY_W2K3_H_
#define __OBJECT_DIRECTORY_W2K3_H_

#include <ntddk.h>

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

// Struktura tela objektu adresare
typedef struct _OBJECT_DIRECTORY_W2K3
{
  // Hashovaci tabulka s polozkami
  POBJECT_DIRECTORY_ENTRY_W2K3 HashBuckets[37];
  // Zamek pro synchronizaci nad adresarem
  PVOID Lock;
  PVOID DeviceMap;
  ULONG32 SessionId;
} OBJECT_DIRECTORY_W2K3, *POBJECT_DIRECTORY_W2K3;



// 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 DOObjectHashBucketsW2K3(a)     (PVOID)&((POBJECT_DIRECTORY_W2K3)a)->HashBuckets
#define DOEntryChaingLinkW2K3(a)       ((POBJECT_DIRECTORY_ENTRY_W2K3)a)->ChainLink
#define DOEntryObjectW2K3(a)           ((POBJECT_DIRECTORY_ENTRY_W2K3)a)->Object
#define DOObjectLockW2K3(a)            &((POBJECT_DIRECTORY_W2K3)a)->Lock




#endif
