PRB: _getdcwd() Returns the Root Directory Under Win32s
ID: Q98286
|
The information in this article applies to:
-
Microsoft Win32s versions 1.1, 1.2, 1.3, 1.30a, 1.3c
SYMPTOMS
In the following code segment, _getdcwd() always returns the root:
_getdcwd( 3, cBuf, MAX_PATH );
MessageBox( hWnd, cBuf, "Drive 3 <C drive>", MB_OK );
Also, in the following code segment, _chdrive() and _getcwd() always return
the root:
_chdrive( 3 );
_getcwd( cBuf, MAX_PATH );
MessageBox( hWnd, cbuf, "Drive 3 <C drive>", MB_OK );
CAUSE
When a Win32-based application starts on Win32s, the root is set as the
current directory for any drive except the default drive.
RESOLUTION
The following code fragments work as expected under Win32s:
_getdcwd( 0, cBuf, MAX_PATH );
MessageBox( hWnd, cBuf, "Drive 0 <default drive>", MB_OK );
-or-
GetCurrentDirectory( sizeof (cBuf), cBuf );
MessageBox( hWnd, cBuf, "SCD", MB_OK );
MORE INFORMATION
Windows NT uses the current directory of a process as the initial current
directory for the current drive of a child process. So for example, if the
current directory in the command prompt (CMD.EXE) is C:\WINNT then the
current directory of the child process will be C:\WINNT.
However, on Win32s, the current directory for any drive except the default
drive is set to the root and not the current directory of the parent
process. A Win32-based application running on Win32s calling _chdrive() or
SetCurrentDirectory() to change the drive GetCurrentDirectory or _getcwd()
will then return the root. The _getdcwd() function is a composite of
changing drives, getting the current directory of that drive, and change
back to the original drive. Therefore, _getdcwd() will always return the
root on Win32s.
Running the following sample to display the current directory of drives C
and D under Windows NT properly displays the full path of the drive.
Running the sample under Win32s always displays the root ("C:\", "D:\").
Sample Code
#include <direct.h>
...
status = _getdcwd(3, szPath, MAX_PATH); // drive 3 == C:
if( status != NULL )
{
MessageBox( hWnd, szPath, "Current working directory on C:", MB_OK );
}
status = _getdcwd( 4, szPath, MAX_PATH ); // drive 4 == D:
if( status != NULL )
{
MessageBox( hWnd, szPath, "Current working directory on D:", MB_OK );
}
...
Additional query words:
1.10 1.20
Keywords : kbWin32s
Version : WINDOWS:1.1,1.2,1.3,1.30a,1.3c
Platform : WINDOWS
Issue type :