1 #include <stdio.h>
2 #include <windows.h>
3 
4 #define PROGRAM       "test2"
5 #define PROGRAM_W    L"test2"
6 
7 #define MAX_NAME_LENGTH 1000
8 
9 #define FWGAS         "fwgas" /* File With Growing ASCII Streams */
10 #define FWGUS        L"fwgus" /* File With Growing Unicode Streams */
11 
12 int
main(int argc,char * argv[])13 main(int argc, char *argv[])
14 {
15   char   cObject[MAX_NAME_LENGTH + 1];
16   char   cName[MAX_NAME_LENGTH + 1];
17   HANDLE h;
18   int    i;
19   int    j;
20   int    n;
21   WCHAR  wcObject[MAX_NAME_LENGTH + 1];
22   WCHAR  wcName[MAX_NAME_LENGTH + 1];
23 
24   /* ASCII */
25 
26   sprintf(cObject, "%s.%s", PROGRAM, FWGAS);
27 
28   n = sprintf(cName, "%s:", cObject);
29 
30   for (i = 0; i < MAX_NAME_LENGTH; i++)
31   {
32     for (j = 0; j < i + 1; j++)
33     {
34       cName[n+j] = 'S';
35     }
36     cName[n+j] = 0;
37 
38     h = CreateFile(
39       cName,
40       GENERIC_WRITE,
41       FILE_SHARE_READ,
42       NULL,
43       CREATE_ALWAYS,
44       FILE_ATTRIBUTE_NORMAL,
45       0
46       );
47     if (h == INVALID_HANDLE_VALUE)
48     {
49       break;
50     }
51     CloseHandle(h);
52   }
53   printf("Object=%s MaxLength=%d LastError=%u\n", cObject, i, GetLastError());
54 
55   /* Unicode */
56 
57   swprintf(wcObject, L"%s.%s", PROGRAM_W, FWGUS);
58 
59   n = swprintf(wcName, L"%s:", wcObject);
60 
61   for (i = 0; i < MAX_NAME_LENGTH; i++)
62   {
63     for (j = 0; j < i + 1; j++)
64     {
65       wcName[n+j] = 0x5353;
66     }
67     wcName[n+j] = 0;
68 
69     h = CreateFileW(
70       wcName,
71       GENERIC_WRITE,
72       FILE_SHARE_READ,
73       NULL,
74       CREATE_ALWAYS,
75       FILE_ATTRIBUTE_NORMAL,
76       0
77       );
78     if (h == INVALID_HANDLE_VALUE)
79     {
80       break;
81     }
82     CloseHandle(h);
83   }
84   wprintf(L"Object=%s MaxLength=%d LastError=%u\n", wcObject, i, GetLastError());
85 
86   return 0;
87 }
88