Microsoft Transaction Server Release Notes

This document contains late-breaking information for Microsoft® Transaction Server (MTS). For further information, see the following topics:

Setting Up Microsoft Transaction Server
What's New in MTS 2.0?
MTS Product Documentation


Late-Breaking Information on MTS

Late-Breaking Information and Known Limitations for the MTS 2.0 Beta 3 Release

Using MTS with Oracle

The Microsoft Transaction Server 2.0 release permits transactional MTS components to access Oracle databases through ODBC. MTS works with Oracle7 Workgroup Server for Windows NT, Oracle 7 Enterprise Server for Windows NT, Oracle 7 Enterprise Servers on Unix, and Oracle Parallel Server on Unix.

Your MTS component may access an Oracle 8 database provided your component uses the Oracle7 client software. MTS does not support Oracle 8 client software.

MTS support for Oracle databases has been tested, but significantly more testing is planned before the product is released. During the Beta test period, you should only use this feature in an application development and test environment with test databases.

Required Software

If you wish to access an Oracle database on either NT or UNIX under MTS transaction control then you must install the following software.

Important Earlier versions of the software may not work properly. Please ensure you install the correct versions of the software. Failing to do this is by far the most common source of problems when trying to use MTS with Oracle.

Component Version
Oracle for Windows NT 7.3.3 with Patch 2 or later 1
Oracle SQL*Net 2.3.3 2
Oracle OCIW32.DLL 1, 0, 0, 5 3
Oracle for UNIX 7.3.3 with patches 4
Microsoft Transaction Server 2.0 Beta 3 with patches5
Microsoft ODBC Driver for Oracle (MSORCL32.DLL) Beta 3 6
ADO 1.5 7

Note 1: Oracle for Windows NT

You must install either the Oracle 7.3.3 Workgroup Server release for Windows NT or the Oracle 7.3.3 Enterprise Server release for Windows NT. The Oracle 7.3.2 and earlier releases of Oracle for Windows NT are not supported and will not work in conjunction with MTS transactions.

You must install Oracle 7.3.3 patch release 2 or later. Oracle patch release 2 contains fixes that are required to make Oracle XA transaction support work properly on Windows NT. The Oracle 7.3.3 release will not work with MTS unless Oracle 7.3.3 patch release 2 or later is installed.

Note If you encounter problems setting up Oracle patch release 2 on Windows 95, contact Oracle for support.

To obtain Oracle 7.3.3 patch releases from the Oracle customer support organization you must submit a problem report to the Oracle Customer Support Organization. These patch releases were not available from the Oracle public web site at the time this note was written.

Note 2: Oracle SQL*Net

You must install the Oracle SQL*Net 2.3.3 release for Windows NT. You can obtain this release from Oracle. Earlier versions of Oracle SQL*Net may not work.

Note 3: Oracle OCIW32.DLL

You must ensure that the correct version of the Oracle OCIW32.DLL is installed. It is extremely common that the wrong version of this DLL is installed. Be very careful to check the version installed on your system.

The correct version of the Oracle OCIW32.DLL is:

Version 1, 0, 0, 5
Tuesday, March 18, 1997 2:47:52 PM
Size 18KB. 

The improper version of the Oracle OCIW32.DLL is:

Version 7.x
Thursday, February 01, 1996 12:50:06 AM
Size 36 KB

You can obtain the correct version of this DLL from the Oracle 7.3.3 installation CD from the \WIN32\V7\RSF73 directory.

Note 4: Oracle for UNIX

If you wish to access an Oracle database on UNIX under MTS transaction control, then you must install at least the Oracle 7.3.3 release for that UNIX platform. It may also be necessary to install an Oracle 7.3.3 patch release for Oracle on UNIX.

You must check with Oracle Customer Support to determine if an Oracle 7.3.3 patch release is required for your Unix platform. Explain that you are going to access your Oracle database on UNIX using the new XA transaction support that is now included in the Oracle 7.3.3 release on Windows NT.

The following patch releases are known to work:

Platform Oracle Patch
HP 9000 7.3.3.3
IBM AIX 7.3.3.2
Sun Solaris 7.3.3.2

Note 5: Microsoft Transaction Server 2.0 Beta Release 3

You must install Microsoft Transaction Server 2.0 Beta release 3 if you wish to access an Oracle database under MTS transaction control. MTS 2.0 and IIS 4.0 Beta releases can be obtained from http://www.microsoft.com/iis/beta.

You must install the MTS 2.0 Beta release 3 patches. You can obtain these patches from http://www.microsoft.com/support/transaction. These patches are required; they correct problems that are known to affect Oracle database support.

Note 6: Microsoft ODBC Driver for Oracle

The Microsoft ODBC 2.0 Driver for Oracle (MSORCL32.DLL) is required. The MTS 2.0 / IIS 4.0 setup program automatically installs this DLL.

If you wish to access an Oracle database, we strongly suggest that you use the new Microsoft ODBC Driver for Oracle 2.0 even if you do not require transaction support. This new driver offers better performance than the ODBC 1.0 driver it replaces. The 1.0 driver serialized all activity at the driver level. All requests were single threaded through the driver. The 2.0 driver serializes all activities at the connection level. This allows different database connections to be used in parallel.

Note 7: ADO

If your applications use ADO you must install the ADO 1.5 release. Earlier ADO releases will not work with the new ODBC 3.5 Driver Manager. The ADO 1.5 beta release is included in the IIS 4.0 / MTS 2.0 beta release that you can obtain from http://www.microsoft.com/iis/beta.

Installation Directions

  1. Install the Oracle 7.3.3 Release and Patches on Windows NT.

    Install the Oracle 7.3.3 release on Windows NT.

    Install the Oracle 7.3.3 patch 2 or later on Windows NT. The resulting Oracle version will be Oracle 7.3.3.2 or later depending upon which Oracle patch you install.

    Ensure that the correct version of the Oracle OCIW32.DLL is installed as described in "Required Software".

  2. Install the Oracle 7.3.3 Release and Patches on UNIX.

    If your Oracle database is located on a UNIX system, install the Oracle 7.3.3 release on that system.

    Install any required Oracle 7.3.3 patch releases that are required for your UNIX system.

  3. Install the Microsoft Transaction Server 2.0 Beta Release 3.

    Install the Microsoft Transaction Server 2.0 beta release 3 from the http://www.microsoft.com/iis/beta web site. This will automatically install:

    • Microsoft Transaction Server 2.0 beta release 3 including the Microsoft OCI Interface

    • IIS 4.0

    • Microsoft ODBC 3.5

    • Microsoft ODBC 2.0 Driver for Oracle

    • ADO 1.5

    Install the Microsoft Transaction Server 2.0 Beta release 3 patches obtained from http://www.microsoft.com/support/transaction.

  4. Delete the DTCXATM.LOG

    If a DTCXATM.LOG file is present on disk, it must be deleted. Use the Explorer to determine if this file is present and delete it if it is found. The Microsoft Distributed Transaction Coordinator service must be stopped before the DTCXATM.LOG file can be deleted.

  5. Enable Oracle XA Support

To enable an Oracle database to work with MTS transactions, you must do the following:

  1. The System administrator must create views known as V$XATRANS$. To do this, the administrator must run an Oracle-supplied script, named "xaview.sql". This file can usually be found in C:\ORANT\RDBMS73\ADMIN.

  2. The system administrator must grant SELECT access to the public on these views.
    Grant Select on V$XATRANS$ to public.
  3. In the Oracle Instance Manager, click Advanced Mode on the View menu and select Initialization Parameters in the left pane.

  4. In the right pane, select Advanced Tuning and increase the "distributed_transactions" parameter to allow for more concurrent MTS transactions to update the database at a single time.

See your Oracle Server documentation for more information about configuring Oracle support for XA transactions.

Validating Your Installation and Configuration Using the Test Program

After installation and configuration is complete you should validate your Oracle installation and configuration using the Oracle test program supplied with MTS. The Oracle test program uses Oracle's OCI XA interfaces in much the same way that MTS uses them. The Oracle test program determines whether you can connect to an Oracle database using Oracle's XA facility. If this test program does not work, then MTS will not work with Oracle.

