Improved debug logging

This commit is contained in:
Tal Aloni 2016-12-27 02:37:46 +02:00
parent d1b4bf6273
commit 0eecde7152
6 changed files with 39 additions and 4 deletions

View file

@ -31,11 +31,13 @@ namespace SMBLibrary.Server
} }
catch (IOException) catch (IOException)
{ {
System.Diagnostics.Debug.Print("[{0}] CreateDirectory: Cannot create '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), request.DirectoryName);
header.Status = NTStatus.STATUS_OBJECT_NAME_INVALID; header.Status = NTStatus.STATUS_OBJECT_NAME_INVALID;
return new ErrorResponse(CommandName.SMB_COM_CREATE_DIRECTORY); return new ErrorResponse(CommandName.SMB_COM_CREATE_DIRECTORY);
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
System.Diagnostics.Debug.Print("[{0}] CreateDirectory: Cannot create '{1}', Access Denied", DateTime.Now.ToString("HH:mm:ss:ffff"), request.DirectoryName);
header.Status = NTStatus.STATUS_ACCESS_DENIED; header.Status = NTStatus.STATUS_ACCESS_DENIED;
return new ErrorResponse(CommandName.SMB_COM_CREATE_DIRECTORY); return new ErrorResponse(CommandName.SMB_COM_CREATE_DIRECTORY);
} }
@ -73,11 +75,13 @@ namespace SMBLibrary.Server
} }
catch (IOException) catch (IOException)
{ {
System.Diagnostics.Debug.Print("[{0}] DeleteDirectory: Cannot delete '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), request.DirectoryName);
header.Status = NTStatus.STATUS_CANNOT_DELETE; header.Status = NTStatus.STATUS_CANNOT_DELETE;
return new ErrorResponse(CommandName.SMB_COM_DELETE_DIRECTORY); return new ErrorResponse(CommandName.SMB_COM_DELETE_DIRECTORY);
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
System.Diagnostics.Debug.Print("[{0}] DeleteDirectory: Cannot delete '{1}', Access Denied", DateTime.Now.ToString("HH:mm:ss:ffff"), request.DirectoryName);
header.Status = NTStatus.STATUS_ACCESS_DENIED; header.Status = NTStatus.STATUS_ACCESS_DENIED;
return new ErrorResponse(CommandName.SMB_COM_DELETE_DIRECTORY); return new ErrorResponse(CommandName.SMB_COM_DELETE_DIRECTORY);
} }
@ -127,11 +131,13 @@ namespace SMBLibrary.Server
} }
catch (IOException) catch (IOException)
{ {
System.Diagnostics.Debug.Print("[{0}] Delete: Cannot delete '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), request.FileName);
header.Status = NTStatus.STATUS_CANNOT_DELETE; header.Status = NTStatus.STATUS_CANNOT_DELETE;
return new ErrorResponse(CommandName.SMB_COM_DELETE); return new ErrorResponse(CommandName.SMB_COM_DELETE);
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
System.Diagnostics.Debug.Print("[{0}] DeleteDirectory: Cannot delete '{1}', Access Denied", DateTime.Now.ToString("HH:mm:ss:ffff"), request.FileName);
header.Status = NTStatus.STATUS_ACCESS_DENIED; header.Status = NTStatus.STATUS_ACCESS_DENIED;
return new ErrorResponse(CommandName.SMB_COM_DELETE); return new ErrorResponse(CommandName.SMB_COM_DELETE);
} }
@ -171,11 +177,13 @@ namespace SMBLibrary.Server
} }
catch (IOException) catch (IOException)
{ {
System.Diagnostics.Debug.Print("[{0}] Rename: Sharing violation renaming '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), request.OldFileName);
header.Status = NTStatus.STATUS_SHARING_VIOLATION; header.Status = NTStatus.STATUS_SHARING_VIOLATION;
return new ErrorResponse(CommandName.SMB_COM_RENAME); return new ErrorResponse(CommandName.SMB_COM_RENAME);
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
System.Diagnostics.Debug.Print("[{0}] Rename: Cannot rename '{1}', Access Denied", DateTime.Now.ToString("HH:mm:ss:ffff"), request.OldFileName);
header.Status = NTStatus.STATUS_ACCESS_DENIED; header.Status = NTStatus.STATUS_ACCESS_DENIED;
return new ErrorResponse(CommandName.SMB_COM_RENAME); return new ErrorResponse(CommandName.SMB_COM_RENAME);
} }

View file

@ -92,6 +92,7 @@ namespace SMBLibrary.Server
if (entry != null) if (entry != null)
{ {
// File already exists, fail the request // File already exists, fail the request
System.Diagnostics.Debug.Print("[{0}] NTCreate: File '{1}' already exist", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
header.Status = NTStatus.STATUS_OBJECT_NAME_COLLISION; header.Status = NTStatus.STATUS_OBJECT_NAME_COLLISION;
return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX); return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX);
} }
@ -106,10 +107,12 @@ namespace SMBLibrary.Server
{ {
if (forceDirectory) if (forceDirectory)
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Creating directory '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
entry = fileSystem.CreateDirectory(path); entry = fileSystem.CreateDirectory(path);
} }
else else
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Creating file '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
entry = fileSystem.CreateFile(path); entry = fileSystem.CreateFile(path);
} }
} }
@ -118,17 +121,20 @@ namespace SMBLibrary.Server
ushort errorCode = IOExceptionHelper.GetWin32ErrorCode(ex); ushort errorCode = IOExceptionHelper.GetWin32ErrorCode(ex);
if (errorCode == (ushort)Win32Error.ERROR_SHARING_VIOLATION) if (errorCode == (ushort)Win32Error.ERROR_SHARING_VIOLATION)
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Sharing violation creating '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
header.Status = NTStatus.STATUS_SHARING_VIOLATION; header.Status = NTStatus.STATUS_SHARING_VIOLATION;
return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX); return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX);
} }
else else
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Error creating '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
header.Status = NTStatus.STATUS_DATA_ERROR; header.Status = NTStatus.STATUS_DATA_ERROR;
return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX); return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX);
} }
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Error creating '{1}', Access Denied", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
header.Status = NTStatus.STATUS_ACCESS_DENIED; header.Status = NTStatus.STATUS_ACCESS_DENIED;
return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX); return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX);
} }
@ -157,10 +163,12 @@ namespace SMBLibrary.Server
{ {
if (forceDirectory) if (forceDirectory)
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Creating directory '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
entry = fileSystem.CreateDirectory(path); entry = fileSystem.CreateDirectory(path);
} }
else else
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Creating file '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
entry = fileSystem.CreateFile(path); entry = fileSystem.CreateFile(path);
} }
} }
@ -246,7 +254,7 @@ namespace SMBLibrary.Server
else else
{ {
bool buffered = (request.CreateOptions & CreateOptions.FILE_SEQUENTIAL_ONLY) > 0 && (request.CreateOptions & CreateOptions.FILE_NO_INTERMEDIATE_BUFFERING) == 0; bool buffered = (request.CreateOptions & CreateOptions.FILE_SEQUENTIAL_ONLY) > 0 && (request.CreateOptions & CreateOptions.FILE_NO_INTERMEDIATE_BUFFERING) == 0;
System.Diagnostics.Debug.Print("[{0}] Opening {1}, Access={2}, Share={3}, Buffered={4}", DateTime.Now.ToString("HH:mm:ss:ffff"), path, fileAccess, fileShare, buffered); System.Diagnostics.Debug.Print("[{0}] NTCreate: Opening '{1}', Access={2}, Share={3}, Buffered={4}", DateTime.Now.ToString("HH:mm:ss:ffff"), path, fileAccess, fileShare, buffered);
try try
{ {
stream = fileSystem.OpenFile(path, FileMode.Open, fileAccess, fileShare); stream = fileSystem.OpenFile(path, FileMode.Open, fileAccess, fileShare);
@ -256,6 +264,7 @@ namespace SMBLibrary.Server
ushort errorCode = IOExceptionHelper.GetWin32ErrorCode(ex); ushort errorCode = IOExceptionHelper.GetWin32ErrorCode(ex);
if (errorCode == (ushort)Win32Error.ERROR_SHARING_VIOLATION) if (errorCode == (ushort)Win32Error.ERROR_SHARING_VIOLATION)
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Sharing violation opening '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
header.Status = NTStatus.STATUS_SHARING_VIOLATION; header.Status = NTStatus.STATUS_SHARING_VIOLATION;
return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX); return new ErrorResponse(CommandName.SMB_COM_NT_CREATE_ANDX);
} }

View file

@ -104,10 +104,12 @@ namespace SMBLibrary.Server
if ((request.FileAttrs & SMB1.FileAttributes.Directory) > 0) if ((request.FileAttrs & SMB1.FileAttributes.Directory) > 0)
{ {
System.Diagnostics.Debug.Print("[{0}] OpenAndX: Creating directory '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
entry = fileSystem.CreateDirectory(path); entry = fileSystem.CreateDirectory(path);
} }
else else
{ {
System.Diagnostics.Debug.Print("[{0}] OpenAndX: Creating file '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
entry = fileSystem.CreateFile(path); entry = fileSystem.CreateFile(path);
} }
openResult = OpenResult.NotExistedAndWasCreated; openResult = OpenResult.NotExistedAndWasCreated;
@ -119,7 +121,7 @@ namespace SMBLibrary.Server
if (!entry.IsDirectory) if (!entry.IsDirectory)
{ {
bool buffered = (request.AccessMode.CachedMode == CachedMode.CachingAllowed && request.AccessMode.WriteThroughMode == WriteThroughMode.Disabled); bool buffered = (request.AccessMode.CachedMode == CachedMode.CachingAllowed && request.AccessMode.WriteThroughMode == WriteThroughMode.Disabled);
System.Diagnostics.Debug.Print("[{0}] Opening {1}, Access={2}, Share={3}, Buffered={4}", DateTime.Now.ToString("HH:mm:ss:ffff"), path, fileAccess, fileShare, buffered); System.Diagnostics.Debug.Print("[{0}] OpenAndX: Opening '{1}', Access={2}, Share={3}, Buffered={4}", DateTime.Now.ToString("HH:mm:ss:ffff"), path, fileAccess, fileShare, buffered);
stream = fileSystem.OpenFile(path, FileMode.Open, fileAccess, fileShare); stream = fileSystem.OpenFile(path, FileMode.Open, fileAccess, fileShare);
if (buffered) if (buffered)
{ {

View file

@ -103,6 +103,7 @@ namespace SMBLibrary.Server
if (errorCode == (ushort)Win32Error.ERROR_SHARING_VIOLATION) if (errorCode == (ushort)Win32Error.ERROR_SHARING_VIOLATION)
{ {
// Returning STATUS_SHARING_VIOLATION is undocumented but apparently valid // Returning STATUS_SHARING_VIOLATION is undocumented but apparently valid
System.Diagnostics.Debug.Print("[{0}] ReadAndX: Cannot read '{1}'. Sharing Violation.", DateTime.Now.ToString("HH:mm:ss:ffff"), openedFilePath);
header.Status = NTStatus.STATUS_SHARING_VIOLATION; header.Status = NTStatus.STATUS_SHARING_VIOLATION;
return null; return null;
} }
@ -119,6 +120,7 @@ namespace SMBLibrary.Server
} }
catch (UnauthorizedAccessException) catch (UnauthorizedAccessException)
{ {
System.Diagnostics.Debug.Print("[{0}] ReadAndX: Cannot read '{1}', Access Denied.", DateTime.Now.ToString("HH:mm:ss:ffff"), openedFilePath);
header.Status = NTStatus.STATUS_ACCESS_DENIED; header.Status = NTStatus.STATUS_ACCESS_DENIED;
return null; return null;
} }

View file

@ -240,6 +240,7 @@ namespace SMBLibrary.Server
{ {
// Windows Server 2003 will return STATUS_OBJECT_NAME_NOT_FOUND // Windows Server 2003 will return STATUS_OBJECT_NAME_NOT_FOUND
// Returning STATUS_NO_SUCH_FILE caused an issue when executing ImageX.exe from WinPE 3.0 (32-bit) // Returning STATUS_NO_SUCH_FILE caused an issue when executing ImageX.exe from WinPE 3.0 (32-bit)
System.Diagnostics.Debug.Print("[{0}] Transaction2QueryPathInformation: File not found, Path: '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), path);
header.Status = NTStatus.STATUS_OBJECT_NAME_NOT_FOUND; header.Status = NTStatus.STATUS_OBJECT_NAME_NOT_FOUND;
return null; return null;
} }
@ -340,6 +341,7 @@ namespace SMBLibrary.Server
if (errorCode == (ushort)Win32Error.ERROR_SHARING_VIOLATION) if (errorCode == (ushort)Win32Error.ERROR_SHARING_VIOLATION)
{ {
// Returning STATUS_SHARING_VIOLATION is undocumented but apparently valid // Returning STATUS_SHARING_VIOLATION is undocumented but apparently valid
System.Diagnostics.Debug.Print("[{0}] Transaction2SetFileInformation: Sharing violation setting file attributes, Path: '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), openedFilePath);
header.Status = NTStatus.STATUS_SHARING_VIOLATION; header.Status = NTStatus.STATUS_SHARING_VIOLATION;
return null; return null;
} }
@ -374,6 +376,7 @@ namespace SMBLibrary.Server
} }
catch (IOException) catch (IOException)
{ {
System.Diagnostics.Debug.Print("[{0}] NTCreate: Error creating '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), openedFilePath);
header.Status = NTStatus.STATUS_FILE_LOCK_CONFLICT; header.Status = NTStatus.STATUS_FILE_LOCK_CONFLICT;
return null; return null;
} }
@ -396,8 +399,13 @@ namespace SMBLibrary.Server
stream.SetLength((long)allocationSize); stream.SetLength((long)allocationSize);
stream.Close(); stream.Close();
} }
catch catch (IOException)
{ {
System.Diagnostics.Debug.Print("[{0}] SMB_SET_FILE_ALLOCATION_INFO: Cannot set allocation for '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), openedFilePath);
}
catch (UnauthorizedAccessException)
{
System.Diagnostics.Debug.Print("[{0}] SMB_SET_FILE_ALLOCATION_INFO: Cannot set allocation for '{1}'. Access Denied", DateTime.Now.ToString("HH:mm:ss:ffff"), openedFilePath);
} }
return response; return response;
} }
@ -410,8 +418,13 @@ namespace SMBLibrary.Server
stream.SetLength((long)endOfFile); stream.SetLength((long)endOfFile);
stream.Close(); stream.Close();
} }
catch catch (IOException)
{ {
System.Diagnostics.Debug.Print("[{0}] SMB_SET_FILE_END_OF_FILE_INFO: Cannot set end of file for '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), openedFilePath);
}
catch (UnauthorizedAccessException)
{
System.Diagnostics.Debug.Print("[{0}] SMB_SET_FILE_END_OF_FILE_INFO: Cannot set end of file for '{1}'. Access Denied", DateTime.Now.ToString("HH:mm:ss:ffff"), openedFilePath);
} }
return response; return response;
} }

View file

@ -230,6 +230,7 @@ namespace SMBLibrary.Server
Stream stream = m_openedFiles[fileID].Stream; Stream stream = m_openedFiles[fileID].Stream;
if (stream != null) if (stream != null)
{ {
System.Diagnostics.Debug.Print("[{0}] Closing file '{1}'", DateTime.Now.ToString("HH:mm:ss:ffff"), m_openedFiles[fileID].Path);
stream.Close(); stream.Close();
} }
m_openedFiles.Remove(fileID); m_openedFiles.Remove(fileID);