LOGGING_PARAMETERS Structure

Defines the information for FTP activity, such as user name, session ID, IP addresses for the client and server. Developers can select which logging information to use when they implement the IFtpLogProvider interface.

Syntax

struct LOGGING_PARAMETERS  
{  
   LPWSTR pszSessionId;  
   LPWSTR pszSiteName;  
   LPWSTR pszUserName;  
   LPWSTR pszHostName;  
   LPWSTR pszRemoteIpAddress;  
   unsigned long dwRemoteIpPort;  
   LPWSTR pszLocalIpAddress;  
   unsigned long dwLocalIpPort;  
   unsigned __int64 BytesSent;  
   unsigned __int64 BytesReceived;  
   LPWSTR pszCommand;  
   LPWSTR pszCommandParameters;  
   LPWSTR pszFullPath;  
   unsigned long dwElapsedMilliseconds;  
   unsigned long FtpStatus;  
   unsigned long FtpSubStatus;  
   HRESULT hrStatus;  
   LPWSTR pszInformation;  
};  

Members

Member Name Definition
BytesReceived The number of bytes received from the client.
BytesSent The number of bytes sent to the client.
pszCommand The FTP command.
pszCommandParameters The parameters related to the FTP command.
dwElapsedMilliseconds The number of milliseconds it took for the operation to complete.
FtpStatus The FTP status of the current command.
FtpSubStatus The FTP substatus of the current command.
pszFullPath The full path of the operation for the FTP command.
pszHostName The FTP virtual host name.
hrStatus The Windows error code for the operation.
pszInformation Additional troubleshooting information for the command.
pszLocalIpAddress The local IP address to which the client is connected.
dwLocalIpPort The TCP/IP port of the server.
pszRemoteIpAddress The IP address of the client.
dwRemoteIpPort The TCP/IP port of the client.
pszSessionId The session ID.
pszSiteName The name of the server instance that is being logged.
pszUserName The name of the user.

Example

The following code example illustrates how to use the IFtpLogProvider interface to create a custom logging module for the FTP service.

public:  
   STDMETHOD(Log)(LOGGING_PARAMETERS * pLoggingParameters)  
   {  
      // Note: You would add your own custom logic here.  
      HRESULT hr = S_OK;  
      DWORD dwResult;  
      HANDLE hFile;  
      char szLogEntry[256]="";  
      const DWORD FILE_WRITE_TO_END_OF_FILE = 0xffffffff;  

      OVERLAPPED Overlapped = { 0 };  
      Overlapped.Offset = FILE_WRITE_TO_END_OF_FILE;  
      Overlapped.OffsetHigh = -1;  

      // Retrieve the current date and time for the log entry.  
      SYSTEMTIME CurrentTime;  
      GetSystemTime(&CurrentTime);  

      // Open the log file for output.  
      hFile = CreateFile(  
         L"\\\\?\\C:\\logfiles\\myftpsite\\myftplog.log",  
         GENERIC_WRITE,  
         FILE_SHARE_READ,  
         NULL,  
         OPEN_ALWAYS,  
         FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH,  
         NULL);  

      // Return an error if a failure occurs.  
      if (hFile == INVALID_HANDLE_VALUE)  
      {  
         hr = HRESULT_FROM_WIN32(GetLastError());  
         goto EXIT;  
      }  

      // Format the log entry.  
      hr = StringCchPrintfA(  
         szLogEntry,256,  
         "%04d-%02d-%02d\t%02d:%02d:%02d\t%S\t%d\r\n",  
         CurrentTime.wYear,CurrentTime.wMonth,CurrentTime.wDay,  
         CurrentTime.wHour,CurrentTime.wMinute,CurrentTime.wSecond,  
         pLoggingParameters->pszCommand,  
         pLoggingParameters->FtpStatus);  

      // Test for error.  
      if (FAILED(hr))  
      {  
         // Return the error if a failure occurs.  
         hr = HRESULT_FROM_WIN32(GetLastError());  
         goto EXIT;  
      }  

      // Write the log entry to the log file.  
      if(!WriteFile(hFile, szLogEntry,  
         strlen(szLogEntry), &dwResult, &Overlapped))        
      {  
         // Return an error if a failure occurs.  
         hr = HRESULT_FROM_WIN32(GetLastError());  
         goto EXIT;  
      }  

EXIT:  
      // Close the log file if it is open.  
      if(CloseHandle(hFile)==0)  
      {  
         // Return an error if a failure occurs.  
         hr = HRESULT_FROM_WIN32(GetLastError());  
      }  
      return hr;  
   }  

Requirements

Type Description
Client - IIS 7.5 on Windows 7
- IIS 8.0 on Windows 8
- IIS 10.0 on Windows 10
Server - IIS 7.5 on Windows Server 2008 R2
- IIS 8.0 on Windows Server 2012
- IIS 8.5 on Windows Server 2012 R2
- IIS 10.0 on Windows Server 2016
Product - IIS 7.0, IIS 7.5, IIS 8.0, IIS 8.5, IIS 10.0
Reference ftpext.tlb

See Also

IFtpLogProvider Interface