Run the Oracle test program as follows:

  1. Verify that you have installed all of the correct versions of the software as described in "Required Software."

  2. Create an ODBC DSN that refers to your Oracle database. Ensure that your DSN uses the new Microsoft Oracle ODBC 2.0 driver.

  3. Ensure that you have enabled Oracle XA support as described in ôInstallation Instructions".

  4. Delete all existing Oracle trace files from the machine containing the Microsoft Transaction Server components that access the Oracle database. The easiest way to do this is to use the Windows Explorer to locate and delete all *.TRC files.

  5. Delete the DTCXATM.LOG file, if any, from the machine containing the Microsoft Transaction Server components that access the Oracle database. The easiest way to do this is to use the Windows Explorer to locate and delete the DTCXATM.LOG file, if it exists.

  6. From the MS-DOS Command Prompt run the Oracle test program TestOracleXaConfig.exe and supply your Oracle server user ID, password, and server name. For example:
    c:>TestOracleXaConfig.exe  -U<user id> -P<Password>
    -S<Server name as in the TNS file>.

    If you run the test program with no parameters, it will display help information that describes the parameters that it requires. The test program will display information about each Oracle operation that it performs and whether each operation was successful.

  7. If the Oracle test program is able to connect to you Oracle database server without error, then it is very likely that MTS will work with Oracle also.

  8. If the Oracle test program reports any errors, do the following:
    • Document the exact error message that the Oracle test program displays.

    • Examine the Oracle trace file produced when running the Oracle test program. The Oracle trace information is located in the *.TRC file. The Oracle trace file contains extended error information that is extremely helpful in diagnosing problems.

    • Examine the Windows NT event log to determine whether Microsoft Distributed Transaction Coordinator has reported any errors.

Validating Your Installation and Configuration using the Sample Bank Application

After you have validated your Oracle installation and configuration using the Oracle test program, you can use the Sample Bank Application supplied with Microsoft Transaction Server to ensure that Microsoft Transaction Server can access your Oracle database.

Run the Sample bank Application as follows:

  1. Ensure that you have completed "Validating Your Installation and Configuration using the Test Program."

  2. On the server, create a table named "Account". The following example demonstrates how to set up the Account table.

    Owner scott

    Name of Table Account

    Column 1 Name AccountNo of type NUMBER

    Column 2 Name Balance of type NUMBER

  3. Populate the table with at least two rows. The following stable shows how to populate the table.

    AccountNo Balance

    1 1000

    2 1000

  4. Create a file DSN using the ODBC configuration utility. Name the file DSN "MTSSamples". Then manually update the DSN file to add the password of the user. The following example demonstrates how to add the user password to a file DSN.

    [ODBC]

    DRIVER=Microsoft ODBC for Oracle

    UID=scott

    PWD=mypassword

    ConnectString=myserver

    SERVER=myserver

  5. Save the file DSN and run the Sample Bank client.

Known Limitations and Problems Using MTS with Oracle

ADO 1.5 Beta Release Is Required When Using ADO with ODBC 3.5

If your applications use ADO make certain that you install the ADO 1.5 beta release. For details refer to the "Required Software" section above.

No Oracle Support on Digital Alpha Platform

Oracle database connectivity is not supported from Digital Alpha platforms running Microsoft Transaction Server.

Oracle OCIW32.DLL Version Problem

It is important that the correct version of the OCIW32.DLL be installed on your system. We have not yet determined who is responsible for installing the wrong version of this DLL. At present you should check the version of the DLL anytime you reinstall Oracle or Microsoft Transaction Server.

DLL Name Changes in Future Releases of Oracle

Oracle changes DLL names with each release. Currently, MTS looks for the DLL names for Oracle version 7.3.3. As MTS cannot predict future names of these DLLs, you may need to modify the values in the following registry key when you upgrade your Oracle installation:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server\Local Computer\My Computer

Under this key there are two string-named values.

Configuring Oracle to Support a Large Number of Connections

If you want to create more than a few dozen connections to an Oracle database, you must configure the Oracle server to support additional database connections. You may experience one or more of the following symptoms if you fail to do this:

If you experience any of these problems, increase the following Oracle server configuration parameters:

Other Known Limitations for the MTS 2.0 Beta 3 Release

MTS-Only Install Using Windows NT 4.0 Option Pack Setup

To install MTS without other Option Pack components:

  1. Run the Option Pack Setup program. Choose Custom install.

  2. Uncheck all Option Pack components.

  3. Select, but do not click the check box, for Transaction Server.

  4. Click Show Subcomponents.

  5. Check Transaction Server Core Components. This will also check Microsoft Management Console.

    Note that choosing the Development Option also installs the Data Access components.

  6. Click OK and continue Setup.
Uninstalling Microsoft Cluster Server on an MTS Server

