Note that there are some explanatory texts on larger screens.

plurals
  1. POAttempt to create a named pipe failing with ERROR_IS_SUBSTED
    primarykey
    data
    text
    <p>I picked up this code from a msdn blog :</p> <pre><code>#include &lt;windows.h&gt; #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;tchar.h&gt; #define BUFSIZE 512 int _tmain(int argc, TCHAR *argv[]) { HANDLE hPipe; LPTSTR lpvMessage=TEXT("Default message from client."); TCHAR chBuf[BUFSIZE]; BOOL fSuccess = FALSE; DWORD cbRead, cbToWrite, cbWritten, dwMode; LPTSTR lpszPipename = TEXT("H:\\Users\\uname\\Documents\\fff.txt"); if( argc &gt; 1 ) lpvMessage = argv[1]; // Try to open a named pipe; wait for it, if necessary. while (1) { hPipe = CreateFile( lpszPipename, // pipe name GENERIC_READ | // read and write access GENERIC_WRITE, 0, // no sharing NULL, // default security attributes OPEN_ALWAYS, // opens existing pipe 0, // default attributes NULL); // no template file // Break if the pipe handle is valid. if (hPipe != INVALID_HANDLE_VALUE) break; // Exit if an error other than ERROR_PIPE_BUSY occurs. if (GetLastError() != ERROR_PIPE_BUSY) { _tprintf( TEXT("Could not open pipe. GLE=%d\n"), GetLastError() ); return -1; } // All pipe instances are busy, so wait for 20 seconds. if ( ! WaitNamedPipe(lpszPipename, 20000)) { printf("Could not open pipe: 20 second wait timed out."); return -1; } } // The pipe connected; change to message-read mode. dwMode = PIPE_READMODE_MESSAGE; fSuccess = SetNamedPipeHandleState( hPipe, // pipe handle &amp;dwMode, // new pipe mode NULL, // don't set maximum bytes NULL); // don't set maximum time if ( ! fSuccess) { _tprintf( TEXT("SetNamedPipeHandleState failed. GLE=%d\n"), GetLastError() ); return -1; } // Send a message to the pipe server. cbToWrite = (lstrlen(lpvMessage)+1)*sizeof(TCHAR); _tprintf( TEXT("Sending %d byte message: \"%s\"\n"), cbToWrite, lpvMessage); fSuccess = WriteFile( hPipe, // pipe handle lpvMessage, // message cbToWrite, // message length &amp;cbWritten, // bytes written NULL); // not overlapped if ( ! fSuccess) { _tprintf( TEXT("WriteFile to pipe failed. GLE=%d\n"), GetLastError() ); return -1; } printf("\nMessage sent to server, receiving reply as follows:\n"); do { // Read from the pipe. fSuccess = ReadFile( hPipe, // pipe handle chBuf, // buffer to receive reply BUFSIZE*sizeof(TCHAR), // size of buffer &amp;cbRead, // number of bytes read NULL); // not overlapped if ( ! fSuccess &amp;&amp; GetLastError() != ERROR_MORE_DATA ) break; _tprintf( TEXT("\"%s\"\n"), chBuf ); } while ( ! fSuccess); // repeat loop if ERROR_MORE_DATA if ( ! fSuccess) { _tprintf( TEXT("ReadFile from pipe failed. GLE=%d\n"), GetLastError() ); return -1; } printf("\n&lt;End of message, press ENTER to terminate connection and exit&gt;"); _getch(); CloseHandle(hPipe); return 0; } </code></pre> <p>I went through the documentation of most of the function used in the code.I didn't find any operation that may cause trouble. Obviously opening a file inside a loop is something which shouldn't be there. But I when compile the code ( VS 2010 Ultimate) and run it, it fails with an<br> <strong>ERROR_IS_SUBSTED</strong> error. The point where GetLastError returns this error is here :</p> <pre><code>while (1) { hPipe = CreateFile( lpszPipename, // pipe name GENERIC_READ | // read and write access GENERIC_WRITE, 0, // no sharing NULL, // default security attributes OPEN_ALWAYS, // opens existing pipe 0, // default attributes NULL); // no template file </code></pre> <p>I am still new to windows programming and these error codes are confusing me. The <a href="http://msdn.microsoft.com/en-us/library/cc231199%28v=prot.10%29.aspx" rel="nofollow">msdn</a> documentation for this error says that <code>An attempt was made to use a JOIN or SUBST command on a drive that has already been substituted.</code> So can someone from the community please</p> <p>1.Clarify what is ERROR_IS_SUBSTD? The description given by <a href="http://msdn.microsoft.com/en-us/library/cc231199%28v=prot.10%29.aspx" rel="nofollow">msdn</a> is too cryptic for me. :(</p> <p>2.Why I am getting this error?</p> <p>3.(somewhat off topic ) I am missing strace utility that had been my savior throughout my programming life in tracking/rectifying such errors. Do we have something similar in windows?</p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload