ReactOS  0.4.15-dev-483-ga77a65a
vdm.h File Reference
#include <win/vdm.h>
Include dependency graph for vdm.h:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Classes

struct  _VDM_CONSOLE_RECORD
 
struct  _VDM_DOS_RECORD
 

Macros

#define VDM_POLICY_KEY_NAME   L"Software\\Policies\\Microsoft\\Windows\\AppCompat"
 
#define VDM_DISALLOWED_VALUE_NAME   L"VDMDisallowed"
 

Typedefs

typedef struct _VDM_CONSOLE_RECORD VDM_CONSOLE_RECORD
 
typedef struct _VDM_CONSOLE_RECORDPVDM_CONSOLE_RECORD
 
typedef struct _VDM_DOS_RECORD VDM_DOS_RECORD
 
typedef struct _VDM_DOS_RECORDPVDM_DOS_RECORD
 

Functions

NTSTATUS BaseSrvGetConsoleRecord (HANDLE ConsoleHandle, PVDM_CONSOLE_RECORD *Record)
 
NTSTATUS GetConsoleRecordBySessionId (ULONG TaskId, PVDM_CONSOLE_RECORD *Record)
 
BOOLEAN BaseSrvIsVdmAllowed (VOID)
 
VOID BaseInitializeVDM (VOID)
 
VOID BaseSrvCleanupVDMResources (IN PCSR_PROCESS CsrProcess)
 

Macro Definition Documentation

◆ VDM_DISALLOWED_VALUE_NAME

#define VDM_DISALLOWED_VALUE_NAME   L"VDMDisallowed"

Definition at line 17 of file vdm.h.

◆ VDM_POLICY_KEY_NAME

#define VDM_POLICY_KEY_NAME   L"Software\\Policies\\Microsoft\\Windows\\AppCompat"

Definition at line 16 of file vdm.h.

Typedef Documentation

◆ PVDM_CONSOLE_RECORD

◆ PVDM_DOS_RECORD

◆ VDM_CONSOLE_RECORD

◆ VDM_DOS_RECORD

Function Documentation

◆ BaseInitializeVDM()

VOID BaseInitializeVDM ( VOID  )

Definition at line 588 of file vdm.c.

589 {
590  /* Initialize the list head */
592 
593  /* Initialize the critical sections */
596 }
RTL_CRITICAL_SECTION WowCriticalSection
Definition: vdm.c:23
LIST_ENTRY VDMConsoleListHead
Definition: vdm.c:21
RTL_CRITICAL_SECTION DosCriticalSection
Definition: vdm.c:22
NTSYSAPI NTSTATUS NTAPI RtlInitializeCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944

Referenced by CSR_SERVER_DLL_INIT().

◆ BaseSrvCleanupVDMResources()

VOID BaseSrvCleanupVDMResources ( IN PCSR_PROCESS  CsrProcess)

Definition at line 297 of file vdm.c.