It is recommended that you change the location of the MS DTC log file from the shared disk drive to a local disk drive if you uninstall Microsoft Cluster Server (MSCS). Not changing the log file location may result in a corrupted log file or access violations in MS DTC. You must change the location of the log file all cluster nodes.

Resetting the MS DTC Log File on Clustered Servers

To reset the MS DTC log file on a clustered server, you must run the MTS Explorer on the node that currently owns the shared disk containing the log file.

Starting and Stopping MS DTC on Clustered Servers

On a clustered server, you can start and stop MS DTC by either using the MTS Explorer or using the MSCS administrative utility. Using "net stop msdtc" does not work.

Problems Calling MTS Objects after MSCS Failover

When using MTS components on an MSCS cluster, base clients may experience problems creating and calling objects after MS DTC fails over to another node in the cluster. To workaround this problem, shutdown all server processes and rerun the base client.

The client application must release all references to MTS components on the failing node, and reinstantiate the components. The components are instantiated on the second node.

Transactions Statistics for Offline Cluster Nodes

You must restart the MTS Explorer to view current transaction statistics when the cluster node is taken offline, transferred to another node, and moved back online.

Using the Remote Components Folder with Clustered Servers

You can use the Remote Components folder to pull components from a Microsoft Cluster Server (MSCS) node by following these steps:

  1. On the server computer from which you will pull components, right-click on My Computer and select Properties.

  2. Click the Options tab and enter the name of the virtual server in the Remote Server Name field. Click OK.

  3. On the client computer to which you will pull components, add the MSCS computer to the Computers folder using the physical name of the server.

  4. Select the Remote Components folder and choose New from the Action menu. You can also right-click the Remote Components folder, select New and then Component.

  5. Follow the instructions in the remote component installation wizard. Note that during the installation of remote components, the physical name of the server will be displayed rather than the virtual name (as specified in the Remote Server Name field of the server computer).

  6. Select the Remote Components folder and click the Property View button on the MTS Explorer toolbar. The Server column in the Property View window displays the virtual server name.

Note If you change the Remote Server Name on the MSCS computer, you must also reinstall the remote components on client computers.

Replicating Empty Packages

MTS replication does not replicate empty packages.

Removing Beta 2 DTCXATM.LOG Files

Before upgrading your installation of MTS 2.0 from Beta 2 to Beta 3, delete the DTCXATM.LOG file, which is located in the \Mssql\Data sub-directory. Note that you must stop the MS DTC service before deleting DTCXATM.LOG.

Do Not Compress the MS DTC Log File

The MS DTC log file cannot be compressed.

Visual Basic 5.0 Shutdown with MTS 2.0

After installing MTS 2.0, you may see an Access Violation when shutting down Visual Basic 5.0. This is a known Visual Basic 5.0 bug that can be fixed by installing Visual Studio Service Pack 2 from http://www.microsoft.com/vstudio. Refer to Knowledge Base article Q167213 for more information about this problem.

Multiple Server Processes on Windows 95

There is a known problem that occurs when, if an MTS server process terminates unexpectedly (because of a failfast, an assert, or an access violation), subsequent attempts to restart the application create multiple MTS processes. (The correct behavior should be only one MTS process per package.) In case of unexpected server process termination, you must reboot your Windows 95 computer.

Deadlocks on Windows 95 When Using Named Pipes

There is a known problem with using more than approximately 40 Named Pipe connections from a Windows 95 client to MS Distributed Transaction Coordinator (DTC) that may cause deadlocks. To fix this problem, change the protocol between the ODBC driver and SQL Server to TCP/IP.

Use the Advanced Data Connector 1.1 Client

Windows NT 4.0 Option Pack Beta 3 installs Advanced Data Connector (ADC) version 1.5. The ADC 1.5 client only works with the Internet Explorer (IE) 4.0 Beta release. The ADC 1.5 client will not work with any version of Internet Explorer before IE 4.0.

For users of the MTS Adventure Works sample application, check http://www.microsoft.com/adc for an updated ADC 1.1 client that will work with Internet Explorer version 3.0 or later. You will need to recompile the MTS Adventure Works sample to set a reference to the new ADC 1.5 recordset library (Msador15.dll).

Help Disabled for the Advanced Tab of the My Computer Property Sheet

You will not be able to access the Help documentation from the Advanced tab of the My Computer property sheet.

Components and TreatAs and AutoTreatAs Registry Keys

