1 #ifndef _ACCCTRL_H 2 #define _ACCCTRL_H 3 4 #ifdef __cplusplus 5 extern "C" { 6 #endif 7 8 #define AccFree LocalFree 9 10 #define ACTRL_RESERVED 0x00000000 11 #define ACTRL_ACCESS_PROTECTED 0x00000001 12 #define ACTRL_ACCESS_ALLOWED 0x00000001 13 #define ACTRL_ACCESS_DENIED 0x00000002 14 #define ACTRL_AUDIT_SUCCESS 0x00000004 15 #define ACTRL_AUDIT_FAILURE 0x00000008 16 #define ACTRL_SYSTEM_ACCESS 0x04000000 17 #define ACTRL_DELETE 0x08000000 18 #define ACTRL_READ_CONTROL 0x10000000 19 #define ACTRL_CHANGE_ACCESS 0x20000000 20 #define ACTRL_CHANGE_OWNER 0x40000000 21 #define ACTRL_SYNCHRONIZE 0x80000000 22 #define ACTRL_STD_RIGHTS_ALL 0xf8000000 23 24 #define ACTRL_FILE_READ 0x00000001 25 #define ACTRL_FILE_WRITE 0x00000002 26 #define ACTRL_FILE_APPEND 0x00000004 27 #define ACTRL_FILE_READ_PROP 0x00000008 28 #define ACTRL_FILE_WRITE_PROP 0x00000010 29 #define ACTRL_FILE_EXECUTE 0x00000020 30 #define ACTRL_FILE_READ_ATTRIB 0x00000080 31 #define ACTRL_FILE_WRITE_ATTRIB 0x00000100 32 #define ACTRL_FILE_CREATE_PIPE 0x00000200 33 34 #define ACTRL_DIR_LIST 0x00000001 35 #define ACTRL_DIR_CREATE_OBJECT 0x00000002 36 #define ACTRL_DIR_CREATE_CHILD 0x00000004 37 #define ACTRL_DIR_DELETE_CHILD 0x00000040 38 #define ACTRL_DIR_TRAVERSE 0x00000020 39 40 #define ACTRL_KERNEL_TERMINATE 0x00000001 41 #define ACTRL_KERNEL_THREAD 0x00000002 42 #define ACTRL_KERNEL_VM 0x00000004 43 #define ACTRL_KERNEL_VM_READ 0x00000008 44 #define ACTRL_KERNEL_VM_WRITE 0x00000010 45 #define ACTRL_KERNEL_DUP_HANDLE 0x00000020 46 #define ACTRL_KERNEL_PROCESS 0x00000040 47 #define ACTRL_KERNEL_SET_INFO 0x00000080 48 #define ACTRL_KERNEL_GET_INFO 0x00000100 49 #define ACTRL_KERNEL_CONTROL 0x00000200 50 #define ACTRL_KERNEL_ALERT 0x00000400 51 #define ACTRL_KERNEL_GET_CONTEXT 0x00000800 52 #define ACTRL_KERNEL_SET_CONTEXT 0x00001000 53 #define ACTRL_KERNEL_TOKEN 0x00002000 54 #define ACTRL_KERNEL_IMPERSONATE 0x00004000 55 #define ACTRL_KERNEL_DIMPERSONATE 0x00008000 56 57 #define ACTRL_PRINT_SADMIN 0x00000001 58 #define ACTRL_PRINT_SLIST 0x00000002 59 #define ACTRL_PRINT_PADMIN 0x00000004 60 #define ACTRL_PRINT_PUSE 0x00000008 61 #define ACTRL_PRINT_JADMIN 0x00000010 62 63 #define ACTRL_SVC_GET_INFO 0x00000001 64 #define ACTRL_SVC_SET_INFO 0x00000002 65 #define ACTRL_SVC_STATUS 0x00000004 66 #define ACTRL_SVC_LIST 0x00000008 67 #define ACTRL_SVC_START 0x00000010 68 #define ACTRL_SVC_STOP 0x00000020 69 #define ACTRL_SVC_PAUSE 0x00000040 70 #define ACTRL_SVC_INTERROGATE 0x00000080 71 #define ACTRL_SVC_UCONTROL 0x00000100 72 73 #define ACTRL_REG_QUERY 0x00000001 74 #define ACTRL_REG_SET 0x00000002 75 #define ACTRL_REG_CREATE_CHILD 0x00000004 76 #define ACTRL_REG_LIST 0x00000008 77 #define ACTRL_REG_NOTIFY 0x00000010 78 #define ACTRL_REG_LINK 0x00000020 79 80 #define ACTRL_WIN_CLIPBRD 0x00000001 81 #define ACTRL_WIN_GLOBAL_ATOMS 0x00000002 82 #define ACTRL_WIN_CREATE 0x00000004 83 #define ACTRL_WIN_LIST_DESK 0x00000008 84 #define ACTRL_WIN_LIST 0x00000010 85 #define ACTRL_WIN_READ_ATTRIBS 0x00000020 86 #define ACTRL_WIN_WRITE_ATTRIBS 0x00000040 87 #define ACTRL_WIN_SCREEN 0x00000080 88 #define ACTRL_WIN_EXIT 0x00000100 89 90 #define ACTRL_ACCESS_NO_OPTIONS 0x00000000 91 #define ACTRL_ACCESS_SUPPORTS_OBJECT_ENTRIES 0x00000001 92 93 #define ACCCTRL_DEFAULT_PROVIDERA "Windows NT Access Provider" 94 #define ACCCTRL_DEFAULT_PROVIDERW L"Windows NT Access Provider" 95 96 #define TRUSTEE_ACCESS_ALLOWED 0x00000001L 97 #define TRUSTEE_ACCESS_READ 0x00000002L 98 #define TRUSTEE_ACCESS_WRITE 0x00000004L 99 #define TRUSTEE_ACCESS_EXPLICIT 0x00000001L 100 #define TRUSTEE_ACCESS_READ_WRITE (TRUSTEE_ACCESS_READ | TRUSTEE_ACCESS_WRITE) 101 #define TRUSTEE_ACCESS_ALL 0xFFFFFFFFL 102 103 #define NO_INHERITANCE 0x0 104 #define SUB_OBJECTS_ONLY_INHERIT 0x1 105 #define SUB_CONTAINERS_ONLY_INHERIT 0x2 106 #define SUB_CONTAINERS_AND_OBJECTS_INHERIT 0x3 107 #define INHERIT_NO_PROPAGATE 0x4 108 #define INHERIT_ONLY 0x8 109 #define INHERITED_ACCESS_ENTRY 0x10 110 #define INHERITED_PARENT 0x10000000 111 #define INHERITED_GRANDPARENT 0x20000000 112 113 #define SI_EDIT_PERMS 0x00000000 114 #define SI_EDIT_OWNER 0x00000001 115 #define SI_EDIT_AUDITS 0x00000002 116 #define SI_CONTAINER 0x00000004 117 #define SI_READONLY 0x00000008 118 #define SI_ADVANCED 0x00000010 119 #define SI_RESET 0x00000020 120 #define SI_OWNER_READONLY 0x00000040 121 #define SI_EDIT_PROPERTIES 0x00000080 122 #define SI_OWNER_RECURSE 0x00000100 123 #define SI_NO_ACL_PROTECT 0x00000200 124 #define SI_NO_TREE_APPLY 0x00000400 125 #define SI_PAGE_TITLE 0x00000800 126 #define SI_SERVER_IS_DC 0x00001000 127 #define SI_RESET_DACL_TREE 0x00004000 128 #define SI_RESET_SACL_TREE 0x00008000 129 #define SI_OBJECT_GUID 0x00010000 130 #define SI_EDIT_EFFECTIVE 0x00020000 131 #define SI_RESET_DACL 0x00040000 132 #define SI_RESET_SACL 0x00080000 133 #define SI_RESET_OWNER 0x00100000 134 #define SI_NO_ADDITIONAL_PERMISSION 0x00200000 135 #define SI_MAY_WRITE 0x10000000 136 #define SI_EDIT_ALL (SI_EDIT_OWNER |SI_EDIT_PERMS | SI_EDIT_AUDITS) 137 138 #define SI_ACCESS_SPECIFIC 0x00010000 139 #define SI_ACCESS_GENERAL 0x00020000 140 #define SI_ACCESS_CONTAINER 0x00040000 141 #define SI_ACCESS_PROPERTY 0x00080000 142 143 typedef ULONG INHERIT_FLAGS, *PINHERIT_FLAGS; 144 typedef ULONG ACCESS_RIGHTS, *PACCESS_RIGHTS; 145 146 typedef enum _ACCESS_MODE 147 { 148 NOT_USED_ACCESS = 0, 149 GRANT_ACCESS, 150 SET_ACCESS, 151 DENY_ACCESS, 152 REVOKE_ACCESS, 153 SET_AUDIT_SUCCESS, 154 SET_AUDIT_FAILURE 155 } ACCESS_MODE; 156 157 typedef enum _SE_OBJECT_TYPE 158 { 159 SE_UNKNOWN_OBJECT_TYPE = 0, 160 SE_FILE_OBJECT, 161 SE_SERVICE, 162 SE_PRINTER, 163 SE_REGISTRY_KEY, 164 SE_LMSHARE, 165 SE_KERNEL_OBJECT, 166 SE_WINDOW_OBJECT, 167 SE_DS_OBJECT, 168 SE_DS_OBJECT_ALL, 169 SE_PROVIDER_DEFINED_OBJECT, 170 SE_WMIGUID_OBJECT, 171 SE_REGISTRY_WOW64_32KEY 172 } SE_OBJECT_TYPE; 173 174 typedef enum _TRUSTEE_TYPE 175 { 176 TRUSTEE_IS_UNKNOWN, 177 TRUSTEE_IS_USER, 178 TRUSTEE_IS_GROUP, 179 TRUSTEE_IS_DOMAIN, 180 TRUSTEE_IS_ALIAS, 181 TRUSTEE_IS_WELL_KNOWN_GROUP, 182 TRUSTEE_IS_DELETED, 183 TRUSTEE_IS_INVALID, 184 TRUSTEE_IS_COMPUTER 185 } TRUSTEE_TYPE; 186 187 typedef enum _TRUSTEE_FORM 188 { 189 TRUSTEE_IS_SID, 190 TRUSTEE_IS_NAME, 191 TRUSTEE_BAD_FORM, 192 TRUSTEE_IS_OBJECTS_AND_SID, 193 TRUSTEE_IS_OBJECTS_AND_NAME 194 } TRUSTEE_FORM; 195 196 typedef enum _MULTIPLE_TRUSTEE_OPERATION 197 { 198 NO_MULTIPLE_TRUSTEE, 199 TRUSTEE_IS_IMPERSONATE 200 } MULTIPLE_TRUSTEE_OPERATION; 201 202 typedef struct _TRUSTEE_A 203 { 204 struct _TRUSTEE_A *pMultipleTrustee; 205 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; 206 TRUSTEE_FORM TrusteeForm; 207 TRUSTEE_TYPE TrusteeType; 208 LPSTR ptstrName; 209 } TRUSTEE_A, *PTRUSTEE_A, TRUSTEEA, *PTRUSTEEA; 210 211 typedef struct _TRUSTEE_W 212 { 213 struct _TRUSTEE_W *pMultipleTrustee; 214 MULTIPLE_TRUSTEE_OPERATION MultipleTrusteeOperation; 215 TRUSTEE_FORM TrusteeForm; 216 TRUSTEE_TYPE TrusteeType; 217 LPWSTR ptstrName; 218 } TRUSTEE_W, *PTRUSTEE_W, TRUSTEEW, *PTRUSTEEW; 219 220 typedef struct _ACTRL_ACCESS_ENTRYA 221 { 222 TRUSTEE_A Trustee; 223 ULONG fAccessFlags; 224 ACCESS_RIGHTS Access; 225 ACCESS_RIGHTS ProvSpecificAccess; 226 INHERIT_FLAGS Inheritance; 227 LPCSTR lpInheritProperty; 228 } ACTRL_ACCESS_ENTRYA, *PACTRL_ACCESS_ENTRYA; 229 230 typedef struct _ACTRL_ACCESS_ENTRYW 231 { 232 TRUSTEE_W Trustee; 233 ULONG fAccessFlags; 234 ACCESS_RIGHTS Access; 235 ACCESS_RIGHTS ProvSpecificAccess; 236 INHERIT_FLAGS Inheritance; 237 LPCWSTR lpInheritProperty; 238 } ACTRL_ACCESS_ENTRYW, *PACTRL_ACCESS_ENTRYW; 239 240 typedef struct _ACTRL_ACCESS_ENTRY_LISTA 241 { 242 ULONG cEntries; 243 ACTRL_ACCESS_ENTRYA *pAccessList; 244 } ACTRL_ACCESS_ENTRY_LISTA, *PACTRL_ACCESS_ENTRY_LISTA; 245 246 typedef struct _ACTRL_ACCESS_ENTRY_LISTW 247 { 248 ULONG cEntries; 249 ACTRL_ACCESS_ENTRYW *pAccessList; 250 } ACTRL_ACCESS_ENTRY_LISTW, *PACTRL_ACCESS_ENTRY_LISTW; 251 252 typedef struct _ACTRL_PROPERTY_ENTRYA 253 { 254 LPCSTR lpProperty; 255 PACTRL_ACCESS_ENTRY_LISTA pAccessEntryList; 256 ULONG fListFlags; 257 } ACTRL_PROPERTY_ENTRYA, *PACTRL_PROPERTY_ENTRYA; 258 259 typedef struct _ACTRL_PROPERTY_ENTRYW 260 { 261 LPCWSTR lpProperty; 262 PACTRL_ACCESS_ENTRY_LISTW pAccessEntryList; 263 ULONG fListFlags; 264 } ACTRL_PROPERTY_ENTRYW, *PACTRL_PROPERTY_ENTRYW; 265 266 typedef struct _ACTRL_ALISTA 267 { 268 ULONG cEntries; 269 PACTRL_PROPERTY_ENTRYA pPropertyAccessList; 270 } ACTRL_ACCESSA, *PACTRL_ACCESSA, ACTRL_AUDITA, *PACTRL_AUDITA; 271 272 typedef struct _ACTRL_ALISTW 273 { 274 ULONG cEntries; 275 PACTRL_PROPERTY_ENTRYW pPropertyAccessList; 276 } ACTRL_ACCESSW, *PACTRL_ACCESSW, ACTRL_AUDITW, *PACTRL_AUDITW; 277 278 typedef struct _TRUSTEE_ACCESSA 279 { 280 LPSTR lpProperty; 281 ACCESS_RIGHTS Access; 282 ULONG fAccessFlags; 283 ULONG fReturnedAccess; 284 } TRUSTEE_ACCESSA, *PTRUSTEE_ACCESSA; 285 286 typedef struct _TRUSTEE_ACCESSW 287 { 288 LPWSTR lpProperty; 289 ACCESS_RIGHTS Access; 290 ULONG fAccessFlags; 291 ULONG fReturnedAccess; 292 } TRUSTEE_ACCESSW, *PTRUSTEE_ACCESSW; 293 294 typedef struct _ACTRL_OVERLAPPED 295 { 296 _ANONYMOUS_UNION 297 union 298 { 299 PVOID Provider; 300 ULONG Reserved1; 301 } DUMMYUNIONNAME; 302 ULONG Reserved2; 303 HANDLE hEvent; 304 } ACTRL_OVERLAPPED, *PACTRL_OVERLAPPED; 305 306 typedef struct _ACTRL_ACCESS_INFOA 307 { 308 ULONG fAccessPermission; 309 LPSTR lpAccessPermissionName; 310 } ACTRL_ACCESS_INFOA, *PACTRL_ACCESS_INFOA; 311 312 typedef struct _ACTRL_ACCESS_INFOW 313 { 314 ULONG fAccessPermission; 315 LPWSTR lpAccessPermissionName; 316 } ACTRL_ACCESS_INFOW, *PACTRL_ACCESS_INFOW; 317 318 typedef struct _ACTRL_CONTROL_INFOA 319 { 320 LPSTR lpControlId; 321 LPSTR lpControlName; 322 } ACTRL_CONTROL_INFOA, *PACTRL_CONTROL_INFOA; 323 324 typedef struct _ACTRL_CONTROL_INFOW 325 { 326 LPWSTR lpControlId; 327 LPWSTR lpControlName; 328 } ACTRL_CONTROL_INFOW, *PACTRL_CONTROL_INFOW; 329 330 typedef struct _EXPLICIT_ACCESS_A 331 { 332 DWORD grfAccessPermissions; 333 ACCESS_MODE grfAccessMode; 334 DWORD grfInheritance; 335 TRUSTEE_A Trustee; 336 } EXPLICIT_ACCESS_A, *PEXPLICIT_ACCESS_A, EXPLICIT_ACCESSA, *PEXPLICIT_ACCESSA; 337 338 typedef struct _EXPLICIT_ACCESS_W 339 { 340 DWORD grfAccessPermissions; 341 ACCESS_MODE grfAccessMode; 342 DWORD grfInheritance; 343 TRUSTEE_W Trustee; 344 } EXPLICIT_ACCESS_W, *PEXPLICIT_ACCESS_W, EXPLICIT_ACCESSW, *PEXPLICIT_ACCESSW; 345 346 typedef struct _OBJECTS_AND_SID 347 { 348 DWORD ObjectsPresent; 349 GUID ObjectTypeGuid; 350 GUID InheritedObjectTypeGuid; 351 SID *pSid; 352 } OBJECTS_AND_SID, *POBJECTS_AND_SID; 353 354 typedef struct _OBJECTS_AND_NAME_A 355 { 356 DWORD ObjectsPresent; 357 SE_OBJECT_TYPE ObjectType; 358 LPSTR ObjectTypeName; 359 LPSTR InheritedObjectTypeName; 360 LPSTR ptstrName; 361 } OBJECTS_AND_NAME_A, *POBJECTS_AND_NAME_A; 362 363 typedef struct _OBJECTS_AND_NAME_W 364 { 365 DWORD ObjectsPresent; 366 SE_OBJECT_TYPE ObjectType; 367 LPWSTR ObjectTypeName; 368 LPWSTR InheritedObjectTypeName; 369 LPWSTR ptstrName; 370 } OBJECTS_AND_NAME_W, *POBJECTS_AND_NAME_W; 371 372 #if (_WIN32_WINNT >= 0x0501) 373 typedef struct 374 { 375 LONG GenerationGap; 376 LPSTR AncestorName; 377 } INHERITED_FROMA, *PINHERITED_FROMA; 378 379 typedef struct 380 { 381 LONG GenerationGap; 382 LPWSTR AncestorName; 383 } INHERITED_FROMW, *PINHERITED_FROMW; 384 #endif /* (_WIN32_WINNT >= 0x0501) */ 385 386 typedef struct _SI_OBJECT_INFO 387 { 388 DWORD dwFlags; 389 HINSTANCE hInstance; 390 LPWSTR pszServerName; 391 LPWSTR pszObjectName; 392 LPWSTR pszPageTitle; 393 GUID guidObjectType; 394 } SI_OBJECT_INFO, *PSI_OBJECT_INFO; 395 396 typedef struct _SI_ACCESS 397 { 398 const GUID *pguid; 399 ACCESS_MASK mask; 400 LPCWSTR pszName; 401 DWORD dwFlags; 402 } SI_ACCESS, *PSI_ACCESS; 403 404 typedef struct _SI_INHERIT_TYPE 405 { 406 const GUID *pguid; 407 ULONG dwFlags; 408 LPCWSTR pszName; 409 } SI_INHERIT_TYPE, *PSI_INHERIT_TYPE; 410 411 typedef enum _SI_PAGE_TYPE 412 { 413 SI_PAGE_PERM = 0, 414 SI_PAGE_ADVPERM, 415 SI_PAGE_AUDIT, 416 SI_PAGE_OWNER 417 } SI_PAGE_TYPE; 418 419 typedef struct _FN_OBJECT_MGR_FUNCTIONS 420 { 421 ULONG Placeholder; 422 } FN_OBJECT_MGR_FUNCTS, *PFN_OBJECT_MGR_FUNCTS; 423 424 typedef enum _PROG_INVOKE_SETTING 425 { 426 ProgressInvokeNever = 1, 427 ProgressInvokeEveryObject, 428 ProgressInvokeOnError, 429 ProgressCancelOperation, 430 ProgressRetryOperation 431 } PROG_INVOKE_SETTING, *PPROG_INVOKE_SETTING; 432 433 typedef VOID (WINAPI *FN_PROGRESSW)(LPWSTR pObjectName, 434 DWORD Status, 435 PPROG_INVOKE_SETTING pInvokeSetting, 436 PVOID Args, 437 BOOL SecuritySet); 438 typedef VOID (WINAPI *FN_PROGRESSA)(LPSTR pObjectName, 439 DWORD Status, 440 PPROG_INVOKE_SETTING pInvokeSetting, 441 PVOID Args, 442 BOOL SecuritySet); 443 444 #ifdef UNICODE 445 #define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERW 446 typedef TRUSTEE_W TRUSTEE_, *PTRUSTEE_; 447 typedef TRUSTEEW TRUSTEE, *PTRUSTEE; 448 typedef ACTRL_ACCESSW ACTRL_ACCESS, *PACTRL_ACCESS; 449 typedef ACTRL_ACCESS_ENTRY_LISTW ACTRL_ACCESS_ENTRY_LIST, *PACTRL_ACCESS_ENTRY_LIST; 450 typedef ACTRL_ACCESS_INFOW ACTRL_ACCESS_INFO, *PACTRL_ACCESS_INFO; 451 typedef ACTRL_ACCESS_ENTRYW ACTRL_ACCESS_ENTRY, *PACTRL_ACCESS_ENTRY; 452 typedef ACTRL_AUDITW ACTRL_AUDIT, *PACTRL_AUDIT; 453 typedef ACTRL_CONTROL_INFOW ACTRL_CONTROL_INFO, *PACTRL_CONTROL_INFO; 454 typedef EXPLICIT_ACCESS_W EXPLICIT_ACCESS_, *PEXPLICIT_ACCESS_; 455 typedef EXPLICIT_ACCESSW EXPLICIT_ACCESS, *PEXPLICIT_ACCESS; 456 typedef TRUSTEE_ACCESSW TRUSTEE_ACCESS, *PTRUSTEE_ACCESS; 457 typedef OBJECTS_AND_NAME_W OBJECTS_AND_NAME_, *POBJECTS_AND_NAME_; 458 459 #if (_WIN32_WINNT >= 0x0501) 460 typedef INHERITED_FROMW INHERITED_FROM, *PINHERITED_FROM; 461 typedef FN_PROGRESSW FN_PROGRESS; 462 #define HAS_FN_PROGRESSW 463 #endif 464 #else 465 #define ACCCTRL_DEFAULT_PROVIDER ACCCTRL_DEFAULT_PROVIDERA 466 typedef TRUSTEE_A TRUSTEE_, *PTRUSTEE_; 467 typedef TRUSTEEA TRUSTEE, *PTRUSTEE; 468 typedef ACTRL_ACCESSA ACTRL_ACCESS, *PACTRL_ACCESS; 469 typedef ACTRL_ACCESS_ENTRY_LISTA ACTRL_ACCESS_ENTRY_LIST, *PACTRL_ACCESS_ENTRY_LIST; 470 typedef ACTRL_ACCESS_INFOA ACTRL_ACCESS_INFO, *PACTRL_ACCESS_INFO; 471 typedef ACTRL_ACCESS_ENTRYA ACTRL_ACCESS_ENTRY, *PACTRL_ACCESS_ENTRY; 472 typedef ACTRL_AUDITA ACTRL_AUDIT, *PACTRL_AUDIT; 473 typedef ACTRL_CONTROL_INFOA ACTRL_CONTROL_INFO, *PACTRL_CONTROL_INFO; 474 typedef EXPLICIT_ACCESS_A EXPLICIT_ACCESS_, *PEXPLICIT_ACCESS_; 475 typedef EXPLICIT_ACCESSA EXPLICIT_ACCESS, *PEXPLICIT_ACCESS; 476 typedef TRUSTEE_ACCESSA TRUSTEE_ACCESS, *PTRUSTEE_ACCESS; 477 typedef OBJECTS_AND_NAME_A OBJECTS_AND_NAME_, *POBJECTS_AND_NAME_; 478 479 #if (_WIN32_WINNT >= 0x0501) 480 typedef INHERITED_FROMA INHERITED_FROM, *PINHERITED_FROM; 481 typedef FN_PROGRESSA FN_PROGRESS; 482 #define HAS_FN_PROGRESSA 483 #endif /* (_WIN32_WINNT >= 0x0501) */ 484 485 #endif /* UNICODE */ 486 487 #ifdef __cplusplus 488 } 489 #endif 490 491 #endif /* _ACCCTRL_H */ 492