298 {
299  ULONG ProcessId = HandleToUlong(CsrProcess->ClientId.UniqueProcess);
300  PVDM_CONSOLE_RECORD ConsoleRecord = NULL;
301  PVDM_DOS_RECORD DosRecord;
302  PLIST_ENTRY i;
303 
304  /* Enter the critical section */
306 
307  /* Search for a record that has the same process handle */
309  while (i != &VDMConsoleListHead)
310  {
311  ConsoleRecord = CONTAINING_RECORD(i, VDM_CONSOLE_RECORD, Entry);
312  i = i->Flink;
313 
314  if (ConsoleRecord->ProcessId == ProcessId)
315  {
316  if (ConsoleRecord->ServerEvent)
317  {
318  NtClose(ConsoleRecord->ServerEvent);
319  ConsoleRecord->ServerEvent = NULL;
320  }
321 
322  /* Cleanup the DOS records */
323  while (!IsListEmpty(&ConsoleRecord->DosListHead))
324  {
325  DosRecord = CONTAINING_RECORD(ConsoleRecord->DosListHead.Flink,
327 
328  /* Set the event and close it */
329  if (DosRecord->ServerEvent)
330  {
331  NtSetEvent(DosRecord->ServerEvent, NULL);
332  NtClose(DosRecord->ServerEvent);
333  DosRecord->ServerEvent = NULL;
334  }
335 
336  /* Remove the DOS entry */
337  if (DosRecord->CommandInfo) BaseSrvFreeVDMInfo(DosRecord->CommandInfo);
338  RemoveEntryList(&DosRecord->Entry);
339  RtlFreeHeap(BaseSrvHeap, 0, DosRecord);
340  }
341 
342  /* Remove the console record */
343  RemoveEntryList(&ConsoleRecord->Entry);
344  BaseSrvDestroyConsoleRecord(ConsoleRecord);
345  }
346  }
347 
348  /* Leave the critical section */
350 }
IN PLARGE_INTEGER IN PLARGE_INTEGER PEPROCESS ProcessId
Definition: fatprocs.h:2706
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
Definition: heap.c:606
#define HandleToUlong(h)
Definition: basetsd.h:79
NTSYSAPI NTSTATUS NTAPI RtlEnterCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
PKPROCESS CsrProcess
Definition: videoprt.c:37
VOID BaseSrvFreeVDMInfo(PVDM_COMMAND_INFO CommandInfo)
Definition: vdm.c:281
HANDLE ServerEvent
Definition: vdm.h:39
_Must_inspect_result_ FORCEINLINE BOOLEAN IsListEmpty(_In_ const LIST_ENTRY *ListHead)
Definition: rtlfuncs.h:57
FORCEINLINE BOOLEAN RemoveEntryList(_In_ PLIST_ENTRY Entry)
Definition: rtlfuncs.h:105
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
NTSYSAPI NTSTATUS NTAPI RtlLeaveCriticalSection(_In_ PRTL_CRITICAL_SECTION CriticalSection)
smooth NULL
Definition: ftsmooth.c:416
LIST_ENTRY VDMConsoleListHead
Definition: vdm.c:21
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:120
PVDM_COMMAND_INFO CommandInfo
Definition: vdm.h:41
RTL_CRITICAL_SECTION DosCriticalSection
Definition: vdm.c:22
NTSTATUS NTAPI NtSetEvent(IN HANDLE EventHandle, OUT PLONG PreviousState OPTIONAL)
Definition: event.c:458
ULONG ProcessId
Definition: vdm.h:26
VOID BaseSrvDestroyConsoleRecord(PVDM_CONSOLE_RECORD ConsoleRecord)
Definition: vdm.c:71
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
Definition: typedefs.h:118
LIST_ENTRY DosListHead
Definition: vdm.h:31
HANDLE BaseSrvHeap
Definition: init.c:29
unsigned int ULONG
Definition: retypes.h:1
LIST_ENTRY Entry
Definition: vdm.h:21
LIST_ENTRY Entry
Definition: vdm.h:36
HANDLE ServerEvent
Definition: vdm.h:24
base of all file and directory entries
Definition: entries.h:82

Referenced by BaseClientDisconnectRoutine().

◆ BaseSrvGetConsoleRecord()

NTSTATUS BaseSrvGetConsoleRecord ( HANDLE  ConsoleHandle,
PVDM_CONSOLE_RECORD Record 
)

Definition at line 49 of file vdm.c.

50 {
51  PLIST_ENTRY i;
52  PVDM_CONSOLE_RECORD CurrentRecord = NULL;
53 
54  /* NULL is not a valid console handle */
55  if (ConsoleHandle == NULL) return STATUS_INVALID_PARAMETER;
56 
57  /* Search for a record that has the same console handle */
58  for (i = VDMConsoleListHead.Flink; i != &VDMConsoleListHead; i = i->Flink)
59  {
60  CurrentRecord = CONTAINING_RECORD(i, VDM_CONSOLE_RECORD, Entry);
61  if (CurrentRecord->ConsoleHandle == ConsoleHandle) break;
62  }
63 
64  /* Check if nothing was found */
65  if (i == &VDMConsoleListHead) CurrentRecord = NULL;
66 
67  *Record = CurrentRecord;
68  return CurrentRecord ? STATUS_SUCCESS : STATUS_NOT_FOUND;
69 }
#define STATUS_INVALID_PARAMETER
Definition: udferr_usr.h:135
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD * Record
Definition: ketypes.h:256
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
LIST_ENTRY VDMConsoleListHead
Definition: vdm.c:21
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:120
#define STATUS_NOT_FOUND
Definition: shellext.h:72
HANDLE ConsoleHandle
Definition: vdm.h:22
Definition: typedefs.h:118
return STATUS_SUCCESS
Definition: btrfs.c:3014
base of all file and directory entries
Definition: entries.h:82

Referenced by CSR_API().

◆ BaseSrvIsVdmAllowed()

BOOLEAN BaseSrvIsVdmAllowed ( VOID  )

Definition at line 143 of file vdm.c.

144 {
146  BOOLEAN VdmAllowed = TRUE;
148  UNICODE_STRING KeyName, ValueName, MachineKeyName;
150  UCHAR ValueBuffer[sizeof(KEY_VALUE_PARTIAL_INFORMATION) + sizeof(ULONG)];
152  ULONG ActualSize;
153 
154  /* Initialize the unicode strings */
155  RtlInitUnicodeString(&MachineKeyName, L"\\Registry\\Machine");
158 
160  &MachineKeyName,
162  NULL,
163  NULL);
164 
165  /* Open the local machine key */
167  if (!NT_SUCCESS(Status)) return FALSE;
168 
170  &KeyName,
172  RootKey,
173  NULL);
174 
175  /* Open the policy key in the local machine hive, if it exists */
177  {
178  /* Read the value, if it's set */
180  &ValueName,
182  ValueInfo,
183  sizeof(ValueBuffer),
184  &ActualSize)))
185  {
186  if (*((PULONG)ValueInfo->Data))
187  {
188  /* The VDM has been disabled in the registry */
189  VdmAllowed = FALSE;
190  }
191  }
192 
194  }
195 
196  /* Close the local machine key */
197  NtClose(RootKey);
198 
199  /* If it's disabled system-wide, there's no need to check the user key */
200  if (!VdmAllowed) return FALSE;
201 
202  /* Open the current user key of the client */
203  if (!CsrImpersonateClient(NULL)) return VdmAllowed;
205  CsrRevertToSelf();
206 
207  /* If that fails, return the system-wide setting */
208  if (!NT_SUCCESS(Status)) return VdmAllowed;
209 
211  &KeyName,
213  RootKey,
214  NULL);
215 
216  /* Open the policy key in the current user hive, if it exists */
218  {
219  /* Read the value, if it's set */
221  &ValueName,
223  ValueInfo,
224  sizeof(ValueBuffer),
225  &ActualSize)))
226  {
227  if (*((PULONG)ValueInfo->Data))
228  {
229  /* The VDM has been disabled in the registry */
230  VdmAllowed = FALSE;
231  }
232  }
233 
235  }
236 
237  return VdmAllowed;
238 }
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING KeyName
Definition: ndis.h:4711
#define TRUE
Definition: types.h:120
#define VDM_POLICY_KEY_NAME
Definition: vdm.h:16
static PMEMKEY RootKey
Definition: registry.c:55
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4711
#define KEY_READ
Definition: nt_native.h:1023
LONG NTSTATUS
Definition: precomp.h:26
BOOLEAN NTAPI CsrRevertToSelf(VOID)
Definition: procsup.c:1056
_In_ PUNICODE_STRING ValueName
Definition: cmfuncs.h:264
unsigned char BOOLEAN
smooth NULL
Definition: ftsmooth.c:416
NTSYSAPI NTSTATUS NTAPI NtQueryValueKey(IN HANDLE KeyHandle, IN PUNICODE_STRING ValueName, IN KEY_VALUE_INFORMATION_CLASS KeyValueInformationClass, IN PVOID KeyValueInformation, IN ULONG Length, IN PULONG ResultLength)
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:32
struct _KEY_VALUE_PARTIAL_INFORMATION * PKEY_VALUE_PARTIAL_INFORMATION
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3399
unsigned char UCHAR
Definition: xmlstorage.h:181
static const WCHAR L[]
Definition: oid.c:1250
NTSYSAPI NTSTATUS NTAPI RtlOpenCurrentUser(_In_ ACCESS_MASK DesiredAccess, _Out_ PHANDLE KeyHandle)
Status
Definition: gdiplustypes.h:24
_Must_inspect_result_ _In_ USHORT _In_ PHIDP_PREPARSED_DATA _Out_writes_to_ LengthAttributes PHIDP_EXTENDED_ATTRIBUTES Attributes
Definition: hidpi.h:348
struct _KEY_VALUE_PARTIAL_INFORMATION KEY_VALUE_PARTIAL_INFORMATION
unsigned int * PULONG
Definition: retypes.h:1
NTSYSAPI NTSTATUS NTAPI NtOpenKey(OUT PHANDLE KeyHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: ntapi.c:336
#define VDM_DISALLOWED_VALUE_NAME
Definition: vdm.h:17
unsigned int ULONG
Definition: retypes.h:1
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
BOOLEAN NTAPI CsrImpersonateClient(IN PCSR_THREAD CsrThread)
Definition: procsup.c:931
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:106

Referenced by CSR_API().

◆ GetConsoleRecordBySessionId()

NTSTATUS GetConsoleRecordBySessionId ( ULONG  TaskId,
PVDM_CONSOLE_RECORD Record 
)

Definition at line 95 of file vdm.c.

96 {
97  PLIST_ENTRY i;
98  PVDM_CONSOLE_RECORD CurrentRecord = NULL;
99 
100  /* Search for a record that has the same console handle */
101  for (i = VDMConsoleListHead.Flink; i != &VDMConsoleListHead; i = i->Flink)
102  {
103  CurrentRecord = CONTAINING_RECORD(i, VDM_CONSOLE_RECORD, Entry);
104  if (CurrentRecord->SessionId == TaskId) break;
105  }
106 
107  /* Check if nothing was found */
108  if (i == &VDMConsoleListHead) CurrentRecord = NULL;
109 
110  *Record = CurrentRecord;
111  return CurrentRecord ? STATUS_SUCCESS : STATUS_NOT_FOUND;
112 }
_In_ struct _KBUGCHECK_REASON_CALLBACK_RECORD * Record
Definition: ketypes.h:256
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
smooth NULL
Definition: ftsmooth.c:416
LIST_ENTRY VDMConsoleListHead
Definition: vdm.c:21
PFLT_MESSAGE_WAITER_QUEUE CONTAINING_RECORD(Csq, DEVICE_EXTENSION, IrpQueue)) -> WaiterQ.mLock) _IRQL_raises_(DISPATCH_LEVEL) VOID NTAPI FltpAcquireMessageWaiterLock(_In_ PIO_CSQ Csq, _Out_ PKIRQL Irql)
Definition: Messaging.c:560
struct _LIST_ENTRY * Flink
Definition: typedefs.h:120
#define STATUS_NOT_FOUND
Definition: shellext.h:72
ULONG SessionId
Definition: vdm.h:30
Definition: typedefs.h:118
return STATUS_SUCCESS
Definition: btrfs.c:3014
base of all file and directory entries
Definition: entries.h:82

Referenced by CSR_API().