COM allows one server to emulate another using the TreatAs or AutoTreatAs registry keys. Suppose a client creates a component of a given CLSID using CoCreateInstance. If the TreatAs or AutoTreatAs key is present under that CLSID in the registry, COM will instead create the component indicated by this key. This effectively routes client requests to the emulating server. (The same routing is possible using the ProgID if the client refers to its servers by ProgID instead of CLSID.)

Components being emulated using TreatAs or AutoTreatAs are not valid MTS components and cannot be imported. If the emulation is to be added after the component is imported, the component must be deleted from the MTS catalog, then replaced with the emulating component.

Using the Java Sample Bank Components

The Java Sample Bank components are automatically configured by MTS Setup and require no additional steps in order to run them.

If you want to recompile the Java Sample Bank components, follow these steps:

  1. Run the SetJavaDev.bat file located in the \mts\Samples\Account.VJ folder. Javatlb.exe must be in your path for this batch file to run properly.

  2. Recompile your Java component implementation classes.

  3. After you recompile the component classes, use the mkdll.bat file located in the \mts\Samples\Account.VJ folder to generate and register vjacct.dll. Exegen.exe must be in your path for this batch file to run properly. You can also add running mkdll.bat as a build step to your Visual J++ project to simplify recompiling.

  4. Using the MTS Explorer, import the new components into the Sample Bank package.
MTS Security Does Not Work With IIS Impersonation

MTS role-based package access control does not work properly when packages are front-ended by mutliplexers that impersonate multiple clients (such as IIS). MTS packages used in these environments should be configured with security disabled.

Using ErrorInfo with ADO

ADO erases any information that you might have put in the ErrorInfo object. There is a code work-around for this problem that needs to be implemented in your error handler.

For Visual Basic, the code is similar to the following:

ErrorHandler:
    ' cleanup
    If Not adoRS Is Nothing Then
        Set adoRS = Nothing
    End If
    If Not adoConn Is Nothing Then
        Set adoConn = Nothing
    End If
    
    Err.Raise Err.Number, "Bank.Accout.Post", Err.Description

Exit Function

For Visual C++, the code is similar to the following:

//
// ErrorInfo is saved here because the following 
// ADO cleanup code may clear it.
//
IErrorInfo * pErrorInfo = NULL;
GetErrorInfo(NULL, &pErrorInfo);

if (adoRsBalance) adoRsBalance->Release();
if (adoCoConnection) adoCoConnection->Release();

AtlReportError( CLSID_CAccount, pErrMsg, IID_IAccount, hr);

//
// put the error back in TLS
//
SetErrorInfo(NULL, pErrorInfo);

For Visual J++, the code is similar to the following:

if (adoRsBalance != null) {
	if (adoRsBalance.getState() == ObjectStateEnum.adStateOpen)
		adoRsBalance.Close();
	ComLib.release (adoRsBalance);
}

if (adoConn != null) {
	if (adoConn.getState() == ObjectStateEnum.adStateOpen)
		adoConn.Close();
	ComLib.release (adoConn);
}

Note In Java you must explicitly close recordsets and/or connections as well as explicitly release the ADO objects.

Using the Microsoft Transaction Server API to Develop Applications

Developing Components with Microsoft Visual C++

Custom Interfaces with Parameters of Type float or double

There is a known problem with custom interfaces that have method parameters that are of type float or double. If your interface uses these types, you should use a dual interface and a type library instead of a custom interface proxy/stub DLL. When encountering such interfaces, MTS shuts down the server process that hosts a component that implements this interface. MTS also writes the following message in the Windows NT event log:

ôUnable to obtain extended information about this interface. The interface may not have been generated using the -Oicf options in MIDL or the interface has methods with types (float or double) that are not currently supported for custom interfaces.ö

MFC Extension DLLs

MTS components should not be built as MFC Extension DLLs because such DLLs can be loaded only by MFC applications. A COM component, and therefore an MTS component, should be built so that it can be loaded into any process, regardless of the type of application that started the process.

For more information on MFC Extension DLLs, see the Microsoft Visual C++ ProgrammerÆs Guide.

Developing Components with Microsoft Visual Basic

ObjectControl
Known Problem with Mtx.exe Shutdown When Using Visual Basic 4.0 Components

When an Mtx.exe process running Visual Basic 4.0 components is "Shutdown because idle for x minutes," there is a known problem that results in a Read Access Violation. Currently there is no known solution to this problem. It is thought that if more than two Visual Basic 4.0 components are used in a process it is more likely to happen. One workaround is to set your package to "Leave running when idle". This is only a problem when using components built with Visual Basic 4.0 ¾ no such problem exists with Visual Basic 5.0.

