Authors: Mike McCormack <mike@codeweavers.com>, Aric Stewart <aric@codeweavers.com>
Refcount all objects, and use pointers internally.

diff --git a/dlls/msi/create.c b/dlls/msi/create.c
index 9259204..be4736c 100644
--- a/dlls/msi/create.c
+++ b/dlls/msi/create.c
@@ -56,7 +56,7 @@
     return ERROR_FUNCTION_FAILED;
 }
 
-static UINT CREATE_execute( struct tagMSIVIEW *view, MSIHANDLE record )
+static UINT CREATE_execute( struct tagMSIVIEW *view, MSIRECORD *record )
 {
     MSICREATEVIEW *cv = (MSICREATEVIEW*)view;
     create_col_info *col;
@@ -214,6 +214,7 @@
     }
     HeapFree( GetProcessHeap(), 0, cv->name );
     HeapFree( GetProcessHeap(), 0, cv );
+    msiobj_release( &cv->db->hdr );
 
     return ERROR_SUCCESS;
 }
@@ -246,6 +247,7 @@
     
     /* fill the structure */
     cv->view.ops = &create_ops;
+    msiobj_addref( &db->hdr );
     cv->db = db;
     cv->name = table;  /* FIXME: strdupW it? */
     cv->col_info = col_info;