34#define WIN32_NO_STATUS
65 { 0,
FILE_ATTRIBUTE_NORMAL, {
'l',
'o',
'n',
'g',
'f',
'i',
'l',
'e',
'n',
'a',
'm',
'e',
'.',
't',
'm',
'p'},
"normal" },
76 { 0,
FILE_ATTRIBUTE_NORMAL, {
'e',
'a',
'.',
't',
'm',
'p',
'.',
't',
'm',
'p'},
"normal" },
174 ok (attrib == (
testfiles[
i].
attr & attribmask),
"file %s: expected %s (%lx), got %lx\n",
191 UINT data_pos, data_size;
200 pRtlInitUnicodeString( &dummy_mask,
dummyW );
209 skip(
"can't test if we can't open the directory\n");
213 io.Status = 0xdeadbeef;
224 data_len =
io.Information;
239 io.Status = 0xdeadbeef;
245 data_len =
io.Information;
259 "Wrong number %d of %s files found (single_entry=%d,mask=%s)\n",
264 ok(
testfiles[
i].nfound == 1,
"Wrong number %d of %s files found (single_entry=%d,restart=%d)\n",
283 if (!pRtlDosPathNameToNtPathName_U( testdir, &ntdirname,
NULL,
NULL ))
285 ok(0,
"RtlDosPathNametoNtPathName_U failed\n");
293 io.Status = 0xdeadbeef;
298 data_len =
io.Information;
303 while (data_pos < data_len)
320 pRtlInitUnicodeString( &prev_str, prev );
321 pRtlInitUnicodeString( &name_str,
name );
322 res = pRtlCompareUnicodeString( &prev_str, &name_str,
TRUE );
329 if (
info->NextEntryOffset == 0)
331 io.Status = 0xdeadbeef;
337 data_len =
io.Information;
340 else data_pos +=
info->NextEntryOffset;
344 pRtlFreeUnicodeString( &ntdirname );
357 io.Status = 0xdeadbeef;
358 io.Information = 0xdeadbeef;
364 ok(
io.Status == 0xdeadbeef,
"%u: wrong status %lx\n",
class,
io.Status );
365 ok(
io.Information == 0xdeadbeef,
"%u: wrong info %Ix\n",
class,
io.Information );
366 ok(
data[0] == 0x55555555,
"%u: wrong offset %lx\n",
class,
data[0] );
388 "%u: wrong status %lx\n",
class,
status );
392 for (data_size = 1; data_size <
sizeof(
data); data_size++)
399 ok(
io.Information == data_size ||
broken(!
io.Information),
400 "%u: wrong info %Ix\n",
class,
io.Information );
401 if (
io.Information)
ok(
data[0] == 0,
"%u: wrong offset %lx\n",
class,
data[0] );
405 ok(
io.Status == 0xdeadbeef ||
io.Status ==
status,
"%u: wrong status %lx\n",
class,
io.Status );
406 ok(
io.Information == (
io.Status == 0xdeadbeef ? 0xdeadbeef : 0),
"%u: wrong info %Ix\n",
class,
io.Information );
407 ok(
data[0] == 0x55555555,
"%u: wrong offset %lx\n",
class,
data[0] );
417 "%u: wrong size %u\n",
class, data_size );
422 "%u: wrong size %u\n",
class, data_size );
427 "%u: wrong size %u\n",
class, data_size );
432 "%u: wrong size %u\n",
class, data_size );
437 "%u: wrong size %u\n",
class, data_size );
442 "%u: wrong size %u\n",
class, data_size );
447 "%u: wrong size %u\n",
class, data_size );
474 {
L"*.", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1}},
475 {
L"*. ", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
476 {
L"* .", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
477 {
L" *.", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
478 {
L"*.*", {1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
479 {
L"* *", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
480 {
L"*.**", {1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
481 {
L"*", {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
482 {
L"**", {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
483 {
L"?", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
484 {
L"?.", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0}},
485 {
L"?..", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
486 {
L"??", {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 0}},
487 {
L"??.", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
488 {
L"??.???", {0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
489 {
L"<", {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1}},
490 {
L"*<a", {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0}},
491 {
L"<.", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1}},
492 {
L"<..", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
493 {
L"<.\"", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1}},
494 {
L".<", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0}},
495 {
L"..<", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}},
496 {
L"..*", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}},
497 {
L"*..*", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1}},
498 {
L"*..", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
499 {
L"..?", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}},
500 {
L"..\"", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
501 {
L"\"", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
502 {
L"\"\"", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
503 {
L"\"\"\"", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
504 {
L"a.<", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1}},
505 {
L"ea.tmp.tmp<", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}},
506 {
L"<tmp", {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}},
507 {
L"<.tmp", {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}},
508 {
L"<name.tmp", {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
509 {
L"<nam<tmp", {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
510 {
L"<name.<", {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
511 {
L"<name<", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
512 {
L"<\"", {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1}},
513 {
L"*\"", {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
514 {
L"*\"tmp\"tmp\"", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}},
515 {
L"n\"tmp", {0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
516 {
L"ea\"", {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
517 {
L"\"a", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0}},
518 {
L"\"\"a", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}},
519 {
L"e\"a", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
520 {
L"*\"tmp", {1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0}},
521 {
L"<.<", {1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
522 {
L"<\"<", {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
523 {
L"<\"<\"", {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
524 {
L"<\"<.", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
525 {
L"<.<\"", {1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
526 {
L"<<", {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
527 {
L"<a", {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 0, 0}},
528 {
L"*a", {0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 1, 1, 0}},
529 {
L"<aa", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0}},
530 {
L"<.a", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0}},
531 {
L"<..a", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0}},
532 {
L"<.<.<", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1}},
533 {
L".<.<", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0}},
534 {
L"<<.<", {1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
535 {
L"<.<<", {1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
536 {
L"<<<", {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}},
537 {
L"< ..", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
538 {
L"< .", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
539 {
L"<\"\"", {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1}},
540 {
L">", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0}},
541 {
L">.", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0}},
542 {
L">..", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1}},
543 {
L">>", {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0}},
544 {
L">>.", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0}},
545 {
L">>>", {0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 0}},
546 {
L">>.>>>", {0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 1}},
547 {
L">.>", {0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 1}},
548 {
L">>.tmp", {0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
549 {
L">>tmp", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
550 {
L">>>tmp", {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}},
572 strcat(testdirA,
"NtQueryDirectoryFile.tmp");
573 pRtlMultiByteToUnicodeN(testdirW,
sizeof(testdirW),
NULL, testdirA,
strlen(testdirA)+1);
577 if (!pRtlDosPathNameToNtPathName_U(testdirW, &ntdirname,
NULL,
NULL))
579 ok(0,
"RtlDosPathNametoNtPathName_U failed\n");
607 if (mask_tests[
i].found[
j])
624 skip(
"can't test if we can't open the directory\n");
644 io.Status = 0xdeadbeef;
659 io.Status = 0xdeadbeef;
660 io.Information = 0xdeadbeef;
666 "wrong info %Ix\n",
io.Information);
679 io.Status = 0xdeadbeef;
680 io.Information = 0xdeadbeef;
686 ok(
io.Information == data_size ||
broken(
io.Information == 0),
687 "wrong info %Ix\n",
io.Information );
696 ok(
filename[1] == 0x5555,
"incorrect long file name: %s\n",
704 io.Status = 0xdeadbeef;
713 "incorrect long file name: %s\n",
723 data_size =
sizeof(
data);
724 io.Status = 0xdeadbeef;
725 io.Information = 0xdeadbeef;
730 ok(
io.Information > 0 &&
io.Information < data_size,
"wrong info %Ix\n",
io.Information);
734 ok( fbdi->
FileName[0] ==
'.',
"incorrect long file name: %s\n",
738 "wrong offset %lx\n",
next->NextEntryOffset );
739 ok(
next->FileNameLength == 2 *
sizeof(
WCHAR),
"wrong length %lx\n",
next->FileNameLength );
746 io.Status = 0xdeadbeef;
747 io.Information = 0xdeadbeef;
753 "wrong info %Ix\n",
io.Information );
756 ok( fbdi->
FileName[0] ==
'.',
"incorrect long file name: %s\n",
759 ok(
next->NextEntryOffset == 0x55555555,
"wrong offset %lx\n",
next->NextEntryOffset );
763 io.Status = 0xdeadbeef;
764 io.Information = 0xdeadbeef;
770 "wrong info %Ix\n",
io.Information );
776 io.Status = 0xdeadbeef;
777 io.Information = 0xdeadbeef;
782 ok(
io.Information == data_size ||
io.Information == ((data_size + 7) & ~7),
783 "wrong info %Ix / %x\n",
io.Information, data_size );
787 ok( fbdi->
FileName[0] ==
'.',
"incorrect long file name: %s\n",
790 ok(
next->NextEntryOffset == 0,
"wrong offset %lx\n",
next->NextEntryOffset );
791 ok(
next->FileNameLength == 2 *
sizeof(
WCHAR),
"wrong length %lx\n",
next->FileNameLength );
799 io.Status = 0xdeadbeef;
800 io.Information = 0xdeadbeef;
805 ok(
io.Information == data_size,
"wrong info %Ix / %x\n",
io.Information, data_size );
808 "wrong offset %lx\n",
names->NextEntryOffset );
809 ok(
names->FileNameLength ==
sizeof(
WCHAR),
"wrong length %lx\n",
names->FileNameLength );
810 ok(
names->FileName[0] ==
'.',
"incorrect long file name: %s\n",
813 ok(
names->NextEntryOffset == 0,
"wrong offset %lx\n",
names->NextEntryOffset );
814 ok(
names->FileNameLength == 2 *
sizeof(
WCHAR),
"wrong length %lx\n",
names->FileNameLength );
827 io.Status = 0xdeadbeef;
828 data_size =
sizeof(
data);
832 ok(
io.Status == 0xdeadbeef,
"wrong status %lx\n",
io.Status);
834 io.Status = 0xdeadbeef;
840 io.Status = 0xdeadbeef;
848 io.Status = 0xdeadbeef;
852 ok(
io.Status == 0xdeadbeef,
"wrong status %lx\n",
io.Status);
858 io.Status = 0xdeadbeef;
862 ok(
io.Status == 0xdeadbeef,
"wrong status %lx\n",
io.Status);
869 pRtlFreeUnicodeString(&ntdirname);
902 static const char testfile[] =
"TesT";
903 static const WCHAR testfile_w[] = {
'T',
'e',
's',
'T'};
904 static int testfile_len =
sizeof(testfile) - 1;
905 static WCHAR testmask[] = {
't',
'e',
's',
't'};
913 UINT data_size, data_len;
922 strcat(testdir,
"case.tmp");
926 pRtlMultiByteToUnicodeN(testdir_w,
sizeof(testdir_w),
NULL, testdir,
strlen(testdir) + 1);
927 if (!pRtlDosPathNameToNtPathName_U(testdir_w, &ntdirname,
NULL,
NULL))
929 ok(0,
"RtlDosPathNametoNtPathName_U failed\n");
941 skip(
"can't test if we can't open the directory\n");
945 mask.Buffer = testmask;
946 mask.Length =
mask.MaximumLength =
sizeof(testmask);
950 data_len =
io.Information;
956 ok(name_len == testfile_len,
"unexpected filename length %lu\n", name_len);
957 ok(!
memcmp(
name, testfile_w, testfile_len *
sizeof(
WCHAR)),
"unexpected filename %s\n",
964 pRtlFreeUnicodeString(&ntdirname);
1007 if (!pRtlWow64EnableFsRedirection || !pRtlWow64EnableFsRedirectionEx)
1009 skip(
"Wow64 redirection not supported\n" );
1012 status = pRtlWow64EnableFsRedirectionEx(
FALSE, &old );
1015 skip(
"Wow64 redirection not supported\n" );
1018 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1026 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1027 ok( !
cur,
"RtlWow64EnableFsRedirectionEx got %lu\n",
cur );
1031 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1033 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1034 ok(
cur == 1,
"RtlWow64EnableFsRedirectionEx got %lu\n",
cur );
1037 status = pRtlWow64EnableFsRedirection(
TRUE );
1038 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1040 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1041 ok( !
cur,
"RtlWow64EnableFsRedirectionEx got %lu\n",
cur );
1044 status = pRtlWow64EnableFsRedirectionEx( 123, &
cur );
1045 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1046 ok(
cur ==
TRUE,
"RtlWow64EnableFsRedirectionEx got %lu\n",
cur );
1049 status = pRtlWow64EnableFsRedirectionEx( 0xdeadbeef, &
cur );
1050 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1051 ok(
cur == 123,
"RtlWow64EnableFsRedirectionEx got %lu\n",
cur );
1056 status = pRtlWow64EnableFsRedirectionEx(
TRUE, (
void*)1 );
1058 status = pRtlWow64EnableFsRedirectionEx(
TRUE, (
void*)0xDEADBEEF );
1062 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1064 ok( !
status,
"RtlWow64EnableFsRedirectionEx failed status %lx\n",
status );
1065 ok(
cur == 1,
"RtlWow64EnableFsRedirectionEx got %lu\n",
cur );
1114 pRtlWow64EnableFsRedirection(
FALSE );
1120 pRtlWow64EnableFsRedirection(
TRUE );
1128 ok( !redirected == !
tests[
i].redirected,
1129 "%u: was %sredirected for %s + %s\n",
i, redirected ?
"" :
"not ",
1134 pRtlWow64EnableFsRedirectionEx( old, &
cur );
1147 pRtlCreateUnicodeStringFromAsciiz = (
void *)
GetProcAddress(
hntdll,
"RtlCreateUnicodeStringFromAsciiz");
1148 pRtlDosPathNameToNtPathName_U = (
void *)
GetProcAddress(
hntdll,
"RtlDosPathNameToNtPathName_U");
1154 pRtlWow64EnableFsRedirectionEx = (
void *)
GetProcAddress(
hntdll,
"RtlWow64EnableFsRedirectionEx");
static const WCHAR nameW[]
#define FILE_DIRECTORY_FILE
#define FILE_NON_DIRECTORY_FILE
#define FileIdExtdDirectoryInformation
#define FileIdExtdBothDirectoryInformation
#define STATUS_INVALID_HANDLE
#define STATUS_NOT_IMPLEMENTED
#define GetProcAddress(x, y)
#define INVALID_HANDLE_VALUE
#define CreateFileA(a, b, c, d, e, f, g)
static __inline const char * wine_dbgstr_longlong(ULONGLONG ll)
#define GetCurrentProcess()
#define FILE_ATTRIBUTE_NORMAL
BOOL WINAPI DeleteFileA(IN LPCSTR lpFileName)
BOOL WINAPI DeleteFileW(IN LPCWSTR lpFileName)
BOOL WINAPI RemoveDirectoryA(IN LPCSTR lpPathName)
BOOL WINAPI CreateDirectoryW(IN LPCWSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI RemoveDirectoryW(IN LPCWSTR lpPathName)
BOOL WINAPI CreateDirectoryA(IN LPCSTR lpPathName, IN LPSECURITY_ATTRIBUTES lpSecurityAttributes)
BOOL WINAPI DuplicateHandle(IN HANDLE hSourceProcessHandle, IN HANDLE hSourceHandle, IN HANDLE hTargetProcessHandle, OUT LPHANDLE lpTargetHandle, IN DWORD dwDesiredAccess, IN BOOL bInheritHandle, IN DWORD dwOptions)
HMODULE WINAPI DECLSPEC_HOTPATCH GetModuleHandleA(LPCSTR lpModuleName)
DWORD WINAPI GetModuleFileNameA(HINSTANCE hModule, LPSTR lpFilename, DWORD nSize)
UINT WINAPI GetSystemDirectoryW(OUT LPWSTR lpBuffer, IN UINT uSize)
DWORD WINAPI GetTempPathA(IN DWORD nBufferLength, OUT LPSTR lpBuffer)
int WINAPI lstrcmpW(LPCWSTR str1, LPCWSTR str2)
_ACRTIMP wchar_t *__cdecl wcspbrk(const wchar_t *, const wchar_t *)
_ACRTIMP int __cdecl memcmp(const void *, const void *, size_t)
_ACRTIMP size_t __cdecl strlen(const char *)
#define STATUS_ACCESS_VIOLATION
@ FilePositionInformation
@ FileIdGlobalTxDirectoryInformation
@ FileInternalInformation
@ FileDirectoryInformation
@ FileReparsePointInformation
@ FileObjectIdInformation
@ FileIdBothDirectoryInformation
@ FileFullDirectoryInformation
@ FileBothDirectoryInformation
@ FileIdFullDirectoryInformation
#define FILE_SYNCHRONOUS_IO_NONALERT
#define FILE_OPEN_FOR_BACKUP_INTENT
GLuint GLuint GLsizei count
GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * data
GLenum GLuint GLenum GLsizei const GLchar * buf
GLfloat GLfloat GLfloat GLfloat h
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
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 GLint GLint j
LPWSTR WINAPI lstrcatW(LPWSTR lpString1, LPCWSTR lpString2)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl void winetest_pop_context(void)
void __cdecl void __cdecl void __cdecl void __cdecl void __cdecl winetest_push_context(const char *fmt,...) __WINE_PRINTF_ATTR(1
#define memcpy(s1, s2, n)
static struct test_info tests[]
static POBJECT_ATTRIBUTES
static void tear_down_attribute_test(const WCHAR *testdir)
static void test_NtQueryDirectoryFile_case(void)
static DWORD LPDWORD LPCSTR DWORD srclen
static DWORD LPDWORD reslen
static struct testfile_s testfiles[]
static void test_NtQueryDirectoryFile(void)
static void test_redirection(void)
static const WCHAR dotdotW[]
static const WCHAR dummyW[]
static void reset_found_files(void)
static const int max_test_dir_size
static const int test_dir_count
static const WCHAR dotW[]
static void tear_down_case_test(const char *testdir)
static void test_NtQueryDirectoryFile_classes(HANDLE handle, UNICODE_STRING *mask)
static void test_flags_NtQueryDirectoryFile(OBJECT_ATTRIBUTES *attr, const char *testdirA, UNICODE_STRING *mask, BOOLEAN single_entry, BOOLEAN restart_flag, BOOLEAN expect_empty)
static const WCHAR backslashW[]
static void set_up_case_test(const char *testdir)
static NTSTATUS get_file_id(FILE_INTERNAL_INFORMATION *info, const WCHAR *root, const WCHAR *name)
static DWORD LPDWORD LPCSTR src
static void set_up_attribute_test(const WCHAR *testdir)
static FILE_INFORMATION_CLASS
static void test_directory_sort(const WCHAR *testdir)
static PWSTR CURDIR *static LPCWSTR
static void tally_test_file(FILE_BOTH_DIRECTORY_INFORMATION *dir_info)
static HANDLE PIO_APC_ROUTINE PVOID PIO_STATUS_BLOCK io
#define InitializeObjectAttributes(p, n, a, r, s)
#define FILE_LIST_DIRECTORY
#define FILE_ATTRIBUTE_HIDDEN
#define FILE_ATTRIBUTE_SYSTEM
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
#define FILE_ATTRIBUTE_DIRECTORY
#define FILE_GENERIC_READ
#define FILE_ATTRIBUTE_REPARSE_POINT
#define STATUS_INVALID_INFO_CLASS
#define OBJ_CASE_INSENSITIVE
static unsigned __int64 next
#define offsetof(TYPE, MEMBER)
#define STATUS_BUFFER_OVERFLOW
#define STATUS_OBJECT_PATH_NOT_FOUND
#define STATUS_INVALID_PARAMETER
#define STATUS_NO_SUCH_FILE
#define STATUS_INFO_LENGTH_MISMATCH
#define STATUS_OBJECT_NAME_INVALID
#define STATUS_OBJECT_NAME_NOT_FOUND
#define STATUS_NO_MORE_FILES
DWORD WINAPI GetLastError(void)
#define WOW64_TLS_FILESYSREDIR
#define ERROR_PATH_NOT_FOUND
#define DUPLICATE_SAME_ACCESS