326{
331
333 {
334 CurrentValue = *(
volatile LONG_PTR *)&SRWLock->Ptr;
335
337 {
338
339
341 {
342
343
346 {
348
349 if (
First->Exclusive)
350 {
351
352
353
354
355 Shared =
First->Last;
356
358 {
362 StackWaitBlock.
Last = &StackWaitBlock;
364
365 Shared->
Next = &StackWaitBlock;
366 First->Last = &StackWaitBlock;
367
368 Shared = &StackWaitBlock;
369 FirstWait = &StackWaitBlock;
370 }
371 else
372 {
375 }
376 }
377 else
378 {
382 }
383
386
388
390
392 FirstWait,
393 &SharedWake);
394
395
396 break;
397 }
398 }
399 else
400 {
401
402
403
404
405
406
408
411
414 (
PVOID)CurrentValue) == CurrentValue)
415 {
416
417 break;
418 }
419 }
420 }
421 else
422 {
424 {
425
427 {
430
431
432
433
434
438 StackWaitBlock.
Last = &StackWaitBlock;
440
443 {
444 Shared =
First->Last;
446 {
447 Shared->
Next = &StackWaitBlock;
448 First->Last = &StackWaitBlock;
449
450 Shared = &StackWaitBlock;
451 FirstWait = &StackWaitBlock;
452 }
453 else
454 {
457 }
458
461
463
465 FirstWait,
466 &SharedWake);
467
468
469 break;
470 }
471 }
472 else
473 {
476
477
478
482 StackWaitBlock.
Last = &StackWaitBlock;
485
489 (
PVOID)CurrentValue) == CurrentValue)
490 {
492 &StackWaitBlock,
493 &SharedWake);
494
495
496 break;
497 }
498 }
499 }
500 else
501 {
502
504
505
506
508
511 (
PVOID)CurrentValue) == CurrentValue)
512 {
513
514 break;
515 }
516 }
517 }
518
520 }
521}
while(CdLookupNextInitialFileDirent(IrpContext, Fcb, FileContext))
static VOID NTAPI RtlpAcquireSRWLockSharedWait(IN OUT PRTL_SRWLOCK SRWLock, IN OUT PRTLP_SRWLOCK_WAITBLOCK FirstWait OPTIONAL, IN OUT PRTLP_SRWLOCK_SHARED_WAKE WakeChain)
volatile struct _RTLP_SRWLOCK_SHARED_WAKE * Next
PRTLP_SRWLOCK_SHARED_WAKE SharedWakeChain
PRTLP_SRWLOCK_SHARED_WAKE LastSharedWake