/*
* Copyright (c) 2008, 2009, 2010, 2011 Kernel Drivers, LLC.
- * Copyright (c) 2009, 2010, 2011 Your File System, Inc.
+ * Copyright (c) 2009, 2010, 2011, 2014 Your File System, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
PACL Sacl,
BOOLEAN SaclDefaulted);
+typedef
+NTSTATUS
+(*PAFSRtlSetGroupSecurityDescriptor)( IN PSECURITY_DESCRIPTOR SecurityDescriptor,
+ IN PSID Group OPTIONAL,
+ IN BOOLEAN GroupDefaulted);
+
//
// Worker thread count
//
-#define AFS_WORKER_COUNT 5
-#define AFS_IO_WORKER_COUNT 5
+#define AFS_WORKER_COUNT 16
+#define AFS_IO_WORKER_COUNT 8
//
// Worker thread states
#define AFS_WORK_UNUSED_1 0x0001
#define AFS_WORK_FLUSH_FCB 0x0002
-#define AFS_WORK_ASYNCH_READ 0x0003
-#define AFS_WORK_ASYNCH_WRITE 0x0004
+#define AFS_WORK_UNUSED_3 0x0003
+#define AFS_WORK_UNUSED_4 0x0004
#define AFS_WORK_UNUSED_5 0x0005
#define AFS_WORK_ENUMERATE_GLOBAL_ROOT 0x0006
-#define AFS_WORK_UNUSED_7 0x0007
+#define AFS_WORK_INVALIDATE_OBJECT 0x0007
#define AFS_WORK_START_IOS 0x0008
+#define AFS_WORK_DEFERRED_WRITE 0x0009
//
// Worker request flags
#define AFS_FCB_FLAG_FILE_MODIFIED 0x00000001
#define AFS_FCB_FILE_CLOSED 0x00000002
-#define AFS_FCB_FLAG_UPDATE_WRITE_TIME 0x00000004
#define AFS_FCB_FLAG_UPDATE_CHANGE_TIME 0x00000008
#define AFS_FCB_FLAG_UPDATE_ACCESS_TIME 0x00000010
#define AFS_FCB_FLAG_UPDATE_CREATE_TIME 0x00000020
#define AFS_FCB_FLAG_UPDATE_LAST_WRITE_TIME 0x00000040
+#define AFS_FCB_FLAG_PURGE_ON_CLOSE 0x00000080
//
// Object information flags
#define AFS_OBJECT_HELD_IN_SERVICE 0x00000080
#define AFS_OBJECT_ROOT_VOLUME 0x00000100
#define AFS_OBJECT_FLAGS_VERIFY_DATA 0x00000200
+#define AFS_OBJECT_FLAGS_PARENT_FID 0x00000400
+
+//
+// Object information reference count reasons
+//
+
+#define AFS_OBJECT_REFERENCE_DIRENTRY 0
+#define AFS_OBJECT_REFERENCE_CHILD 1
+#define AFS_OBJECT_REFERENCE_INVALIDATION 2
+#define AFS_OBJECT_REFERENCE_GLOBAL 3
+#define AFS_OBJECT_REFERENCE_EXTENTS 4
+#define AFS_OBJECT_REFERENCE_WORKER 5
+#define AFS_OBJECT_REFERENCE_STATUS 6
+#define AFS_OBJECT_REFERENCE_FIND 7
+#define AFS_OBJECT_REFERENCE_FS_REQ 8
+#define AFS_OBJECT_REFERENCE_PIOCTL 9
+#define AFS_OBJECT_REFERENCE_MAX 10
+
+//
+// Volume reference count reasons
+//
+
+#define AFS_VOLUME_REFERENCE_INVALID 0
+#define AFS_VOLUME_REFERENCE_EXTENTS 1
+#define AFS_VOLUME_REFERENCE_GLOBAL_ROOT 2
+#define AFS_VOLUME_REFERENCE_INVALIDATE 3
+#define AFS_VOLUME_REFERENCE_FILE_ATTRS 4
+#define AFS_VOLUME_REFERENCE_EVAL_ROOT 5
+#define AFS_VOLUME_REFERENCE_GET_OBJECT 6
+#define AFS_VOLUME_REFERENCE_MOUNTPT 7
+#define AFS_VOLUME_REFERENCE_BUILD_ROOT 8
+#define AFS_VOLUME_REFERENCE_LOCATE_NAME 9
+#define AFS_VOLUME_REFERENCE_PARSE_NAME 10
+#define AFS_VOLUME_REFERENCE_MAX 12
+
+//
+// Define one second in terms of 100 nS units
+//
+
+#define AFS_ONE_SECOND 10000000
+#define AFS_ONE_MILLISECOND 10000
+#define AFS_ONE_MICROSECOND 10
//
// Fcb lifetime in seconds
//
-#define AFS_OBJECT_LIFETIME 300000000
+#define AFS_OBJECT_LIFETIME 20 * AFS_ONE_SECOND
-#define AFS_EXTENT_REQUEST_TIME 100000000
+#define AFS_EXTENT_REQUEST_TIME 10 * AFS_ONE_SECOND
//
// How big to make the runs
#endif
#ifndef SetFlag
-#define SetFlag(_F,_SF) ((_F) |= (_SF))
+#define SetFlag(_F,_SF) InterlockedOr(&(_F), (_SF))
#endif
#ifndef ClearFlag
-#define ClearFlag(_F,_SF) ((_F) &= ~(_SF))
+#define ClearFlag(_F,_SF) InterlockedAnd(&(_F), ~(_SF))
#endif
#define QuadAlign(Ptr) ( \
((((ULONG)(Ptr)) + 7) & 0xfffffff8) \
)
-#define CRC32_POLYNOMIAL 0xEDB88320L;
+#define CRC32_POLYNOMIAL 0xEDB88320L
-//
-// Define one second in terms of 100 nS units
-//
-
-#define AFS_ONE_SECOND 10000000
-
-#define AFS_SERVER_FLUSH_DELAY 30
-#define AFS_SERVER_PURGE_DELAY 60
+#define AFS_SERVER_FLUSH_DELAY (5LL * AFS_ONE_SECOND)
+#define AFS_SERVER_PURGE_DELAY (300LL * AFS_ONE_SECOND)
//
// PURGE_SLEEP is the number of PURGE_DELAYS we wait before we will unilaterally
// give back extents.
//
#define AFS_SERVER_PURGE_SLEEP 6
-//
-// Read ahead granularity
-//
-
-#define READ_AHEAD_GRANULARITY 0x10000 // 64KB
-
#define AFS_DIR_ENUM_BUFFER_LEN (16 * 1024)
//
#define CCB_FLAG_MASK_CONTAINS_WILD_CARDS 0x00000004
#define CCB_FLAG_FREE_FULL_PATHNAME 0x00000008
#define CCB_FLAG_RETURN_RELATIVE_ENTRIES 0x00000010
-#define CCB_FLAGS_DIRECTORY_QUERY_MAPPED 0x00000020
+#define CCB_FLAG_DIRECTORY_QUERY_MAPPED 0x00000020
#define CCB_FLAG_MASK_PIOCTL_QUERY 0x00000040
+#define CCB_FLAG_MASK_OPENED_REPARSE_POINT 0x00000080
+#define CCB_FLAG_INSERTED_CCB_LIST 0x00000100
+#define CCB_FLAG_DIRECTORY_QUERY_DIRECT_QUERY 0x00000200
+#define CCB_FLAG_LAST_WRITE_TIME_SET 0x00000800
//
// DirEntry flags
#define AFS_DIR_ENTRY_VALID 0x00000080
#define AFS_DIR_ENTRY_PENDING_DELETE 0x00000100
#define AFS_DIR_ENTRY_DELETED 0x00000200
-#define AFS_DIR_ENTRY_SERVER_SERVICE 0x00000400
-#define AFS_DIR_ENTRY_WORKSTATION_SERVICE 0x00000800
-#define AFS_DIR_ENTRY_IPC 0x00001000
+#define AFS_DIR_ENTRY_PIPE_SERVICE 0x00000400
+#define AFS_DIR_ENTRY_IPC 0x00000800
+#define AFS_DIR_ENTRY_INSERTED_SHORT_NAME 0x00001000
//
// Network provider errors
#define AFS_MAXIMUM_EXTENT_RELEASE_COUNT 100
+#define AFS_DIRTY_CHUNK_THRESHOLD 64
+
// {41966169-3FD7-4392-AFE4-E6A9D0A92C72} - generated using guidgen.exe
DEFINE_GUID (GUID_SD_AFS_REDIRECTOR_CONTROL_OBJECT,
0x41966169, 0x3fd7, 0x4392, 0xaf, 0xe4, 0xe6, 0xa9, 0xd0, 0xa9, 0x2c, 0x72);
#define AFS_SPECIAL_SHARE_NAME_COUNT_MAX 10
//
-// Device flags
-//
-
-#define AFS_DEVICE_FLAG_HIDE_DOT_NAMES 0x00000001
-#define AFS_DEVICE_FLAG_REDIRECTOR_SHUTDOWN 0x00000002
-
-//
// Name Array flags
//
#define IO_REPARSE_TAG_OPENAFS_DFS 0x00000037L
#endif
+#ifndef IO_REPARSE_TAG_SURROGATE
+#define IO_REPARSE_TAG_SURROGATE 0x20000000L
+#endif
+
// {EF21A155-5C92-4470-AB3B-370403D96369}
DEFINE_GUID (GUID_AFS_REPARSE_GUID,
0xEF21A155, 0x5C92, 0x4470, 0xAB, 0x3B, 0x37, 0x04, 0x03, 0xD9, 0x63, 0x69);