Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1601 lines
35 KiB

  1. /*==========================================================================
  2. *
  3. * Copyright (C) 2000 Microsoft Corporation. All Rights Reserved.
  4. *
  5. * File: Verify.cpp
  6. * Content: On-wire message verification
  7. *@@BEGIN_MSINTERNAL
  8. * History:
  9. * Date By Reason
  10. * ==== == ======
  11. * 12/05/00 mjn Created
  12. * 05/11/01 mjn Ensure buffers are valid (not NULL) instead of just ASSERTing
  13. *@@END_MSINTERNAL
  14. *
  15. ***************************************************************************/
  16. #include "dncorei.h"
  17. #undef DPF_MODNAME
  18. #define DPF_MODNAME "DNVerifyApplicationDescInfo"
  19. HRESULT DNVerifyApplicationDescInfo(void *const pOpBuffer,
  20. const DWORD dwOpBufferSize,
  21. void *const pData)
  22. {
  23. HRESULT hResultCode;
  24. UNALIGNED DPN_APPLICATION_DESC_INFO *pInfo;
  25. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld], pData [0x%p]",pOpBuffer,dwOpBufferSize,pData);
  26. DNASSERT(pData != NULL);
  27. if (pOpBuffer == NULL)
  28. {
  29. DPFERR("No message buffer !");
  30. goto Failure;
  31. }
  32. if (static_cast<BYTE*>(pData) + sizeof(DPN_APPLICATION_DESC_INFO) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  33. {
  34. DPFERR("Application Description buffer is too small");
  35. goto Failure;
  36. }
  37. pInfo = static_cast<DPN_APPLICATION_DESC_INFO*>(pData);
  38. if (pInfo->dwSessionNameOffset > dwOpBufferSize)
  39. {
  40. DPFERR("Invalid session name offset");
  41. goto Failure;
  42. }
  43. if (pInfo->dwSessionNameOffset + pInfo->dwSessionNameSize > dwOpBufferSize)
  44. {
  45. DPFERR("Invalid session name size");
  46. goto Failure;
  47. }
  48. if (pInfo->dwPasswordOffset > dwOpBufferSize)
  49. {
  50. DPFERR("Invalid password offset");
  51. goto Failure;
  52. }
  53. if (pInfo->dwPasswordOffset + pInfo->dwPasswordSize > dwOpBufferSize)
  54. {
  55. DPFERR("Invalid password size");
  56. goto Failure;
  57. }
  58. if (pInfo->dwReservedDataOffset > dwOpBufferSize)
  59. {
  60. DPFERR("Invalid reserved data offset");
  61. goto Failure;
  62. }
  63. if (pInfo->dwReservedDataOffset + pInfo->dwReservedDataSize > dwOpBufferSize)
  64. {
  65. DPFERR("Invalid reserved data size");
  66. goto Failure;
  67. }
  68. if (pInfo->dwApplicationReservedDataOffset > dwOpBufferSize)
  69. {
  70. DPFERR("Invalid application reserved data offset");
  71. goto Failure;
  72. }
  73. if (pInfo->dwApplicationReservedDataOffset + pInfo->dwApplicationReservedDataSize > dwOpBufferSize)
  74. {
  75. DPFERR("Invalid application reserved data size");
  76. goto Failure;
  77. }
  78. hResultCode = DPN_OK;
  79. Exit:
  80. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  81. return(hResultCode);
  82. Failure:
  83. hResultCode = DPNERR_GENERIC;
  84. goto Exit;
  85. }
  86. #undef DPF_MODNAME
  87. #define DPF_MODNAME "DNVerifyNameTableEntryInfo"
  88. HRESULT DNVerifyNameTableEntryInfo(void *const pOpBuffer,
  89. const DWORD dwOpBufferSize,
  90. void *const pData)
  91. {
  92. HRESULT hResultCode;
  93. UNALIGNED DN_NAMETABLE_ENTRY_INFO *pInfo;
  94. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld], pData [0x%p]",pOpBuffer,dwOpBufferSize,pData);
  95. DNASSERT(pData != NULL);
  96. if (pOpBuffer == NULL)
  97. {
  98. DPFERR("No message buffer !");
  99. goto Failure;
  100. }
  101. if (static_cast<BYTE*>(pData) + sizeof(DN_NAMETABLE_ENTRY_INFO) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  102. {
  103. DPFERR("NameTable Entry buffer is too small");
  104. goto Failure;
  105. }
  106. pInfo = static_cast<DN_NAMETABLE_ENTRY_INFO*>(pData);
  107. if (pInfo->dwNameOffset > dwOpBufferSize)
  108. {
  109. DPFERR("Invalid name offset");
  110. goto Failure;
  111. }
  112. if (pInfo->dwNameOffset + pInfo->dwNameSize > dwOpBufferSize)
  113. {
  114. DPFERR("Invalid name size");
  115. goto Failure;
  116. }
  117. if (pInfo->dwDataOffset > dwOpBufferSize)
  118. {
  119. DPFERR("Invalid data offset");
  120. goto Failure;
  121. }
  122. if (pInfo->dwDataOffset + pInfo->dwDataSize > dwOpBufferSize)
  123. {
  124. DPFERR("Invalid data size");
  125. goto Failure;
  126. }
  127. if (pInfo->dwURLOffset > dwOpBufferSize)
  128. {
  129. DPFERR("Invalid URL offset");
  130. goto Failure;
  131. }
  132. if (pInfo->dwURLOffset + pInfo->dwURLSize > dwOpBufferSize)
  133. {
  134. DPFERR("Invalid URL size");
  135. goto Failure;
  136. }
  137. hResultCode = DPN_OK;
  138. Exit:
  139. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  140. return(hResultCode);
  141. Failure:
  142. hResultCode = DPNERR_GENERIC;
  143. goto Exit;
  144. }
  145. #undef DPF_MODNAME
  146. #define DPF_MODNAME "DNVerifyNameTableInfo"
  147. HRESULT DNVerifyNameTableInfo(void *const pOpBuffer,
  148. const DWORD dwOpBufferSize,
  149. void *const pData)
  150. {
  151. HRESULT hResultCode;
  152. DWORD dw;
  153. UNALIGNED DN_NAMETABLE_INFO *pInfo;
  154. UNALIGNED DN_NAMETABLE_ENTRY_INFO *pNTEntryInfo;
  155. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld], pData [0x%p]",pOpBuffer,dwOpBufferSize,pData);
  156. DNASSERT(pOpBuffer != NULL);
  157. DNASSERT(pData != NULL);
  158. if (static_cast<BYTE*>(pData) + sizeof(DN_NAMETABLE_INFO) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  159. {
  160. DPFERR("NameTable buffer is too small");
  161. goto Failure;
  162. }
  163. pInfo = static_cast<DN_NAMETABLE_INFO*>(pData);
  164. if ( reinterpret_cast<BYTE*>(pInfo+1) +
  165. (pInfo->dwEntryCount * sizeof(DN_NAMETABLE_ENTRY_INFO)) +
  166. (pInfo->dwMembershipCount * sizeof(DN_NAMETABLE_MEMBERSHIP_INFO)) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  167. {
  168. DPFERR("NameTable buffer is too small");
  169. goto Failure;
  170. }
  171. pNTEntryInfo = reinterpret_cast<DN_NAMETABLE_ENTRY_INFO*>(pInfo+1);
  172. for (dw = 0 ; dw < pInfo->dwEntryCount ; dw++, pNTEntryInfo++)
  173. {
  174. if (DNVerifyNameTableEntryInfo(pOpBuffer,dwOpBufferSize,pNTEntryInfo) != DPN_OK)
  175. {
  176. DPFERR("Invalid NameTable Entry in NameTable");
  177. goto Failure;
  178. }
  179. }
  180. hResultCode = DPN_OK;
  181. Exit:
  182. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  183. return(hResultCode);
  184. Failure:
  185. hResultCode = DPNERR_GENERIC;
  186. goto Exit;
  187. }
  188. #undef DPF_MODNAME
  189. #define DPF_MODNAME "DNVerifyPlayerConnectInfo"
  190. HRESULT DNVerifyPlayerConnectInfo(void *const pOpBuffer,
  191. const DWORD dwOpBufferSize)
  192. {
  193. HRESULT hResultCode;
  194. UNALIGNED DN_INTERNAL_MESSAGE_PLAYER_CONNECT_INFO *pInfo;
  195. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  196. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_PLAYER_CONNECT_INFO))
  197. {
  198. DPFERR("Message buffer is too small !");
  199. goto Failure;
  200. }
  201. if (pOpBuffer == NULL)
  202. {
  203. DPFERR("No message buffer !");
  204. goto Failure;
  205. }
  206. pInfo = static_cast<DN_INTERNAL_MESSAGE_PLAYER_CONNECT_INFO*>(pOpBuffer);
  207. if (pInfo->dwNameOffset > dwOpBufferSize)
  208. {
  209. DPFERR("Invalid name offset");
  210. goto Failure;
  211. }
  212. if (pInfo->dwNameOffset + pInfo->dwNameSize > dwOpBufferSize)
  213. {
  214. DPFERR("Invalid name size");
  215. goto Failure;
  216. }
  217. if (pInfo->dwPasswordOffset > dwOpBufferSize)
  218. {
  219. DPFERR("Invalid password offset");
  220. goto Failure;
  221. }
  222. if (pInfo->dwPasswordOffset + pInfo->dwPasswordSize > dwOpBufferSize)
  223. {
  224. DPFERR("Invalid password size");
  225. goto Failure;
  226. }
  227. if (pInfo->dwDataOffset > dwOpBufferSize)
  228. {
  229. DPFERR("Invalid data offset");
  230. goto Failure;
  231. }
  232. if (pInfo->dwDataOffset + pInfo->dwDataSize > dwOpBufferSize)
  233. {
  234. DPFERR("Invalid data size");
  235. goto Failure;
  236. }
  237. if (pInfo->dwURLOffset > dwOpBufferSize)
  238. {
  239. DPFERR("Invalid URL offset");
  240. goto Failure;
  241. }
  242. if (pInfo->dwURLOffset + pInfo->dwURLSize > dwOpBufferSize)
  243. {
  244. DPFERR("Invalid URL size");
  245. goto Failure;
  246. }
  247. if (pInfo->dwConnectDataOffset > dwOpBufferSize)
  248. {
  249. DPFERR("Invalid connect data offset");
  250. goto Failure;
  251. }
  252. if (pInfo->dwConnectDataOffset + pInfo->dwConnectDataSize > dwOpBufferSize)
  253. {
  254. DPFERR("Invalid connect data size");
  255. goto Failure;
  256. }
  257. hResultCode = DPN_OK;
  258. Exit:
  259. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  260. return(hResultCode);
  261. Failure:
  262. hResultCode = DPNERR_GENERIC;
  263. goto Exit;
  264. }
  265. #undef DPF_MODNAME
  266. #define DPF_MODNAME "DNVerifyConnectInfo"
  267. HRESULT DNVerifyConnectInfo(void *const pOpBuffer,
  268. const DWORD dwOpBufferSize)
  269. {
  270. HRESULT hResultCode;
  271. UNALIGNED DN_INTERNAL_MESSAGE_CONNECT_INFO *pInfo;
  272. UNALIGNED DPN_APPLICATION_DESC_INFO *pdnAppDescInfo;
  273. UNALIGNED DN_NAMETABLE_INFO *pdnNTInfo;
  274. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  275. if (dwOpBufferSize < (sizeof(DN_INTERNAL_MESSAGE_CONNECT_INFO) + sizeof(DPN_APPLICATION_DESC_INFO) + sizeof(DN_NAMETABLE_INFO)))
  276. {
  277. DPFERR("Message buffer is too small !");
  278. goto Failure;
  279. }
  280. if (pOpBuffer == NULL)
  281. {
  282. DPFERR("No message buffer !");
  283. goto Failure;
  284. }
  285. pInfo = static_cast<DN_INTERNAL_MESSAGE_CONNECT_INFO*>(pOpBuffer);
  286. pdnAppDescInfo = reinterpret_cast<DPN_APPLICATION_DESC_INFO*>(pInfo + 1);
  287. pdnNTInfo = reinterpret_cast<DN_NAMETABLE_INFO*>(pdnAppDescInfo + 1);
  288. if (pInfo->dwReplyOffset > dwOpBufferSize)
  289. {
  290. DPFERR("Invalid reply offset");
  291. goto Failure;
  292. }
  293. if (pInfo->dwReplyOffset + pInfo->dwReplySize > dwOpBufferSize)
  294. {
  295. DPFERR("Invalid reply size");
  296. }
  297. if (DNVerifyApplicationDescInfo(pOpBuffer,dwOpBufferSize,pdnAppDescInfo) != DPN_OK)
  298. {
  299. DPFERR("Invalid application description");
  300. goto Failure;
  301. }
  302. if (DNVerifyNameTableInfo(pOpBuffer,dwOpBufferSize,pdnNTInfo) != DPN_OK)
  303. {
  304. DPFERR("Invalid nametable");
  305. goto Failure;
  306. }
  307. hResultCode = DPN_OK;
  308. Exit:
  309. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  310. return(hResultCode);
  311. Failure:
  312. hResultCode = DPNERR_GENERIC;
  313. goto Exit;
  314. }
  315. #undef DPF_MODNAME
  316. #define DPF_MODNAME "DNVerifySendPlayerDPNID"
  317. HRESULT DNVerifySendPlayerDPNID(void *const pOpBuffer,
  318. const DWORD dwOpBufferSize)
  319. {
  320. HRESULT hResultCode;
  321. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  322. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_SEND_PLAYER_DPNID))
  323. {
  324. DPFERR("Message buffer is too small !");
  325. goto Failure;
  326. }
  327. if (pOpBuffer == NULL)
  328. {
  329. DPFERR("No message buffer !");
  330. goto Failure;
  331. }
  332. hResultCode = DPN_OK;
  333. Exit:
  334. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  335. return(hResultCode);
  336. Failure:
  337. hResultCode = DPNERR_GENERIC;
  338. goto Exit;
  339. }
  340. #undef DPF_MODNAME
  341. #define DPF_MODNAME "DNVerifyConnectFailed"
  342. HRESULT DNVerifyConnectFailed(void *const pOpBuffer,
  343. const DWORD dwOpBufferSize)
  344. {
  345. HRESULT hResultCode;
  346. UNALIGNED DN_INTERNAL_MESSAGE_CONNECT_FAILED *pInfo;
  347. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  348. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_CONNECT_FAILED))
  349. {
  350. DPFERR("Message buffer is too small !");
  351. goto Failure;
  352. }
  353. if (pOpBuffer == NULL)
  354. {
  355. DPFERR("No message buffer !");
  356. goto Failure;
  357. }
  358. pInfo = static_cast<DN_INTERNAL_MESSAGE_CONNECT_FAILED*>(pOpBuffer);
  359. if (pInfo->dwReplyOffset > dwOpBufferSize)
  360. {
  361. DPFERR("Invalid reply offset");
  362. goto Failure;
  363. }
  364. if (pInfo->dwReplyOffset + pInfo->dwReplySize > dwOpBufferSize)
  365. {
  366. DPFERR("Invalid reply size");
  367. goto Failure;
  368. }
  369. hResultCode = DPN_OK;
  370. Exit:
  371. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  372. return(hResultCode);
  373. Failure:
  374. hResultCode = DPNERR_GENERIC;
  375. goto Exit;
  376. }
  377. #undef DPF_MODNAME
  378. #define DPF_MODNAME "DNVerifyInstructConnect"
  379. HRESULT DNVerifyInstructConnect(void *const pOpBuffer,
  380. const DWORD dwOpBufferSize)
  381. {
  382. HRESULT hResultCode;
  383. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  384. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_INSTRUCT_CONNECT))
  385. {
  386. DPFERR("Message buffer is too small !");
  387. goto Failure;
  388. }
  389. if (pOpBuffer == NULL)
  390. {
  391. DPFERR("No message buffer !");
  392. goto Failure;
  393. }
  394. hResultCode = DPN_OK;
  395. Exit:
  396. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  397. return(hResultCode);
  398. Failure:
  399. hResultCode = DPNERR_GENERIC;
  400. goto Exit;
  401. }
  402. #undef DPF_MODNAME
  403. #define DPF_MODNAME "DNVerifyInstructedConnectFailed"
  404. HRESULT DNVerifyInstructedConnectFailed(void *const pOpBuffer,
  405. const DWORD dwOpBufferSize)
  406. {
  407. HRESULT hResultCode;
  408. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  409. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_INSTRUCTED_CONNECT_FAILED))
  410. {
  411. DPFERR("Message buffer is too small !");
  412. goto Failure;
  413. }
  414. if (pOpBuffer == NULL)
  415. {
  416. DPFERR("No message buffer !");
  417. goto Failure;
  418. }
  419. hResultCode = DPN_OK;
  420. Exit:
  421. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  422. return(hResultCode);
  423. Failure:
  424. hResultCode = DPNERR_GENERIC;
  425. goto Exit;
  426. }
  427. #undef DPF_MODNAME
  428. #define DPF_MODNAME "DNVerifyConnectAttemptFailed"
  429. HRESULT DNVerifyConnectAttemptFailed(void *const pOpBuffer,
  430. const DWORD dwOpBufferSize)
  431. {
  432. HRESULT hResultCode;
  433. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  434. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_CONNECT_ATTEMPT_FAILED))
  435. {
  436. DPFERR("Message buffer is too small !");
  437. goto Failure;
  438. }
  439. if (pOpBuffer == NULL)
  440. {
  441. DPFERR("No message buffer !");
  442. goto Failure;
  443. }
  444. hResultCode = DPN_OK;
  445. Exit:
  446. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  447. return(hResultCode);
  448. Failure:
  449. hResultCode = DPNERR_GENERIC;
  450. goto Exit;
  451. }
  452. #ifndef DPNBUILD_NOHOSTMIGRATE
  453. #undef DPF_MODNAME
  454. #define DPF_MODNAME "DNVerifyNameTableVersion"
  455. HRESULT DNVerifyNameTableVersion(void *const pOpBuffer,
  456. const DWORD dwOpBufferSize)
  457. {
  458. HRESULT hResultCode;
  459. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  460. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_NAMETABLE_VERSION))
  461. {
  462. DPFERR("Message buffer is too small !");
  463. goto Failure;
  464. }
  465. if (pOpBuffer == NULL)
  466. {
  467. DPFERR("No message buffer !");
  468. goto Failure;
  469. }
  470. hResultCode = DPN_OK;
  471. Exit:
  472. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  473. return(hResultCode);
  474. Failure:
  475. hResultCode = DPNERR_GENERIC;
  476. goto Exit;
  477. }
  478. #undef DPF_MODNAME
  479. #define DPF_MODNAME "DNVerifyResyncVersion"
  480. HRESULT DNVerifyResyncVersion(void *const pOpBuffer,
  481. const DWORD dwOpBufferSize)
  482. {
  483. HRESULT hResultCode;
  484. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  485. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_RESYNC_VERSION))
  486. {
  487. DPFERR("Message buffer is too small !");
  488. goto Failure;
  489. }
  490. if (pOpBuffer == NULL)
  491. {
  492. DPFERR("No message buffer !");
  493. goto Failure;
  494. }
  495. hResultCode = DPN_OK;
  496. Exit:
  497. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  498. return(hResultCode);
  499. Failure:
  500. hResultCode = DPNERR_GENERIC;
  501. goto Exit;
  502. }
  503. #undef DPF_MODNAME
  504. #define DPF_MODNAME "DNVerifyReqNameTableOp"
  505. HRESULT DNVerifyReqNameTableOp(void *const pOpBuffer,
  506. const DWORD dwOpBufferSize)
  507. {
  508. HRESULT hResultCode;
  509. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  510. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQ_NAMETABLE_OP))
  511. {
  512. DPFERR("Message buffer is too small !");
  513. goto Failure;
  514. }
  515. if (pOpBuffer == NULL)
  516. {
  517. DPFERR("No message buffer !");
  518. goto Failure;
  519. }
  520. hResultCode = DPN_OK;
  521. Exit:
  522. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  523. return(hResultCode);
  524. Failure:
  525. hResultCode = DPNERR_GENERIC;
  526. goto Exit;
  527. }
  528. #undef DPF_MODNAME
  529. #define DPF_MODNAME "DNVerifyAckNameTableOp"
  530. HRESULT DNVerifyAckNameTableOp(void *const pOpBuffer,
  531. const DWORD dwOpBufferSize)
  532. {
  533. HRESULT hResultCode;
  534. DWORD dw;
  535. UNALIGNED DN_INTERNAL_MESSAGE_ACK_NAMETABLE_OP *pAck;
  536. UNALIGNED DN_NAMETABLE_OP_INFO *pInfo;
  537. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  538. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_ACK_NAMETABLE_OP))
  539. {
  540. DPFERR("Message buffer is too small !");
  541. goto Failure;
  542. }
  543. if (pOpBuffer == NULL)
  544. {
  545. DPFERR("No message buffer !");
  546. goto Failure;
  547. }
  548. pAck = static_cast<DN_INTERNAL_MESSAGE_ACK_NAMETABLE_OP*>(pOpBuffer);
  549. if (sizeof(DN_INTERNAL_MESSAGE_ACK_NAMETABLE_OP) + (pAck->dwNumEntries * sizeof(DN_NAMETABLE_OP_INFO)) > dwOpBufferSize)
  550. {
  551. DPFERR("NameTable operation buffer is too small");
  552. goto Failure;
  553. }
  554. pInfo = reinterpret_cast<DN_NAMETABLE_OP_INFO*>(pAck+1);
  555. for (dw = 0 ; dw < pAck->dwNumEntries ; dw++)
  556. {
  557. if (pInfo->dwOpOffset > dwOpBufferSize)
  558. {
  559. DPFERR("Invalid nametable operation offset");
  560. goto Failure;
  561. }
  562. if (pInfo->dwOpOffset + pInfo->dwOpSize > dwOpBufferSize)
  563. {
  564. DPFERR("Invalid nametable operation size");
  565. goto Failure;
  566. }
  567. switch(pInfo->dwMsgId)
  568. {
  569. case DN_MSG_INTERNAL_INSTRUCT_CONNECT:
  570. {
  571. if (DNVerifyInstructConnect(static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset,pInfo->dwOpSize) != DPN_OK)
  572. {
  573. DPFERR("Invalid NameTable operation");
  574. goto Failure;
  575. }
  576. break;
  577. }
  578. case DN_MSG_INTERNAL_ADD_PLAYER:
  579. {
  580. if (DNVerifyNameTableEntryInfo( static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset,
  581. pInfo->dwOpSize,
  582. static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset) != DPN_OK)
  583. {
  584. DPFERR("Invalid NameTable operation");
  585. goto Failure;
  586. }
  587. break;
  588. }
  589. case DN_MSG_INTERNAL_DESTROY_PLAYER:
  590. {
  591. if (DNVerifyDestroyPlayer(static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset,pInfo->dwOpSize) != DPN_OK)
  592. {
  593. DPFERR("Invalid NameTable operation");
  594. goto Failure;
  595. }
  596. break;
  597. }
  598. case DN_MSG_INTERNAL_CREATE_GROUP:
  599. {
  600. if (DNVerifyCreateGroup(static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset,
  601. pInfo->dwOpSize,
  602. static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset) != DPN_OK)
  603. {
  604. DPFERR("Invalid NameTable operation");
  605. goto Failure;
  606. }
  607. break;
  608. }
  609. case DN_MSG_INTERNAL_DESTROY_GROUP:
  610. {
  611. if (DNVerifyDestroyGroup(static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset,pInfo->dwOpSize) != DPN_OK)
  612. {
  613. DPFERR("Invalid NameTable operation");
  614. goto Failure;
  615. }
  616. break;
  617. }
  618. case DN_MSG_INTERNAL_ADD_PLAYER_TO_GROUP:
  619. {
  620. if (DNVerifyAddPlayerToGroup(static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset,pInfo->dwOpSize) != DPN_OK)
  621. {
  622. DPFERR("Invalid NameTable operation");
  623. goto Failure;
  624. }
  625. break;
  626. }
  627. case DN_MSG_INTERNAL_DELETE_PLAYER_FROM_GROUP:
  628. {
  629. if (DNVerifyDeletePlayerFromGroup(static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset,pInfo->dwOpSize) != DPN_OK)
  630. {
  631. DPFERR("Invalid NameTable operation");
  632. goto Failure;
  633. }
  634. break;
  635. }
  636. case DN_MSG_INTERNAL_UPDATE_INFO:
  637. {
  638. if (DNVerifyUpdateInfo( static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset,
  639. pInfo->dwOpSize,
  640. static_cast<BYTE*>(pOpBuffer)+pInfo->dwOpOffset) != DPN_OK)
  641. {
  642. DPFERR("Invalid NameTable operation");
  643. goto Failure;
  644. }
  645. break;
  646. }
  647. default:
  648. {
  649. DPFERR("Invalid NameTable op - ignore and continue");
  650. break;
  651. }
  652. }
  653. pInfo++;
  654. }
  655. hResultCode = DPN_OK;
  656. Exit:
  657. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  658. return(hResultCode);
  659. Failure:
  660. hResultCode = DPNERR_GENERIC;
  661. goto Exit;
  662. }
  663. #undef DPF_MODNAME
  664. #define DPF_MODNAME "DNVerifyHostMigrate"
  665. HRESULT DNVerifyHostMigrate(void *const pOpBuffer,
  666. const DWORD dwOpBufferSize)
  667. {
  668. HRESULT hResultCode;
  669. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  670. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_HOST_MIGRATE))
  671. {
  672. DPFERR("Message buffer is too small !");
  673. goto Failure;
  674. }
  675. if (pOpBuffer == NULL)
  676. {
  677. DPFERR("No message buffer !");
  678. goto Failure;
  679. }
  680. hResultCode = DPN_OK;
  681. Exit:
  682. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  683. return(hResultCode);
  684. Failure:
  685. hResultCode = DPNERR_GENERIC;
  686. goto Exit;
  687. }
  688. #endif // !DPNBUILD_NOHOSTMIGRATE
  689. #undef DPF_MODNAME
  690. #define DPF_MODNAME "DNVerifyDestroyPlayer"
  691. HRESULT DNVerifyDestroyPlayer(void *const pOpBuffer,
  692. const DWORD dwOpBufferSize)
  693. {
  694. HRESULT hResultCode;
  695. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  696. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_DESTROY_PLAYER))
  697. {
  698. DPFERR("Message buffer is too small !");
  699. goto Failure;
  700. }
  701. if (pOpBuffer == NULL)
  702. {
  703. DPFERR("No message buffer !");
  704. goto Failure;
  705. }
  706. hResultCode = DPN_OK;
  707. Exit:
  708. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  709. return(hResultCode);
  710. Failure:
  711. hResultCode = DPNERR_GENERIC;
  712. goto Exit;
  713. }
  714. #undef DPF_MODNAME
  715. #define DPF_MODNAME "DNVerifyCreateGroup"
  716. HRESULT DNVerifyCreateGroup(void *const pOpBuffer,
  717. const DWORD dwOpBufferSize,
  718. void *const pData)
  719. {
  720. HRESULT hResultCode;
  721. UNALIGNED DN_INTERNAL_MESSAGE_CREATE_GROUP *pInfo;
  722. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld], pData [0x%p]",pOpBuffer,dwOpBufferSize,pData);
  723. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_CREATE_GROUP))
  724. {
  725. DPFERR("Message buffer is too small !");
  726. goto Failure;
  727. }
  728. if (pOpBuffer == NULL)
  729. {
  730. DPFERR("No message buffer !");
  731. goto Failure;
  732. }
  733. if (static_cast<BYTE*>(pData) + sizeof(DN_INTERNAL_MESSAGE_CREATE_GROUP) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  734. {
  735. DPFERR("Message buffer is too small !");
  736. goto Failure;
  737. }
  738. pInfo = static_cast<DN_INTERNAL_MESSAGE_CREATE_GROUP*>(pData);
  739. if (reinterpret_cast<BYTE*>(pInfo+1) + sizeof(DN_NAMETABLE_ENTRY_INFO) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  740. {
  741. DPFERR("NameTable entry info buffer is too small !");
  742. goto Failure;
  743. }
  744. if (DNVerifyNameTableEntryInfo(pOpBuffer,dwOpBufferSize,pInfo+1) != DPN_OK)
  745. {
  746. DPFERR("Invalid NameTable entry info");
  747. goto Failure;
  748. }
  749. hResultCode = DPN_OK;
  750. Exit:
  751. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  752. return(hResultCode);
  753. Failure:
  754. hResultCode = DPNERR_GENERIC;
  755. goto Exit;
  756. }
  757. #undef DPF_MODNAME
  758. #define DPF_MODNAME "DNVerifyDestroyGroup"
  759. HRESULT DNVerifyDestroyGroup(void *const pOpBuffer,
  760. const DWORD dwOpBufferSize)
  761. {
  762. HRESULT hResultCode;
  763. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  764. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_DESTROY_GROUP))
  765. {
  766. DPFERR("Message buffer is too small !");
  767. goto Failure;
  768. }
  769. if (pOpBuffer == NULL)
  770. {
  771. DPFERR("No message buffer !");
  772. goto Failure;
  773. }
  774. hResultCode = DPN_OK;
  775. Exit:
  776. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  777. return(hResultCode);
  778. Failure:
  779. hResultCode = DPNERR_GENERIC;
  780. goto Exit;
  781. }
  782. #undef DPF_MODNAME
  783. #define DPF_MODNAME "DNVerifyAddPlayerToGroup"
  784. HRESULT DNVerifyAddPlayerToGroup(void *const pOpBuffer,
  785. const DWORD dwOpBufferSize)
  786. {
  787. HRESULT hResultCode;
  788. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  789. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_ADD_PLAYER_TO_GROUP))
  790. {
  791. DPFERR("Message buffer is too small !");
  792. goto Failure;
  793. }
  794. if (pOpBuffer == NULL)
  795. {
  796. DPFERR("No message buffer !");
  797. goto Failure;
  798. }
  799. hResultCode = DPN_OK;
  800. Exit:
  801. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  802. return(hResultCode);
  803. Failure:
  804. hResultCode = DPNERR_GENERIC;
  805. goto Exit;
  806. }
  807. #undef DPF_MODNAME
  808. #define DPF_MODNAME "DNVerifyDeletePlayerFromGroup"
  809. HRESULT DNVerifyDeletePlayerFromGroup(void *const pOpBuffer,
  810. const DWORD dwOpBufferSize)
  811. {
  812. HRESULT hResultCode;
  813. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  814. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_DELETE_PLAYER_FROM_GROUP))
  815. {
  816. DPFERR("Message buffer is too small !");
  817. goto Failure;
  818. }
  819. if (pOpBuffer == NULL)
  820. {
  821. DPFERR("No message buffer !");
  822. goto Failure;
  823. }
  824. hResultCode = DPN_OK;
  825. Exit:
  826. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  827. return(hResultCode);
  828. Failure:
  829. hResultCode = DPNERR_GENERIC;
  830. goto Exit;
  831. }
  832. #undef DPF_MODNAME
  833. #define DPF_MODNAME "DNVerifyUpdateInfo"
  834. HRESULT DNVerifyUpdateInfo(void *const pOpBuffer,
  835. const DWORD dwOpBufferSize,
  836. void *const pData)
  837. {
  838. HRESULT hResultCode;
  839. UNALIGNED DN_INTERNAL_MESSAGE_UPDATE_INFO *pInfo;
  840. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld], pData [0x%p]",pOpBuffer,dwOpBufferSize,pData);
  841. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_UPDATE_INFO))
  842. {
  843. DPFERR("Message buffer is too small !");
  844. goto Failure;
  845. }
  846. if (pOpBuffer == NULL)
  847. {
  848. DPFERR("No message buffer !");
  849. goto Failure;
  850. }
  851. if (static_cast<BYTE*>(pData) + sizeof(DN_INTERNAL_MESSAGE_UPDATE_INFO) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  852. {
  853. DPFERR("Message buffer is too small !");
  854. goto Failure;
  855. }
  856. pInfo = static_cast<DN_INTERNAL_MESSAGE_UPDATE_INFO*>(pData);
  857. if (pInfo->dwNameOffset > dwOpBufferSize)
  858. {
  859. DPFERR("Invalid name offset");
  860. goto Failure;
  861. }
  862. if (pInfo->dwNameOffset + pInfo->dwNameSize > dwOpBufferSize)
  863. {
  864. DPFERR("Invalid name size");
  865. goto Failure;
  866. }
  867. if (pInfo->dwDataOffset > dwOpBufferSize)
  868. {
  869. DPFERR("Invalid data offset");
  870. goto Failure;
  871. }
  872. if (pInfo->dwDataOffset + pInfo->dwDataSize > dwOpBufferSize)
  873. {
  874. DPFERR("Invalid data size");
  875. goto Failure;
  876. }
  877. hResultCode = DPN_OK;
  878. Exit:
  879. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  880. return(hResultCode);
  881. Failure:
  882. hResultCode = DPNERR_GENERIC;
  883. goto Exit;
  884. }
  885. #undef DPF_MODNAME
  886. #define DPF_MODNAME "DNVerifyReqCreateGroup"
  887. HRESULT DNVerifyReqCreateGroup(void *const pOpBuffer,
  888. const DWORD dwOpBufferSize,
  889. void *const pData)
  890. {
  891. HRESULT hResultCode;
  892. UNALIGNED DN_INTERNAL_MESSAGE_REQ_CREATE_GROUP *pInfo;
  893. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld], pData [0x%p]",pOpBuffer,dwOpBufferSize,pData);
  894. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQ_CREATE_GROUP))
  895. {
  896. DPFERR("Message buffer is too small !");
  897. goto Failure;
  898. }
  899. if (pOpBuffer == NULL)
  900. {
  901. DPFERR("No message buffer !");
  902. goto Failure;
  903. }
  904. if (static_cast<BYTE*>(pData) + sizeof(DN_INTERNAL_MESSAGE_REQ_CREATE_GROUP) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  905. {
  906. DPFERR("Message buffer is too small !");
  907. goto Failure;
  908. }
  909. pInfo = static_cast<DN_INTERNAL_MESSAGE_REQ_CREATE_GROUP*>(pData);
  910. if (pInfo->dwNameOffset > dwOpBufferSize)
  911. {
  912. DPFERR("Invalid name offset");
  913. goto Failure;
  914. }
  915. if (pInfo->dwNameOffset + pInfo->dwNameSize > dwOpBufferSize)
  916. {
  917. DPFERR("Invalid name size");
  918. goto Failure;
  919. }
  920. if (pInfo->dwDataOffset > dwOpBufferSize)
  921. {
  922. DPFERR("Invalid data offset");
  923. goto Failure;
  924. }
  925. if (pInfo->dwDataOffset + pInfo->dwDataSize > dwOpBufferSize)
  926. {
  927. DPFERR("Invalid data size");
  928. goto Failure;
  929. }
  930. hResultCode = DPN_OK;
  931. Exit:
  932. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  933. return(hResultCode);
  934. Failure:
  935. hResultCode = DPNERR_GENERIC;
  936. goto Exit;
  937. }
  938. #undef DPF_MODNAME
  939. #define DPF_MODNAME "DNVerifyReqDestroyGroup"
  940. HRESULT DNVerifyReqDestroyGroup(void *const pOpBuffer,
  941. const DWORD dwOpBufferSize)
  942. {
  943. HRESULT hResultCode;
  944. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  945. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQ_DESTROY_GROUP))
  946. {
  947. DPFERR("Message buffer is too small !");
  948. goto Failure;
  949. }
  950. if (pOpBuffer == NULL)
  951. {
  952. DPFERR("No message buffer !");
  953. goto Failure;
  954. }
  955. hResultCode = DPN_OK;
  956. Exit:
  957. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  958. return(hResultCode);
  959. Failure:
  960. hResultCode = DPNERR_GENERIC;
  961. goto Exit;
  962. }
  963. #undef DPF_MODNAME
  964. #define DPF_MODNAME "DNVerifyReqAddPlayerToGroup"
  965. HRESULT DNVerifyReqAddPlayerToGroup(void *const pOpBuffer,
  966. const DWORD dwOpBufferSize)
  967. {
  968. HRESULT hResultCode;
  969. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  970. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQ_ADD_PLAYER_TO_GROUP))
  971. {
  972. DPFERR("Message buffer is too small !");
  973. goto Failure;
  974. }
  975. if (pOpBuffer == NULL)
  976. {
  977. DPFERR("No message buffer !");
  978. goto Failure;
  979. }
  980. hResultCode = DPN_OK;
  981. Exit:
  982. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  983. return(hResultCode);
  984. Failure:
  985. hResultCode = DPNERR_GENERIC;
  986. goto Exit;
  987. }
  988. #undef DPF_MODNAME
  989. #define DPF_MODNAME "DNVerifyReqDeletePlayerFromGroup"
  990. HRESULT DNVerifyReqDeletePlayerFromGroup(void *const pOpBuffer,
  991. const DWORD dwOpBufferSize)
  992. {
  993. HRESULT hResultCode;
  994. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  995. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQ_DELETE_PLAYER_FROM_GROUP))
  996. {
  997. DPFERR("Message buffer is too small !");
  998. goto Failure;
  999. }
  1000. if (pOpBuffer == NULL)
  1001. {
  1002. DPFERR("No message buffer !");
  1003. goto Failure;
  1004. }
  1005. hResultCode = DPN_OK;
  1006. Exit:
  1007. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1008. return(hResultCode);
  1009. Failure:
  1010. hResultCode = DPNERR_GENERIC;
  1011. goto Exit;
  1012. }
  1013. #undef DPF_MODNAME
  1014. #define DPF_MODNAME "DNVerifyReqUpdateInfo"
  1015. HRESULT DNVerifyReqUpdateInfo(void *const pOpBuffer,
  1016. const DWORD dwOpBufferSize,
  1017. void *const pData)
  1018. {
  1019. HRESULT hResultCode;
  1020. UNALIGNED DN_INTERNAL_MESSAGE_REQ_UPDATE_INFO *pInfo;
  1021. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld], pData [0x%p]",pOpBuffer,dwOpBufferSize,pData);
  1022. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQ_UPDATE_INFO))
  1023. {
  1024. DPFERR("Message buffer is too small !");
  1025. goto Failure;
  1026. }
  1027. if (pOpBuffer == NULL)
  1028. {
  1029. DPFERR("No message buffer !");
  1030. goto Failure;
  1031. }
  1032. if (static_cast<BYTE*>(pData) + sizeof(DN_INTERNAL_MESSAGE_REQ_UPDATE_INFO) > static_cast<BYTE*>(pOpBuffer) + dwOpBufferSize)
  1033. {
  1034. DPFERR("Message buffer is too small !");
  1035. goto Failure;
  1036. }
  1037. pInfo = static_cast<DN_INTERNAL_MESSAGE_REQ_UPDATE_INFO*>(pData);
  1038. if (pInfo->dwNameOffset > dwOpBufferSize)
  1039. {
  1040. DPFERR("Invalid name offset");
  1041. goto Failure;
  1042. }
  1043. if (pInfo->dwNameOffset + pInfo->dwNameSize > dwOpBufferSize)
  1044. {
  1045. DPFERR("Invalid name size");
  1046. goto Failure;
  1047. }
  1048. if (pInfo->dwDataOffset > dwOpBufferSize)
  1049. {
  1050. DPFERR("Invalid data offset");
  1051. goto Failure;
  1052. }
  1053. if (pInfo->dwDataOffset + pInfo->dwDataSize > dwOpBufferSize)
  1054. {
  1055. DPFERR("Invalid data size");
  1056. goto Failure;
  1057. }
  1058. hResultCode = DPN_OK;
  1059. Exit:
  1060. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1061. return(hResultCode);
  1062. Failure:
  1063. hResultCode = DPNERR_GENERIC;
  1064. goto Exit;
  1065. }
  1066. #undef DPF_MODNAME
  1067. #define DPF_MODNAME "DNVerifyRequestFailed"
  1068. HRESULT DNVerifyRequestFailed(void *const pOpBuffer,
  1069. const DWORD dwOpBufferSize)
  1070. {
  1071. HRESULT hResultCode;
  1072. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  1073. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQUEST_FAILED))
  1074. {
  1075. DPFERR("Message buffer is too small !");
  1076. goto Failure;
  1077. }
  1078. if (pOpBuffer == NULL)
  1079. {
  1080. DPFERR("No message buffer !");
  1081. goto Failure;
  1082. }
  1083. hResultCode = DPN_OK;
  1084. Exit:
  1085. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1086. return(hResultCode);
  1087. Failure:
  1088. hResultCode = DPNERR_GENERIC;
  1089. goto Exit;
  1090. }
  1091. #undef DPF_MODNAME
  1092. #define DPF_MODNAME "DNVerifyTerminateSession"
  1093. HRESULT DNVerifyTerminateSession(void *const pOpBuffer,
  1094. const DWORD dwOpBufferSize)
  1095. {
  1096. HRESULT hResultCode;
  1097. UNALIGNED DN_INTERNAL_MESSAGE_TERMINATE_SESSION *pInfo;
  1098. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  1099. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_TERMINATE_SESSION))
  1100. {
  1101. DPFERR("Message buffer is too small !");
  1102. goto Failure;
  1103. }
  1104. if (pOpBuffer == NULL)
  1105. {
  1106. DPFERR("No message buffer !");
  1107. goto Failure;
  1108. }
  1109. pInfo = static_cast<DN_INTERNAL_MESSAGE_TERMINATE_SESSION*>(pOpBuffer);
  1110. if (pInfo->dwTerminateDataOffset > dwOpBufferSize)
  1111. {
  1112. DPFERR("Invalid terminate data offset");
  1113. goto Failure;
  1114. }
  1115. if (pInfo->dwTerminateDataOffset + pInfo->dwTerminateDataSize > dwOpBufferSize)
  1116. {
  1117. DPFERR("Invalid terminate data size");
  1118. goto Failure;
  1119. }
  1120. hResultCode = DPN_OK;
  1121. Exit:
  1122. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1123. return(hResultCode);
  1124. Failure:
  1125. hResultCode = DPNERR_GENERIC;
  1126. goto Exit;
  1127. }
  1128. #undef DPF_MODNAME
  1129. #define DPF_MODNAME "DNVerifyReqProcessCompletion"
  1130. HRESULT DNVerifyReqProcessCompletion(void *const pOpBuffer,
  1131. const DWORD dwOpBufferSize)
  1132. {
  1133. HRESULT hResultCode;
  1134. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  1135. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQ_PROCESS_COMPLETION))
  1136. {
  1137. DPFERR("Message buffer is too small !");
  1138. goto Failure;
  1139. }
  1140. if (pOpBuffer == NULL)
  1141. {
  1142. DPFERR("No message buffer !");
  1143. goto Failure;
  1144. }
  1145. hResultCode = DPN_OK;
  1146. Exit:
  1147. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1148. return(hResultCode);
  1149. Failure:
  1150. hResultCode = DPNERR_GENERIC;
  1151. goto Exit;
  1152. }
  1153. #undef DPF_MODNAME
  1154. #define DPF_MODNAME "DNVerifyProcessCompletion"
  1155. HRESULT DNVerifyProcessCompletion(void *const pOpBuffer,
  1156. const DWORD dwOpBufferSize)
  1157. {
  1158. HRESULT hResultCode;
  1159. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  1160. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_PROCESS_COMPLETION))
  1161. {
  1162. DPFERR("Message buffer is too small !");
  1163. goto Failure;
  1164. }
  1165. if (pOpBuffer == NULL)
  1166. {
  1167. DPFERR("No message buffer !");
  1168. goto Failure;
  1169. }
  1170. hResultCode = DPN_OK;
  1171. Exit:
  1172. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1173. return(hResultCode);
  1174. Failure:
  1175. hResultCode = DPNERR_GENERIC;
  1176. goto Exit;
  1177. }
  1178. #undef DPF_MODNAME
  1179. #define DPF_MODNAME "DNVerifyReqIntegrityCheck"
  1180. HRESULT DNVerifyReqIntegrityCheck(void *const pOpBuffer,
  1181. const DWORD dwOpBufferSize)
  1182. {
  1183. HRESULT hResultCode;
  1184. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  1185. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_REQ_INTEGRITY_CHECK))
  1186. {
  1187. DPFERR("Message buffer is too small !");
  1188. goto Failure;
  1189. }
  1190. if (pOpBuffer == NULL)
  1191. {
  1192. DPFERR("No message buffer !");
  1193. goto Failure;
  1194. }
  1195. hResultCode = DPN_OK;
  1196. Exit:
  1197. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1198. return(hResultCode);
  1199. Failure:
  1200. hResultCode = DPNERR_GENERIC;
  1201. goto Exit;
  1202. }
  1203. #undef DPF_MODNAME
  1204. #define DPF_MODNAME "DNVerifyIntegrityCheck"
  1205. HRESULT DNVerifyIntegrityCheck(void *const pOpBuffer,
  1206. const DWORD dwOpBufferSize)
  1207. {
  1208. HRESULT hResultCode;
  1209. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  1210. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_INTEGRITY_CHECK))
  1211. {
  1212. DPFERR("Message buffer is too small !");
  1213. goto Failure;
  1214. }
  1215. if (pOpBuffer == NULL)
  1216. {
  1217. DPFERR("No message buffer !");
  1218. goto Failure;
  1219. }
  1220. hResultCode = DPN_OK;
  1221. Exit:
  1222. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1223. return(hResultCode);
  1224. Failure:
  1225. hResultCode = DPNERR_GENERIC;
  1226. goto Exit;
  1227. }
  1228. #undef DPF_MODNAME
  1229. #define DPF_MODNAME "DNVerifyIntegrityCheckResponse"
  1230. HRESULT DNVerifyIntegrityCheckResponse(void *const pOpBuffer,
  1231. const DWORD dwOpBufferSize)
  1232. {
  1233. HRESULT hResultCode;
  1234. DPFX(DPFPREP,6,"Parameters: pOpBuffer [0x%p], dwOpBufferSize [%ld]",pOpBuffer,dwOpBufferSize);
  1235. if (dwOpBufferSize < sizeof(DN_INTERNAL_MESSAGE_INTEGRITY_CHECK_RESPONSE))
  1236. {
  1237. DPFERR("Message buffer is too small !");
  1238. goto Failure;
  1239. }
  1240. if (pOpBuffer == NULL)
  1241. {
  1242. DPFERR("No message buffer !");
  1243. goto Failure;
  1244. }
  1245. hResultCode = DPN_OK;
  1246. Exit:
  1247. DPFX(DPFPREP,6,"Returning: [0x%lx]",hResultCode);
  1248. return(hResultCode);
  1249. Failure:
  1250. hResultCode = DPNERR_GENERIC;
  1251. goto Exit;
  1252. }