--- description: "ConfigDriver Function" title: "ConfigDriver Function | Microsoft Docs" ms.custom: "" ms.date: "01/19/2017" ms.prod: sql ms.prod_service: connectivity ms.reviewer: "" ms.technology: connectivity ms.topic: reference apiname: - "ConfigDriver" apilocation: - "sqlsrv32.dll" apitype: "dllExport" f1_keywords: - "ConfigDriver" helpviewer_keywords: - "ConfigDriver [ODBC]" ms.assetid: 9473f48f-bcae-4784-89c1-7839bad4ed13 author: David-Engel ms.author: v-daenge --- # ConfigDriver Function **Conformance** Version Introduced: ODBC 2.5 **Summary** **ConfigDriver** allows a setup program to perform install and uninstall functions without requiring the program to call **ConfigDSN**. This function will perform driver-specific functions such as creating driver-specific system information and performing DSN conversions during installation, as well as cleaning up system information modifications during uninstall. This function is exposed by the driver setup DLL or a separate setup DLL. ## Syntax ```cpp BOOL ConfigDriver( HWND hwndParent, WORD fRequest, LPCSTR lpszDriver, LPCSTR lpszArgs, LPSTR lpszMsg, WORD cbMsgMax, WORD * pcbMsgOut); ``` ## Arguments *hwndParent* [Input] Parent window handle. The function will not display any dialog boxes if the handle is null. *fRequest* [Input] Type of request. The *fRequest* argument must contain one of the following values: ODBC_INSTALL_DRIVER: Install a new driver. ODBC_REMOVE_DRIVER: Remove a driver. This option can also be driver-specific, in which case the *fRequest* argument for the first option must start from ODBC_CONFIG_DRIVER_MAX+1. The *fRequest* argument for any additional option must also start from a value greater than ODBC_CONFIG_DRIVER_MAX+1. *lpszDriver* [Input] The name of the driver as registered in the Odbcinst.ini key of the system information. *lpszArgs* [Input] A null-terminated string containing arguments for a driver-specific *fRequest*. *lpszMsg* [Output] A null-terminated string containing an output message from the driver setup. *cbMsgMax* [Input] Length of *lpszMsg*. *pcbMsgOut* [Output] Total number of bytes available to return in *lpszMsg*. If the number of bytes available to return is greater than or equal to *cbMsgMax*, the output message in *lpszMsg* is truncated to *cbMsgMax* minus the null-termination character. The *pcbMsgOut* argument can be a null pointer. ## Returns The function returns TRUE if it is successful, FALSE if it fails. ## Diagnostics When **ConfigDriver** returns FALSE, an associated *\*pfErrorCode* value is posted to the installer error buffer by a call to **SQLPostInstallerError** and can be obtained by calling **SQLInstallerError**. The following table lists the *\*pfErrorCode* values that can be returned by **SQLInstallerError** and explains each one in the context of this function. |*\*pfErrorCode*|Error|Description| |---------------------|-----------|-----------------| |ODBC_ERROR_INVALID_HWND|Invalid window handle|The *hwndParent* argument was invalid.| |ODBC_ERROR_INVALID_REQUEST_TYPE|Invalid type of request|The *fRequest* argument was not one of the following:

ODBC_INSTALL_DRIVER ODBC_REMOVE_DRIVER

The driver-specific option was less than or equal to ODBC_CONFIG_DRIVER_MAX.| |ODBC_ERROR_INVALID_NAME|Invalid driver or translator name|The *lpszDriver* argument was invalid. It could not be found in the registry.| |ODBC_ERROR_REQUEST_FAILED|*Request* failed|Could not perform the operation requested by the *fRequest* argument.| |ODBC_ERROR_DRIVER_SPECIFIC|Driver- or translator-specific error|A driver-specific error for which there is no defined ODBC installer error. The *SzError* argument in a call to the **SQLPostInstallerError** function should contain the driver-specific error message.| ## Comments ### Driver-Specific Options An application can request driver-specific features exposed by the driver by using the *fRequest* argument. The *fRequest* for the first option will be ODBC_CONFIG_DRIVER_MAX plus 1, and additional options will be incremented by 1 from that value. Any arguments required by the driver for that function should be provided in a null-terminated string passed in the *lpszArgs* argument. Drivers providing such functionality should maintain a table of driver-specific options. The options should be fully documented in driver documentation. Application writers who use driver-specific options should be aware that this will make the application less interoperable. ### Messages A driver setup routine can send a text message to an application as a null-terminated string in the *lpszMsg* buffer. The message will be truncated to *cbMsgMax* minus the null-termination character by the **ConfigDriver** function if it is greater than or equal to *cbMsgMax* characters.