Avoiding Visual Basic 4.0/RDO Deadlocks

If your server component uses RDO, never let an rdoConnection with an active rdoResultset fall out of scope or a deadlock may result. You must manually close the rdoResultset or rdoConnection to avoid the deadlock. The following sequence produces a deadlock:

  1. Create an instance of the server component. Call a method which creates rdoConnection and then rdoResultset. You may fetch from, but do not exhaust or close the rdoResultset.

  2. Release this instance. (As this connection and resultset go out of scope, the ODBC calls required are not immediately made. Instead, a message is posted to a hidden window to do the SQLFreeStmt+SQLDisconnect+SQLFreeConnect).

  3. Create a second instance of the server component. Create an rdoConnection and attempt to update a row which was included in the resultset from Step 1 above. This is now a deadlock because the locks held for the resultset created in Step 1 have not been released. And the message pump which will process the message posted in Step 2 above will now never have a chance to run.

The deadlock is avoided by manually closing the resultset (or connection) at the end of Step 1, which immediately makes the ODBC calls to close the stmt (and connection). The root of the problem is the delay introduced by the message posted to the hidden window to do the ODBC closes.

Maintaining the MTS Catalog when Developing Components with Visual Basic

Whenever you recompile an OLE DLL project in Visual Basic 4.0, Visual Basic re-writes all of the registry entries for all of the components (Visual Basic classes) that live in that DLL. Additionally, Visual Basic may generate new GUIDs (depending on your project configuration) to identify the components in that DLL. This means that your MTS components are no longer properly registered in the MTS catalog.

There are two solutions to this problem. First, there is a Refresh button in the Transaction Server Explorer, as well as the Refresh All Components command on the Tools menu. If you use this command Microsoft Transaction Server will repair all inconsistencies in registry entries of components currently in the right pane of the Explorer.

If you install the development version of Microsoft Transaction Server, check the VB Addin option to enable a feature that will automatically refresh your components after recompiling them. The next time you run Visual Basic 4.0, the add-in will be automatically installed in your Visual Basic IDE. You can also turn the feature on and off on a per-project basis by checking or unchecking the MTxServer RegRefresh | AutoRefresh after compile command on the Visual Basic Add-Ins menu. If you decide you want to refresh all of your Microsoft Transaction Server components at any given time, you can use the MTxServer RegRefresh | Refresh all components now command on the Add-Ins menu.

Important The Visual Basic Add-in has been updated to work with both Visual Basic 4.0 and 5.0. Once installed, it will automatically refresh the Transaction Server catalog with the changes made during each compile. The add-in menu option to enable and disable the automatic refresh is no longer supported.

Using the add-in will properly refresh the MTS catalog, even after Visual Basic compilations that generate new component GUIDs. Note also that the Compatible OLE Server setting in the Visual Basic Project Options dialog box can be used to stop Visual Basic from generating new component GUIDs.

Refreshing the MTS catalog depends on you not changing the ProgIDs of your components. In Visual Basic 4.0, a componentÆs ProgID is formed by the following concatenation: project name.class name. If you change either of these items, you will have to reinstall your component(s) in the MTS Explorer.

Building your component in Visual Basic 4.0 without selecting the Compatible OLE Server option replaces your old CLSID and IID on each compile. This has disadvantages when developing an MTS component, even with the Visual Basic add-in enabled.


Reporting Problems and Bugs

When reporting a bug, please include the following information in your bug report:


Copyright Information

© 1997 Microsoft Corporation

These materials are provided “as-is,” for informational purposes only.

Neither Microsoft nor its suppliers makes any warranty, express or implied with respect to the content of these materials or the accuracy of any information contained herein, including, without limitation, the implied warranties of merchantability or fitness for a particular purpose. Because some states/jurisdictions do not allow exclusions of implied warranties, the above limitation may not apply to you.

Neither Microsoft nor its suppliers shall have any liability for any damages whatsoever including consequential incidental, direct, indirect, special, and loss profits. Because some states/jurisdictions do not allow exclusions of implied warranties, the above limitation may not apply to you. In any event, Microsoft’s and its suppliers’ entire liability in any manner arising out of these materials, whether by tort, contract, or otherwise shall not exceed the suggested retail price of these materials.